Your data, your location
The database and CV files sit on infrastructure you choose, in the country you choose. Backups and access follow your own policies, not a vendor's terms.
A self-hosted ATS is applicant tracking software you run on servers you control. Candidate CVs, scores and emails sit in your database, under your backups and your deletion rules, rather than in a vendor's cloud.
Vekt is a self-hosted ATS you can install with one command. It covers job listings, a careers page, applications with CV upload and screening questions, a candidate pipeline, recruiter accounts and candidate emails, and adds AI screening that never rejects anyone without a person deciding.
It is open source under the MIT licence, so there are no per-seat or per-job fees, and you can read the code that handles every candidate.
Vekt calls itself a recruitment orchestration engine because the workflow behind each candidate is explicit and inspectable. In practice it does the core of what people mean by an ATS, and leaves out some of what larger suites add.
Checked against the code in the Vekt repository on 25 October 2026.
| ATS feature | In Vekt | How |
|---|---|---|
| Job listings and careers page | Yes | Public jobs page with a readable URL for each job |
| Application form with CV upload | Yes | PDF up to 5 MB, stored outside the web root |
| Screening questions | Yes | Single- and multiple-choice questions per job |
| Candidate pipeline | Yes | Applied, shortlisted, needs review, accepted, rejected |
| AI screening | Optional | OpenAI, OpenRouter or a local model via Ollama; low scores go to human review |
| Candidate emails | Yes | Editable templates, sent after a delay you set, cancelled if the decision changes |
| Recruiter and admin accounts | Yes | Role-based dashboards |
| Data retention | Yes | Candidates and CVs deleted automatically after the period you set |
| API | Yes | REST API with Swagger documentation |
| Interview scheduling, calendar sync | No | Use your existing calendar |
| Job-board multiposting | No | Share the job's URL instead |
| Single sign-on (SSO) | No | Email and password accounts |
Self-hosting moves three decisions from a vendor to you: where candidate data lives, which AI sees it, and when it is deleted.
The database and CV files sit on infrastructure you choose, in the country you choose. Backups and access follow your own policies, not a vendor's terms.
Score CVs with a hosted model, a local model through Ollama, or no AI at all. Direct identifiers are removed from CV text before any model sees it.
A scheduled job deletes candidate records and CVs once your retention period ends, and you can read the code that does it.
The MIT licence has no user, job or candidate limits. You pay for the server and the time to run it.
You need a server with Docker (Compose v2) and openssl. The setup script downloads the files, generates secrets, asks for your admin login and starts everything.
curl -fsSL https://raw.githubusercontent.com/Behnoudmst/vekt/main/setup.sh | bash.env: ollama keeps CV text on your servers; mock is the default and assesses nothing.Prefer not to pipe a script to bash? The manual steps download the Compose file and an example .env instead.
You hire in the EU and want candidate data under your control, you want AI screening without sending CVs to a third party, you have someone who can run a Docker service, and you would rather not pay per recruiter.
You need interview scheduling, job-board multiposting or SSO today, or nobody on the team can keep a server updated and backed up. A hosted ATS will serve you better.
An applicant tracking system you install on servers you control instead of renting it as a hosted service. Your organisation runs the application and its database, decides where candidate data is stored, and controls updates, backups and deletion.
It covers the core of one: job listings with a public careers page, an application form with CV upload and screening questions, a candidate pipeline (applied, shortlisted, needs review, accepted, rejected), recruiter and admin accounts, and candidate emails. Vekt calls itself a recruitment orchestration engine because that workflow is explicit and inspectable. It does not include interview scheduling, calendar integration or job-board multiposting today.
A server with Docker (Compose v2) and openssl. The setup script downloads the Compose file, generates secrets and starts two containers: the application on port 3000 and Inngest for background jobs. Data lives in a SQLite database and an uploads volume. You put your domain and HTTPS in front of it.
That depends on how you configure it. With AI scoring on a local model through Ollama, CV text stays on your infrastructure. With OpenAI or OpenRouter, the CV text, with direct identifiers removed, is sent to that provider. Candidate emails are sent through Resend, so email addresses and message content pass through it.
No software is compliant by itself. Self-hosting lets you decide where candidate data is stored and when it is deleted; your lawful basis, privacy notice, DPIA and answers to candidate requests remain your obligations. Vekt provides retention windows and automatic deletion, not compliance.
Vekt itself is free under the MIT licence, with no per-seat or per-job fees. Your costs are the server, the time to run and update it, and the AI provider if you use one. Scoring on a local model through Ollama needs a machine that can run that model.
Self-hosting gives you control over candidate data. It does not make anyone compliant: the obligations that come with screening applicants, under the GDPR and the EU AI Act, stay with the organisation running the software.
Read what GDPR asks of a hiring system and how the EU AI Act treats AI CV screening before you put Vekt in front of real applicants. The code and its documented limits are on GitHub.