A developer's TUI suite for Textual — themes, widgets, modals, icons, and the design system behind ltui, jtui, and sctui
Project description
🍚 ricekit
A developer's TUI suite for Textual.
The themes, widgets, modals, icons, and design rules extracted from building ltui — and now powering its whole family (jtui, sctui, same repo) — everything a fast, clean, rice-friendly terminal app needs, minus the app.
what's in the box
| module | contents |
|---|---|
ricekit.themes |
five themes — mocha, OLED-black void, monochrome onyx, clear (transparent: your terminal's blur shows through), system (your terminal's own ANSI palette) — all sharing one $kit-* CSS variable contract, with the scrollbar/selection fixes baked in |
ricekit.palette |
swappable chrome palette (palette.text, .dim, .blue, …) that flips to terminal ANSI colors under the system theme |
ricekit.app |
KitApp — registers the themes, flips ansi_color for transparent themes, injects CSS variables, replaces the palette's theme command with a live-preview picker |
ricekit.widgets |
NavList (vim keys, quiet cursor), Splitter (drag-to-resize with persistence hook, double-click reset), KitScroll, pop_in (the one sanctioned animation) |
ricekit.modals |
PickerModal (generic chooser), ThemeModal (restyles the app live as you scroll), HelpModal (keybinding cheatsheet from plain data) |
ricekit.icons |
curated nerd-font icons as \uXXXX escapes + unicode state glyphs (◌ ○ ◐ ◑ ● ⊘) + mini bar gauges |
ricekit.fx |
text effects — the letter wave (Wave + wave_markup: Gheat → gHeat → …) and braille spinner frames, driven by one cheap shared ticker |
ricekit.storage |
AppDirs — XDG state/cache/config with merge-on-save state and chmod-600 secrets |
DESIGN.md |
the philosophy: cache-first speed, shape language, color roles, motion rules — and the appendix of Textual sharp edges that each cost a day to find |
see it
uv tool install git+https://github.com/Gheat1/ricekit
ricekit-gallery
The gallery demos the palette, icons, glyphs, widgets, and modals — cycle
themes with t, live-preview every Textual theme with ctrl+p, drag the
divider, press ?.
use it
uv add git+https://github.com/Gheat1/ricekit # or pip install git+…
from textual.binding import Binding
from textual.widgets import Footer
from ricekit import KitApp, icons, palette
from ricekit.storage import AppDirs
from ricekit.widgets import NavList
DIRS = AppDirs("myapp")
class MyApp(KitApp):
BINDINGS = [Binding("t", "cycle_kit_theme", "theme")]
CSS = """
NavList { border: round $kit-border; }
NavList:focus { border: round $kit-border-focus; }
"""
def compose(self):
yield NavList(id="items")
yield Footer()
def on_mount(self):
self.init_kit(theme=DIRS.load_state().get("theme"))
def on_kit_theme_changed(self):
if not self.kit_theme_previewing:
DIRS.save_state({"theme": self.theme})
That's a themed, transparent-capable, live-previewing app in ~25 lines.
Read DESIGN.md before building anything serious — especially
the sharp-edges table.
the suite
- the tracker TUI suite — ltui (Linear), jtui (Jira), sctui (Shortcut); where all of this came from, now backed by Pantheon
- NaviTui — an animated terminal player for Navidrome, cover art and all
- yours next?
license
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ricekit-0.2.0.tar.gz.
File metadata
- Download URL: ricekit-0.2.0.tar.gz
- Upload date:
- Size: 16.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a9670b25e18d0788f76fcf5f4f6423a50f9b3fe4e3450917cec5eeda745e38e8
|
|
| MD5 |
3190a75d56e93e83529da62775c3607a
|
|
| BLAKE2b-256 |
c17fa1550c448085943542f5ca86f4acefb3e14c36f2b1525b60fdf340ca40f6
|
Provenance
The following attestation bundles were made for ricekit-0.2.0.tar.gz:
Publisher:
publish.yml on Gheat1/ricekit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ricekit-0.2.0.tar.gz -
Subject digest:
a9670b25e18d0788f76fcf5f4f6423a50f9b3fe4e3450917cec5eeda745e38e8 - Sigstore transparency entry: 2203499850
- Sigstore integration time:
-
Permalink:
Gheat1/ricekit@94dd9e6b68515d6b77c71d27049d892599a38b37 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/Gheat1
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@94dd9e6b68515d6b77c71d27049d892599a38b37 -
Trigger Event:
release
-
Statement type:
File details
Details for the file ricekit-0.2.0-py3-none-any.whl.
File metadata
- Download URL: ricekit-0.2.0-py3-none-any.whl
- Upload date:
- Size: 18.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e0fb551bd69d6fc44b800a1ce82f4f5eb53cc68e3f44beaaf0b0816bdc5c09a6
|
|
| MD5 |
3f2151ee66dc639a670442af3df5be5e
|
|
| BLAKE2b-256 |
e206255a4272be351beb3ca4c575bffecd48efb160005abe9638117dbcc88f02
|
Provenance
The following attestation bundles were made for ricekit-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on Gheat1/ricekit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ricekit-0.2.0-py3-none-any.whl -
Subject digest:
e0fb551bd69d6fc44b800a1ce82f4f5eb53cc68e3f44beaaf0b0816bdc5c09a6 - Sigstore transparency entry: 2203499869
- Sigstore integration time:
-
Permalink:
Gheat1/ricekit@94dd9e6b68515d6b77c71d27049d892599a38b37 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/Gheat1
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@94dd9e6b68515d6b77c71d27049d892599a38b37 -
Trigger Event:
release
-
Statement type: