Develop
Run NuFi on your machine, change one app, and ship it.
Everything is in one repository,
dudaji-vn/nufi-app. One clone is
the whole system. Pick the directory you are about to change, and the guide
next to it is the one to read.
| Directory | What it is | Guide |
|---|---|---|
deploy/platform | The stack: AI gateway, observability, monitoring, and the NuFi app and console as containers | Run the stack locally |
apps/chat | The NuFi app | Work on the chat app |
apps/console | NuFi Console, and the identity issuer for the agent products | Work on the console |
apps/admin-panel | NuFi Admin Panel | Work on the admin panel |
apps/nufi-agent | NuFi Studio, a vendored Langflow | Work on Studio and Works |
apps/agents | NuFi Works, a vendored Paperclip | Work on Studio and Works |
deploy/railway | The wrapper image that runs the chat on Railway | Release and deploy |
apps/docs | This site | apps/docs/README.md |
Earlier guides described these as separate repositories (npuops-platform,
nufi-chat, LibreChat, nufichat-admin-panel, nufi-console). They were
merged into this one in July 2026 and archived. If you have a clone of one,
it is no longer where work happens; nothing in this section asks you to
clone anything but nufi-app.
Three ways to have a NuFi to work against
- The hosted staging.
chat.nufi.me,console.nufi.me,agents.nufi.me. Fine for reading the product or for changes that are purely client-side. You cannot change server behaviour there. - The local stack.
deploy/platformbrings up every service on your laptop with one script, in about ten minutes and ten gigabytes. This is the setup every other guide in this section assumes. Run the stack locally. - One app's dev server against the local stack. Keep the stack running, then start only the app you are changing from its directory, with hot reload. That is what the four "Work on" guides do.
Before you start
| Tool | Needed for | Version | Check |
|---|---|---|---|
| Docker Desktop with Compose v2 | the stack | give Docker at least 4 GB of RAM | docker compose version |
git, curl, openssl | the bootstrap script | any recent | |
yq (Mike Farah's Go build, not the Python one from apt) | the bootstrap and model scripts | v4 | yq --version |
A GitHub token with read:packages | pulling the chat and console images from ghcr.io/dudaji-vn | docker login ghcr.io | |
| Bun | console, admin panel, this site | 1.3 | bun --version |
| Node and npm | the chat app | 20.19 or newer, or 22.12 or newer | node --version |
| pnpm | NuFi Works | 10 | pnpm --version |
uv and Python 3.12 | NuFi Studio | uv --version | |
| Ollama | a free local model for the stack, optional | ollama list |
On Apple Silicon there is one more step before the stack starts; it is in Run the stack locally.
Which package manager where
Each app keeps its own lockfile and its own package manager. There is no root install step, on purpose: the apps do not share dependencies, and a root workspace would force one toolchain on a Python app and a Bun app.
| Directory | Manager | Install |
|---|---|---|
apps/chat | npm | npm ci |
apps/console, apps/admin-panel, apps/docs | Bun | bun install --frozen-lockfile |
apps/agents | pnpm | pnpm install --frozen-lockfile --node-linker=isolated |
apps/nufi-agent | uv through make | nufi/init.sh |
deploy/platform | none; Docker Compose | ./scripts/bootstrap.sh |