Same mission.
New airframe.
Everything you know is still in there. Almost everything underneath it has been rebuilt — and there is a new room for the days it all goes wrong. Six stops from v2.4.29 to v3.
What comes off,
what goes on.
Six things you are running today, and what replaces them.
- v2.4.29InterfaceJinja pages and a jQuery bundle, served by the Flask appv3.0.0-beta.1A SvelteKit application running as its own service
- v2.4.29CoordinationComments on a case, and a chat window beside itv3.0.0-beta.1War rooms — live chat, teams, tasks, timelines and sitreps
- v2.4.29AlertsA queue you filter, and merges you make by handv3.0.0-beta.1Clusters, condition rules and investigation flows
- v2.4.29APIA REST surface documented by hand, page by pagev3.0.0-beta.1~211 new v2 endpoints and an OpenAPI 3.1 spec built from the code
- v2.4.29MachinesNothing an assistant could safely talk tov3.0.0-beta.1A built-in MCP server, off until an admin turns it on
- v2.4.29DatabasePostgreSQL 12, md5 authenticationv3.0.0-beta.1PostgreSQL 18 and scram-sha-256, with a scripted migration
What actually
changed.
- 01 ·The cockpit
The whole interface,
rebuilt.The UI the Flask app used to render is gone. In its place is a SvelteKit application that ships as its own container and talks to the backend the same way your scripts do — over the API.
- SvelteKit, server-rendered
- its own container
- 460 Svelte components
- 29 end-to-end suites
107templates retired - 02 ·War roomsnew
A room for
the bad days.A case is where an investigation lives. A war room is where a crisis gets run — one live space with the people, the decisions and the clock all in it, and everything said there landing in the record.
- threads, polls, reactions
- lead · responder · observer
- versioned sitreps
- room tasks, timelines and notes
- open → active → standby → closed
14slash commands - 03 ·Alertsnew
Alerts arrive
with a plan.Clusters gather the noise into one story. Rules decide what happens to it. And investigation flows attach the playbook before an analyst has even opened the thing.
- alert clusters
- condition-based rules, scoped and prioritised
- ordered flow steps
- required steps
- progress tracked per analyst
- 04 ·The API
A bigger API —
and a real spec.v3 adds around 211 endpoints under /api/v2 and generates its OpenAPI document straight from the code, so the docs cannot drift from the routes. Four legacy paths retired; the rest still answer.
- OpenAPI 3.1
- 368 documented paths
- browsable inside IRIS
- your v1 integrations keep working
+211v2 endpoints - 05 ·MCPnew
IRIS talks to
machines.A Model Context Protocol server is built in, so an assistant can work a case through exactly the permissions its analyst has — and nothing beyond them. It stays dark until an admin says otherwise.
- off by default
- every call checked against the ACL
- admin tool allowlist
- per-user opt-out
50MCP tools - 06 ·Foundations
Rebuilt where
you can't see it.A layered backend with the boundaries enforced in CI, a modern database under it, and — if you want them — errors you can actually chase, on a server you own.
- PostgreSQL 12 → 18
- one IRIS_VERSION pins the whole stack
- rollback-safe migration script
- opt-in, self-hosted error reporting
The parts you rely on,
left alone.
A rebuild is only worth it if the day job survives it. Your data comes across, your integrations keep answering, and IRIS still runs on your own metal under the same licence.
- Cases
- Alerts
- IOCs
- Assets
- Evidence
- Timelines
- Tasks
- Notes
- The graph
- Dashboards
- Reports
- Modules and hooks
- RBAC
- OIDC
- Self-hosted
- LGPLv3
One hop from v2.4.29.
- Step 1Take both backups
A cold volume tarball and a pg_dumpall. The engine jump is not reversible in place.
- Step 2Run the script
upgrade-db-pg12-to-pg18.sh is idempotent — stop it and start it again safely.
- Step 3Bring the stack up
docker compose up -d. Alembic migrates the schema on the first boot.
v3 is on final approach.
Fly it before it lands.
The beta is live and the migration path is written. Try it on a copy of your data, tell us what breaks, and it gets fixed before release.
