Issue tracking that stays yours.
Resolvd is a self-hosted ticket and project tracker — none of the Jira bloat, all of the workflow you actually need. Run it on a $5 VPS or in your homelab.
# 60-second install git clone https://github.com/joshhearne/resolvd.git cd resolvd cp .env.example .env # edit secrets docker compose up -d --build
Everything you'd expect. Nothing you wouldn't.
Built for engineering, support, and ops teams who've outgrown a spreadsheet but don't want to onboard a sales rep.
Projects & Tickets
Scoped projects with custom prefixes (WEB-0042). Priority levels P1–P5, custom statuses, internal/external modes.
Flexible Auth
Microsoft Entra ID, Google OAuth, or local accounts with Argon2. Mix and match. TOTP MFA enforceable per role.
Email Notifications
Microsoft Graph, Gmail API, or plain SMTP. Followers notified on status changes, comments, and assignments.
Real Collaboration
Comments, @mentions, followers, attachments up to 50 MB. Bulk export, CSV import, audit trail.
Roles & Permissions
Admin, Manager, Submitter, Viewer — with per-project overrides for vendors and external collaborators.
Custom Branding
Your logo, your color, your site name. Drop-in replacement for the default look.
Docker-Native
Three services: Postgres, Node backend, React frontend. One docker compose up and you're running.
Self-Hosted, Always
Your data on your hardware. No SaaS lock-in, no per-seat tax, no vendor surveying your tickets.
Boring stack. On purpose.
No bespoke runtimes, no exotic databases, no proprietary protocols. Components you already know how to operate, monitor, and back up.
- →Postgres 16 for everything: tickets, sessions, branding config.
pg_dumpis your full backup. - →Node + Express backend. Argon2 hashing, express-session, Multer uploads.
- →React + Vite + Tailwind frontend, served by nginx in a 30 MB Alpine image.
- →Bring your own TLS — Caddy, nginx, Cloudflare Tunnel, whatever you already run.
postgres: postgres:16-alpine
backend: node 22 + express
frontend: nginx alpine
nginx: internal router
▸ volumes: pg-data, uploads
▸ total RAM: ~400 MB idle
Two paths. Pick yours.
Click through the wizard or follow the manual guide. Either way, you're up in under 10 minutes.