Sign inSign up

ritservices0000/spirex-client

By ritservices0000

•Updated about 2 hours ago

SPIREX web UI — pairs with spirex-server; start both via docker compose. Jira alternative.

Image
0

784

ritservices0000/spirex-client repository overview

⁠SPIREX

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]⁠.


⁠Quick start (Docker — one command)

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.

⁠Public images

These two images are a pair — you need both. spirex-server is the API, spirex-client is the web UI that proxies to it. You normally never pull them by hand: the docker compose command 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.

TagMeaning
0.2.0An exact release. Pin this in production.
0.2 / 0Latest patch / latest minor on that track
latestNewest stable release — moves under you
edgeRebuilt 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⁠.

⁠Building from source instead

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

⁠Quick start (local dev)

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 features are optional

AI drafting (issue enhancement, document & image import) works with a plain API key:

  • Anthropic — set ANTHROPIC_API_KEY + CLAUDE_MODEL, or
  • LiteLLM / any OpenAI-compatible endpoint — set LITELLM_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⁠.

⁠Configure

TopicDoc
Self-host from scratchdocs/self-hosting.md⁠
AI providers (Anthropic / LiteLLM)docs/ai-providers.md⁠
Storage (local / MinIO / S3)docs/storage.md⁠
Microsoft SSOdocs/sso-microsoft.md⁠
Email (SMTP / Gmail)docs/email-smtp.md⁠
External APIdocs/external-api-reference.md⁠ · docs/external-api-guide.md⁠

⁠Layout

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

⁠Tech stack

Vite · React · TypeScript · Tailwind · shadcn/ui (client) — Node · Express · Prisma · PostgreSQL (server) — S3/MinIO for attachments, SMTP for email, Microsoft Entra for optional SSO.

⁠License

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.

Tag summary

Content type

Image

Digest

sha256:d4a949fd4…

Size

25.7 MB

Last updated

11 days ago

docker pull ritservices0000/spirex-client