Run every project
like a product.
Spira is a fast, self-hosted issue tracker. Every project gets its own backlog, specs and priorities, every ticket brought over from your old tracker keeps its id, and an AI agent reads and files tickets for you over MCP.
M2 — Keep legacy identifiers resolving forever
Every LNR- identifier keeps resolving: in search, in links pasted from old commits, and through the connector.
›File the search bug in Atlas, label it Bug.
Built for daily work. Fast at every step.
A clean, keyboard-first interface that stays out of the way. Each card plays a real part of the app, with a demo workspace of twelve projects and 464 issues.
V4 — One search box over titles and descriptions
Part ofATL-32, the epic for filters and saved views. A bare identifier in the text becomes a chip.
V4 — One search box over titles and descriptions
Part ofATL-32, the epic for filters and saved views. A bare identifier in the text becomes a chip.
list_issues{ project: "ATL", state: ["Todo"] }
list_issues
Close an epic in one move
An epic is an issue with children and a ring that fills as they close. Close it: the children in review close with it, and the ones still open are shown to you first, and kept as they are.
- A progress ring on every epic
- Blocks, blocked by and related links
- Lists grouped by status, priority or epic
Bring every old ticket
The old tracker's CSV export goes through a dry run first: rows read, epics, the projects it fills and their id ranges. Spira writes it once you type import, and every ticket keeps its old id beside the new one.
- A dry run before any write
- Old ids found by search, links and the agent
- In the app, or as a CLI for large exports
Hand tickets to an agent
Spira's MCP server runs beside the agent, on its own machine, and calls the API with a token. The agent finds, reads and files tickets by name and by old id, through the same rules as the app.
- Twelve tools, each named for its job
- States and labels given by name
- Every rule kept by the API
›LNR-1098 waits on the dry run. Link them.
M2 — Keep legacy identifiers resolving forever
Relations
Every project, in one place.
Four screens of the app, playing with its demo workspace: a project's issues, an epic, the projects list and a saved view.
The details that make the difference.
Blocks, blocked by and related: each link is kept once and seen from both ends, and a blocked issue says so on its row.
Descriptions are markdown with a preview, images upload straight into them, and a bare identifier becomes a chip with its state.
Labels in named colours; every project and saved view picks its icon among 3,896 Material Symbols and 1,906 emoji.
Each account owns a private workspace. Any number of them share one database, each seeing only its own.
Your server.
Your data.
Spira is self-hosted: your tickets live on your infrastructure, and every write goes through the same rules.
Run every project
like a product.
Backlog, specs and priorities, in a tracker you own.