Introduction
niso is a Linux-native alternative to Docker. It packages applications as compressed archives and runs them as first-class systemd services with full isolation — no daemon, no layers, no overhead.
If you deploy software to Linux servers, niso gives you everything Docker does — isolation, networking, volumes, multi-service composition — without the Docker daemon, layered images, or container runtime.
Processes run as regular systemd services. Packages contain your code and all its dependencies. Language runtimes (Node.js, Python, Ruby) are installed once on the host and bind-mounted into a fully isolated rootfs at activation — the process cannot see the host filesystem.
Why niso?#
Zero daemons
systemd is the runtime. No background process managing your processes.
Tiny packages
A Redis package is 1.1 MB in niso vs 40 MB in Docker. No OS layers.
Deps packaged, runtimes deduplicated
Your code + node_modules ship in the package. Runtime installed once, isolated per service.
Isolated by default
Each service gets its own user, filesystem, and network. Can't see the host or other services.
No layers
Single compressed archive. No layer caching, no build cache, no layer squashing.
Fleet deploy
Rolling, canary, and all-at-once deployments across servers via SSH.
Quick example#
Deploy a Rust HTTP server in under a minute:
$ curl -sSL https://niso.dev/install.sh | sh$ niso init --template rust$ niso pack --binary target/release/my-api$ niso install my-api-1.0.0-x86_64.niso$ niso activate my-api$ niso status my-api my-api 1.0.0 active (running) uptime 3s mem 12MBHow it works#
niso has three core ideas that differentiate it from Docker:
- Packages, not images. A
.nisofile is a compressed tar+zstd archive containing your binary (or app code), amanifest.toml, and an Ed25519 signature. No base image, no layers, no Dockerfile. - systemd is the runtime. When you activate a package, niso generates a systemd unit file with full isolation (namespaces, seccomp, capabilities, cgroups). systemd manages the process lifecycle — restarts, logging, resource limits.
- Dependencies in, runtime deduplicated. Your code and all its dependencies (node_modules, pip packages, gems) ship inside the package. The language runtime (Node.js, Python, Ruby) is installed once on the host and bind-mounted into a fully isolated rootfs at activation. The process cannot access the host filesystem.
Docker comparison#
| Docker | niso | |
|---|---|---|
docker build | → | niso pack |
docker push | → | niso push |
docker pull | → | niso pull |
docker run | → | niso run / niso activate |
docker ps | → | niso status / niso list |
docker logs | → | niso logs |
docker exec | → | niso exec |
docker stop | → | niso deactivate |
docker-compose up | → | niso stack up |
docker-compose down | → | niso stack down |