{
    "archive_path": "archive/1789812389.446716",
    "base_url": "i18n-keyless.com",
    "basename": "",
    "bookmarked_date": "2026-09-19 10:06",
    "canonical": {
        "archive_org_path": "https://web.archive.org/web/i18n-keyless.com",
        "dom_path": "output.html",
        "favicon_path": "favicon.ico",
        "git_path": "git/",
        "google_favicon_path": "https://www.google.com/s2/favicons?domain=i18n-keyless.com",
        "headers_path": "headers.json",
        "htmltotext_path": "htmltotext.txt",
        "index_path": "index.html",
        "media_path": "media/",
        "mercury_path": "mercury/content.html",
        "pdf_path": "output.pdf",
        "readability_path": "readability/content.html",
        "screenshot_path": "screenshot.png",
        "singlefile_path": "singlefile.html",
        "warc_path": "warc/",
        "wget_path": "i18n-keyless.com/index.html"
    },
    "domain": "i18n-keyless.com",
    "extension": "",
    "hash": "M5G0A6W1YJH0Q62QE99Y",
    "history": {
        "archive_org": [],
        "dom": [],
        "favicon": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--max-time",
                    "120",
                    "--output",
                    "favicon.ico",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)",
                    "https://www.google.com/s2/favicons?domain=i18n-keyless.com"
                ],
                "cmd_version": "curl 8.14.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-09-19T10:12:29.886273+00:00",
                "index_texts": null,
                "output": "favicon.ico",
                "pwd": "/data/archive/1789812389.446716",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-19T10:12:29.176437+00:00",
                "status": "succeeded"
            }
        ],
        "git": [],
        "headers": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--head",
                    "--max-time",
                    "120",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)",
                    "https://i18n-keyless.com/"
                ],
                "cmd_version": "curl 8.14.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-09-19T10:12:30.505833+00:00",
                "index_texts": null,
                "output": "headers.json",
                "pwd": "/data/archive/1789812389.446716",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-19T10:12:29.891806+00:00",
                "status": "succeeded"
            }
        ],
        "htmltotext": [],
        "media": [],
        "mercury": [
            {
                "cmd": [
                    "/app/node_modules/@postlight/parser/cli.js",
                    "https://i18n-keyless.com/"
                ],
                "cmd_version": "1.0.0",
                "end_ts": "2026-09-19T10:12:38.762589+00:00",
                "index_texts": null,
                "output": "mercury",
                "pwd": "/data/archive/1789812389.446716",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-19T10:12:34.144153+00:00",
                "status": "succeeded"
            }
        ],
        "pdf": [],
        "readability": [
            {
                "cmd": [
                    "/app/node_modules/readability-extractor/readability-extractor",
                    "/tmp/tmp6fjt8w42",
                    "https://i18n-keyless.com/"
                ],
                "cmd_version": "0.0.11",
                "end_ts": "2026-09-19T10:12:34.137265+00:00",
                "index_texts": [
                    "Ultimate DX for i18nKeyless i18n your coding agent gets right the first time: one file to edit, no locale JSON to load, no merge conflictFree self-hosted, or from \u20ac4/month.5-Minute SetupYour whole i18n implementation in 5 minutes. Not kidding.No Keys SystemYour brain shouldn't be involved for such meaningless tasks.Global From Day OneShip to international markets without extra effort.One API, twelve SDKs. Pick yours:ReactReact Native, Expo, Next.js, Remix, TanStack Start, AstroVueNuxtAngularPlain HTMLSvelte, Alpine, htmx, one script tagNode.jsLaravelPHPRailsRubyFlutterDartSwiftiOS, macOS, VaporKotlinAndroid, KtorPythonDjango, Flask, FastAPIGoSetup i18n, keep your codebase clean and ship fastMultiple PITA exist with the current i18n solutions. Pains are so big that you delay i18n as much as possible.It consumes time you should spend on the beachSetup the keys' system: at least 1 hour of senior dev timeBack and forth for each new key: 1 minute per key, x500 keys, x2 languages = 17 hoursWith i18n-keyless, you don't care about the i18n system at all. You can go on the beach and order a mojito.Today most of the systems use keys to translate the textThis is painful to generate. This is painful to maintain.When you see a text in the app, and you want to update it, you need to find the corresponding key.With i18n-keyless, you don't care about the i18n system at all. Use your brain for something more interesting.Leave translations to AIWith the key system, you need to manage the translations in the app.Otherwise your users will see someheader.welcome.title in their app.With i18n-keyless, worst case scenario offline you see untranslated real words. Normal pace, you don't care about the i18n system at all. Just write good headlines, focus on marketing, get sales.Codebases are beautiful... until i18n keys' infectionWith the key system, when you read the code and the content, you have to read keys, not natural language.Sometimes you should make a fix because a sentence is not grammatically correct. But you don't know that because you read keys.With i18n-keyless, you don't care about the i18n system at all. Codebase stays beautiful.Add i18n from day one without any impact on your development paceWhat if the service shuts down?Nothing you have goes away.SDKs are MITEvery SDK stays on npm, PyPI, RubyGems, pub.dev and the other registries. Fork them, keep them, they are yours.Server is open sourceThe very same Docker image that runs i18n-keyless.com. Run it on your machine with SQLite or Postgres, your AI key, your data at home.One project free foreverFully free, unlimited projects. Donations are voluntary and keep the project alive. The licence is verified offline \u2014 the server never calls home. Export all translations to JSON at any time.Built for coding agentsMCP server to cover all your i18n needsPlus six other reasons why the system is so optimized for agentic coding.No name to inventA key is a naming decision with no right answer. Two agents write login.submit and auth.button.send for the same button. Without keys there is no decision to make.One file to edit, not twentyA keyed change touches the component plus every locale JSON, and agents forget files. Here a copy change is a single-file edit.Zero merge conflicts in agent fleetsFive agents on five branches all edit en.json: a guaranteed conflict. There is no shared file, so worktrees and background agents never collide.Cheap in tokensTo reuse a key, an agent must load the locale files into context on every edit. Keyless loads nothing: the text is right there in the component.Readable diffsThe pull request shows real sentences. A human or a review agent can judge the copy without digging for what a key stands for.One rule in your CLAUDE.mdEvery i18n rule you write is a rule the agent can break. This one needs a single line \u2014 and the fallback is the real text, so a miss cannot show a.b.c on screen.The only i18n rule your agent needs# CLAUDE.md\nWrite the UI copy in English and wrap it in <T>\u2026</T> from i18n-keyless-react.\nThat is the whole i18n setup.Your agent can operate it, not only write itThrough the MCP server, the agent lists missing translations, reads one, overrides a bad one, or imports the copy you already have \u2014 with its own OAuth login, no key to paste.Read the MCP guidePerfect for MVPsLaunch globally from day oneStop delaying i18n because of complexity. Implement in 5 minutes, not days. Maintain your development velocity as if i18n wasn't implemented.5-minute implementation. Not kidding.One simple config object and you're done.Maintain development velocityCode as if i18n wasn't implemented at all.Ship to global marketsNo refactoring needed as you scale to new languages.SSR & SEO readyWorks with Next.js, Remix, TanStack Start and Astro. Server-render any language for search engines \u2014 same 5-minute setup.Traditional i18nSetup keys system (1 hour)Create translation files (2 hours)Refactor components (4 hours)Test all languages (2 hours)Fix layout issues (3 hours)12+ hours of worki18n-keylessAdd package (1 min)Configure with API key (2 min)Wrap text components (2 min)5 minutes of workHow It WorksIt's no brainer to setupJust the simplest config object and you're ready to go global.And even more, your agent will set it up for you.1. Basic Setupimport * as I18nKeyless from \"i18n-keyless-react\";\n\nI18nKeyless.init({\n  API_KEY: \"YOUR_API_KEY\",\n  storage: window.localStorage,\n  languages: {\n    primary: \"en\",\n    supported: [\"en\", \"fr\"],\n  },\n});2. Component Usage (React here; the same in Vue, Angular, Flutter, Swift and Kotlin)import { I18nKeylessText } from \"i18n-keyless-react\";\n// import { T } from \"i18n-keyless-react\"; // also works\n\n// Just write in your primary language\n<I18nKeylessText>\n  Welcome to our website\n</I18nKeylessText>3. Server-side Usage (Node.js here; the same call in Laravel, Rails, Python and Go)import { awaitForTranslationOrFallbackToOriginal, type Lang } from 'i18n-keyless-node';\n\nconst title = await awaitForTranslationOrFallbackToOriginal('Come see my app!', user.lang as Lang);\nconst body = await awaitForTranslationOrFallbackToOriginal('So many new stuff!', user.lang as Lang);\n\nawait sendExpoPushNotification({ user, title, body });4. For text outside componentsimport { getTranslation } from \"i18n-keyless-react\";\n\nexport default function Navigation() {\n  return (\n    <HomeTabs.Navigator>\n      <HomeTabs.Screen\n        options={{ tabBarLabel: getTranslation(\"Welcome\") }}\n        name=\"WELCOME\"\n      />\n    </HomeTabs.Navigator>\n  );\n}5. Pick your SDK: one install line, the same API everywhereReact, React Native, Expo, Next.js, Remix, TanStack Start, Astronpm install i18n-keyless-reactVue, Nuxtnpm install i18n-keyless-vueAngularnpm install i18n-keyless-angularPlain HTML, Svelte, Alpine, htmx, one script tagnpm install i18n-keyless-browserNode.jsnpm install i18n-keyless-nodeLaravel, PHPcomposer require i18n-keyless/laravelRails, Rubybundle add i18n-keyless-railsFlutter, Dartflutter pub add i18n_keylessSwift, iOS, macOS, VaporSwiftPM: arnaudambro/i18n-keyless-swiftKotlin, Android, Ktorio.github.arnaudambro:i18n-keyless-kotlinPython, Django, Flask, FastAPIpip install i18n-keylessGogo get github.com/arnaudambro/i18n-keyless/ports/go/v3Quick setup for each of the twelve SDKsHow translations worki18n-keyless is a library, combined with an API service, that allows you to translate your text without the need to use keys.If the translation is not found, there will be an asynchronous fetch to I18nKeyless' API to get the translation by an AI API call.This operation is made usually in dev mode, while you're coding. If you missed one, in production only the first user missing the translation will see a glitch, then it'll be available instantly to users all over the globe.View Full DocumentationApp Store & Google PlayYour store listing in every language, on every releaseEvery update means new release notes, a description and keywords \u2014 for each language, on both stores. That is what stops you from adding languages. Not the app.Release notes for every language, in one callWrite the update once. awaitForTranslation returns it in each language you sell in, and your store config feeds it to EAS or fastlane.48 languages, mapped to the App Store slotspt-BR and pt-PT are two listings; en-GB, en-AU and en-CA are three. toAppStoreLocale puts each translation in the right one.Fix a bad translation without a releaseIn the app, one override in the dashboard is live at once \u2014 no hotfix build, no store review. In the listing, re-run the push.Not priced per wordA translator charges about \u20ac0.10 a word. 2,000 strings times 10 languages is a budget a solo developer does not have. Here words are not counted.The whole recipe for an Expo app// store.config.js \u2014 EAS Metadata awaits an async config\nconst { init, awaitForTranslation, toAppStoreLocale } = require(\"i18n-keyless-node\");\n\nconst LANGS = [\"en\", \"fr\", \"de\", \"ja\", \"pt-BR\"];\nconst DESCRIPTION = \"Bibi translates your app while you sleep\u2026\";\n\nmodule.exports = async () => {\n  init({ API_KEY: process.env.I18N_KEYLESS_KEY, languages: { primary: \"en\", supported: LANGS } });\n  const info = {};\n  for (const lang of LANGS) {\n    info[toAppStoreLocale(lang)] = {\n      title: await awaitForTranslation(\"Bibi\", lang, { context: \"App Store app name, 30 characters max\" }),\n      subtitle: await awaitForTranslation(\"Keyless i18n\", lang, { context: \"App Store subtitle, 30 characters max\" }),\n      description: await awaitForTranslation(DESCRIPTION, lang, { context: \"App Store description\" }),\n    };\n  }\n  return { configVersion: 0, apple: { info } };\n};The same call writes fastlane metadata files for Google Play. Caps are advisory: put the limit in the context and check the length before you push.Try It YourselfInteractive SandboxSee how i18n-keyless works in real-timeOpen a live, editable StackBlitz project to see translations resolve as you type.Why I built this\"I always postponed i18n until my client wanted it so much that I had no choice. I hate reading the code with i18n keys inside, and I hate maintaining JSON files as much as seeing how expensive are i18n translations providers. So I had to build mine, and I FREAKING LOVE IT. All my apps are i18n by default now.\"AAArnaud AmbroselliFounder of i18n-keylessWant to add yours?A testimony against a free subscription. Request yours!Send my testimonyPricingSimple, predictable pricingOne flat price for your scale.Every feature in every plan.No per-word fees, no token math.Self-hosted \u2014 free foreverOwn it: fully free, unlimited projects, donate if you want.The same API, dashboard and MCP server, in one Docker container with SQLite, on your server, with your own AI key. Fully free, unlimited projects, no subscription, no usage cap, updates for life. If it saves you time, support it with a donation.Get started freePrefer not to run a server? We run it for you.Starter\u20ac4/ monthUp to 1,000 monthly active usersFor indie apps and new productsIndie\u20ac9/ monthUp to 5,000 monthly active usersFor apps finding their audienceGrowth\u20ac29/ monthUp to 50,000 monthly active usersFor apps with real tractionScale\u20ac99/ monthUp to 500,000 monthly active usersFor products at scaleEvery plan includes:All 48 languages. The whole world, from day oneUnlimited translations, AI included. New strings translate themselves in productionLive translation of UGC (user-generated content)Upgrade, downgrade or cancel anytimeMore than 500,000 monthly active users? Contact usWhat the same app costs somewhere elseMove the two sliders. The bill is for your app in all 48 languages.Monthly active users1,000Public list prices, read in August 2026. Vendors change them, so please check. Each bill is our reading of the published ladder, and we always take the cheapest paid plan that holds your app. When a vendor bills the first translation once, we spread it over twelve months.1 Crowdin publishes \u20ac44 a month for 60,000 hosted words on the Pro plan, billed annually. A hosted word is one word in one target language. We repeat that block price above 60,000.2 Intlayer is open source. The $29 a month buys the CMS and the AI generation quota. Above the quota you supply your own AI key, so we add the model bill at $10 for each million tokens, spread over twelve months.3 Lingo.dev publishes $99 a month plus $2 for each million tokens of infrastructure, and it passes the model bill to you. We count 1.4 tokens for each word and $10 for each million tokens of model cost. The base fee is most of this number.4 Locize publishes \u20ac7, \u20ac19 and \u20ac49 a month for 15,000, 30,000 and 60,000 words, with 1, 3 and 5 million CDN downloads. Above that it publishes $0.50 for each 1,000 extra words and $5 for each million extra downloads. We count thirty downloads for each user each month. No published plan holds 48 languages.5 Lokalise publishes $144, $375 and $999 a month, and no key limit. We assume the three plans hold 5,000, 20,000 and 100,000 keys, and twelve words for each key. Human translation is billed apart.6 Phrase publishes $525 a month for 1 million managed words on the software plan, and $1,245 for 3 million. We count one managed word for each word in each language, and we repeat the $1,245 block above 3 million.7 Smartling does not publish a platform price. We count only the AI translation, at the published $0.06 a word, spread over twelve months. Your real bill is higher.8 Tolgee bills keys, not words, so we count twelve words for each key. It publishes \u20ac49 for 2,000 keys, \u20ac179 for 5,000 and \u20ac499 for 20,000, billed annually. Above that we repeat the \u20ac499 block. Machine translation credits are counted apart.9 Weglot translates a web page, not an app. Its largest published plan is \u20ac699 a month for 20 languages, so we scale that price to 48 languages. Your words fit inside every one of these plans.Every other line grows with your product. Ours is a flat price.Before you askFrequently asked questionsDo I need to manage translation files?No. There are no JSON files, no key extraction step, and no build-time plugin. You write your sentences in your source language, the SDK sends them to the API on the first request, the API translates them with AI, and every subsequent request is served from the cache. Your code is the single source of truth.What happens when I change the source text?The source text is the key. Change it and you get a new key with a fresh AI translation. The old key simply stops being requested, and the dashboard cleans it up after 30 days without use. A typo fix is the same: fix it in the code, deploy, and the new text is translated on the first request.How much does it cost?Self-hosted: fully free, unlimited projects, no subscription and no usage cap \u2014 install the Docker image, use your own AI key. Donations are optional and keep the project alive. Hosted: one flat price per project per month, by monthly active users \u2014 \u20ac4 up to 1,000, \u20ac9 up to 5,000, \u20ac29 up to 50,000, \u20ac99 up to 500,000 \u2014 billed monthly, cancel any time. There is no per-seat, per-word, or per-string pricing on either.Can I export my translations?Yes. The dashboard has an \"Export JSON\" button that downloads every translation in your project as a single JSON file. The export includes all rows, not just the ones used in the last 30 days, so it is a full backup. There is no lock-in: your data is always one click away.One maintainer: what happens if the project stops?The SDKs are MIT and stay on npm, PyPI, RubyGems and the other registries. The server is public under the Elastic License 2.0 and the protocol between them is documented, so anyone can run it, fork it, or write a server against it. Your translations leave in one JSON export at any time. If the hosted service stopped: installed apps keep serving their cached translations, a fresh client falls back to the source language, and pointing the SDK at your own instance with API_URL restores everything. What you would lose is the AI translation of new strings on i18n-keyless.com \u2014 not your data and not your app.Read the full answer, with codeTry It YourselfWatch the DemoWatch this short video to see i18n-keyless in actionGet API Key for One AppYour whole i18n implementation in 5 minutes. iykyk."
                ],
                "output": "readability",
                "pwd": "/data/archive/1789812389.446716",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-19T10:12:32.021309+00:00",
                "status": "succeeded"
            }
        ],
        "screenshot": [],
        "singlefile": [],
        "title": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--max-time",
                    "120",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)",
                    "https://i18n-keyless.com/"
                ],
                "cmd_version": "curl 8.14.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-09-19T10:12:32.015055+00:00",
                "index_texts": null,
                "output": "The cheapest and most efficient i18n for agentic coding | i18n-keyless",
                "pwd": "/data/archive/1789812389.446716",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-19T10:12:31.982105+00:00",
                "status": "succeeded"
            }
        ],
        "wget": [
            {
                "cmd": [
                    "wget",
                    "--no-verbose",
                    "--adjust-extension",
                    "--convert-links",
                    "--force-directories",
                    "--span-hosts",
                    "--no-parent",
                    "-e",
                    "robots=off",
                    "--reject=js,mjs,woff,woff2,ttf,otf,eot,mp4,m4v,mov,webm,ogv,mkv,avi,flv",
                    "--timeout=120",
                    "--restrict-file-names=windows",
                    "--page-requisites",
                    "--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) wget/GNU Wget 1.21.3",
                    "--compression=auto",
                    "--timestamping",
                    "https://i18n-keyless.com/"
                ],
                "cmd_version": "GNU Wget 1.21.3",
                "end_ts": "2026-09-19T10:12:31.974951+00:00",
                "index_texts": null,
                "output": "i18n-keyless.com/index.html",
                "pwd": "/data/archive/1789812389.446716",
                "schema": "ArchiveResult",
                "start_ts": "2026-09-19T10:12:30.512450+00:00",
                "status": "succeeded"
            }
        ]
    },
    "icons": null,
    "is_archived": true,
    "is_static": false,
    "latest": {
        "archive_org": null,
        "dom": null,
        "favicon": "favicon.ico",
        "git": null,
        "media": null,
        "pdf": null,
        "screenshot": null,
        "singlefile": null,
        "title": "The cheapest and most efficient i18n for agentic coding | i18n-keyless",
        "warc": null,
        "wget": "i18n-keyless.com/index.html"
    },
    "link_dir": "/data/archive/1789812389.446716",
    "newest_archive_date": "2026-09-19T10:12:34.144153+00:00",
    "num_failures": 0,
    "num_outputs": 6,
    "oldest_archive_date": "2026-09-19T10:12:29.176437+00:00",
    "path": "/",
    "schema": "Link",
    "scheme": "https",
    "snapshot_id": "6d663c5d-7520-4521-8a83-aa1a9d83d605",
    "sources": [
        "/data/sources/1789812389-import.txt"
    ],
    "tags": null,
    "tags_str": "",
    "timestamp": "1789812389.446716",
    "title": "The cheapest and most efficient i18n for agentic coding | i18n-keyless",
    "updated": "2026-09-19T10:12:29.175999+00:00",
    "updated_date": "2026-09-19 10:12",
    "url": "https://i18n-keyless.com/"
}