Languine.ai
ActionsTags
(2)Self-hosted, Vercel-native AI localization. Click Deploy. Run npx languine. That's it.
What the button does:
- Forks this repo to your GitHub account.
- Creates a Vercel project with
apps/webas the root. - Provisions serverless Postgres via the Vercel Marketplace —
DATABASE_URLis auto-injected. - Prompts you for
LANGUINE_API_KEY(any random string) and an optionalAI_MODELslug. - Builds and deploys. The build automatically runs
drizzle-kit migrateagainst your fresh database.
After the first deploy, do these two things:
- Enable Deployment Protection. In your Vercel project: Settings → Deployment Protection → turn on Vercel Authentication (or Password Protection). This gates the dashboard and
/cli/token. Without this, your API key is publicly visible. - Open the dashboard (
https://<your-deployment>.vercel.app). It shows a status checklist and ready-to-paste CLI commands.
That's it. No additional integrations to configure — Vercel AI Gateway authenticates automatically via the project's OIDC token.
The self-hosted CLI ships under the
selfhostednpm dist-tag so it doesn't disturb users still pointed at the legacy hosted backend. Install it withnpx languine@selfhosted ...(or pin"languine": "^4"in yourpackage.json).npx languine@latestcontinues to resolve to the legacy 3.x CLI for the old hosted service.
In any project that needs translations:
npx languine@selfhosted login --url https://languine.your-team.vercel.app
npx languine@selfhosted init
npx languine@selfhosted translatelanguine login opens /cli/token in your browser. Because Deployment Protection is on, only authorized owners can see the page — copy the API key, paste it into the CLI prompt.
languine init creates a project on your deployment via tRPC (project.create) and writes the returned projectId into languine.json. You don't need to provision anything from the dashboard.
For non-interactive use (CI, scripts):
export LANGUINE_BASE_URL=https://languine.your-team.vercel.app
export LANGUINE_API_KEY=<the-key-you-set-on-vercel>
npx languine@selfhosted translatename: Languine
on:
push:
branches: [main]
jobs:
translate:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
steps:
- uses: actions/checkout@v4
- uses: languine-ai/languine@v4
with:
api-key: ${{ secrets.LANGUINE_API_KEY }}
base-url: ${{ vars.LANGUINE_BASE_URL }}
project-id: prj_xxxxxxx
create-pull-request: 'true'| Variable | Required | Source | Description |
|---|---|---|---|
LANGUINE_API_KEY |
Yes | Set at deploy | Single API key shared between the dashboard, CLI and Action. Generate with openssl rand -hex 32. |
DATABASE_URL |
Yes | Auto-injected | Postgres connection string from the Vercel Marketplace integration you picked at deploy. |
AI_MODEL |
No | Set at deploy | Vercel AI Gateway model slug. Defaults to openai/gpt-4.1. Examples: anthropic/claude-sonnet-4, openai/gpt-4.1-mini. |
AI_GATEWAY_API_KEY |
No | Local dev only | Only needed when running locally outside Vercel. In production the Gateway uses the project's OIDC token. |
- Hosting: Vercel (Next.js 16, App Router, Node.js runtime).
- Database: Serverless Postgres from the Vercel Marketplace + Drizzle ORM.
- Background jobs: Vercel Workflows (
workflowSDK) — durable, resumable, observable. - AI: Vercel AI Gateway (
@ai-sdk/gateway+ AI SDK v6) — single configurable model. - Auth: Single
LANGUINE_API_KEYfor the CLI/Action; the dashboard is gated by Vercel Deployment Protection.
flowchart LR
Dev[Developer] -->|languine| CLI
GHA[GitHub Action] -->|x-api-key| Web
CLI -->|x-api-key| Web[apps/web on Vercel]
Web --> Workflows[Vercel Workflows]
Workflows --> Gateway[Vercel AI Gateway]
Gateway --> Models[OpenAI / Anthropic / ...]
Web --> DB[(Postgres)]
Workflows --> DB
Owner[Owner browser] -->|Deployment Protection| Web
git clone https://github.com/languine-ai/languine
cd languine
bun install
cp apps/web/.env.example apps/web/.env # fill in DATABASE_URL etc.
bun devSet AI_GATEWAY_API_KEY in apps/web/.env so the Gateway can authenticate when not running on Vercel.
bun test # everything
bun test --filter @languine/web # just the web app
bun test --filter languine # just the CLIMIT © Midday Labs AB
Languine.ai is not certified by GitHub. It is provided by a third-party and is governed by separate terms of service, privacy policy, and support documentation.
