There are no reviews yet. Be the first to send feedback to the community and the maintainers!
_ ___ ___| | / __|_ / | \__ \/ /| | |___/___|_| Overview ======== szl is a tiny, embeddable scripting engine inspired by Tcl and shell. It's a balanced mix of their key features: szl combines the simplicity of shell scripting with the power of a dynamic, Tcl-like type system, minimalistic syntax and programming language features missing in the shell, like exceptions and OOP. szl comes with a rich standard library that includes bindings for permissively-licensed libraries. Therefore, it can run processes, parse text with transparent Unicode support, manipulate data structures like dictionaries, operate on binary data, interface with C code through scripts, multiplex non-blocking I/O at scale, call REST APIs and much more, at a fraction of the memory and size footprint of other scripting languages, while achieving reasonable efficiency. szl can be used both as a standalone (either interactive or non-interactive) interpreter or as an integral part of other projects, via the libszl library. In addition, the feature set and behavior of szl can be easily fine-tuned to meet the size and memory consumption limitations under various usage scenarios and hardware platforms. ___________________________________ / \ | >>> $global msg {Hello, world!} | | Hello, world! | | >>> $load zlib | | >>> $zlib.crc32 $msg | | 3957769958 | | >>> [$exec {uname -s}] read | | Linux | | >>> [$open /bin/gunzip rb] read 9 | | #!/bin/sh | | >>> $map i [$range 1 4] {$+ $i 3} | | 4 5 6 | \___________________________________/ For more information, see the user manual at http://dimakrasner.com/szl. Building ======== On Debian (http://www.debian.org) based distributions: $ apt-get install git gcc meson zlib1g-dev libcurl4-gnutls-dev libarchive-dev libssl-dev libffi-dev Then: $ git clone --recursive https://github.com/dimkr/szl $ cd szl $ meson build $ cd build $ ninja $ ninja install By default, szl is built with core functionality built-in to the interpreter, while a big part of the standard library resides in dynamically-loaded shared objects. This way, the memory consumption of szl scripts that don't use the entire standard library is lower. However, in some use cases (for example, when szl is embedded into another project), this is undesirable. To build szl as a single executable file, with all extensions linked statically into the interpreter: $ mesonconf -Dbuiltin_all=true In addition, built-in extensions can be chosen individually, e.g.: $ mesonconf -Dwith_curl=builtin -Dwith_ffi=no Embedding ========= To embed szl into other projects, use the API defined in szl.h and link with libszl. The size and performance of szl can be tuned using advanced build options: $ mesonconf -Duse_int=true This build option replaces the large integer type used by szl to represent integers, to the standard C int. This may improve performance under platforms without native support for 64 bit integers, at the cost of a limited range of valid integer values. $ mesonconf -Duse_float=false This build option changes the precision of floating-point numbers in szl from double to single precision. This may improve performance under platforms without native support for double-precision floating point numbers, at the cost of precision. $ mesonconf -Dwith_float=false This build options disables support for floating-point arithmetic. This reduces szl's size. $ mesonconf -Dwith_unicode=false This build options disables support for Unicode strings and cancels szl's internal distinction between encoded byte strings and arrays of Unicode code points. This reduces szl's size and may improve performance with zero side effects, if szl is guaranteed not to perform any sort of Unicode string slicing. Security ======== Support for dynamic loading of szl extensions can be disabled: $ mesonconf -Dwith_dl=false When dynamic loading is disabled, szl will refuse to load extensions, unless they are linked statically into the interpreter. This way, a szl interpreter embedded into another program does not make it vulnerable to dynamic loader hijacking (e.g. LD_LIBRARY_PATH) during extension loading. Running ======= To run an interactive interpreter: $ szlsh Or, to run a script: $ szl $path Or, to run a one-liner: $ szl -c $snippet Credits and Legal Information ============================= szl is free and unencumbered software released under the terms of the MIT license; see COPYING for the license text. For a list of its authors and contributors, see AUTHORS. The ASCII art logo at the top was made using FIGlet (http://www.figlet.org/).
nss-tls
A DNS over HTTPS resolver for glibcloksh
A Linux port of OpenBSD's kshtootik
A federated nanoblogging service with a Gemini frontend.rlsd
A lightweight, retro Linux-libre distroshus
A tiny HTTP server for static sitestty8
A suckless terminal multiplexerpapaw
A simple, decompressing executable packerrlsd2
A minimalistic GNU/Linux-libre distroLoginKit
A standalone logind shim - GitHub mirrorluufs
Lazy man's, user-mode union file systempylzfse
Python bindings for LZFSElibwaive
A library that allows processes to waive their rightslazy-utils
A collection of tiny, permissively-licensed Linux system tools; deprecated in favor of sdaemonsdohli
Set up your own ad-blocking DoH serversdaemons
Suckless daemonscodile
A web-based IDEnosystem
A libsystemd stub library, a research project for Devuanpacklim
A small, hackable and secure package manageroverheadfs
A FUSE proxy file systemb6b
A lightweight, embeddable scripting languagetoolchains
Toolchains for ultra-portable static binariesdevsus
Libre Devuan for the Asus C201fbim
A tiny framebuffer image viewerlok
A Linux port of OpenBSD's awkguppy-protocol
Unencrypted, UDP-based alternative to the Gemini protocolelfence
An overlay that verifies signed ELF binariesroar-ng
Generic build system for GNU/Linux distributions; orphanednss-block
A transparent, domain-based ad blockerdillo
Dillo 0.8.6, patched and workingpackdude
A simple package manager that does the right thing and that's it; orphaned in favor of packladroar-ng-ii
A generic and extensible build system for GNU/Linux distributions; orphanedlocwm
A Linux port of OpenBSD's cwmlolibc
An OpenBSD libc compatibility layer as a Meson subprojectboydemdb
Key-value database as a Meson subprojectkrisa
A small library that generates crash dumpsliterocks
A stripped-down fork of ROX-Filer; orphanednopdev
A device manager that does lesslobsder
An OpenBSD compatibility layer for Linux; orphanedogg122
A tiny Ogg Vorbis playerlogfence
An overlay that prevents log tamperingpacklad
A small, efficient and secure package manager; orphaned in favor of packlimtermolos
A console color scheme generatordarls
Dima's Already Riced Live Systemted
Ted 2.17, patched and workingsubito
A minimalistic and versatile GNU/Linux distribution based on roar-ng; orphanedfrost
A simple suspend tool for GNU/Linux; orphanedlibretee
A fast, asynchronous implementation of tee(1); orphanedfrugalify
Converts a Puppy Linux "full installation" into a "frugal installation"containers
Containers for C/Go development and CIlogoutd
An experimental, standalone fork of logind2d-grey-rounded
Flat and minimalistic GTK+ themexplayargs
A xargs-like audio playerwpa_supplicant
Working copy of wpa_supplicantpacksiz
A tiny, hackable and secure package manageremelfm
A lighter emelFM 0.9.2xchat
X-Chat 1.8.9, patched and workingtinyunmute
A tinyalsa-based volume initialization toolglib
GLib 1.2.10, patched and workingxz-embedded
A copy of upstream xz-embedded that allows shallow clonescdaemon
Node.js addon that wraps the daemon() C functionwoof-CE-c201
Puppy Linux + Devsus = ?code-oss-arm64
go-papaw
Go module for papawhoneybear
Dropbear 0.66, hacked to act as a poor man's honeypotgdk-pixbuf
gdk-pixbuf 0.22.0, patched and workingbeaver
Beaver 0.2.7, patched and workingpacklim-recipes
Build system for packlim packagesncsplash
A simple ncurses-based splash screen which reads strings from a FIFO and prints them to the screen, one at a time; orphanedpacklim-sd
A Linux-libre distro based on packlim and packlim-recipeslocwm-5.6
A Linux port of OpenBSD's cwmpart-hotplug-handler
A lightweight, udev-based, partition hotplugging notifier; orphanedrox
ROX-Filer 1.2.2, patched and workingsazache
A tiny, scalable HTTP server for static sitesgtk
GTK+ 1.2.10, patched and workingLove Open Source and this site? Check out how you can help us