nerdui

module
v0.1.0-alpha.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 12, 2026 License: AGPL-3.0

README

nerdui

Web UI for nerdctl / containerd.

Status: early development. Features and requirements are being defined in docs/requirements.

nerdui talks to containerd directly over its gRPC socket and uses nerdctl's Go packages, so containers, images, networks and volumes managed from the UI stay fully compatible with the nerdctl CLI. It ships as a single static binary with the web UI embedded.

[!WARNING] Access to the containerd socket is equivalent to root on the host. Never expose nerdui to untrusted networks. See SECURITY.md.

Quick start

On a Linux host with containerd and nerdctl (e.g. nerdctl-full), install the binary and run it as a systemd service:

VERSION=0.1.0 ARCH=amd64   # or arm64
NERDCTL=$(nerdctl --version | grep -oE '[0-9]+\.[0-9]+' | head -1)   # build for the host nerdctl: 2.4 or 2.3
curl -fsSLO https://github.com/pessom/nerdui/releases/download/v${VERSION}/nerdui_${VERSION}_nerdctl${NERDCTL}_linux_${ARCH}.tar.gz
tar -xzf nerdui_${VERSION}_nerdctl${NERDCTL}_linux_${ARCH}.tar.gz
sudo install -m 0755 nerdui /usr/local/bin/nerdui
sudo install -m 0644 deploy/systemd/nerdui.service /etc/systemd/system/nerdui.service
sudo install -m 0644 deploy/systemd/nerdui.env /etc/default/nerdui
sudo systemctl daemon-reload && sudo systemctl enable --now nerdui
journalctl -u nerdui | grep setup_token   # then open https://<host>:9443

Each release has one build per supported nerdctl minor version (2.4 and 2.3); use the one that matches the host's nerdctl, otherwise nerdui is read-only. Details, upgrades and the (experimental) container image: docs/deployment.md.

First run

On first start nerdui prints a one-time setup token to its log. Open the UI, enter the token and create the admin account — this prevents anyone else on your network from claiming a fresh install.

journalctl -u nerdui | grep setup_token        # binary as a service
sudo nerdctl logs nerdui | grep setup_token    # container

Lost the admin password? On the host: sudo nerdui admin reset-password admin (add --data-dir if you changed it). All sessions of that user are revoked.

Configuration

Every flag has an environment variable NERDUI_<FLAG>; command-line flags take precedence.

Flag Env Default Description
--listen NERDUI_LISTEN :9443 Listen address
--address NERDUI_ADDRESS /run/containerd/containerd.sock containerd socket
--namespace NERDUI_NAMESPACE default Default containerd namespace
--data-dir NERDUI_DATA_DIR /var/lib/nerdui nerdui state (database, TLS, stacks); created with mode 0700
--stacks-dir NERDUI_STACKS_DIR <data-dir>/stacks Compose stacks managed by nerdui
--stacks-scan-dirs NERDUI_STACKS_SCAN_DIRS — Comma-separated directories scanned for existing compose projects
--nerdctl-path NERDUI_NERDCTL_PATH nerdctl Host nerdctl binary
--skip-nerdctl-version-check NERDUI_SKIP_NERDCTL_VERSION_CHECK false Allow an unsupported nerdctl version
--tls NERDUI_TLS true Serve HTTPS; --tls=false only behind a TLS-terminating reverse proxy
--tls-cert / --tls-key NERDUI_TLS_CERT / NERDUI_TLS_KEY self-signed in <data-dir>/tls Your own PEM certificate and key (reloaded when the files change)
--log-level NERDUI_LOG_LEVEL info debug, info, warn, error

Subcommands: nerdui serve (default), nerdui version, nerdui healthcheck, nerdui admin reset-password <user>.

Development

make deps          # install Go + npm dependencies
make build         # build web UI and binary -> bin/nerdui
make test          # unit tests (Go + web)
make lint          # golangci-lint, eslint, prettier, tsc
make help          # all targets

Details: docs/development.md.

Documentation

Contributing

See CONTRIBUTING.md.

License

nerdui is licensed under the GNU Affero General Public License v3.0 only (AGPL-3.0-only).

  • Using nerdui at home or in your organization, unmodified or modified, is free.
  • If you run a modified version and let others use it over a network, you must offer them its source code (AGPL-3.0 section 13). The "Source code" link in the UI serves this purpose.
  • A commercial license without AGPL obligations is available — contact the maintainer.

Contributions require signing the CLA. Third-party licenses are listed in NOTICE and shipped in release artifacts.

Directories

Path Synopsis
cmd
nerdui command
Command nerdui is a web UI for nerdctl/containerd.
Command nerdui is a web UI for nerdctl/containerd.
internal
api
Package api implements the REST handlers for environment-scoped resources (ADR-0006): /api/v1/environments and /api/v1/environments/{env}/...
Package api implements the REST handlers for environment-scoped resources (ADR-0006): /api/v1/environments and /api/v1/environments/{env}/...
api/ws
Package ws is the shared WebSocket layer for streams (ADR-0007): logs, stats, events, job progress and exec.
Package ws is the shared WebSocket layer for streams (ADR-0007): logs, stats, events, job progress and exec.
auth
Package auth implements local authentication (ADR-0005): argon2id passwords, server-side sessions stored in SQLite, CSRF protection, the first-run setup token and login rate limiting.
Package auth implements local authentication (ADR-0005): argon2id passwords, server-side sessions stored in SQLite, CSRF protection, the first-run setup token and login rate limiting.
authz
Package authz implements per-action authorization (ADR-0009).
Package authz implements per-action authorization (ADR-0009).
config
Package config defines nerdui's runtime configuration: defaults, validation and filesystem preparation.
Package config defines nerdui's runtime configuration: defaults, validation and filesystem preparation.
environment
Package environment keeps the registry of managed containerd hosts (ADR-0006).
Package environment keeps the registry of managed containerd hosts (ADR-0006).
events
Package events fans containerd events out to subscribers (ADR-0007): one containerd subscription per environment, any number of in-process subscribers (WebSocket streams, later the scheduler and notifications).
Package events fans containerd events out to subscribers (ADR-0007): one containerd subscription per environment, any number of in-process subscribers (WebSocket streams, later the scheduler and notifications).
httpjson
Package httpjson contains JSON request/response helpers shared by HTTP handlers, including the error envelope from ADR-0006:
Package httpjson contains JSON request/response helpers shared by HTTP handlers, including the error envelope from ADR-0006:
runtime
Package runtime wraps the containerd client and nerdctl libraries.
Package runtime wraps the containerd client and nerdctl libraries.
server
Package server implements the nerdui HTTP API and serves the web UI.
Package server implements the nerdui HTTP API and serves the web UI.
store
Package store persists nerdui's own data in SQLite (ADR-0004).
Package store persists nerdui's own data in SQLite (ADR-0004).
tlsutil
Package tlsutil provides the TLS certificate for nerdui's HTTPS server (ADR-0005): either a generated self-signed certificate kept in <data-dir>/tls, or a user-provided certificate/key pair that is reloaded when the files change.
Package tlsutil provides the TLS certificate for nerdui's HTTPS server (ADR-0005): either a generated self-signed certificate kept in <data-dir>/tls, or a user-provided certificate/key pair that is reloaded when the files change.
version
Package version exposes build metadata injected at link time via -ldflags.
Package version exposes build metadata injected at link time via -ldflags.
Package web embeds the compiled frontend (web/dist) into the nerdui binary.
Package web embeds the compiled frontend (web/dist) into the nerdui binary.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL