---
# System prepended metadata

title: Nushell core team meeting 2024-07-31

---

# Nushell core team meeting 2024-07-31
## Attendees
- Jack
- Devyn
- Stefan
- Darren
- Michael
- Antoine
- Rose
- Jakub
- Andy
- Ian

## Agenda
- [x] ctrlc -> plugin, when to reset plugin side Signals? https://github.com/nushell/nushell/issues/13501
- [x] stretch, pie in the sky, assigning pipelines to variables, without collecting?
- [x] Add nu_plugin_plist functionality to nu_plugin_formats? 
- [x] Adding content type metadata for other types.. should we pull in a lib to use with open or manually assign. 
- [x] If an underlying Pipeline reader is capable of Seek, should we expose a method to grab to expose Seek.. this would be perf optimization when using `polars open` as part of a pipeline.. The readers require Seek. 
- [x] ANSI contamination in the pipeline, harmful strip -> PipelineMetadata
- [ ] `main` stuff

## Discussed Topics

## `ctrl-c` with plugins

- currently doesn't reset after Ctrl-C, quits on the next call
- for internal stuff the repl will reset after one whole loop
    - Andy: should also broadcast to the plugins?
    - Devyn: for symmetry with internal commands (if multiple commands are spawned e.g. `par-each` to ensure safe shutdown)
    - Andy: sounds the easiest to do the same, plan a PR (Thanks!)
    - some responsibility on the plugin author (if you want to respond to it)

## Stream values

- lazy
- scoping challenge, can only be consumed once and can't outlive its closure etc.
- with the IR VM it would behave like binding a register
- style of utilities like the rust iterator adapters imaginable
    - e.g. take one entry, then pass the stream to further processing

## Detour: timeline IR switch
Devyn: at some point invert the default

## Jack's `plist` plugin
- relies on a plist crate
- generally vibe merge into nu_plugin_formats
    - simpler release

## content-type metadata
- when opening a file with `open` should we set the mime-type based on the extension into the `PipelineMetadata`
- database source, are we accepting the breaking data changes in a crate vs manually setting in the `from ...` converter commands
- when performing transformations with `to` need to update
- useful when piping to `http` family commands (motivated by jack's endeavour into a S3 plugin)

## `polars open` challenge
- composability of cloud/storage provider plugins with polars would be nice
- expects `Seek` (includes `.rewind` etc.) not quite compatible with a stream
- dumping into a temp file may be wasteful for some usecases
- can we dispatch on kind of input
- ? sidestep stream and instead use the datasource?
    - our current datasource in `PipelineMetadata` doesn't get updated should you do transformations in between
    - would need a separate trusted channel/metadata field

## ANSI escapes

- we shouldn't be stripping ANSI escapes implicitly ever
- change `find` for now so that whatever is needed for the highlighting is in the `PipelineMetadata`
- try to follow this pattern for internal commands
- discussion about what to do about extensibility:
    - ways to make it possible to define custom behavior on `PipelineMetadata` for styling?
    - how can plugins add to this?
    - is this losing pipeline composability? there are filters that would potentially know how they have to modify `PipelineMetadata` to preserve the right styling, and they'd probably just end up throwing it out not knowing what to do
    - possible alternatives
        1. styled strings (like emacs) within the `Value` variants?
            - would be kind of nice because all commands could use it
            - support multiple spans within the string with different styles
            - not too heavy, easy to remove the styles and concat all of the strings
            - do we need syntax for this or no? possible to just construct it with commands
            - prior art (linked by @rose): https://www.gnu.org/software/emacs/manual/html_node/elisp/Text-Props-and-Strings.html
        2. `Value::WithMetadata` type wrapper that wraps a `Box<Value>` with some kind of metadata, when needed?
            - it could get complicated to know how to handle this correctly at different places
            - a bit inefficient perhaps, though it does preserve best case performance when this isn't needed
            - probably not something we can hope to represent in NUON