Releases: siinghd/brookmd
Release list
brookmd 0.23.0 — wire delta mode retires the streaming re-emit floor
brookmd 0.23.0 — wire delta mode: the streaming re-emit floor is retired
The last by-design quadratic in the streaming pipeline is gone. Previously, every append re-emitted each open block's full rendered HTML across the patch boundary — O(n²/chunk) total bytes for a block that grows across many chunks (the documented "re-emit floor"). Wire contract v1.2.0 adds an opt-in delta mode: an active block that was emitted in the previous patch serializes as a verified splice — html_delta: { keep_bytes, keep_units, append } — against that emit. The kept prefix is established by byte comparison, never structural inference, so reconstruction is byte-exact by construction. Committed blocks always carry full HTML.
Measured (200 KB document, 256-byte chunks, real WASM boundary):
| Shape | Total patch JSON before | After | Wall |
|---|---|---|---|
| Streaming list | 119.6 MB | 0.78 MB (153× less) | 2.8× faster |
| Unclosed code fence | 80.1 MB | 0.58 MB (137× less) | 4.9× faster |
| Fast-committing prose | 2.0 MB | 1.95 MB | unchanged |
Emitted bytes are now gated linear in CI (tests/scaling.rs); the multipliers grow with document size since the quadratic curve is gone.
- npm
brookmd/brookmd-react-native: enabled automatically and invisibly — no API change,Block.htmlis always complete. Just upgrade. - Raw-boundary consumers (WASM
BrookParser, nativeBrookSession, C ABI): opt-in viasetWireDelta(true)/wire_delta: true; the default wire stays byte-identical to contract v1.1.0. Enabling it obliges you to reconstruct per WIRE.md §11. - Pinned by reconstruction-parity suites (dual UTF-8/UTF-16 offset verification), wire goldens in all five language surfaces (core / FFI / C-ABI / Kotlin / Swift, including the Android instrumented twin on an emulator), a fuzzer extension asserting per-patch reconstruction on arbitrary inputs, and the RN app-level e2e on emulator + simulator.
Ships as npm brookmd@0.23.0, crates.io brookmd-core 0.23.0, and npm brookmd-react-native@0.1.1. Also includes 0.22.2's core perf pass (7–24% faster streaming across all shapes).
Prebuilt native artifacts (experimental)
CI-built binaries for the native bindings, rebuilt from this release — the Swift/Kotlin/C-ABI/Flutter bindings are not yet on package registries. All emit the same versioned wire (WIRE.md v1.2.0), pinned by per-language golden tests.
| Asset | Contents | SHA-256 |
|---|---|---|
brook_md_ffi.xcframework.zip |
Swift/uniffi XCFramework: iOS device + simulator + macOS (arm64 + x86_64) | 9a3108613c5b259632ee6d7509029517398879fbe62f19c1f547c3a4478d8fd4 |
brookmd-ffi-android-jniLibs.zip |
Android libbrook_md_ffi.so — arm64-v8a, armeabi-v7a, x86_64 (16 KB page aligned) |
9a4988929179d2399bc0a08cf4fc55381081023eaaa4e940de55a3eab61fd17b |
brookmd-ffi-rn-ios.xcframework.zip |
React Native iOS XCFramework (device + fat simulator) | ffa941cb9471ada14da6eb8d5baaf293b130ab8faed06860ec19decc1025ebcd |
brookmd-cabi-android.zip |
C-ABI libbrook_md_cabi.so per ABI + brook_md.h |
d730ea438ba0de88a740ca750599eea0063d869f7195ba151b231ea3c56daf4c |
brookmd-cabi-apple.zip |
C-ABI XCFramework + universal macOS dylib + brook_md.h |
e7abbb172324ad3d452307191a7fce7a4ecac13ba515a8262c76ae13136ade4d |
Swift Package Manager binaryTarget example:
.binaryTarget(
name: "BrookMdRustFFI",
url: "https://github.com/siinghd/brookmd/releases/download/v0.23.0/brook_md_ffi.xcframework.zip",
checksum: "9a3108613c5b259632ee6d7509029517398879fbe62f19c1f547c3a4478d8fd4"
)brookmd 0.22.2 — final perf pass + brookmd-react-native 0.1.0
brookmd 0.22.2
A final performance pass over the Rust core before the platform rollout: profiling found two hot spots shared by every streaming document shape, and fixing them makes streaming 7–24% faster across all benchmarked shapes — byte-identical output, native and WASM builds alike.
- the scanner's newline search (
line_end), the hottest primitive in the engine (re-run by every block probe on every line), now scans 8 bytes per step (SWAR) instead of one; - the inline renderer copies runs of plain text with a single
push_strinstead of per-byte dispatch + escape calls.
Verified byte-identical by the full battery: CommonMark + GFM spec goldens, wire-envelope goldens, chunk-independence property tests, and the streaming-parity fuzzer. Ships as brookmd@0.22.2 on npm and brookmd-core 0.22.1 on crates.io.
This release window also includes brookmd-react-native@0.1.0 — the first npm publish of the React Native package, gated on the app-level end-to-end CI run (a real RN 0.86 release build streaming the wire goldens through the native parser on an Android emulator and an iOS simulator, byte-asserted). See 0.22.1's notes in the changelog for the Metro/Hermes compatibility fixes that e2e gate surfaced.
Prebuilt native artifacts (experimental)
CI-built binaries for the native bindings, rebuilt from the optimized core — the Swift/Kotlin/C-ABI/Flutter bindings are not yet on package registries. All emit the same versioned wire (WIRE.md v1.1.0), pinned by per-language golden tests.
| Asset | Contents | SHA-256 |
|---|---|---|
brook_md_ffi.xcframework.zip |
Swift/uniffi XCFramework: iOS device + simulator + macOS (arm64 + x86_64) | aaf78778121b901cbdb17567640237e2f722ab7adb1cf9fffc126b0a7e58cb45 |
brookmd-ffi-android-jniLibs.zip |
Android libbrook_md_ffi.so — arm64-v8a, armeabi-v7a, x86_64 (16 KB page aligned) |
7264daa80bf2fd973e9862bf8ad58f0efbab61ad6a8372a532565b4ee1706f9a |
brookmd-ffi-rn-ios.xcframework.zip |
React Native iOS XCFramework (device + fat simulator) | eb3ec7d8aa8581c249ffeb1e693bd71c2701732439dc73e7fe9c24719dd8af48 |
brookmd-cabi-android.zip |
C-ABI libbrook_md_cabi.so per ABI + brook_md.h |
79f6cf4359e4abddf87f4edbad62e394587d7741a3815ab282ced436b0c2017d |
brookmd-cabi-apple.zip |
C-ABI XCFramework + universal macOS dylib + brook_md.h |
fa9f29b23e63131ef828f4c3e1636ddd6da51c4ad5a454764ddcb98221a596dc |
Swift Package Manager binaryTarget example:
.binaryTarget(
name: "BrookMdRustFFI",
url: "https://github.com/siinghd/brookmd/releases/download/v0.22.2/brook_md_ffi.xcframework.zip",
checksum: "aaf78778121b901cbdb17567640237e2f722ab7adb1cf9fffc126b0a7e58cb45"
)brookmd 0.22.0 — the flux-md rename
brookmd 0.22.0
The project formerly named flux-md is now brookmd — same project, same wire, new name. npm flux-md is deprecated and frozen at 0.21.0; install brookmd. The Rust core lives on crates.io as brookmd-core.
Migration is a mechanical rename: package flux-md → brookmd, APIs Flux* → Brook* (BrookClient, BrookMarkdown, initBrook, …), element <flux-markdown> → <brook-markdown>, CSS --flux-* → --brook-* and .flux-md → .brook-md, pending-link marker data-flux-pending → data-brook-pending (wire contract 1.0.0 → 1.1.0; envelope unchanged). Full table in the changelog.
0.22.0 also carries everything from 0.21.0: the streaming worst-case performance campaign (five previously quadratic shapes now linear, byte-identically) and the new subpath exports.
Prebuilt native artifacts (experimental)
CI-built binaries for the native bindings — not yet published to any package registry; device validation is in progress. All emit the same versioned wire (WIRE.md v1.1.0), pinned by per-language golden tests.
| Asset | Contents | SHA-256 |
|---|---|---|
brook_md_ffi.xcframework.zip |
Swift/uniffi XCFramework: iOS device + simulator + macOS (arm64 + x86_64) | ab8c7f8148302efff78756c328bca3552832aabde70fd89372cec08ce79de224 |
brookmd-ffi-android-jniLibs.zip |
Android libbrook_md_ffi.so — arm64-v8a, armeabi-v7a, x86_64 (16 KB page aligned) |
c4afaad6fcc7e9b3ddceac5d63a6b5fb02da213df825736bde90ecf940ad0e2e |
brookmd-ffi-rn-ios.xcframework.zip |
React Native iOS XCFramework (device + fat simulator) | 68ed6d7bcf48249cbe3614f6c93fe210387b022dedebed64931b41cb7d5a712c |
brookmd-cabi-android.zip |
C-ABI libbrook_md_cabi.so per ABI + brook_md.h |
fe37e1d3c535baa6ce76be1ee293600b58ea9a4b744acbc0ea2e104990034aa1 |
brookmd-cabi-apple.zip |
C-ABI XCFramework + universal macOS dylib + brook_md.h |
9b6f97b0283473ffa3afe121b16c3bf743f6f4ec746f0b103bd8de224c5316ad |
Swift Package Manager binaryTarget example:
.binaryTarget(
name: "BrookMdRustFFI",
url: "https://github.com/siinghd/brookmd/releases/download/v0.22.0/brook_md_ffi.xcframework.zip",
checksum: "ab8c7f8148302efff78756c328bca3552832aabde70fd89372cec08ce79de224"
)flux-md v0.12.0
Optional default theme.
import "flux-md/styles.css";Good-looking output out of the box — including the built-in syntax highlighter's colors (without any CSS, highlight() rendered uncolored). Scoped to .flux-md, driven by --flux-* CSS variables (re-theme by overriding a few), light by default with automatic dark via prefers-color-scheme (force with class="flux-md flux-dark" / flux-light). Opt-in and zero-runtime — the rendered HTML is unchanged; skip the import to bring your own CSS.
Full notes: packages/flux-md/CHANGELOG.md
flux-md v0.11.0
Opt-in live region + root attributes + docs/demo.
<FluxMarkdown>andmountFluxMarkdownacceptclassName/id/roleandaria-live/aria-atomicon the root.aria-live="polite"announces streamed content to screen readers (coalesces rapid updates; off by default). Covers React + the DOM mount (Web Component, Vue/Svelte/Solid).- Docs: repo root README, a "Structured block data" guide, and a runnable Data Studio demo (sort/filter/CSV table + live TOC from
block.data, mid-stream).
Full notes: packages/flux-md/CHANGELOG.md
flux-md v0.10.0
SSR-safe + an opt-in structured block.data channel.
new FluxClient()/renderToString(<FluxMarkdown/>)are server-safe (worker creation deferred to first append/pipeFrom) across React/Vue/Solid/Svelte.blockData: true(per-stream config, default off → byte-identical output) emits typed structured data onblock.kind.data, surfaced as typedBlockComponentPropsfields, streaming in lock-step with the HTML:- Table
{headers,rows,aligns}· Heading{level,text,id}· CodeBlock{lang,code}· MathBlock{latex}· List{ordered,start} - Build toolbars / TOCs / charts / copy buttons from data, no HTML re-parse.
- Table
Full notes: packages/flux-md/CHANGELOG.md