Repository navigation
Releases: tiptreesystems/design-system
Release list
v0.9.0
v0.9.0
Tokens and one glyph, from the Althea prototype's findings against 0.8.0 and
its open proposals, on Ivan's rulings and Richard's of 2026-10-13, all
recorded in the 2026-10-13 entry in docs/DECISION_LEDGER.md. Two colour
roles, three corner roles, two speeds and the sort glyph are new. Released
values change: the focus ring on paper, the tooltip, the dark primary action,
the box's rim while you write, the small text's line, the control heights
(now in rem) and the shadows' strengths. Nothing is removed or renamed.
Tokens
- Changed:
font-line-height-small1.5→calc(22 / 14). Every text at
14 stands on a line of 22 (21 before). Web-only. - Changed:
control-hero,-large,-defaultand-small, 56, 44, 36 and
28px → 3.5, 2.75, 2.25 and 1.75rem: the same pixels at the default text
size; at a larger text size a control grows with its words and its glyph. - New corner roles over the ladder (cross-platform):
radius-block
({radius-20}, a block that holds rows),radius-field({radius-16}, a
field and anything that is one) andradius-row({radius-12}, a row or
an item not inside a block, and a tip). - New speeds (cross-platform):
speed-brisk0.15s, what opens (a tip, a
menu, a dialog, a section), andspeed-slow0.4s, what Althea adds to the
page arriving, besidespeed-quick0.1s andspeed-regular0.25s. z-overlayis now documented: a layer that floats without stopping the
page, under the popovers. A modal's veil stands one under its dialog,
calc(var(--tt-z-dialog) - 1). No value changes.
Roles
- Changed, light:
color-focus-ring#5e9cff→ the accent
({color-accent},#3c8286), the ring every control draws: 4.33:1 on
color-bg-primary, 3.92:1 oncolor-bg-secondaryand 4.44:1 on white, up
from 2.67:1. The dark ring keeps its value, now by reference to the accent. - Changed:
color-surface-tooltip→brand-black(#1b1b1b) in both
themes, a note laid on the page (was black at 80% on paper andstone-200
in the dark). - New
color-text-on-tooltip: the words on a tooltip, white in both themes
(17.22:1). It resolves likecolor-action-primary-fgand is an alias of it. - Changed, dark:
color-action-primary-bg#2e585a→teal-700
(#3a5759) and-bg-hover#43696b→#4e686a(teal-700 mixed 90% with
white). White on them reads 7.81:1 and 5.98:1. Light is unchanged. - Changed:
color-border-box-focus→ the accent in both themes (was
#bdbdb3and white at 20%): the box's rim takes the accent while you write
in it. - New
color-mark-done: a step that is done, the palette green
({color-green},#27a644) in both themes, beside the other five marks.
Draw it on the primary ground only: on paper it reads 3.09:1 on
color-bg-primaryand 2.80:1 oncolor-bg-secondary. - Changed, web-only: the shadows at the strengths they were drawn, as
rgb(… / n%)strings: lightshadow-lift,-block,-boxand
-overlay; darkshadow-lift(which-blockand-boxread) and
-overlay. Each layer moves by at most 0.2 of a point; nothing visible. - A rule, no value change:
color-text-quaternaryis for marks beside words
and disabled labels only. Words takecolor-text-tertiaryor firmer, which
reads 4.5:1 or more on both grounds in both themes; the quaternary ink
reads 4.08:1 and 3.69:1 on paper.
Icons
- New
sort(Solarsort-linear): three lines, the longest first, for a
filter. 131 glyphs.sort-vertical, the two arrows, is unchanged. Solar
under CC BY 4.0, already credited inNOTICE.
What each consumer does at its bump
- Every consumer: move any words off
color-text-quaternaryonto
color-text-tertiary; keep the quaternary ink for marks and disabled
labels. Drawcolor-mark-doneon the primary ground only. Text at 14 that
readsfont-line-height-smallgains a pixel of line (21 → 22); move any
text at 14 that sits on another line ontofont-size-smallwith
font-line-height-small. - Lacuna: its tooltip inks its words with
color-text-on-inverse, which is
the brand black in the dark; switch it tocolor-text-on-tooltip, or the
dark tooltip is black on black. Its focus rings turn from blue to teal on
paper, and its text at 14 that readsfont-line-height-small(the
highlights page's inputs) gains the pixel of line. Its vendored chat widget
bakes the package's CSS in, and moves only when a widget is rebuilt from a
frontend commit that pins 0.9.0; the wheel bump alone leaves it as is. - docs: its words on the quaternary ink
(docs_server/web/src/styles/components/cards.css:66,code-block.css:27,
collapsible-item.css:44) move to the tertiary. - website-v2 (and the homepage copy marketing-site carries): replace the
vendoredprimitives.cssand theme file byte for byte, the sha256s in the
pin test and the?v=0.9.0queries. The focus ring on paper turns teal,
small text gains a pixel of line, and controls grow above the default text
size. - Althea: the ring, the dark primary, the box's rim and the 22 line arrive
through the roles it already aliases; map the sidebar filter's glyph to
sort. A dark surface that readscolor-surface-tooltip(the lightbox's
veil) turns near-black: keep it or give it a role of its own. - platform-ios: the Swift source gains nine identifiers and the changed
colours below; it reads none of the changed roles today. - Pin the release only after its tag.
Removed / Renamed
- None.
Artifacts
npm tarball, Python wheel, SHA256SUMS and provenance attestations. The
v0.9.0 tag is the Swift Package release; its diff adds two colours
(colorTextOnTooltip and colorMarkDone, each with its UIColor),
Radius.block, .field and .row, and Duration.brisk and .slow, and
changes colorFocusRing (light), colorSurfaceTooltip,
colorBorderBoxFocus and, in the dark, colorActionPrimaryBg and
colorActionPrimaryBgHover.
v0.8.0
v0.8.0
Tokens only: the spacing scale, the title step and the glyph sizes the Althea
rebuild's atoms read, taken from the Althea prototype's package proposals of
2026-10-02 (rows 1, 3 and 5), and three roles, a primitive and one value the
atoms and molecules need to match the prototype, all recorded in the
2026-10-03 entry in docs/DECISION_LEDGER.md. The nineteen proposal tokens
are new and web-only; their sizes are in rem, so they grow with the reader's
text size. The three roles and the primitive are cross-platform, so the Swift
source gains eight identifiers. One released value changes: the light danger
grounds.
Tokens
- New spacing scale:
space-025,-050,-075,-100,-150,-200,
-250,-300,-400,-500,-600and-800, from 0.125 to 4rem (2, 4,
6, 8, 12, 16, 20, 24, 32, 40, 48 and 64 at the default text size). A name
states a step, with 100 at 8, so it stays true as the scale grows with the
text. One scale for every padding, margin and gap. - New title step in the heading register, between page and section:
font-heading-title-family({font-serif}),-size2rem,-line-height
1.25,-letter-spacing-0.015em and-weight{font-weight-normal}(400).
The register now runs display, page, title, section, sub. - New glyph sizes:
glyph-small1rem (16, in the small and default controls)
andglyph-large1.25rem (20, in the large and hero controls). The glyph's
line stays 1.5px at both. - Python's
TOKENS['base']carries the nineteen, resolved.
Roles
- New
color-action-secondary-border: the ring on a pill, a chip or a field
at rest, lightstone-300(#dcdcd4), dark#464641, a step lighter than
the content line in the light.color-button-secondary-borderkeeps
stone-550and its 3:1 edge for the consumers that still draw it. - New
color-mark-expired: a task whose window has closed, lightcitron-600,
darkcitron-300, beside the other four marks. - New
color-badge-neutral-bg: the quiet tint behind a category word, 7% of
the ink (light#4d4d4712, dark#ffffff12); its words take
color-text-secondary. - Changed, light only:
color-action-danger-bg#b04a3f→#c84a4a,
-bg-hover#963f36→#b34242and-bg-pressed#7f352e→#b34242,
the brand red deepened as the prototype paints it; white on them is 4.63:1
and 5.56:1. Dark and-fgare unchanged. Visible wherever a consumer
aliases these roles in the light, including iOS through the Swift Package. - New primitive
black(#000000, Swiftblack), beside the stone ramp:
the pure black the prototype writes for the expanded box's shadow and the
dark Button's. Notbrand-black, which is#1b1b1b. - Deprecated:
color-keycap-bgand-bg-hover. Nothing has read them since
the prototype's keys lost their ground (2026-09-25); they stay until the
next major removes them. - Not in this release: the corner roles, the control sizes in rem, the
shadows at their drawn strengths, Button and its glass, the ghost grounds,
the control-colour family and a 16 type step. The ledger entry says when
each is taken up.
Removed / Renamed
- None.
Artifacts
npm tarball, Python wheel, SHA256SUMS and provenance attestations. The
v0.8.0 tag is the Swift Package release; its diff adds four colours
(black, colorActionSecondaryBorder, colorMarkExpired,
colorBadgeNeutralBg, each with its UIColor) and changes the light danger
values.
v0.7.0
v0.7.0
The design system now ships the icon library and the type foundations the
Althea rebuild runs on, as ruled in the v0.7.0 entry of 2026-10-01 in
docs/DECISION_LEDGER.md. The althea-prototype repository is the source of
truth for the new values. The icon export is provisional: its first consumer is
Althea's rebuild, and 0.8.0 withdraws it if no Althea release that imports it
has merged by then. The rebuild's first step proved this build in Althea before
the tag.
Icons (new, provisional)
@tiptree/design-system/icons.js: one frozen, data-only ES module of 130
glyphs keyed by what they draw, in Solar's current Iconify names (close,
close-circle,magnifier,pin-filled), each with its cut (linearat
rest;filledforpin-filled;solidformenu-dots,grip-dotsand
plus-heavy) and its body for a 24 viewBox.icons.jsoncarries each
glyph's provenance: 113 Solar glyphs verbatim, 3 modified (microphone,
ghost,history-2) and 14 Tiptree drawings, among themplus-heavy, New
conversation's plus with its bars drawn filled, the one optical correction
kept in the drawing. Both also ship in the wheel at
tiptree_ui/assets/icons.jsonandicons.js. No Swift form.- Every stroked shape carries
vector-effect="non-scaling-stroke", so the
1.5 line is 1.5px at any size (the sparkles ofmoon-starsand
stars-minimalisticdraw at 1px, by Solar's design): set size and colour
only, and remove CSSstroke-widthrules aimed at icons, which now mean
screen pixels. - Role names stay in each app, with a test that every mapped name exists. A
glyph an app needs first goes in its extension file, registered in
registry/icon-extensions.md. Brand marks are not icons. - Solar by 480 Design, CC BY 4.0. The package licence is now
Apache-2.0 AND CC-BY-4.0; seeNOTICEandLICENSE-CC-BY-4.0.txt. The
module keeps a/*! … */header and anattributionproperty.
Tokens
- New, web-only:
border-hairline(1px, and 0.5px at
(resolution >= 192dpi)). - New, cross-platform:
radius-28(Swiftr28). The corner ladder is
4 / 8 / 12 / 16 / 20 / 24 / 28 / full;radius-6stays, off the ladder. - New Button roles:
color-action-primary-bg,-bg-hoverand-fg
(lightteal-600/teal-700/ white; dark#2e585a/#43696b/
white) andcolor-button-secondary-bg-hover(lightstone-150; dark
#40403f). The dark values are the prototype's glass Button made opaque;
the glass itself is the component's material, not a token. - New surface roles for the three surfaces and the control ring:
color-surface-block,color-surface-box,color-border-block,
color-border-box,color-border-box-focus,color-border-control,
color-border-overlay(cross-platform) andshadow-block,shadow-box,
shadow-overlay(web-only). An overlay's fill is the existing
color-surface-card. - Changed:
font-sansleads with'Inter Variable', 'Inter', 'Inter Fallback';
font-serifadds'Literata Fallback';font-heading-sub-weightis
{font-weight-medium}(510, was 500), visible where a consumer aliases it
and renders the variable face. - Unchanged: motion and z-index. Not minted:
font-label-monoand
surface-alpha-*.
Generator and gates
tokens.jsonaccepts amediamap of named, allow-listed queries; the
block is emitted after:rootinprimitives.cssandtokens.css, never
in a theme file, and the Python and Swift exports keep the base value.tokens.cssand the three theme files gain 1 KiB of raw budget for the
ten surface roles; the icon module andicons.jsonare budgeted.- A public-surface snapshot per release (
tests/public-surface/) fails on
any unrecorded change of a name; the release workflow checks the tarball's
and the wheel's contents, and publishesvX.Y.Z-rc.Ntags as pre-releases
when a release needs one.
Removed / Renamed
- None.
Artifacts
npm tarball, Python wheel, SHA256SUMS and provenance attestations. The
v0.7.0 tag is the Swift Package release; its diff is additions only: r28,
the four Button colours and seven surface colours.
v0.6.0
v0.6.0
This release makes the Althea prototype's September tuning canon, as ruled in
the 2026-09-29 entry in docs/DECISION_LEDGER.md: the prototype
(althea-prototype/app/explore.css and its vendored brand.css) is the
source of truth for every value, and everything it introduced is shared. Three
independent consumers (the homepage, docs, and the prototype) already carry the
direction. The 2026-08-18 light-canvas gate is satisfied, so Althea's pin bump
targets this release; docs and Lacuna re-bump from v0.5.0.
Re-ruled values
- Dark ladder: stone-850
#282826, stone-875#222220, stone-900#1b1b1a,
stone-950#161615, stone-1000#10100f. These primitives are
cross-platform, so iOS renders the change. - Light canvas: stone-050
#fcfcfb. - Light accent moves to the new ramp steps teal-550
#3c8286and teal-650
#346f72(hover); the dark accent and both links are unchanged. - Text greys: light secondary/tertiary/quaternary one step darker
(stone-750/650/550); dark one step lighter (stone-300/400/500). - Light border-primary becomes stone-350, a ruled collapse onto
border-interactive in light only.
Shared theme additions
color-bg-ground(stone-050 / new stone-1050#0d0d0c): the flat canvas
docs and the homepage map to; Althea's page stayscolor-bg-primary.color-row-hover(stone-150 / 11% white) andcolor-surface-open
(stone-200 / 15% white) beside the unchangedcolor-surface-hover.color-border-section,color-keycap-bg,color-keycap-bg-hover.- Four marks and two channel greens:
color-mark-new,color-mark-live,
color-mark-idle,color-mark-community,color-channel-whatsapp,
color-channel-sms. shadow-lift, web-only and themed, with the prototype's alphas resolved to
hex.
Shared primitives and web-only scales
stone-1050,teal-550,teal-650,radius-20.- The control scale
control-hero,control-large,control-default,
control-small(56 / 44 / 36 / 28 px). font-code(the Google Sans Code stack;font-monostays true mono), the
Inter weightsfont-weight-light/normal/medium/semibold/bold
(300 / 400 / 510 / 590 / 680), the six-step body scalefont-size-*with
font-line-height-*andfont-letter-spacing-*, and the four-step heading
registerfont-heading-*(size, line-height, letter-spacing, weight, and
the serif/sans family for page, section and sub).
Artifacts
The release workflow publishes the npm tarball, Python wheel, SHA256SUMS,
and build-provenance attestations. The immutable v0.6.0 Git tag is the Swift
Package source-control release; because five dark primitives change, the tag
follows the iOS screenshot pass recorded in the ledger.
v0.5.1
v0.5.1
This is a distribution-only release. Token names, references, applicability,
and resolved light/dark values are unchanged from v0.5.0.
Swift Package
- Adds the
TiptreeDesignSystemSwift Package library for iOS 17 and newer. - Commits the generated Swift source consumed by Swift Package Manager while
preservingtokens/tokens.jsonas the only authored value source. - Fails the release gate when the committed Swift package source is stale.
- Compiles the package for a generic iOS device in pull-request and release CI.
Existing artifacts
The release workflow continues to publish the npm tarball, Python wheel,
SHA256SUMS, and build-provenance attestations. The immutable v0.5.1 Git tag
is the Swift Package source-control release.
v0.5.0
v0.5.0
This release implements the four graduations ruled in the
2026-08-19 “Consolidated leftover-value rulings” entry in
docs/DECISION_LEDGER.md. Publication is authorized by the later “v0.5.0 gate
narrowed to Althea adoption” entry: docs already renders these values, Lacuna
does not consume the four roles, and Althea adoption remains gated on Ivan's
pass. A later light-value re-ruling ships immutably as v0.5.1.
Shared theme additions
- Adds text-quaternary as stone-500 in light and stone-550 in dark.
- Adds surface-sunken as stone-150 in light and stone-1000 in dark.
- Adds the web-only scrollbar-thumb wash at 10% black/white alpha.
- Adds border-interactive as stone-350 in light and the ruled off-ramp
#464641literal in dark; the dark value intentionally sits between the
stone-700 and stone-750 ramp steps. - Keeps
--tt-color-button-hover-bgabsent. A5 remains deferred to the
sitting and the v0.4.1 absence assertions remain authoritative.
Artifacts
The release workflow publishes the npm tarball, Python wheel, SHA256SUMS, and
build-provenance attestations. GeneratedTokens.swift remains a local build
output; iOS release integration is deferred.
v0.4.1
v0.4.1
This release is the first product of the estate divergence-audit cadence. It
graduates shared semantic roles only where the consolidated Althea, docs, and
Lacuna evidence establishes the contract.
Shared theme additions
- Adds surface-hover and disabled-action washes in both themes.
- Adds independently shared success and warning emphasis fills for chips and
tags without changing the existing status recipe anchors. - Adds the shared tooltip surface after verifying equivalent Althea and docs
values in both themes. - Keeps the accent-action ramp app-local until a second production consumer
wants it. - Defers button-hover fill: Althea's dark 6% alpha and docs'
#0falpha are not
exactly CSS-equivalent, so the conditional release gate did not pass.
Artifacts
The release workflow publishes the npm tarball, Python wheel, SHA256SUMS, and
build-provenance attestations. GeneratedTokens.swift remains a local build
output; iOS release integration is deferred.
v0.4.0
v0.4.0
This release makes the package reflect its first production adoption: shared
tokens and light/dark themes, with components admitted only after demonstrated
consumer demand.
Breaking package-surface cleanup
Button never reached a production consumer, so v0.4.0 removes these experimental
v0.3.x npm subpaths:
@tiptree/design-system/components/button.css@tiptree/design-system/layered/components/button.css@tiptree/design-system/tt.css
The npm tarball and Python wheel contain no Button CSS, component manifest entry,
or dormant spec. Consumers pin immutable v0.3.1 assets and cannot observe this
removal until deliberately upgrading. The Button spec, parity evidence, and
reusable comparison engine remain in Git for future graduation work.
Shared theme additions and fixes
- Graduates Althea's shipped danger-action roles, four status recipes,
focus-ring color, inverse surface/text, and accent-on-surface roles. - Prevents status foreground/background collapse with resolved recipe tests.
- Strengthens secondary-control boundaries to at least 3:1 against every
published surface in both themes. - Emits
color-scheme: only lightin light-polarity blocks to opt out of
browser Auto Dark; dark-polarity blocks remaincolor-scheme: dark. - Reframes the local showcase as a side-by-side tokens/themes explorer.
Artifacts
The release workflow publishes the npm tarball, Python wheel, SHA256SUMS, and
build-provenance attestations. GeneratedTokens.swift remains a local build
output; iOS release integration is deferred.
v0.3.1
Full Changelog: v0.3.0...v0.3.1