A quiet UI framework for back-office apps. Semantic HTML,
data-* attributes and a little vanilla JS, with 53
components, Lucide icons and country flags, and no runtime
dependencies.
Reach for dialog, popover,
details and button first. A small
vanilla script adds only what HTML cannot: theme, tabs,
select, tree, table, journey and a few more.
Zero specificity
Every selector sits in @layer components and
:where(), so your CSS overrides it right away.
Light / Dark
Themes switch through CSS custom properties, following the
system or the user's choice, with no flash on load.
Thai + Latin
One self-hosted woff2 Google Sans for both Thai and Latin.
Table numbers use tabular-nums.
ภาษาไทยกับ Latin ในบรรทัดเดียวกัน 1,234.50
Install
Load the files from jsDelivr, which serves each release tag of
the GitHub repository. Load the script in
<head> as a plain script, not
type="module": it then applies the saved theme before
the first paint, so there is no flash and no inline script to add.
The fonts and flags load from the same tag, next to
dist/. The libraries some components need come from
the same place, for example
@v0.1.1/dist/chart.min.js, loaded before the
Tsunami script. The code editor is the exception: Monaco starts
web workers, which a browser only runs from the page's own
origin, so host dist/monaco/ yourself.
To host the files yourself, copy dist/,
fonts/ and flags/ side by side and link
dist/tsunami.min.css and
dist/tsunami.min.js.