Ready-made themes for saya, the chat web client. Each theme is one JSON file that saya checks with the same rules it applies to a theme you paste in.
Fan-made, unofficial, non-commercial. These themes are not affiliated with the creators or official rights holders. 「ちいかわ」 © nagano / chiikawa committee. The pictures inside the
-imgthemes belong to their rights holders; see Notice.
Every character has four files under themes/<id>/: light and dark, each with colours only and with pictures (-img: wallpaper, room list pattern, mascot, badge and loading picture). The app gallery shows the two pictured ones.
| Character | Folder | Light | Dark |
|---|---|---|---|
| Usagi | themes/usagi |
preview | preview |
| Hachiware | themes/hachiware |
preview | preview |
| Chiikawa | themes/chiikawa |
preview | preview |
| Momonga | themes/momonga |
preview | preview |
| Kurimanju | themes/kurimanju |
preview | preview |
| Yoroi-san (the armored caretaker) | themes/yoroi |
preview | preview |
| Muchauman (the yogurt hero) | themes/yusangyun |
preview | preview |
| Shisa (the ramen-shop helper) | themes/shisa |
preview | preview |
| Halloween (October 1–November 7, 2026, KST) | themes/halloween |
preview | preview |
| Christmas (November 20–December 26, 2026, KST) | themes/christmas |
preview | preview |
| Winter (December 1, 2026–February 28, 2027, KST) | themes/winter |
preview | preview |
| OmO (the official OmO mascot) | themes/omo |
preview | preview |
| Jabdori (used with the creator's permission) | themes/jabdori |
preview | preview |
| Croissant Mouse | themes/croissant-mouse |
preview | preview |
| Nagano Bear (Damgom) | themes/nagano-bear |
preview | preview |
| Rakko (sea otter) | themes/rakko |
preview | preview |
| Omonyang (the OmO cat face from the Omonyang profile) | themes/omonyang |
preview | preview |
| Siren (from the Chiikawa movie) | themes/siren |
preview | preview |
| Furuhonya (the used-bookstore owner) | themes/furuhonya |
preview | preview |
| Shimajiro (the island diner owner, from the movie) | themes/shimajiro |
preview | preview |
Previews use made-up rooms and messages.
Seasonal gallery entries may have optional from and until dates in yyyy-MM-dd format. Both dates are inclusive, using Korea Standard Time (KST). A missing bound is open-ended; without either field, the entry is available all year. Clients that support seasonal filtering hide entries outside the period or with malformed dates. CI rejects invalid calendar dates and reversed periods.
Open the theme button (the half-circle icon at the top of the room list) and scroll to Theme gallery (테마 모음). Pressing a card downloads that theme, saves it next to your own themes and applies it. Pressing it again replaces the saved copy. If the download fails, nothing changes and the sheet tells you to try again.
saya reads the list from https://heoooooon.github.io/saya-themes/gallery.json by default. A deployment can point it elsewhere with VITE_THEME_GALLERY_URL at build time, and its Content-Security-Policy must allow that origin in connect-src.
- Open a file under
themes/, view it raw and copy all of it. - In saya: theme button → Make a theme (테마 만들기) → paste into Paste a theme (테마 붙여넣기) → Check (확인).
- Look at the preview and press Save and apply (저장하고 적용).
A saya without picture support ignores images and applies the colours only.
-
Put four files in
themes/<id>/:<id>-light.json,<id>-dark.json(colours only),<id>-light-img.json,<id>-dark-img.json(with pictures). The format is saya's theme JSON (docs/THEMES.mdin saya). -
Add one line for the character to
gallery.json. Copyname,modeandcolorsfrom the pictured file (colorsistokens.wall,tokens.bubbleSelf,tokens.accent,tokens.text, in that order).pathis relative to this repository:{ "id": "<id>", "name": "<character>", "themes": [{ "mode": "light", "name": "<name>", "colors": ["<wall>", "<bubbleSelf>", "<accent>", "<text>"], "path": "themes/<id>/<id>-light-img.json" }, { "mode": "dark", "...": "..." }] } -
Add the character and its sources to SOURCES.md.
-
Run
bun scripts/build-previews.ts: it drawspreviews/cards/<id>-<mode>.svgfrom each theme's colours and mascot and writespreviewon its gallery line, which saya shows as the card's picture (the check requirespreviewto be an existing SVG underpreviews/cards/). -
Run
bun installandbun scripts/validate.ts, then open a pull request. CI runs the same check.
The check rejects a theme saya would reject, any contrast warning, any field saya would ignore, a gallery line whose name, mode or colours differ from its file, a missing file, and a pictured file that no gallery line points at. The rules are an unmodified copy of saya's (vendor/saya, source commit in vendor/saya/SOURCE.md).
Only add pictures you may share for free, non-commercial use, and name where they came from.
- These themes are fan-made, unofficial and non-commercial. They are not affiliated with, endorsed by or sponsored by the creators or rights holders.
- 「ちいかわ」 © nagano / chiikawa committee. All pictures in the
-imgthemes belong to their rights holders. - Sources: official LINE STORE sticker previews (packs 25264193, 29118925, 32411274, 32367501, 32855985, 32855981, 33799640), product pictures from the official shop chiikawamarket.jp, and frames from the TV anime episodes 138 and 175. Per-file details are in SOURCES.md.
- Takedown: if you hold rights to any of this material and want it removed, open an issue in this repository. It will be removed right away, without discussion.
The code, the schema copy and the JSON structure are under the MIT License. The pictures are not: they belong to their rights holders and are not licensed by this repository.
