pub const FORMAT_VERSION: u16 = 18;Expand description
Container format version. Bump on any incompatible change to
CompiledApp or the framing. The loader refuses mismatches so a
runtime never mis-decodes an artifact built by a different toolchain.
2: the skin-tokens CSS batch adds a run of new fields to
crate::layout_ir::Attributes (knob-inset, thumb-size,
popup-gap, progress-chunk, disabled-opacity, caret-width,
caret-blink, password-character, line-height, and the
scrollbar-* geometry/timing/paint properties), changing the
bincode wire shape.
3: the translatable="<key>" attribute adds a field to
crate::layout_ir::Attributes.
4: CompiledApp::scripts records which engine runs each part of the
app’s script, so an app that ships more than one language keeps running
under one host per language after compilation, and
CompiledApp::pages carries a multi-page app’s page set so navigation
works without the page files on disk.
5: the web target’s three additions and the fragment table, which land
together because one bump costs the same as four.
crate::layout_ir::Attributes gains markup_styles, the styling
attributes an element was given in markup, so a surface where CSS outranks
markup can replay them and keep Lumen’s precedence; widget, the authored
widget an element desugared from, so an emitter can write the semantic
form back; and alt, an image’s own alternative text. CompiledScript
gains bytecode, the compiled .cdlb image of a candela program, so a
runtime without the compiler can run it. CompiledApp::fragments
carries the app’s declared fragments, and crate::layout_ir::Element
gains the fragment-use slot that names one, so a shipped app instantiates
a fragment without the declaring source.
6: crate::fragment::Fragment gains components, the candela function
names that reach a fragment, so a .lmn file can write a component as a
tag.
7: crate::fragment::FragmentComponent gains params, and a use site
the build cannot stand in for stays in the tree as the marker a runtime
call fills, so a component that works a value out is usable from markup.
8: the format="<spec>" attribute adds a field to
crate::layout_ir::Attributes, so an element’s text can be rendered
for the app’s locale.
9: crate::layout_ir::TooltipSpec gains translatable, so a
<tooltip> names its own catalogue key and a popup body reads in the
app’s language rather than the one it was written in.
10: crate::css::Stylesheet gains at_rules, the at-rules the
cascade does not implement, so a @keyframes block an app wrote reaches
the web target instead of being dropped at parse time.
11: CompiledApp::i18n carries the app’s translation catalogues and
the fallback chain, so an app, and a server rendering one, reads in every
language it ships with no locale/ directory beside it.
12: CompiledApp::addons carries the browser add-ons the app depends
on, their functions and their elements, so every target that runs the
program binds the same names.
13: crate::layout_ir::BgSpec gains Image and
crate::layout_ir::Attributes gains bg_fit, so bg can name an
image and say how it fills the box.
14: CompiledApp::unlinked lists the optional subsystems the engine
shipped beside the app was linked without, so a script calling one of
their builtins is told why nothing happens.
15: CompiledScript gains module, the runtime module that runs the
program, and a program compiled to bytecode carries no source; the
flattened script_source field is gone.
16: CompiledScript gains source_map, and
crate::layout_ir::LayoutIR gains script_map, so an error in a program
shipped as source names the script file and line the author wrote rather
than the markup file.
17: a tag’s defaults (a <column>’s direction, an <overlay>‘s
placement) are user-agent rules in the combined stylesheet rather than
values the parser writes into crate::layout_ir::Attributes, and the
parts a widget expands into carry their geometry in markup_styles. A
restyle rebuilds an element from those, so an artifact written before
would lose its tags’ defaults the first time it restyled.
18: crate::layout_ir::Attributes gains widget_attributes, the
attributes an element with a registered custom tag was written with, so
the widget registered for the tag is handed them when the tree spawns.
A second consumer rides this constant: compiler plugins (lumenc-plugin)
bake it into their descriptor and exchange bincode LayoutIR payloads
with the loader, so a bump obsoletes every built plugin until it is
rebuilt against the new tag.