Self-host it (€30, once)
i18n-keyless is one product, and you can run it yourself: the same API, the same dashboard,
the same MCP server as i18n-keyless.com — it is the very Docker image we run — on your
own machine, with your own database and your own AI provider. You pay €30 once and own
it: no subscription, no usage cap, no expiry, every update for life.
Buy the licence at https://i18n-keyless.com/self-hosted. The key (it starts with
ik1.) arrives by email and on the page you land on after the payment.
With ONCE (recommended)
ONCE is 37signals' open source tool for running Docker apps on your own server: one line to install, then a terminal console for the domain, the TLS certificate, the environment, updates and backups. i18n-keyless follows its conventions, so it is a first-class app there.
On a fresh Linux server:
curl -fsSL https://get.once.com | sh
once
In the console, add an app and enter the image path:
ghcr.io/ambroselli-io/i18n-keyless:latest
Then, in the app's Environment settings, add:
LICENSE_KEY=ik1.... # from your purchase
AI_PROVIDER=mistral # or openai, anthropic, google, openai-compatible
AI_MODEL=mistral-small-latest
AI_API_KEY=... # your key at that provider
Set the hostname, and ONCE takes care of DNS and TLS. Open the URL: the first screen creates your account — the admin of this instance — and your first project.
With docker compose
No ONCE? Two files and Docker:
mkdir i18n-keyless && cd i18n-keyless
curl -fsSL https://raw.githubusercontent.com/arnaudambro/i18n-keyless/main/self-hosted/docker-compose.yml -o docker-compose.yml
curl -fsSL https://raw.githubusercontent.com/arnaudambro/i18n-keyless/main/self-hosted/.env.example -o .env
# fill LICENSE_KEY and the AI_* lines in .env
docker compose up -d
open http://localhost:1800
Put your usual reverse proxy (Caddy, nginx, Traefik) with TLS in front of port 1800, and
set APP_URL in .env to the public URL: it decides whether the session cookie is
secure, and it is the OAuth issuer the MCP clients see.
The AI provider
Translations are made by the model you choose, on your own account. Any provider the Vercel AI SDK knows:
AI_PROVIDER | AI_MODEL (default) | Note |
|---|---|---|
mistral | mistral-small-latest | What i18n-keyless.com runs on. |
openai | gpt-4o-mini | |
anthropic | claude-haiku-4-5-20251001 | |
google | gemini-2.0-flash | |
openai-compatible | llama3.1 | Ollama, Groq, Together, a proxy… set AI_BASE_URL (default http://localhost:11434/v1). |
AI_API_KEY is the key at that provider. A whole app costs cents.
Accounts and projects
- The first account created on an empty instance is the admin. Admins create projects
and can make other users admin (
PUT /user/admin). - Everyone else uses the projects they are invited to. When you add a member, the dashboard shows the invitation message to send them yourself (with the set-password link); the instance sends no email, so there is no mail provider to configure.
- Pausing a project (admins) stops its key; nothing is deleted.
Point your app at your server
Every SDK takes an API_URL. Add it next to the key:
import * as I18nKeyless from 'i18n-keyless-react';
I18nKeyless.init({
API_KEY: 'your-project-key',
API_URL: 'https://i18n.example.com', // your APP_URL
storage: window.localStorage,
languages: { primary: 'en', supported: ['en', 'fr', 'es'] },
});
The dashboard's snippets already carry it. Node, Vue, Angular and the browser package take
the same option; Laravel and Flutter read it from their own config. The MCP server is at
https://i18n.example.com/mcp, and the onboarding screen prints the claude mcp add line.
Upgrade, back up
ONCE updates and backs up from its console. With compose: docker compose pull && docker compose up -d;
the schema is applied at boot and the volume is kept. The data lives in /storage:
i18n-keyless.db (SQLite: users, projects, translations) and secret (signs the sessions).
Copy the volume and you have everything.
Prefer Postgres? Set DATABASE_URL=postgresql://…; the image ships both drivers.
What is different from the hosted product
Nothing in the software: it is the same image. What differs is who operates it.
| Hosted | Self-hosted | |
|---|---|---|
| Price | Per project, per month | €30 once |
| Machine, database, AI account | Ours | Yours |
| Projects | One per subscription, created from the website | Unlimited, created by your admin |
| Support | Email, best effort |
Environment reference
| Variable | Required | Default | What it does |
|---|---|---|---|
LICENSE_KEY | yes | — | Your lifetime licence. Verified offline at boot. |
AI_PROVIDER | no | mistral | See the table above. |
AI_MODEL | no | the provider's default | |
AI_API_KEY | yes | — | Your key at the provider. |
AI_BASE_URL | no | — | For openai-compatible, or a proxy. |
APP_URL | recommended | http://localhost:1800 | The public URL: cookie security, OAuth issuer, invitation links. ONCE sets it from the hostname. |
DATABASE_URL | no | file:/storage/i18n-keyless.db | SQLite file, or a Postgres URL. |
SECRET | no | generated once, kept in /storage | JWT secret of the dashboard sessions. |
SENTRY_KEY | no | the maintainer's | Where errors are reported. By default they reach us, the maintainers — that is how bugs get fixed. off disables it; your own DSN redirects it. |
Lost your licence key?
Write to us with the email you bought it with. There is nothing to revoke or renew: a licence is bound to that email and is valid forever.