Lilush is a couple of things. First of all, lilush is a statically compiled for Linux LuaJIT interpreter that comes bundled with a curated collection of Lua modules and C libraries for
File system operations
Process manipulation
TCP/UDP networking with SSL support; HTTP(S) client, HTTP(S)/1.1 server
Modern cryptography
Terminal I/O with UTF-8 support, styling with TSS (Terminal Style Sheets)
A set of terminal widgets for use in CLI apps
Markdown processing/rendering
Redis protocol support
JSON, Base64, HMAC, ...
For networking, lilush uses LuaSocketWolfSSL library, which is based on Luasocket and LuaSec modules merged into one and refactored to work seamlessly with WolfSSL. WolfSSL is also statically compiled and incorporated into the lilush binary.
The binary is smaller than 2MB, and should work fine on any x86_64 Linux
system. It's also a nice addition to a FROM scratch docker container, as
lilush can be used as a busybox replacement.
And to top it off, lilush can compile your Lua code into a static binary too![1]
Secondly, to showcase most features of its bundled modules, lilush includes a modular Linux Shell (as in Bash, Csh or Fish), suprisingly called Lilush Shell, which
provides a sleek CLI interface straight out of the box:
Pre-configured prompts: host, user, dir, git, aws, k8s, python venv
Command completions, completions scrolling
Smart directory navigation and history search, similar to McFly and zoxide
Terminal graphics support
has some handy shell builtins like kat (file viewer + pager), netstat, dig, wgcli, etc.
supports styling with the help of TSS
is easily extendable with plugins
can do fortune telling and probably one day will save the humanity =)
Lilush Shell relies on Kitty's keyboard protocol,
thus will only work in terminal emulators that support this protocol, e.g. kitty, foot, alacritty, konsole...
There are a couple of side projects, built upon lilush, that might be of interest:
RELIW is an HTTP server & framework.
zxkitty is a ZX80 emulator for terminal (kitty graphics for video output)
Download the lilush binary and matching lilush.sig signature file from
GitHub Releases.
Lilush release binaries are signed with an SSH key (namespace=file).
# Example: download one release (adjust tag if needed)
TAG=X.Y.Z
curl -fLO "https://github.com/epicfilemcnulty/lilush/releases/download/${TAG}/lilush"
curl -fLO "https://github.com/epicfilemcnulty/lilush/releases/download/${TAG}/lilush.sig"
# Create allowed signers file with the release signing key
cat > allowed_signers <<'EOF'
vladimir@deviant.guru ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICEWU0xshVgOIyjzQEOKtjG8sU8sWJPh25CP/ISfJRey
EOF
# Verify signature
ssh-keygen -Y verify \
-f allowed_signers \
-I vladimir@deviant.guru \
-n file \
-s lilush.sig < lilush
If verification succeeds, ssh-keygen prints Good "file" signature for vladimir@deviant.guru ....
chmod +x lilush
install -Dm755 lilush ~/.local/bin/lilush
Make sure ~/.local/bin is in your PATH.
See BUILDING.md
Right now the project is certainly in beta.
After 1.0.0 version release the project will abide by the semantic versioning promises,
but until then all bets are off. Meaning that there might be breaking changes of the core
lilush modules' API even between, say, 0.5.x and 0.6.x. Or worse.
But let's hope it won't come to that.