Today, version 1.0.0 adds structured pipelines:
a mechanism to exchange (almost) arbitrary objects via POSIX pipes, and transform them via external programs, shell builtins or Scheme code.
Example:
dir /proc | where name -starts k | sort-by modified
Internally, objects are serialized before writing them to a pipe - by default as NDJSON, but it can be set manually -
and deserialized when reading them from a pipe.
This allows arbitrary transformations at each pipeline step:
filtering, choosing a subset of the fields, sorting with user-specified criteria, etc.
And each step can be an executable program, a shell builtin or Scheme code.
If you know nushell, they will feel familiar as they are inspired by it - the implementation is fully independent, though.
Yes, they are similar at first glance. As I wrote:
> If you know nushell, they will feel familiar as they are inspired by it - the implementation is fully independent, though.
Looking deeper, there are two main differences:
- Nushell structured pipelines are an internal construct, and only work with nushell builtins. Schemesh uses actual POSIX pipes, which allows to also insert executables in the pipelines.
- schemesh also allows to insert arbitrary Scheme code in the pipelines. Nushell does too, in a sense: you have to write nushell language though
I am really interested to give it a try since I am a big fan of nushell but also really enjoyed LISP through clojure.
Nushell is great because it is really "battery included" in the sense that it ships with most of what you will ever need: http client (no need for curl), export/import of most formats (yaml, toml, csv, msgpack, sqlite, xml), etc. That really avoids the library or tool shopping problem.
You can copy the 50MB nushell binary on almost anything and your script will work.
This is why this is really a "modern shell" as it includes what you need in 2026, not 1979.
This is also why I use nushell rather than python or lua for most scripts.
I am not familiar with the Scheme ecosystem but see you are implementing a lot within your shell (http client, sqlite support) what is great. But does that mean I can produce a Schemesh binary that will include Chez Scheme and run my script on any Linux or FreeBSD host?
Anyway I think what you are doing is really great !
Today, version 1.0.0 adds structured pipelines: a mechanism to exchange (almost) arbitrary objects via POSIX pipes, and transform them via external programs, shell builtins or Scheme code.
Example:
possible output: Another example: possible output: Internally, objects are serialized before writing them to a pipe - by default as NDJSON, but it can be set manually - and deserialized when reading them from a pipe.This allows arbitrary transformations at each pipeline step: filtering, choosing a subset of the fields, sorting with user-specified criteria, etc. And each step can be an executable program, a shell builtin or Scheme code.
If you know nushell, they will feel familiar as they are inspired by it - the implementation is fully independent, though.
> If you know nushell, they will feel familiar as they are inspired by it - the implementation is fully independent, though.
Looking deeper, there are two main differences:
- Nushell structured pipelines are an internal construct, and only work with nushell builtins. Schemesh uses actual POSIX pipes, which allows to also insert executables in the pipelines.
- schemesh also allows to insert arbitrary Scheme code in the pipelines. Nushell does too, in a sense: you have to write nushell language though
Nushell is great because it is really "battery included" in the sense that it ships with most of what you will ever need: http client (no need for curl), export/import of most formats (yaml, toml, csv, msgpack, sqlite, xml), etc. That really avoids the library or tool shopping problem. You can copy the 50MB nushell binary on almost anything and your script will work.
This is why this is really a "modern shell" as it includes what you need in 2026, not 1979.
This is also why I use nushell rather than python or lua for most scripts.
I am not familiar with the Scheme ecosystem but see you are implementing a lot within your shell (http client, sqlite support) what is great. But does that mean I can produce a Schemesh binary that will include Chez Scheme and run my script on any Linux or FreeBSD host?
Anyway I think what you are doing is really great !