SPIREX web UI — pairs with spirex-server; start both via docker compose. Jira alternative.
784
Open-source, self-hostable Jira alternative for small teams. Scrum & Kanban boards, backlog, sprints, epics, subtasks, custom workflows, time tracking, reports, rich-text issues with attachments, one-click JIRA import, and optional AI drafting.
An open-source product by RIT Services — www.rit.services.
☁️ Don't want to self-host? Try the free hosted version at spirex.rit.services — the cloud SPIREX, a free-tier Jira alternative, no setup required.
💬 Questions, or something wrong? Reach us at [email protected].
Prereqs: Docker + Docker Compose. No Node toolchain, no compile step, and no need to clone this repo — grab two files and go:
curl -O https://raw.githubusercontent.com/Rit-Services/Spirex/main/docker-compose.yml
curl -o .env https://raw.githubusercontent.com/Rit-Services/Spirex/main/.env.example
# edit the secrets: JWT_SECRET, ENCRYPTION_KEY, POSTGRES_PASSWORD, ADMIN_EMAIL/PASSWORD
docker compose up -d # pulls postgres + server + frontend
Already cloned the repo? cp .env.example .env and docker compose up -d does the same thing.
Open http://localhost and log in with the ADMIN_EMAIL / ADMIN_PASSWORD you set in .env — the first boot creates that single admin account (and its organization) automatically. Migrations run on boot. The admin then invites the team from the Users page. More: docs/self-hosting.md.
To use MinIO object storage instead of local disk, set STORAGE_DRIVER=minio in .env and start with docker compose --profile minio up -d.
These two images are a pair — you need both.
spirex-serveris the API,spirex-clientis the web UI that proxies to it. You normally never pull them by hand: thedocker composecommand above starts both, plus PostgreSQL, and wires them together. Pull them directly only if you're building your own Kubernetes/Nomad/Portainer deployment.
Published on every release for linux/amd64 and linux/arm64 (Apple Silicon, Raspberry Pi, Graviton):
docker pull ritservices0000/spirex-server:latest
docker pull ritservices0000/spirex-client:latest
Docker Hub is the only public registry for now. Copies also go to the GitHub Container Registry (ghcr.io/rit-services/…), but those are not public yet and anonymous pulls fail with unauthorized. Stick with the default.
| Tag | Meaning |
|---|---|
0.2.0 | An exact release. Pin this in production. |
0.2 / 0 | Latest patch / latest minor on that track |
latest | Newest stable release — moves under you |
edge | Rebuilt nightly from main. Unstable, for testing only |
Pin a version for the whole stack by setting SPIREX_VERSION in .env. Every image is built by GitHub Actions and carries a signed provenance attestation, so you can verify it really came from this repository:
gh attestation verify oci://ritservices0000/spirex-server:latest --repo Rit-Services/Spirex
Releases are cut automatically from Conventional Commits — see CONTRIBUTING.md. Full history in CHANGELOG.md.
Contributors, and anyone running a fork, layer the build override on top:
docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build
Prereqs: Node 20+, npm 10+, a Postgres instance.
npm install
cp server/env.example server/.env # set DATABASE_URL + secrets
cp client/env.example client/.env
npm run migrate:deploy && npm run seed # from repo root
# two terminals:
npm run dev:server
npm run dev:client
Open http://localhost:5173.
AI drafting (issue enhancement, document & image import) works with a plain API key:
ANTHROPIC_API_KEY + CLAUDE_MODEL, orLITELLM_BASE_URL (+ key + model).If neither is configured, AI features are automatically hidden in the UI — the app runs fully without them. Details: docs/ai-providers.md.
| Topic | Doc |
|---|---|
| Self-host from scratch | docs/self-hosting.md |
| AI providers (Anthropic / LiteLLM) | docs/ai-providers.md |
| Storage (local / MinIO / S3) | docs/storage.md |
| Microsoft SSO | docs/sso-microsoft.md |
| Email (SMTP / Gmail) | docs/email-smtp.md |
| External API | docs/external-api-reference.md · docs/external-api-guide.md |
spirex/
├── client/ # React + Vite + TypeScript + Redux Toolkit
├── server/ # Express + Prisma + PostgreSQL
├── nginx/ # SPA + /api reverse-proxy template, rendered at container start
├── docs/
├── docker-compose.yml # pulls the published images
└── docker-compose.build.yml # override: build from source instead
Vite · React · TypeScript · Tailwind · shadcn/ui (client) — Node · Express · Prisma · PostgreSQL (server) — S3/MinIO for attachments, SMTP for email, Microsoft Entra for optional SSO.
Spirex is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). See LICENSE. © RIT Services and contributors.
Because Spirex is served over a network, AGPL-3.0 §13 applies: anyone who runs a modified version as a network service must make the corresponding source available to its users.
In practice, if you fork Spirex and publish your own images, rebuild the client with your fork's URL so the in-app "Source code" link points at the source actually running:
docker compose -f docker-compose.yml -f docker-compose.build.yml build \
--build-arg VITE_SOURCE_URL=https://github.com/you/your-fork
The official images are unmodified builds of this repository, so they link here.
Content type
Image
Digest
sha256:d4a949fd4…
Size
25.7 MB
Last updated
11 days ago
docker pull ritservices0000/spirex-client