8 POSTS · NOTES FROM THE BUILD
Blog
Notes from building FormaUI — Compose internals, testing, API design, and the reasoning behind the library's defaults.
Long-form writing that doesn’t fit in a doc page: the problems behind a component’s API, the Compose behavior that made a default what it is, and the things that took a day to figure out so they only have to take you five minutes.
Posts
- 10 min read
What a component gallery can't tell you
A 25-screen banking app on FormaUI, rebranded until it doesn't look like FormaUI. 991 lines of theme over 13,325 lines of app, the four defaults the theme couldn't reach, and the contrast rule a new palette broke.
Case studyThemingCompose - 8 min read
A shadow with nothing to hide behind
Hovering an unselected filter chip painted a black block across it. The diagnosis needed a control group, the first fix was the wrong shape, and applying the rule instead of the symptom surfaced a second bug eight times larger.
Material 3DebuggingCompose - 8 min read
Your chart says nothing to a screen reader
A Canvas chart is a rectangle of paint to the accessibility tree, and every Android chart library leaves it that way. What a useful description contains, why the generator should be a pure function, and where auto-generated summaries stop being enough.
AccessibilityChartsCompose - 10 min read
The press animation that never plays on a fast tap
animateFloatAsState retargets instead of queueing, so a 3% press dip is invisible on every real tap. Why sequential Flow collection is the whole fix, and how to test motion that no assertion can see.
AnimationComposeInteraction - 12 min read
Building a token layer Material 3 actually respects
A CompositionLocal layer over MaterialTheme is forty lines and three decisions: static or dynamic locals, mapping eight shape tiers onto M3's five slots, and the token allocation that silently invalidates your whole tree.
ThemingDesign tokensCompose - 9 min read
Material 3 vs FormaUI: a token-by-token comparison
Corner tokens, type scale, spacing and API surface side by side — including the Material 3 button shape that isn't themeable, and an honest list of when to use stock M3 instead.
Material 3Design tokensCompose - 8 min read
Docs that run the real component
Compiling a Compose library to WebAssembly so its documentation is interactive — one bundle for forty components, HTML controls driving a canvas over postMessage, and 39 MB of honest tradeoffs.
WasmComposeDocs - 7 min read
Your Compose Canvas tests are lying to you
A chart that draws nothing passes every semantics assertion. Here's why captureToImage() can't help you under Robolectric, and what to do instead.
TestingComposeCharts