Skip to content

Start

What is Verbaly?

Verbaly is an open-source i18n toolkit that inverts the usual flow: you write natural text in your code and the compiler extracts the messages, generates stable keys, TypeScript types and per-locale bundles. It ships the core verbaly runtime (~3 KB, zero dependencies) plus framework packages for @verbaly/react, @verbaly/vue, @verbaly/svelte and build plugins for Vite and every major bundler.

The whole write→ship cycle lives in one tool: init, live extraction, machine and human translation, a CI gate that fails on missing or broken translations while every build lists them, and a static renderer that ships pages already translated. Catalogs are plain JSON: no proprietary format, portable to any TMS.

What it looks like

You write the sentence, in the language you think in. No key, no catalog, no init() call.

src/app.ts
import { t } from 'virtual:verbaly';

t`Hello ${name}, you have ${count} messages`;

The compiler reads that and writes the rest: a key derived from the text itself, and your source catalog filled in. Every other language waits with an empty string that verbaly check will not let you ship.

locales/en.json + locales/es.json
// en.json, generated from your source
{ "usNGUet6": "Hello {name}, you have {count} messages" }

// es.json, waiting: an empty string is a missing translation
{ "usNGUet6": "" }

Why Verbaly?

Every i18n library translates text. The difference is how much work it leaves on your desk. Verbaly's answer: as little as possible.

Type-safe for realThe message itself declares its parameters. Forget one, or rename it, and TypeScript stops you before any user sees it.
Nothing missing goes unseenEvery build lists a missing translation with the exact key to fill, and the check in your CI stops it there.
Too small to noticeThe runtime is 3.31 KB with zero dependencies, each language loads only when someone uses it, and a pre-rendered page can ship just the messages it shows.
The whole cycle in one toolExtract, machine-translate, hand files to human translators, verify in CI and pre-render static pages: everything ships in the same box.
No framework neededPlain HTML works too: mark elements with data-verbaly and the DOM interpreter fills them, re-renders on a language switch and picks up nodes added later.
Your agent can run itAn MCP server exposes the whole cycle as tools, so a coding agent sets up, extracts, translates and reads your messages without you relaying commands.

Verbaly is pre-1.0, so the API can still change between minor versions (every change is called out in the changelog). And if what you need is a huge plugin ecosystem, i18next has years of it. What Verbaly offers is the same job with far less machinery, and an honest comparison to check it.

↑↓to moveEnterto open
Copied to clipboard