The open source ATS for teams drowning in applicants. AI shortlisting that shows its work.
Get Started · Pricing · Documentation · Roadmap · Report Bug
A flood of applicants turns hiring into a full-time scroll. Reqcore takes every application on a role, runs it through an AI shortlist, and shows you exactly why each candidate was ranked the way they were — no black box. No per-seat fees, unlimited applicants on every plan.
Reqcore is open-core: the full hiring workflow — jobs, pipeline, applications, documents, job board, and AI shortlisting — is AGPLv3 and lives in this repo. A small set of paid, cloud-only features (SSO/SAML, audit log, source analytics, BYOK) live under ee/ on a separate commercial license. The core scoring and shortlist logic never depends on ee/ — that's the part self-hosters and evaluators need to be able to trust and verify.
The fastest way to use Reqcore is the hosted product at reqcore.com — free until your first shortlist, no card required. Prefer to run it yourself? See Self-Hosting below.
Built for teams drowning in applicants.
| Reqcore | Greenhouse | Lever | Ashby | OpenCATS | |
|---|---|---|---|---|---|
| No per-seat pricing | ✅ | ❌ | ❌ | ❌ | ✅ |
| Unlimited applicants, every plan | ✅ | ❌ | ❌ | ❌ | ✅ |
| AI shortlist with visible scoring | ✅ | ❌ | ❌ | ❌ | ❌ |
| Resume parsing | ✅ | ✅ | ✅ | ✅ | ❌ |
| Bring your own AI key | ✅ | ❌ | ❌ | ❌ | ❌ |
| Open source | ✅ AGPLv3 | ❌ | ❌ | ❌ | ✅ |
| Modern tech stack | Nuxt 4 / Vue 3 | — | — | — | PHP 5 |
| Active development | ✅ 2026 | ✅ | ✅ | ✅ | ❌ Stale |
| Pipeline / Kanban | ✅ | ✅ | ✅ | ✅ | ❌ |
| Public job board | ✅ | ✅ | ✅ | ✅ | ❌ |
- AI shortlisting — Every application gets scored against the job with a visible breakdown of why, not a black-box rank
- Resume parsing — Structured data (contact, experience, education, skills) extracted from uploaded resumes automatically
- Job management — Create, edit, and track jobs through draft → open → closed → archived
- Candidate pipeline — Drag candidates through screening → interview → offer → hired with a Kanban board
- Public job board — SEO-friendly job listings with custom slugs that applicants can browse and apply to
- Custom application forms — Add custom questions (text, select, file upload, etc.) per job
- Document storage — Upload and manage resumes and cover letters via S3-compatible storage (MinIO)
- Multi-tenant organizations — Isolated data per organization with role-based membership
- Recruiter dashboard — At-a-glance stats, pipeline breakdown, recent applications, and top active jobs
- GDPR tooling — Candidate data retention windows, export, and erasure built in
- Secure document access — Resumes are never exposed via public URLs; all access is authenticated and streamed
- Built-in rate limiting — Protection against abuse on all endpoints out of the box
Reqcore is free to start and priced per active role, not per seat — invite your whole team without increasing the bill.
| Plan | Price | Active roles | Highlights |
|---|---|---|---|
| Free | $0 | 1 | Unlimited applicants, one AI shortlist to try it |
| Solo | $79/mo | 2 | Unlimited AI shortlists, full shortlist workflow |
| Team | $239/mo | 8 | Deeper per-application analysis, custom domain, integrations |
| Scale | $599/mo | 24 | SSO/SAML/SCIM, audit log, DPA/SLA, bring your own AI key |
| Agency | Contact us | Unlimited | Custom contract |
See the live pricing page for full details. Self-hosted instances use the same plan gates — see Licensing & self-hosting.
Reqcore can be run on your own infrastructure with Docker Compose. This is a best-effort, DIY path without support or an SLA — Reqcore's own support and uptime commitments apply only to the hosted product at reqcore.com.
mkdir reqcore && cd reqcore
curl -fsSLO https://raw.githubusercontent.com/reqcore-inc/reqcore/main/docker-compose.production.yml
curl -fsSLO https://raw.githubusercontent.com/reqcore-inc/reqcore/main/setup.sh
chmod +x setup.sh
./setup.sh
docker compose -f docker-compose.production.yml up -dOpen http://localhost:3000 and sign up.
Code under ee/ gates itself behind the same plan checks as the hosted product, so it stays locked without your own billing configured — no separate license-key server needed.
Full setup instructions (building from source, updating, troubleshooting, managing your instance) live in SELF-HOSTING.md.
| Layer | Technology |
|---|---|
| Framework | Nuxt 4 (Vue 3 + Nitro) |
| Database | PostgreSQL 16 |
| ORM | Drizzle ORM + postgres.js |
| Auth | Better Auth with organization + SSO + Stripe plugins |
| Storage | MinIO (S3-compatible) |
| AI | Vercel AI SDK via OpenRouter, or bring your own key (OpenAI-compatible: OpenAI, Anthropic, Google, Ollama, …) |
| Billing | Stripe |
| Analytics | PostHog |
| Validation | Zod v4 |
| Styling | Tailwind CSS v4 |
| Icons | Lucide (tree-shakeable) |
app/ # Frontend (Nuxt 4 srcDir)
pages/ # File-based routing
components/ # Auto-imported Vue components
composables/ # Auto-imported composables (useJobs, useCandidates, etc.)
layouts/ # Dashboard, auth, and public layouts
server/ # Backend (Nitro)
api/ # REST API routes (authenticated + public)
database/schema/ # Drizzle ORM table definitions
database/migrations/ # Generated SQL migrations
utils/ # Auto-imported utilities (db, auth, env, s3, billing, ai)
plugins/ # Startup plugins (migrations, S3 bucket)
ee/ # Nuxt layer — paid, cloud-only features (separate commercial license)
Dockerfile # Multi-stage build for the app container
docker-compose.yml # App + Postgres + MinIO (+ optional Adminer)
setup.sh # One-time secret generator → writes .env
The hosted product runs on managed infrastructure. A typical self-hosted production deployment uses:
| Component | Role |
|---|---|
| VPS or container host | 2 vCPU, 4GB RAM recommended as a starting point |
| Caddy | Reverse proxy with automatic HTTPS |
| Cloudflare | DNS, DDoS protection, edge SSL (free tier) |
| Docker Compose | Postgres + MinIO (localhost only) |
| systemd | Process management with auto-restart |
See ARCHITECTURE.md for the full deployment architecture diagram.
| Command | Description |
|---|---|
npm run dev |
Start development server |
npm run build |
Build for production |
npm run db:generate |
Generate migrations from schema changes |
npm run db:seed |
Seed database with demo data |
npm run db:studio |
Open Drizzle Studio (database browser) |
npm run i18n:crowdin:upload |
Upload source locale file to Crowdin |
npm run i18n:crowdin:download |
Download latest translations from Crowdin |
npm run i18n:crowdin:sync |
Upload sources and then download translations |
Reqcore uses Nuxt i18n (@nuxtjs/i18n) with Crowdin for translation management.
Implementation details and setup steps (including Crowdin native GitHub integration) are documented in I18N.md.
Reqcore is actively developed. Here's what's shipped and what's next:
| Status | Milestone |
|---|---|
| ✅ Shipped | Jobs, Candidates, Applications, Pipeline, Documents, Dashboard, Public Job Board, Custom Forms, Resume Parsing, AI Shortlisting, Billing & Plans, GDPR Retention/Erasure |
| 🔨 Building | Team collaboration (comments, activity log, role-based permissions) |
| 🔮 Planned | Interview scheduling, email notifications, candidate portal |
See the full Roadmap and Product Vision.
Contributions are welcome. Please read CONTRIBUTING.md before opening an issue or pull request.
Reqcore is licensed under the GNU Affero General Public License v3.0, with the exception of the ee/ directory, which contains paid, cloud-only features under a separate commercial license. See SELF-HOSTING.md for what that means if you run your own instance.