Simple shell meant to be compatible with bash with added usability.
  • Rust 99%
  • Nix 1%
Find a file
2026-03-17 10:07:39 +01:00
assets make logo transparent 2026-02-24 13:46:25 +01:00
docs feat(docs) add bash grammar for reference 2026-03-11 14:01:38 +01:00
src improv(shell) avoid using emojis and fancy utf8 in old terminals/tty 2026-03-17 10:07:39 +01:00
.envrc add flake 2025-11-12 09:37:56 +01:00
.gitignore update flake.nix 2025-11-12 13:59:24 +01:00
Cargo.lock improv(*) minor cleanup + rust fix 2026-01-30 16:57:40 +01:00
Cargo.toml improv(*) minor cleanup + rust fix 2026-01-30 16:57:40 +01:00
flake.lock add flake 2025-11-12 09:37:56 +01:00
flake.nix rename project part 2 2025-12-30 11:43:03 +01:00
LICENSE Add LICENSE 2025-10-21 16:27:54 +02:00
README.md update readme 2026-03-10 11:21:18 +01:00

selo-pona

Two black sitelen pona characters in column, the top one is 'selo', the second one is 'pona'

selo pona (simple shell in toki pona) is an (planned) interactive shell and (planned) interpreted scripting language that is a (planned) superset of bash. That is, every bash script is also a selo pona script (planned), but selo pona adds some nicer syntax, on top. (planned)

Built in Rust, with minimal dependencies (for now, only libc, and leftpad)

enbyware License

Installation

You have to compile from source for now, some packages may be available when this project's out of pre-alpha someday.

Compiling from source

This project uses cargo. MSRV is 1.93. The only dependency you need is libc, it should work with either glibc or musl. File an issue if you find some discrepancy between them.

Clone the project, and run cargo build --release.

Features

Infrastructure

  • Analyzer
  • Lexer
  • AST
  • Interpreter

Language

  • Variables
  • Main control flow
  • Commands
  • Syntactic sugar

Shell

  • read/eval/print loop (basic implementation)
  • cli interface (basic)

Common

  • Pipes (basic)
  • File redirections (basic)
  • Command substitions
  • String, backslash-escapes (basic)
  • Subshells

Design principles

fish but POSIX-compliant and retrocompatible with bash. This is made to be minimalist, useful out-of-the box, and unintrusive. You can leave your default bashrc and it'll work (planned).