Kanban that an AI agent can run end-to-end. Boards (projects) hold cards on a fixed development flow, grouped into cycles (sprints) and modules (epics), with checklists, tags, comments, assignees, custom fields and relations. The same API drives the web UI, a CLI, and AI agents over MCP.
Ships as a single self-contained Go binary that embeds the React web UI and its own API docs — no external runtime, no database server. State lives in one SQLite file.
docker run -d -p 8090:8090 -v nexo-data:/data code42dev/nexo:latest
Open http://localhost:8090 and log in with admin / admin.
linux/amd64 and linux/arm64 (Apple Silicon included).docker run
docker run -d --name nexo -p 8090:8090 -v nexo-data:/data code42dev/nexo:latest
docker compose
services:
nexo:
image: code42dev/nexo:latest
ports:
- "127.0.0.1:8090:8090" # localhost only; drop the 127.0.0.1 to expose
environment:
NEXO_ADMIN_USER: admin
NEXO_ADMIN_PASS: admin
volumes:
- nexo-data:/data
volumes:
nexo-data:
docker compose up -d
| Env var | Default | What it does |
|---|---|---|
NEXO_ADDR | :8090 | Listen address. |
NEXO_DB | /data/nexo.db | SQLite file path (keep it under the volume). |
NEXO_ADMIN_USER | admin | Seeded on the first boot of an empty DB. |
NEXO_ADMIN_PASS | admin | Seeded admin password. Override for any exposed deploy. |
Passwords are hashed with PBKDF2-HMAC-SHA256 (per-user salt). More users are
created in-app under Settings → Usuários (admin-only) or via POST /v1/users.
The database is a single SQLite file at /data/nexo.db, and /data is a
volume — your data survives restarts, upgrades and re-creates.
# Back up
docker cp nexo:/data/nexo.db ./nexo-backup.db
# Where the volume lives on disk
docker volume inspect nexo-data
# Reset everything (deletes the database)
docker compose down -v
Every /v1/* call needs Authorization: Bearer <token>. Log in to get one:
curl -s -X POST http://localhost:8090/v1/login \
-H 'Content-Type: application/json' \
-d '{"username":"admin","password":"admin"}'
# → {"token":"a1b2c3..."} ← this is YOUR_SECRET_TOKEN
TOKEN=$(curl -s -X POST http://localhost:8090/v1/login \
-H 'Content-Type: application/json' \
-d '{"username":"admin","password":"admin"}' \
| sed -E 's/.*"token":"([^"]+)".*/\1/')
curl -s http://localhost:8090/v1/boards -H "Authorization: Bearer $TOKEN"
Tokens last 30 days; POST /v1/logout revokes one.
nexo mcp,
stdio JSON-RPC) exposing ~75 tools — the whole JSON API. The machine-readable
manifest is at GET /v1/agent/tools.latest — most recent build from main.YYYY-MM-DD — dated, immutable snapshots (e.g. 2026-07-28).Both are multi-arch (linux/amd64, linux/arm64).
The admin / admin default exists for zero-config local use. Before exposing
Nexo on any network, override NEXO_ADMIN_PASS and bind to localhost or put it
behind a reverse proxy with TLS.
Made with Go + SQLite + React. Single binary, single file, single container.
Content type
Image
Digest
sha256:6d80f5d8c…
Size
11.1 MB
Last updated
14 days ago
docker pull code42dev/nexo