design-math
v0.1.9
Published
Agent-friendly design math CLI for color, typography, and shadow systems.
Maintainers
Readme
design-math
design-math is a Rust-powered design math toolkit for AI agents, automation, CI, and human workflows.
It turns the parts of design systems that are easy to hand-wave and easy to get wrong into deterministic tools:
- color conversion, contrast, palettes, and schemes
- typography scales and fluid type
- shadow systems for light and dark surfaces
This repo is not just a small color utility. It is a product-shaped workspace built around a shared Rust engine as the source of truth for design calculations, with a CLI plus in-repo Node and WASM bindings sharing the same implementation.
Why it exists
When an agent or automation script needs to do design work, mental math is not reliable enough for tasks like:
- expanding a brand color into a full semantic token set
- generating light and dark themes
- checking WCAG and APCA contrast
- producing modular scales and fluid type
- generating multi-layer elevation tokens
design-math exists to make those calculations repeatable, inspectable, and safe to automate.
What ships today
- Color workflows: convert, contrast, manipulate, mix, scale, harmony, palette, and scheme
- Color analysis: luminance, tone, temperature, gamut flags, and compact descriptions
- Typography workflows: scale, fluid type, standalone letter-spacing, and px/rem conversion
- Shadow workflows: layered elevation tokens for light/dark surfaces, colored shadows, and inset mode
- Output paths for JSON, CSS, HTML, and PNG
- Distribution through npm, Homebrew, and GitHub Releases
- In-repo bindings for Node, WASM, and Python
Workspace layout
crates/coreThe shared Rust calculation engine for color, typography, and shadow logic.crates/cliThe CLI layer for argument parsing, formatting, exports, and release distribution.bindings/nodeThedesign-math-nodenative Node binding package built withnapi-rs.bindings/wasmThedesign-math-wasmfallback package built withwasm-bindgen.bindings/pythonThedesign-math-pythonPyO3 binding crate for Python-native dict/list results.
If you are new to the repo, these docs are the best starting points:
License
This repository is licensed for free use, copying, and redistribution in unmodified form for personal or commercial purposes. Modification and derivative works are not permitted. See LICENSE for the full terms.
Install
npm
npm install -g design-mathOr run it without a global install:
npx design-math color convert "#c96442" --jsonThe npm distribution uses a main package plus platform-specific binary packages, all resolved through the npm registry.
Homebrew
brew tap eric8810/design-math
brew install design-mathQuick examples
design-math color convert "#c96442" --json
design-math color analyze "#c96442" --json
design-math color contrast "rgba(255,255,255,0.72)" "#111111" --json
design-math color palette --bg "#f5f4ed" --fg "#141413" --brand "#c96442" --format css
design-math type letter-spacing 24 --json
design-math type convert 24px --to rem --json
design-math type scale --base 16 --ratio major-third --json
design-math shadow generate --levels 5 --inset --json
design-math completion zsh > _design-mathPackages
design-mathThe end-user CLI package for terminals, scripts, CI, and npm/Homebrew installs.design-math-nodeThe native Node binding package that wraps the core API with a small JS layer.design-math-wasmThe WASM package that exposes the same API shape for JS runtimes that want a non-native fallback.design-math-pythonThe Python binding crate in this repo. It is implemented and buildable locally, but not yet published to PyPI.
JavaScript bindings
If you want function calls instead of shelling out to the CLI, there are two JS-facing bindings:
design-math-wasmThe easiest integration path for JS and TS consumers. It exposes the shared design-math API without requiring a native Node addon toolchain.design-math-nodeThe native Node binding with the same public API shape. It is published as a main npm package plus platform-specific optional dependency packages.
The shared API includes:
convertColoranalyzeColorcontrastColormanipulateColormixColorsgenerateColorScalegenerateColorHarmonygeneratePalettegenerateSchemegenerateTypeScalegenerateFluidScalegenerateFluidTypequeryLetterSpacingconvertTypeUnitsgenerateShadowSystem
For integration examples and API notes, see docs/javascript-bindings.md.
Current focus
The core product line from M0 through M10 is now in place:
- color workflows are usable
- typography workflows are usable
- shadow workflows are usable
color analyze, standaloneletter-spacing, andpx/remconversion are usable- JSON, CSS, HTML, and PNG exports are usable
- npm, Homebrew, and GitHub Release distribution are wired up
- Node, WASM, and Python bindings exist in this repo
The next focus areas are:
- stronger agent-first workflows
- publishing the Python binding to PyPI
- longer-tail performance and DX polish
- possible post-1.0 visual tooling such as a local preview server
