Resend Studio
Public Made by Adomby adom
A local editor for Resend email templates: paste your API key, then edit, preview, lint, test-send, and publish templates without Resend's dashboard. Also imports SendGrid dynamic templates and converts their Handlebars to Resend's variable syntax.
| Name | Last updated |
|---|---|
| dev-skills | 11d ago |
| docs | 11d ago |
| screenshots | 11d ago |
| src | 11d ago |
| ui | 11d ago |
| .gitignore | 11d ago |
| Cargo.lock | 11d ago |
| Cargo.toml | 11d ago |
| install.sh | 11d ago |
| package.json | 11d ago |
| page.json | 11d ago |
| README.md | 11d ago |
| SKILL.md | 11d ago |
| uninstall.sh | 11d ago |
| VERSION | 11d ago |
Resend Studio
A local editor for Resend email templates, for people who would rather not live in Resend's dashboard. Paste your Resend API key, and edit, preview, lint, test, and publish your templates from a fast local UI. It can also move your templates over from SendGrid.
Runs on your machine. Your API key is stored locally and only ever sent to Resend.

What it does
- Lists your Resend templates next to your local drafts, with published, unpublished, and local-only state at a glance.
- Edits everything Resend stores: name, alias, subject, sender, reply-to, HTML, and the variable schema (key, type, fallback), with a live preview substituted exactly the way Resend does it, at desktop and phone widths.
- Lints as you type against Resend's rules: leftover Handlebars blocks
(
{{#if}}) and double-brace variables that would go out as literal text, undeclared or reserved variables, missing fallbacks, the 50-variable limit. - Never changes live email by accident. Save keeps a local draft. Upload sends it to Resend's draft. Publish is separate and asks you to type the alias.
- Test sends: send the unpublished draft (rendered locally with your sample values) or the published version through Resend's own template engine.
- Imports from SendGrid (read-only): converts
{{var}}to{{{var}}}, and for each{{#if}}block lets you split it into two templates, always show it (with a fallback), or drop it, since Resend has no conditionals.

Install
Linux (x86_64): download the binary. It is a single static file with no dependencies; it runs on any x86_64 Linux distribution.
curl -fL -o adom-resend-studio "https://wiki.adom.inc/download/adom/adom-resend-studio/latest?platform=linux"
chmod +x adom-resend-studio
./adom-resend-studio serve # then open http://127.0.0.1:8894
With the Adom Wiki CLI (also installs the AI skill):
adom-wiki pkg install adom/adom-resend-studio
On x86_64 Linux this uses the same prebuilt binary. Elsewhere it builds from
source, which needs a Rust toolchain (cargo).
Use
adom-resend-studio serve # then open http://127.0.0.1:8894
adom-resend-studio serve --open-tab # inside Adom Hydrogen: opens it in a tab
On first run the studio opens Settings. Paste a Resend API key from resend.com/api-keys:
- Full access lets the studio list, upload, and publish templates.
- Sending access only allows test sends. The studio tells you which one you pasted.
Also set a default From address on a domain you verified in Resend.

Two things worth knowing about Resend templates
- Variables are not HTML-escaped. Resend inserts
{{{var}}}values as raw HTML. If a value comes from a user (a name, a comment), escape it in your sending code, or someone can put links or markup into your email. - The same value goes into the subject. Escape a value for the body and the
subject shows
&. Build the subject from the raw values in your sender and pass it assubject, which overrides the template's.
Where things live
| What | Where |
|---|---|
| Settings (keys, sender defaults) | ~/.local/share/adom-resend-studio/settings.json, owner-only |
| Local drafts | ~/.local/share/adom-resend-studio/resend-studio.db (SQLite) |
| Override the folder | RESEND_STUDIO_HOME |
Environment variables win over Settings when set: RESEND_API_KEY,
SENDGRID_API_KEY, RESEND_STUDIO_FROM, RESEND_STUDIO_REPLY_TO,
RESEND_STUDIO_TEST_TO.
The server listens on 127.0.0.1 only and accepts requests from its own page only.
To reach it through another hostname (a reverse proxy), list it in
RESEND_STUDIO_ALLOWED_HOSTS.
See SKILL.md for the HTTP API an AI agent can drive.