Quaso is a self-hosted tool for translating games that use i18next or ICU MessageFormat, with source text in JSON files or Markdown documents. Upload source text, translate it with Gemini or your team, and download the translations into your game. Your game loads those files without a connection to Quaso.
- i18next JSON v4 (default):
{{name}}placeholders,$t(…)nesting references, and plural keys such ascoins_oneandcoins_other. - ICU MessageFormat:
{name}arguments andplural,select, andselectordinalblocks inside strings. Use it with i18next-icu or another ICU MessageFormat library. Enable ICU MessageFormat in Settings → Placeholders before the first upload.
The message format applies to the whole project, including Markdown documents. Both use the same upload, translation, and download workflow. See the comparison and JSON examples to choose the setting that matches your game.
Follow the quick start to complete your first upload and download:
- Host Quaso with Docker Compose or Cloudflare, and create an administrator account.
- Connect your game with the command-line tool: install
@quaso-i18n/cli, create an API key, and runnpx quaso initwith your target languages. - Upload and translate your source files. Use your Gemini API key for machine translation, or translate on the website.
- Download and check the files with
npx quaso download, then include them in your build.
To try Quaso locally before setting up a server, run Quaso Quest. This sample game includes a local Quaso instance and a test translator. Its generated translations show the workflow; they are not real translations.
Each instance holds one project, its source language, and the languages you want to translate into. The website is public: visitors can read source text and translations. Contributors suggest changes; managers and administrators review them or edit accepted translations directly.
With a Gemini key and automatic translation enabled, uploads queue work for new and changed strings. Machine translations can be downloaded before proofreading. The language model does not replace a proofread translation of the current source text. Proofreading holds for the text it was made for: when that text changes, the translation is updated like any other, and comes back if the text does.
By default, downloads use the current accepted translations, including translations marked outdated. Pending suggestions are excluded. By default, missing translations use source text. Use status checks in your build if you require complete or proofread translations before a release.
Read How translation works for states, roles, and release checks, or Supported files and translation checks for format rules.
Choose the guide for your task:
| Task | Guide |
|---|---|
| Connect a game and automate its builds | Add Quaso to your game |
| Work through an upload, review, and download | A complete workflow |
| Translate or review on the website | Website guide |
| Move existing translations from Crowdin | Migration guide |
| Back up, restore, or upgrade an instance | Operations guide |
| Look up commands, settings, or API requests | CLI, configuration, API |
| Develop Quaso | Contributor guide |
Use the Node version in .nvmrc and Git to start a local development instance:
git clone https://github.com/explodi/quaso.git
cd quaso
npm ci
npm run devThe development instance includes sample data, an administrator account, and a test translator. Refer to the contributor guide for setup requirements, checks, and the source layout. Do not expose the development instance as a public server.
Quaso is MIT licensed. You pay for your hosting and any external services you use.