Build a theme for the stream toolset and submit it to the catalog.
A theme customizes the look of one or more widgets — chat box, death counter, music player, and others as they expose their settings. It is field overrides (the same settings the tool page exposes) plus optional scoped CSS. Themes are data and CSS only: no JavaScript, no external assets, no commerce. Accepted themes are free to every toolset user.
This repo is both the SDK (how to build a theme) and the submission inbox
(where you open a pull request). If your theme is accepted it shows up in
the in-app Themes catalog at toolset.deutschmark.online/tools/themes.
Two formats. Pick the one that matches what you're styling:
-
Theme pack (v2,
kind: "theme-pack") — styles multiple widgets at once with a shared palette. One click in the toolset applies it across the streamer's music, chat, death counter, etc. all in matching colors. Best for "all-encompassing" looks. Defined inschema/theme-pack.schema.json; example atexamples/my-first-pack/. -
Widget theme (v1,
kind: "widget-theme") — styles one widget surface. Best when you want to nail a specific look on a specific tool. Defined inschema/widget-theme.schema.json; example atexamples/my-first-theme/.
Both formats live in the catalog side-by-side. The toolset's apply UX is the same shape for both — a multi-source checkbox modal.
- Fork this repo.
- Copy
examples/my-first-pack/(v2) orexamples/my-first-theme/(v1) tosubmissions/<your-handle>/<theme-slug>/. - Edit
theme.json— setname,author,description, and thefieldsyou want to override per widget. Keepfieldsto keys the widget actually exposes (seedocs/fields-overview.md). - Replace the preview PNGs. Hero is 16:9, ≤ 512 KB. One preview per widget the theme covers.
- Open a pull request. Read
CONTRIBUTING.mdfirst — it covers the quality bar and the rules.
- No AI-generated submissions. Visuals, CSS, or copy generated by AI tools are rejected without appeal. You attest to this in the PR.
- No commerce. No paid themes, tiers, or buy buttons. Accepted themes are free to everyone.
- No JavaScript. Themes are field values and CSS. No
.jsfiles, no<script>tags, no inline handlers. - Hand-curated. A person reviews every PR. There is no SLA — we read every submission, but we don't promise a turnaround time.
README.md
LICENSE
CONTRIBUTING.md
.github/
pull_request_template.md
workflows/validate.yml submission CI (schema + CSS + asset checks)
docs/
concepts.md what makes a good theme
fields-overview.md how field overrides work
widget-themes.md the WidgetTheme format
css-selectors.md the CSS selector contract themes can rely on
review-criteria.md the quality bar, written plainly
schema/
widget-theme.schema.json (v1)
theme-pack.schema.json (v2)
examples/
my-first-theme/ a minimal working v1 chat-box theme
my-first-pack/ a minimal working v2 multi-widget pack
scripts/
validate-submission.mjs what CI runs — also runs locally
tools/
preview-harness/ tiny local server to preview a theme as you build it
submissions/ you add your theme directory here
If you came here from the toolset, note that Themes (this repo) are distinct from Accents — the supporter dashboard skins (Silver, Gold, Nyan Cat) inside the app. Accents are internal and not community-submittable. Themes are open to anyone and apply to your widgets, not the dashboard.
Contributed themes are licensed under Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0).
Statement of intent (how the licensor reads and applies this license):
- Accepted themes are free to every toolset user, always.
- You may use a theme on your own stream, including a stream you monetize through ads, subscriptions, or donations. That is not "commercial use" of the theme and is explicitly permitted.
- What is not permitted: reselling or redistributing a contributed theme itself as a standalone commercial product or paid pack.
- Attribution lives in this repository and in the in-app catalog metadata — keep author credit intact when redistributing.
This statement expresses the licensor's intent and will not be enforced
against streamers for monetizing their own broadcasts. Where it is silent,
the CC BY-NC 4.0 legal text in LICENSE governs.