Lerret

Your  project  is  folder  of  React  components.  Lerret  renders  it. 

No save button, no design mode, no proprietary file. Because everything is React, every LLM already knows how to edit it. The in-studio AI dock uses your own key for cloud providers, or local keyless Ollama; the /lerret command is keyless and Claude Code only.

npx create-lerret@latest my-canvas MIT licensed · v0.1 · Node ≥ 20.19

lerret studio — .lerret/social
artboard · 1500×500
variant · Dark
> .lerret/social — 2 boards
Social
Ads
Docs
Decks
OG cards
Social
Ads
Docs
Decks
OG cards

Everything falls out of two choices.

The folder is the project, and the format is React. Git-native versioning, AI-fluent editing and zero lock-in are consequences, not features.

●●● canvas
┌────┐ ┌────┐
│ A │ │ B │
└────┘ └────┘
Canvas

Pan-and-zoom artboards

Every .jsx under .lerret/ becomes an artboard on an infinite canvas. Folders map to pages and groups. Focus one board or see them all.

save →
⟳ re-render
✓ 0.4s
ready
Reload

Sub-second hot reload

Save a file and the artboard re-renders in under a second — native Vite Fast Refresh, no transpile step, no proxy in between.

export --all
page-1/*.png
page-2/*.png
✓ 24 files
Export

Headless PNG / JPG

One board, a page group, or the whole project to image — fonts embedded, foldered to mirror your pages. Headless Chromium, runs in CI.

default
export Dark
export Wide
3 variants
Variants

Named-export variants

export const Dark = … puts a second variant of the same component on the canvas. No new file, no new convention to learn.

config.json
↳ colors
↳ vars
↳ _fonts/
Config

Cascading config & assets

A per-folder config.json cascades colors, CSS vars and shared data down the tree. Drop .woff2 in _fonts/ for global type.

Lerret CLI

Run it locally, in a browser, or on your own box.

One React codebase, three ways to deliver the same canvas against the same folder. Switch freely — your .lerret/ directory contains zero Lerret code, so nothing about it is tied to how you happen to be running the studio today.
$ npx @lerret/cli dev
→ http://localhost:5173
watching .lerret/

Local Vite dev server

npx @lerret/cli@latest dev against any folder. Native Vite HMR, your daily dev loop, nothing to sign into.

Read the docs
open folder →
.lerret/ granted
rendering 24 boards

Browser, no install

The studio as a static site. Open any local folder through the File System Access API. Chromium browsers only.

Open the studio
docker build .
serve ./dist
no backend

Your own infrastructure

The same static studio, packaged for self-deployment. Private and team contexts, same renderer, no backend.

See the repo

10× your asset production

with AI-enabled design.

Every artboard is a React file an LLM was already trained on — your agent just edits it. Lerret's own AI comes two ways: the in-studio dock (your own key, or local Ollama) and the /lerret Claude Code plugin (keyless, Claude Code only).

Bring your own key OpenAI · Anthropic · Ollama Works with your agent Claude Code · Cursor · AGENTS.md
Ask Lerret to design or edit…
> re-theme the twitter banner to our brand
⟳ Looking through .lerret/social/
✎ Editing twitter-banner.jsx — headline + brand color
✎ Editing twitter-banner.jsx — background, type
✓ canvas updated · ~12.4k tokens

Northwind

Our brand assets live in the same repo as our app now. A designer opens a PR, CI exports the PNGs, done. No more final_v3 in a shared drive.

Mara Ellison · Design Engineering Lead

Basecase

The folder is the source of truth. That one decision killed an entire class of sync bugs we used to fight on every launch.

Devon Park · Staff Frontend Engineer

Foundry Labs

We wired export into CI and generate a hundred localized banners on every release. It is just React, so our agent writes the variants itself.

Priya Nair · Head of Platform

Verdant

Handing an AI a design file was hopeless. Handing it a folder of components it was trained on? It simply edits them.

Tomás Rivera · Founder

Honest about scope.

Not a Figma replacement

Figma is a vector design tool with a proprietary file and a collaborative cursor culture. Lerret is a rendering canvas for code. Different category.

Not a no-code tool

Every asset is a React component. If you do not write React, Lerret will not be your day-one tool — and it is not trying to be.

Not a hosted SaaS

There is no backend. Hosted mode is a static site that talks to your local filesystem through the browser. Your files never leave the machine.

Open source, MIT licensed. No account, no backend.

Ready to make your folder a canvas?

One command scaffolds a project and the studio opens in your browser. If Lerret disappeared tomorrow you would still have a working set of React components.

npm @lerret/cli CLI — dev + export, bundles the studio npm @lerret/core Engine — loader, watcher, config cascade npm create-lerret Scaffolder — npx create-lerret@latest