Shared, publishable UI packages — Nyuchi's implementation of the Mzizi architecture, consumed by the marketing and documentation sites.
Packages: @nyuchi/ui · @bundu/ui | Architecture: mzizi.dev
A pnpm workspace holding the UI packages Nyuchi
publishes to npm. Both packages implement the Mzizi
architecture — an open-architecture project of the Bundu Foundation, operated
and developed by Nyuchi — but the packages themselves are Nyuchi-owned
implementations, not Mzizi itself. Mzizi's own registry lives at
mzizi-dev/mzizi-registry.
| Package | Framework | What it is |
|---|---|---|
@nyuchi/ui |
Svelte 5/SvelteKit | The app-UI layer for Nyuchi apps |
@bundu/ui |
Astro + React | The marketing UI kit behind the bundu, nyuchi and mukoko marketing sites |
Both packages ship byte-identical styles/tokens.css, styles/theme.css,
tokens.json, tailwind-palette.mjs and styles/brand-*.css. They are two outputs of
one generator, not two hand-maintained files.
All 21 Mzizi colour families (7 minerals, 7 heritage, 7 experimental) under one
--color-* namespace, plus the nine-step surface ladder and the connectivity status
trio, in light and dark, with brand-*.css overlays that swap the brand primary.
Everything is generated from tokens/canon.snapshot.json:
pnpm canon:fetch # refresh the snapshot from canon (network, on demand)
pnpm tokens:build # regenerate every artifact from the snapshot (offline)
pnpm tokens:check # CI gate: fail if any generated file was hand-edited (offline)
pnpm canon:parity # CI gate: fail if the snapshot has drifted from canon (network)The snapshot is machine-written from two sources that are cross-checked against each
other — api.mzizi.dev/api/v1/brand and
mzizi-dev/mzizi-registry's lib/tokens/palette.source.ts. Nobody types a hex, and
never a raw hex in source. The values do not live in a database; Mzizi holds no
brand or primitive token data in one.
canon:parity reaches the network and therefore runs in CI only — it refuses to run
without CI set unless given --force. It is never in a build, a prepack, a
postinstall or a runtime path.
pnpm install
pnpm lintPublished to npm automatically by the
publish workflow
when a GitHub Release is published (or a v* tag is pushed) — @nyuchi/* under the
@nyuchi npm org and @bundu/* under the
@bundu npm org. The workflow requires an
NPM_TOKEN with publish access to both orgs. NPM_TOKEN is an organisation secret
on mukoko-dev and is visible to this repository (verified 2026-09-12, after the
transfer from nyuchi), so no repository-level secret is needed.
Publishing is the owner's call. CI does not publish on a branch push — only on a
published GitHub Release or a v* tag.
MIT © Nyuchi Africa (Pvt) Ltd.