Markdown that renders 5× faster.
Intlayer ships its own Markdown engine. No dependency, MDX included, parsed on the server, and rendered natively in React, Next.js, Vue, Svelte, Solid, Preact and Angular. You never have to pick a renderer again.
When the locale front-matter field is omitted, Intlayer uses your configured default locale. You can maintain your entire content in a single markdown file without locale identifiers.
content └── markdown-file.content.md
The locale front-matter field defines the locale of the content. It is optional. If not provided, Intlayer will use the default locale, which is also used as fallback locale if no translation is available for a specific locale.
content ├── markdown-file.en.content.md ├── markdown-file.fr.content.md └── markdown-file.es.content.md
Declare Markdown directly inside a TypeScript, ESM, or JSON dictionary using the md() and file() functions, pairing translations with full type safety.
content ├── article.content.ts ├── article.en.md └── article.fr.md
5× the throughput of markdown-to-jsx
The parser was rewritten around a cached rule precedence and an incremental lookbehind, so a document is walked once instead of being re-scanned rule by rule. Same Markdown, same output, a fraction of the work.
Relative parse and render throughput, higher is better.
shipped when your app declares no Markdown node — the renderer is purged at build time.
lazily fetched parser chunk, loaded behind Suspense so it never blocks the first paint.
runtime dependencies — nothing to audit, nothing to keep in sync.
One engine instead of a shopping list
Every project ends with the same chore: weigh markdown-to-jsx against marked, remark and MDX, wire the winner in, then discover it does not do MDX, that its types are loose, or that its plugin chain breaks on the client. Intlayer makes that choice for you.
- remark and rehype can do most of it, but through a plugin chain you assemble yourself — and one that does not always behave the same in the browser as on the server.
- markdown-to-jsx renders React only, and marked hands you an HTML string. For Vue, Svelte, Solid or Angular there is no equivalent to reach for.
- None of them hands you typed frontmatter: you stack a content layer on top, or parse the metadata yourself.
The same node, in every framework
A Markdown node is turned into the native output of the framework it lands in — JSX, a VNode, or an HTML string. Svelte, Solid and Angular are first-class, not afterthoughts.
Parse on the server, render on the client
Parsing and rendering are two separate steps. parseMarkdown produces a serialisable AST on the server, the browser receives it as JSON, and every renderer accepts it as-is — so the document is never walked twice.
Set it once, refine it per node
Declare your components on the provider and every Markdown node in the app picks them up. When one node needs to differ, use() overrides only that node — no plugin chain, no separate build step.
use() wins over the provider, the provider wins over the default renderer.
Typed frontmatter, no content layer
The frontmatter of a Markdown file is parsed with the document and exposed on the node as a typed metadata object. The editorial fields you used to reach for a content layer for are simply there, autocompleted.
html() nodes go through the same pipeline: tags are mapped to your own components, with the same typing and the same override rules.
Type-safe translations that live in your repo.
Declare content alongside your components in TypeScript or JavaScript. Intlayer generates types automatically, giving you autocompletion, validation, and instant feedback. No more missing keys, context switching, or broken implementations.
Automate translations from your terminal.
The CLI to audit, fill, and translate JSON & Markdown with AI.
Run `npx intlayer fill` to detect missing keys and generate translations using OpenAI, Claude, or local models. Keep your Git history clean and your types safe.
Stop paying per word. Automate with AI.
The open-source & self-hosted alternative to Crowdin & Lokalise. Built for modern developer workflows.
Manage translations directly in your code or via the visual editor. Leverage AI to translate instantly. Collaborate with your team without seat limits.
Bridge your local code with remote content.
Manage multilingual content with zero overhead. Intlayer allows you to interconnect local dictionaries with remote management, enabling Live Sync for hot updates without rebuilding. Use webhooks for CI/CD, manage feature flags, and let the Auto-Translation AI (WIP) handle the rest.
Toggle features instantly. No deploy required.
Intlayer dictionaries are more than just text. Use them to declare logic, styles, and configuration objects. With Live Sync, you can toggle features on or off, change UI themes, and update app behavior in real-time directly from the CMS.
Your Playground for Product Experiments.
Be the first to explore Intlayer's new AI-driven A/B Testing beta, built to boost discoverability and guide smarter product decisions. Test anything in real time, from copy and design to entire features, and let the data show you what truly works.
Built by the Community
Meet the amazing contributors who make Intlayer possible
Stop choosing a Markdown renderer
It is already in Intlayer: dependency free, MDX capable, SSR ready, typed end to end, and gone from your bundle when you do not use it.