# Every crate raea carries a copy of: where it came from, why it's here, and what lets us drop it. # tools/vendor reads this (ls, diff, check, bump). Keep the format plain: one [name] table per crate, one # `key = "value"` per line, no inline tables or arrays. # # path the copy in this repo # upstream crates.io:, or git:@; the version our changes were made on # kind bump — only Cargo.toml differs (a dependency's version moved); drop it when upstream releases the same # patch — source changes, each marked with `raea:` (muxide's older ones say `raea patch`) # reason one line: what we changed and why # exit what lets us drop the copy (an upstream PR or release), or "none" when there is no upstream equivalent [muxide] path = "vendor/muxide" upstream = "crates.io:0.2.5" kind = "patch" reason = "AAC priming written as an edit list; AV1 av1C read decoder_model_info only with timing info (rav1e streams were refused); H.265 hvcC from the SPS's RBSP, so Main10 is declared 10-bit" exit = "a muxide release with the edit list and the hvcC RBSP read (0.5.0 has the AV1 fix); then move to it and drop the copy" [trustmark] path = "vendor/trustmark" upstream = "crates.io:0.4.0" kind = "patch" reason = "ort 2.0 rc.13 builder errors wrapped in an ort::Result closure; residual() split out of encode so one residual is scaled once and added to many frames; benches and dev files dropped" exit = "an adobe/trustmark release on ort rc.13 with a residual API" [bevy_seedling] path = "vendor/bevy_seedling" upstream = "crates.io:0.8.0" kind = "patch" reason = "without its cpal 0.18 paths, and ported to Bevy 0.20" exit = "a bevy_seedling release on Bevy 0.20 (the cpal removal may stay ours)" [bevy_text] path = "vendor/bevy_text" upstream = "crates.io:0.20.0" kind = "patch" reason = "on parley 0.12 (Blitz's), so one parley builds" exit = "a Bevy release on parley 0.12" [bevy_ui] path = "vendor/bevy_ui" upstream = "crates.io:0.20.0" kind = "patch" reason = "on Taffy 0.15 (Blitz's), so one Taffy builds" exit = "a Bevy release on Taffy 0.15" [bevy_solari] path = "vendor/bevy_solari" upstream = "crates.io:0.20.0" kind = "patch" reason = "materials traced by their alpha (mask, blend, a premultiplied coat), uv_transform, and a panorama sun sampled as a directional light" exit = "a Bevy release whose Solari traces alpha and importance-samples the environment map" # checked 2026-10-26: crates.io bevy_ui_widgets 0.20.0 (latest) is still on parley ^0.11; a Bevy git revision with 0.12 is Bevy main, not 0.20 [bevy_ui_widgets] path = "vendor/bevy_ui_widgets" upstream = "crates.io:0.20.0" kind = "bump" reason = "on parley 0.12 (Blitz's) instead of 0.11, so one parley is built (docs/blitz-bevy.feature B0a)" exit = "a bevy_ui_widgets release on parley 0.12" [blitz-paint] path = "vendor/blitz-paint" upstream = "crates.io:0.3.0-beta.4" kind = "patch" reason = "angled tile gradients, many-tile gradient layers as one brush, text-shadow, ellipsis, inline-box opacity, box-shadow blur as Chrome's; filters by GPU passes (B4a/B4b); z-index boxes clipped by the overflow between them and their stacking context; a range input's thumb; what an element paints at an offset of its own (background position and tiles, box and text shadows, scroll, inline SVG) placed in its own axes under a rotated ancestor (#18); background-clip: text, its background masked by the text of the element and everything in it (#37) as Chrome does, unscrolled; inline text in a scroller scrolled once, not twice (#46); a rounded corner where one side has no width (a left-only border on a rounded box), which drew nothing; a bevy_ui node's box shadow (data-raea-bevy-shadow, its BoxShadowSamples) drawn as bevy_ui draws it: spread by its width and its height and corners by the same ratio, then blurred as box_shadow.wesl blurs it, from a CPU bitmap (render/bevy_shadow.rs); a stacking context's out-of-flow boxes from containing blocks above it kept in its layer and not culled (raea #39)" exit = "a Blitz release that draws these" [blitz-dom] path = "vendor/blitz-dom" upstream = "crates.io:0.3.0-beta.4" kind = "patch" reason = "inline flex/grid baselines, auto table columns, table row rects, inline image load events, SVG text fonts, SVG non-scaling strokes, url() filters; Blitz main's #1244 and #1246; a node removed in a mutation batch dropped from the style, form and title nodes the batch flushes (raea #24); a node in a 3D rendering context (or with a projection) placed again on every resolve, so it follows a preserve-3d parent whose transform a script set (raea #19); a ParseErrorReporter (not_applied.rs) on every author parse, keeping what stylo drops for the render to say once (raea #34); a bevy_text box whose lines are no finite size (an Apple bitmap-only face, which parley scales by a units-per-em of 0) measures 0 by 0, as bevy_text does; a family list ending in "raea-bevy fallback" (bevy_text's FontSource::Family) falls to the collection's fallback families, not to serif nor to the CoreText pick (parley: NO_HOOK_FAMILY); an out-of-flow box painted by the stacking context between it and its containing block, inside its opacity group (raea #39); an SVG's paint properties from CSS written into its serialized source for usvg (raea #45); transform-box: stroke-box as fill-box under non-scaling-stroke, a stylesheet's stroke in the stroke box, and the non-scaling mark on an element with its own id (raea #50)" exit = "a Blitz release with #1244/#1246 and these" [parley_engine] path = "vendor/parley_engine" upstream = "crates.io:0.12.0" kind = "patch" reason = "Blink's macOS ascent hack for Times, Helvetica and Courier, in pixels at each size" exit = "none: it is Chrome's quirk, not a font's" [parley] path = "vendor/parley" upstream = "crates.io:0.12.0" kind = "patch" reason = "a line starts in its paragraph's own wrap mode, so an inline box's start padding is no wrap opportunity under pre/nowrap; the host's hooks for a cluster no family has: its platform pick (FallbackHook) and word when no face has it (MissingHook); a family list naming "raea-bevy fallback" (NO_HOOK_FAMILY, bevy_text's FontSource::Family) asks no FallbackHook, as bevy_text's parley has none" exit = "parley carrying the fix" [stylo] path = "vendor/stylo" upstream = "crates.io:0.22.0" kind = "patch" reason = "line-clamp, text-wrap-style (with Chrome's pretty) and pointer-events' SVG keywords (all, visible, painted...) for Servo too, Gecko-only upstream; url() filters; ::-webkit-slider-thumb and ::-moz-range-thumb as the slider thumb; unknown vendor-prefixed properties reported like any other, so a page can be told what it lost (raea #34); background-clip's text value for Servo too (#37); text-autospace for Servo too, initial no-autospace as Chrome's (#44); vector-effect for Servo too (#45)" exit = "Servo's stylo enabling them" [anyrender] path = "vendor/anyrender" upstream = "crates.io:0.14.0" kind = "patch" reason = "a blur's own y deviation and a filter primitive's linear-light flag, for SVG filters" exit = "anyrender's filter graph having both" [anyrender_svg] path = "vendor/anyrender_svg" upstream = "crates.io:0.15.0" kind = "patch" reason = "SVG masks, filter effects (on raea-page's GPU passes) and patterns, drawn as error boxes upstream; drawings clipped to their viewport" exit = "anyrender_svg drawing these" [vello_encoding] path = "vendor/vello_encoding" upstream = "crates.io:0.11.0" kind = "patch" reason = "bump buffer sizes set by the embedder (vello#1861's BumpAllocationSizes), not 165 MiB of defaults, grown with the target past 1080p (bump_sizes_for: ptcl holds every tile's initial allocation, which alone filled 99% of a fixed 2M at 4K), and back at the defaults while set_bump_full is on (a frame that came out all black drawn again); glyph tops for the CoreGraphics y-map (RAEA_PAGE_CG_YMAP); a resolve with no images keeps the image atlas (resolve.rs: a solid-only scene reported 0x0, the renderer swapped in a 1x1 atlas and every cached image then drew blank)" exit = "vello#1861 in a release; the y-map hook stays ours" # checked 2026-10-26 for firewheel and its graph, macros and nodes: crates.io 0.14.0 (latest) and Firewheel main 34b35cad stop at glam-32 and bevy_reflect 0.19; bevy_seedling 0.8.0 and its main ab4a88b4 need firewheel 0.12 and Bevy 0.19 [firewheel] path = "vendor/firewheel" upstream = "crates.io:0.12.1" kind = "bump" reason = "a glam-33 feature passed through to firewheel-core (Firewheel#144)" exit = "a Firewheel release with #144" [firewheel-core] path = "vendor/firewheel-core" upstream = "crates.io:0.12.0" kind = "patch" reason = "bevy_reflect 0.20 and glam 0.33 (Firewheel#144)" exit = "a Firewheel release with #144" [firewheel-graph] path = "vendor/firewheel-graph" upstream = "crates.io:0.12.1" kind = "bump" reason = "bevy_reflect 0.20 (Firewheel#144)" exit = "a Firewheel release with #144" [firewheel-macros] path = "vendor/firewheel-macros" upstream = "crates.io:0.12.0" kind = "bump" reason = "bevy_reflect 0.20 (Firewheel#144)" exit = "a Firewheel release with #144" [firewheel-nodes] path = "vendor/firewheel-nodes" upstream = "crates.io:0.12.2" kind = "bump" reason = "bevy_reflect 0.20 (Firewheel#144)" exit = "a Firewheel release with #144" [vello_shaders] path = "vendor/vello_shaders" upstream = "crates.io:0.11.0" kind = "patch" reason = "linear-light blending in fine.wgsl (Config.blend_linear, set by vello_encoding's set_blend_linear): every colour, ramp and texel decoded from sRGB, blended, and encoded once, the blend stack kept sRGB-encoded, so raea-page blends a bevy_ui page as Bevy's UI does on an sRGB target; area coverage summed in fixed point (i32, 2^20 a pixel) so a scene draws the same whatever order its segments arrive in (raea #20); flatten.wgsl holds a bevy_ui page's curves to a 0.02 px chord tolerance, not 0.25 (flatten_tol), as Bevy draws a rounded node from its exact distance field" exit = "a Vello release that blends in linear light on request" [rune-taffy] path = "vendor/rune-taffy" upstream = "git:github.com/anomalyco/rune@7ead7d63fcf6f9dd9669385a8b90e2ae80015d7b:crates/rune-taffy" kind = "patch" reason = "taffy's flexbox_balance is on (Blitz turns it on and features unify in one build), so encode_wrap maps FlexWrap::Balance and BalanceReverse; upstream's match isn't exhaustive with that feature" exit = "a Rune release whose rune-taffy handles taffy's flexbox_balance" [bevy_hanabi] path = "vendor/bevy_hanabi" upstream = "git:github.com/djeedai/bevy_hanabi@77630ff1eed8b104f34e91d23e9440428dc5ab01:." kind = "patch" reason = "frame-pure particles (raea #52): a new particle seeded by its spawn index, not the dead slot it recycles (vfx_init.wesl), and blended effects sorted by view depth from the main camera, far first as Bevy sorts its transparent phase, through the ribbons' sort pass (mod.rs, sort.rs, vfx_sort_fill.wesl); examples and GPU tests dropped" exit = "a hanabi with a deterministic mode (both changes offered upstream); then back to the git dependency and drop the copy"