A polished, self-contained visual theme builder for creating and exporting color themes across multiple formats.
Live app: https://themecreator.netlify.app
- Visual light and dark theme editor
- Built-in palette presets, including an OpenClaw-inspired default
- Save custom palette presets locally in your browser
- Native color pickers plus manual CSS color inputs
- Collapsible surface color controls
- Sticky live preview with:
- sidebar/navigation
- message cards
- buttons and badges
- input bar
- destructive and success states
- link visibility preview
- syntax highlighting preview
- Import existing theme JSON by paste or file upload
- Export to multiple formats:
- App Theme JSON
- VS Code Theme JSON
- CSS Variables
- Design Tokens JSON
No build step is required.
Open index.html or theme-creator.html directly in your browser.
open index.htmlindex.html— main app entry pointtheme-creator.html— standalone copy of the appAGENT.MD— project notes for AI-assisted development
Palette presets change the full UI color palette for light mode, dark mode, the active editor tab, or both modes. Shiki themes are separate and only affect the syntax-highlighted code preview/export metadata.
Current built-in presets include:
- Default Violet
- OpenClaw Default
- Woodsmoke
Custom presets are saved to localStorage in the current browser.
Exports the app-style theme schema with metadata, supported modes, Shiki theme names, light colors, and optional dark colors.
Exports a single-mode VS Code theme based on the currently selected preview mode.
Exports :root variables for light mode and [data-theme="dark"] variables when dark mode is enabled.
Exports a portable design-token structure for use in design systems or custom build pipelines.
Theme Creator is intentionally dependency-free:
- no CDN dependencies
- no package install
- no network requests
- all CSS and JavaScript inline
After editing, you can validate the inline JavaScript with:
python3 - <<'PY'
from pathlib import Path
s = Path('index.html').read_text()
start = s.index('<script>') + len('<script>')
end = s.index('</script>', start)
Path('/tmp/theme-creator-script.js').write_text(s[start:end])
PY
node --check /tmp/theme-creator-script.jsMIT