Launched this week
Themery
Build beautiful themes for your IDE
71 followers
Build beautiful themes for your IDE
71 followers
Build beautiful IDE color themes with AI. Fine-tune colors, syntax highlighting, and typography. Export to VS Code, Cursor, JetBrains, Neovim, Helix, Zed, and more.










Themery
Hey Product Hunt π
I'm Tiago. A few years ago I published a VS Code theme on the marketplace. I made it for myself, dark, neon, unapologetic, and figured a handful of CTF nerds might install it. It's now past 225,000 downloads.
That experience taught me more about editor themes than I ever expected to learn. A few things I didn't see coming:
People use your theme for 8 hours a day.
Every unreadable comment, every low-contrast parameter, every token you forgot to style, they all become a GitHub issue within a week. You learn fast.
"Looks cool in a screenshot" and "holds up in a real codebase" are different products.
My first version photographed beautifully and was exhausting to actually work in. I rebuilt it twice.
Every editor is its own country.
Porting HTB to JetBrains was a month of work. Zed was another week. Neovim had its own semantic token model. I kept shipping inconsistent versions across editors because syncing them by hand was miserable.
Accessibility isn't optional at scale.
Once you're past ~10k installs, every mistake is affecting real humans with real eyes on real monitors. I started measuring contrast after users told me comments were invisible on their laptops, and I found my own theme was failing WCAG AA in places. Humbling.
Themery is the tool I wish I'd had when I shipped HTB.
Describe a vibe, get a theme. Tell it "warm terminal amber, late-night, low eye strain" and it generates a full palette for you. Or bring your own colors, either way, every token lands on a contrast tier (critical, structural, semantic, contextual, ambient) with an enforced floor, validated against both WCAG 2.1 and APCA (the perceptual contrast model that's actually accurate for text on screens). One source of truth compiles to VS Code, Cursor, Windsurf, JetBrains, Zed, Neovim, and every major terminal, all at once, all consistent, all actually legible.
It's the answer to every issue I ever got on Hack The Box, crystallized into a tool so the next generation of theme designers doesn't have to learn it the hard way.
Free for everyone, forever:
- AI theme generation (unlimited)
- VS Code export
- Terminal exports, Alacritty, Kitty, Warp, iTerm2, Windows Terminal
Pro, one-time $4.99, lifetime:
- All other IDEs (Cursor, Windsurf, JetBrains, Zed, Neovim)
- Dark + Light export together
- Animations export
- All 13 icon libraries + color overrides
- APCA auto-fix to AAA
- AI-generated Marketplace README
- Procedural SVG extension icon
- One-click Marketplace publish
- Cloud-saved themes (no expiry)
No subscription. Pay once, own it.
To celebrate the launch, use THEMERY60 at checkout for 60% off for the first 1000 users
I'll be in the comments all day. Would especially love feedback from anyone shipping a theme of their own, you know exactly what this is for.
- Tiago
@silofyΒ What's one accessibility tweak from your learnings that theme makers skip but users notice most?
Themery
@swati_paliwalΒ
Honestly? Comments being too bright.
Most theme makers push comments to WCAG 4.5:1 so they "pass" β but code isn't prose. Comments should be recessive.
When they sit at the same visual weight as code, the file looks noisy and reading gets tiring fast. Users can't always articulate why a theme feels "busy after an hour" β this is usually the culprit.
What we settled on: tier-based APCA targets instead of one WCAG number.
Critical (errors, warnings): Lc 75+ β must pop
Structural (keywords, types): Lc 65
Semantic (strings, functions): Lc 60
Contextual (params, properties): Lc 50
Ambient (comments, punctuation, line numbers): Lc 38 β deliberately low
APCA matters because WCAG 2.x was designed for body text on websites and misleads you on dark backgrounds with short tokens. Plenty of "AA-passing" themes still feel exhausting because the ambient layer is too loud.
Side effect once we nailed it: selection, line-highlight, and cursor stopped getting drowned out. People don't say "your comments are the right dimness" β they say "I don't know why, but this one doesn't tire my eyes." That's the tell.
Hello Aria
The theme ecosystem has been stuck for years β everyone's running the same 5 themes (Dracula, Tokyo Night, One Dark) because building a good one from scratch is genuinely hard. Love that this unlocks personalization without the tedium.
Curious: does it handle semantic highlighting differences across languages, or is it purely token-based? Rust's borrow checker + Python's f-strings behave very differently and most themes fall apart on one or the other.
Great space to be in π rooting for you!
Themery
@sai_tharun_kakiralaΒ
Thanks β and great question, this is the one most generators dodge.
Short answer: both, and it matters. I compile two parallel layers:
TextMate scopes (tokenColors) β the classic grammar-based layer. Scope patterns are written per-language where they need to be, e.g. keyword.other.fn.rust, keyword.other.unsafe.rust, storage.type.function.python, keyword.operator.wordlike.python. So unsafe in Rust and from/import in Python get assigned to the roles that actually make visual sense, not the generic keyword bucket.
Semantic tokens (semanticTokenColors) β the LSP-driven layer VS Code overlays on top when rust-analyzer / pylsp/ Pyright provides them. We map the LSP token types (type, enumMember, parameter, property.declaration, variable.readonly β constant, method.defaultLibrary β call, etc.) to the same 30-role vocabulary, so the TextMate fallback and the semantic overlay stay visually coherent when the LSP kicks in mid-file.
Where it genuinely gets hard:
Rust lifetimes + borrows β rust-analyzer emits modifiers (&lifetime, mutable) rather than distinct token types, so you get consistency but not a separate color for &mut vs &. Doable, but a conscious scope decision β most people don't actually want lifetimes screaming off the page.
Python f-strings β the tricky part isn't the f-string itself, it's the interpolation boundary. I treat string and string.interpolation as analogous hues (55Β° and 50Β°) rather than clashing ones, specifically so f-strings don't flicker between two competing colors inside one literal. Same treatment we apply to JSX tags + function calls.
Honest caveat: any theme that claims "works perfectly across every language" is lying β the ceiling is set by each LSP's semantic token quality. Go and Rust are great. Python is good. Shell and older grammars still lean heavily on the TextMate layer. We try to make both layers agree so you don't notice the seam.
Appreciate the kind words π
D u plan to support for Xcode?
Themery
@zabbarΒ
Thanks for asking β Xcode is definitely on our radar.
Short answer: yes, planned, but not in the immediate next batch. Xcode themes use a fixed set of ~30 syntax categories (narrower than VS Code's TextMate scopes), so the compiler itself is a ~1β2 day build β the real work is tuning the role mapping against real Swift/SwiftUI/ObjC files so it feels right, not just renders.
Quick question back at you, Zabbar: what feels lacking in the Xcode themes you use today? Is it the palette itself (too few colors, not enough contrast between identifier kinds), missing distinctions you wish existed (e.g. separating protocols from classes, or property wrappers, or SwiftUI modifiers), or is it more on the chrome side: console, debugger, gutter, selection? Anything specific you'd want called out that Xcode-stock themes flatten into one color would really help me prioritize the mapping.
If you're up for it, drop me a line at hello@tiago.gg with a screenshot or two of code you work on β concrete examples beat a spec every time. For reference, current exports: VS Code, JetBrains, Neovim, Vim, Zed, Helix, Sublime, Cursor, Kiro, Windsurf + terminals.
Wait, does this actually export to Neovim too? Most of these "theme generators" only spit out VS Code JSON and call it a day. If the Neovim output is real Lua I'm buying today!
Great project, Peter! Now I'll have more variety to choose from and customize. It always happens to me that I don't like some of the colors in the color palette.