poe
The 0NF CLI. One install line, two commands to your first running model.
Install poe
Paste this into a terminal:
/bin/bash -c "$(curl -fsSL https://poe.dev.ironapi.com/install)"
The installer walks you through a one-time GitLab login (for image pulls), drops the poe binary on your PATH, and verifies a pull works. Takes about 30 seconds.
Requires Docker Desktop or Colima running on macOS or Linux.
Don't have a GitLab account for
git.srv.ironapi.comyet? See Request access below — the installer will fail at the image-pull step without it.
Your first model — 60 seconds
poe init fleet
cd fleet
poe up
You now have:
- A running stack on
http://localhost:8090— API, GraphQL, auth, database - One
itemrow in the database, created from the scaffolded schema - Auto-reloading source: edit a file, run
poe deploy, done
Check the row is there:
poe gml 'execute read'
Shape it into your own
Open config/schema.xml. It's a tutorial module with one entity, three states, three transitions. Change the names, add attributes, add entities. Your schema IS your API — <transition> elements become GML verbs and REST endpoints, <attribute> elements become columns and JSON fields.
Then:
poe deploy
No restart. No migration files. Your model is live.
What poe gives you
| Command | What it does |
|---|---|
poe up | Bring the stack up, load your schema, run seeds |
poe deploy | Apply schema + seed changes to a running stack |
poe gml '<stmt>' | Run any GML statement (create, edit, query) |
poe psql | Open a psql shell on the database |
poe logs api | Tail a service's logs |
poe down | Stop the stack (data persists) |
poe reset -y | Stop the stack and wipe data |
poe env hosted | Switch to the hosted-deployment profile |
poe hosted-setup <host> | One-shot Traefik/DNS/cert wiring for a server |
Deploy to a server
poe env hosted
poe hosted-setup your-project.example.com
poe deploy
Your model is reachable at https://your-project.example.com with a real TLS cert, Traefik routing, and the same commands you use locally.
Troubleshooting
poe up fails silently. Your working directory is probably outside $HOME. Colima can't bind-mount paths like /tmp/…. Move the project under $HOME and retry.
Bootstrap container exits non-zero. poe logs bootstrap. The last line names the file and line that failed.
Port already in use. Another poe up is running. poe down in that project, or change API_PORT= in .env.
Image pull denied. Your GitLab token expired. Re-run the installer — it'll refresh.
Under the hood
poe is the CLI for 0NF — a language for defining typed, ACL-aware, state-machine-driven domain models as declarative XML. The substrate gives you a metamodel, an RLS-scoped data layer, agenda-based authorization, and a GML + REST + GraphQL + WebSocket surface out of the box.
No schema migrations. No hand-written CRUD. No access-control bolted on afterwards. Your schema.xml is the contract; everything downstream is generated.
Request access
0NF is in closed beta. Access is granted individually — we're watching early usage carefully and giving each user a hand on their first model.
Drop us a line at hello@ironapi.com with a sketch of what you'd like to build. We reply with a personal invite that creates your git.srv.ironapi.com account and an image-pull token the installer picks up.
No waitlist, no drip campaign, no vendor-procurement flow. One email, one real reply, one working setup.
Next
- Reference:
poe --helpfor any command. - Concepts: 0nf.ironapi.com/concepts — what modules, entities, transitions, agendas, and bindings mean in 0NF.
- Source:
git.srv.ironapi.com/ironapi/genesis/0nf(access follows the same invite).