v4.0.0
v4.0.0
Released: 2026-10-07
Breaking Changes
@takazudo/now types form defaults by control kind. A broadzfb/ zudo- react type: stringwithdefaultValueordefaultCheckedcan stop type-checking even when its runtime value is supported. Narrow the type to"text" | "search" | "email" | "url" | "tel" | "password"before usingdefaultValue, or to"checkbox" | "radio"before usingdefaultChecked. Literal combinations such astype="number"withdefaultValuewere already rejected by the 3.2.0 renderer and form adapters; this change makes their types match that existing runtime rule. Unmodelled radios can now usedefaultCheckedwithout a name or value (e4c59317).Reject
scriptrawHtmlwhose HTML parsing state would consume the renderer's closing tag. Rework the script payload so its closing boundary is unambiguous; the renderer continues to reject a literal</scriptinside that payload (16b0a34c).
Features
Add
wind.sources.roots,classHelpers,ignoreAttributes, androotPackage: falsefor explicit discovery and extraction control. Defaults retain the existing implicit root behavior; declared project roots participate in CSS commands and dev watching (4e86b0a3, db789d0b, 9a0b9fb0, b53beea1).Expand the preset-free Wind engine with bounded selection and pointer variants, decoration thickness/styles, bare outline, checked variants, additional cursor keywords, inset fractions, alignment keywords and pixel translate axes (7d0c34c6, ad9984f4, 4422e506, 1019e523, d6fcde14, a858fad3, d67c9d7f, fcfa7666).
Add exact native display/appearance, order/basis, SVG fill/stroke and
not-sr-onlyforms. These are finite utilities, not a Tailwind preset or a full compatibility claim; token and arbitrary-value exclusions still apply. Wind remains spec 1/revision 14 (e6d4060f, 836bf52d).Explain unequal host token overrides with preset provenance, group
zfb wind audittext output by candidate/code/severity, and give bounded unsupported utilities and variants more specific migration or missing-token diagnostics (7d4e744c, 322f19cd, 49019aaf, 1171b0af, 5e87f73c).Add coded build warnings, optional structured plugin logger metadata, sorted
build --warnings-jsonreports and opt-in build phase timing. Authored TSX/JSX and MDX pragma checks also report migration warnings (36afe4c8, 24a3dd59, e88e6b47, 42fd7265).Configure
linkValidation.anchorComponentsso a declared MDX JSX component's literal anchor prop contributes a static fragment target. Names and prop spellings are validated; dynamically computed IDs are not inferred (da87f163, 68aeec59).Recognize
classandclassNameprops in named, ownedzudo-reacth()imports and aliases for Wind extraction and diagnostics. Unrelated or shadowed factories remain conservative; this does not make a renderer-invalid prop valid (a7688204).
Bug Fixes
Preserve candidates and source positions from quoted multiline JSX classes; keep class scanning conservative for impossible literals and embedded preview markup (72507c3a, be380b6f).
Remove late dynamic
Show,Forand reactive content inside azudo-reactroot when it unmounts, while retaining caller-owned siblings. Accept therbRuby element (6a8e682b, b173f291).Repair dev collection deletion invalidation, including unknown consumers, racing initial reads and retained stale repair claims, while keeping known-consumer selection precise (18fbec4e, 30a8a292, 76cd634f).
Stop reporting false Wind conflict diagnostics for compatible translate axes and catalog-declared default overrides; genuine conflicting writes remain reported (43f2924b, c0c68437).
Reuse parsed modules and indexed lexical bindings during island registration scanning of large linked package graphs, avoiding repeated full-module walks. Unsupported dependency-member targets still produce a finite, source-located diagnostic; this does not claim every consumer build succeeds (291401a1, 3303d765, 220433a9).
New basic-blog projects omit the unnecessary TypeScript
baseUrlsetting while retaining the~/*path alias. This is thezfb newtemplate also used throughcreate-zfb(f1ac6b83).