Repository navigation
Release 0.24.0 - #303
Merged
Merged
Release 0.24.0#303
Conversation
Bumps sigilbuzz to 0.24.0 and every companion crate that takes sigilbuzz types in its API to its next minor version, per docs/RELEASING.md: capi 0.5.0, cli 0.3.0, gpu 0.3.0, hyphen 0.3.0, paint 0.4.0, pdf 0.4.0, render 0.11.0, subset 0.14.0, svg 0.4.0 and text-layout 0.3.0. sigilbuzz-woff exposes no sigilbuzz types and takes a patch bump to 0.3.3. Every internal dependency requirement moves with them. Adds the 0.24.0 changelog section for #292 to #301, updates the README's current release and quick start, the STABILITY.md version guidance and the instance_user entry, and the RELEASING.md example version.
ROADMAP.md: "Next" now lists what is next (consumer adoption of 0.24.0, per-glyph cost of long runs, #302, feature semantics, syllabic shapers on a glyph buffer, the variation core, #299), "Known gaps" takes the deferred items from the 0.24.0 pull requests, and the gaps and known bugs that 0.24.0 or earlier releases closed are gone. "How work gets picked" says how parity is measured now that no consumer runs a HarfBuzz backend. PERFORMANCE.md: the 0.6.0 numbers give way to the 0.24.0 measurements from #295 and #301 (method, repeated calls on one Font with HarfBuzz alongside, first calls, hostile tables, GlyphOutlines) and a Criterion rerun, with how each was measured.
Drop an unreconciled before-count of the consumer cluster cases (all 554 match is the verified end state), and give the many-axis partial instancing time as the measured range, 4 to 7.6 s.
albedosehen
marked this pull request as ready for review
October 5, 2026 02:11
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Prepares the 0.24.0 release: the CHANGELOG section for #292 to #301, the version bumps, and refreshed docs (README, STABILITY, ROADMAP, PERFORMANCE). Nothing is tagged, released or published.
This branch is
origin/main(355a76a) plus two commits:chore(release): prepare 0.24.0(CHANGELOG, manifests, README, STABILITY, RELEASING) and a docs commit (ROADMAP, PERFORMANCE).Versions
Per docs/RELEASING.md and the 0.23.0 precedent (14ba727): the core moves to 0.24.0, every companion crate that exposes
sigilbuzztypes in its API takes a minor bump, andsigilbuzz-woff, which exposes none, takes a patch bump so its published version requiressigilbuzz0.24. Every internalversion =requirement moves with them.sigilbuzzFont::coords(borrows the font, no longerconst), the default cluster level,MultiVarStore::resolve_deltassemantics,GeneralCategoryClass(#[non_exhaustive],Symbol), firstunsafeand the CAS atomics requirement. The[workspace.dependencies]pin moves with it.sigilbuzz-subsetinstance_user) and #300 (unparsableVARCleft out). Takes&Face.sigilbuzz-renderdecode_jpeglimits. Takes&Faceand exposes paint types.sigilbuzz-paint&Face.sigilbuzz-capisigilbuzz-clisigilbuzz shapeprintscluster=at the new default level. Moves with the core minor, as in 0.23.0.sigilbuzz-gpuencode_glyphtakes&Face.sigilbuzz-hyphentext-layout-integrationAPI exposessigilbuzz-text-layouttypes, which move to 0.3.0.sigilbuzz-pdfemit_type3_fonttakes&Face.sigilbuzz-svgglyph_to_svgtakes&Face.sigilbuzz-text-layoutwrap_linestakes&[sigilbuzz::Glyph].sigilbuzz-woffsigilbuzztypes in its API: a patch release so the published crate requiressigilbuzz0.24, as 0.3.2 did for 0.23.0."No code change" means
git diff v0.23.1..origin/maintouches nothing under the crate's directory.Doc version mentions: README "The current release is 0.24.0" and
sigilbuzz = "0.24"; STABILITY "For 0.24.0 that meanssigilbuzz = "0.24"with, for example,sigilbuzz-render = "0.11"andsigilbuzz-paint = "0.4""; the RELEASING.md path-plus-version example. STABILITY also gains the Tier 1 entry forinstance_user,UserInstanceInputandAxisLimit(Added in 0.14.0), per its "Adding a public item" rule; drop it if those should stay out of the 1.0 surface for now.Semver checks
cargo-semver-checks0.51.0 against the crates.io baseline, run as--release-type minorso every break is listed, with default features and with--all-features(same results both ways):sigilbuzzinherent_method_const_removedforFont::coords. In the CHANGELOG (Changed,Font::coords).sigilbuzz-subsetsigilbuzz-rendersigilbuzz-paintsigilbuzz-capisigilbuzz-gpusigilbuzz-hyphensigilbuzz-pdfsigilbuzz-svgsigilbuzz-text-layoutsigilbuzz-woffsigilbuzz-clihas no library target, so there is nothing to check.Breaks the tool cannot see, each called out under Changed in the CHANGELOG:
Font::coordsnow borrows the font (the lifetime change; the tool reports only the lostconst).ClusterLevel::default()isMonotoneGraphemes, so default clusters change, and with themsigilbuzz shape'scluster=output.MultiVarStore::resolve_deltaskeeps its signature but reads delta sets region by region and reads short sets as HarfBuzz does.GeneralCategoryClassgainedSymboland is#[non_exhaustive]; it lives under the#[doc(hidden)]unicode::path, which the tool skips.unsafe(OnceBox) and its need forcfg(target_has_atomic = "ptr").decode_jpegrejects a second SOF, frames past 2^22 pixels and frames with too little scan data.headbox andhheaextremes are recomputed from the outlines.VARCtable that does not parse, such as the post-14.5.0 MultiItemVariationStore layout, counts as absent in the core and is left out of subsets (Read the new VARC MultiItemVariationStore format #299 tracks reading it).Gate
On this branch (355a76a plus the release commit; the docs commit touches only Markdown), all pass:
cargo fmt --all -- --checkcargo +1.99.0 clippy --workspace --all-targets --all-features -- -D warningscargo +1.99.0 clippy --workspace --all-targets --no-default-features -- -D warningscargo +1.99.0 clippy -p sigilbuzz --no-default-features -- -D warningscargo test --workspace --all-features: 203 test runs (doctests included), 3,838 passed, 0 failed, 9 ignoredcargo build --no-default-featurescargo publish --workspace --dry-run: all 12 crates package, verify, and stop before upload. Every crate has a new version, so nothing is excluded.sigilbuzzpacks to 3.5 MiB compressed.CARGO_RESOLVER_INCOMPATIBLE_RUST_VERSIONS=fallback cargo +stable generate-lockfile, thencargo +1.81 check --workspace --lib --no-default-featuresandcargo +1.81 check --workspace --lib --bins --all-featuresDocs
Fontper font and instance,Face::glyph_outlinesin oneiric,hb_font_set_variationsthroughFont::with_variations, SVG<text>through sigilbuzz to drop rustybuzz, the 554-case differential in CI), per-glyph cost of long runs, A Devanagari fuzz input that GSUB grows to 3,079 glyphs takes about 24 s #302, feature semantics (automatic fractions andrand, feature ranges andcalt=2, required-feature stages), syllabic shapers on a glyph buffer (the stage 0 skip), the variation core (shared-tuple scalars,avar2, anOS/2metrics API), and Read the new VARC MultiItemVariationStore format #299. "Known gaps" gains the deferred items from the 0.24.0 PRs' Not done lists and keeps the renderer and text-layout items. Removed as done: crates.io publishing, JPEG AC refinement, thestchsymbols and olderUnicodeScriptbucket gaps, the CFF/CFF2 subset layout gap (stale), and the 0.22.0 Known bugs section (fixed by Fix the known JPEG, COLRv1, VARC and morx bugs #293 and Subset hinted CFF2 fonts, and finish the instancer's metrics #294). "How work gets picked" now says that no consumer runs a HarfBuzz backend, that parity is measured against HarfBuzz 14.5.0 directly, and that the consumers' fonts and strings feed the differential. Ground rules unchanged: none of them claimed the core has nounsafe.Fontwith HarfBuzz alongside, first calls, hostile tables,GlyphOutlines), and the Criterion tables are rerun for this release (see the file for how).After merge
Tag
v0.24.0on the merge commit, create the GitHub release with this version's CHANGELOG section plus the crates.io links for all 12 crates, and approve the publish job (docs/RELEASING.md steps 5 to 8). The publish order in RELEASING.md applies; every crate is published this time.