flutter3d → 1.0
rc.1 is reliability and the API's shape; rc.2 is breadth; 1.0.0 follows rc.2. Status as of 2026-10-10, page built 2026-10-09T21:43 UTC.
Now
Goals the tag is gated on
to doP1 A pacing report on a Galaxy A55 and a named mid-range iPhone (iPhone 13 or SE 3rd generation) for three demos (platformer, racing, dungeon), release build, n…
A pacing report on a Galaxy A55 and a named mid-range iPhone (iPhone 13 or SE 3rd generation) for three demos (platformer, racing, dungeon), release build, native resolution, three runs of two minutes after sixty seconds of warm-up, committed under doc/pacing/ with the device, the build and the commit. Threshold: p50 ≤ 16.7 ms, p99 ≤ 33.3 ms, frames over 50 ms ≤ 0.1 %, none over 100 ms after warm-up, resident memory at the end ≤ 1.10 × the value at 30 s and ≤ 400 MB on the A55, ≤ 300 MB on the iPhone. pacing.sh gains the RSS column (adb shell dumpsys meminfo once a second).
to doP2 A two-hour soak on the A55, inline and in the isolate, the platformer on a looped tape, the RSS graph committed.
A two-hour soak on the A55, inline and in the isolate, the platformer on a looped tape, the RSS graph committed. Threshold: RSS(120 min) ≤ 1.15 × RSS(10 min); no frame over 250 ms; no crash or ANR; GC pauses over 50 ms at most one a minute. Needs tool/soak.sh, which does not exist; if it is not written before rc.1, P2 is an rc.2 condition.
to doP3
A parity table for the C core on the racing and shooter tapes over 1 000 steps, in doc/parity/c-core.md, as §9.3 of ARCHITECTURE has for the Dart maths.
A parity table for the C core on the racing and shooter tapes over 1 000 steps, in doc/parity/c-core.md, as §9.3 of ARCHITECTURE has for the Dart maths. Threshold: the world digest every 100 steps bitwise equal on clang/ARM64 Android (the A55), clang/ARM64 iOS, clang/x64 Linux, MSVC/x64, dart2js and dart2wasm. On a mismatch, -ffp-contract=off on every target and a retry; if it still differs, WireHello gains an architecture field, a match across architectures is refused with a sentence, and SUPPORT says "rollback within one build target". digest_platforms.sh grows to tapes and wasm.
to doP4
Rollback between eight phones over real Wi-Fi (RTT measured and written), ten minutes at 60 Hz, inputDelay 2, maxRollbackFrames 8.
Rollback between eight phones over real Wi-Fi (RTT measured and written), ten minutes at 60 Hz, inputDelay 2, maxRollbackFrames 8. Threshold: droppedCorrections ≤ 0.5 % of steps; p99 resimulation time per step ≤ 8 ms on the A55; all eight world digests equal at the last step; no session dropped. Needs a resimulation timer in RollbackSession (today only isResimulating); if the timer or the phones are not there before rc.1, P4 is an rc.2 condition.
to doP5
The APK, IPA and web sizes of flutter3d_app/example after the shader selection, written into the quickstart with the date and the commit.
The APK, IPA and web sizes of flutter3d_app/example after the shader selection, written into the quickstart with the date and the commit. Threshold: APK arm64 release ≤ 20 MB, IPA ≤ 25 MB, web (main.dart.js, shaders and the C core's wasm, gzip) ≤ 5 MB, and the shader part at most half of today's.
to doNightly
The A55 on the impeller runner runs the three demos nightly with p99 ≤ 33.3 ms as the red line;
The A55 on the impeller runner runs the three demos nightly with p99 ≤ 33.3 ms as the red line; seven green nights in a row before the tag; a "stale" badge after 48 hours without a run.
to doGames P1, P3, P5 above.
P1, P3, P5 above.
to doTwins
the twin-shaped example of 4K reads one real source, not a sampler (a published MqttExternalStateInput on mqtt_client, or a REST poller, in the examp…
the twin-shaped example of 4K reads one real source, not a sampler (a published MqttExternalStateInput on mqtt_client, or a REST poller, in the example's own code), keeps its history on a tape and scrubs it through RunTimeline; the five references to the non-existent flutter3d_lab_twin are removed or point at it; GeoOrigin (latitude, longitude, altitude, ENU) is a record on Level and WorldProperties; CONTRACTS' precision paragraph carries a number ("± X mm at Y km from the site origin, physics in float32 relative to the shifted origin") and a physics test at 5 km backs it, not only the view test.
to doLaboratories
a named analytic test with a number (pendulum_period_test.dart:
a named analytic test with a number (pendulum_period_test.dart: the period at θ₀ = 0.1 rad over 100 periods within 1e-4 of the series, with an energy-drift bound), and the number on the education page; the check → AgsClient/XapiClient wire in rc.1 (moved from 5F into 4E); Semantics and textScaler in the lesson viewer and the lab panel in step 4.1 (4L); a pendulum.f3d.experiment fixture read by a test before the editor edits it; one Chromebook and one iPad in doc/pacing/ (reported, no threshold); and the sentence decision 3 lacks, in the review and on the education page: a laboratory that a server verifies by replay stays on deterministic; accurate is for demonstration and ships poses.
Waves
rc.1 Wave 0: the ground (sequential; Dmitrii, then one agent) 4/5
| 0.1 | done | Force-push the rewritten history from |
S |
| 0.2 | done |
|
S |
| 0.3 | done | Commit the current tree by area (foundation, matter, elements, level_scene, the boundaries moves, the scope items, the apps) with the suites as they are, and…Commit the current tree by area (foundation, matter, elements, level_scene, the boundaries moves, the scope items, the apps) with the suites as they are, and push. The branch is a work branch; |
S |
| 0.4 | done | Start the two research agents for the catalog data ( |
L |
| 0.5 | partial | Install |
S |
apps/flutter3d_template_app removed. The baseline at d3f905a56 counted 260 failures in 34 suites, not 136: the review had not run the packages its rows did not name, so wave 1 added an owner for those (1J). 0.4 done: about 120 fluids and 122 solids with sources, in packages/flutter3d_matter/tool/data/ (sources/, and the generators that rebuild them). 331 solid values are recalled (handbook, source not re-read) and want a check before 3A; friction pairs and restitution are the gap (41 entries with a static self-pair, none with restitution), so 3A's "friction for every solid" cannot come from this data alone. 0.5: dart-apitool installed (in ~/.pub-cache/bin, not on PATH); the impeller runner is still Dmitrii's. rc.1 Wave 1: correctness, safety and test triage (parallel, disjoint) 9/10
| 1A | done | §2.1.1 |
L |
| 1B | done | §2.1.7 |
M |
| 1C | done | §2.2.2 |
M |
| 1D | done | The 10 physics failures (mixture layer names, cloth wind, the wedge at 60°, the three character-controller cases), the 2 matter Float32 tolerances;The 10 physics failures (mixture layer names, cloth wind, the wedge at 60°, the three character-controller cases), the 2 matter Float32 tolerances; §2.1.8 |
M |
| 1E | done | §2.2.1 |
M |
| 1F | done | §2.2.3 one |
L |
| 1G | done | §2.1.12 |
L |
| 1H | done | §2.2.5 WebGPU drains |
M |
| 1I | done | The 5 model_core failures ( |
M |
| 1Z | in progress | Snapshots, migration seed, |
M |
rc.1 Wave M: the migration tools (before wave 2, beside wave 1) 3/6
| M1 | done | A kind for what went internal. A new kind, |
M |
| M2 | done | A ceiling and honest numbers. A rule in |
S |
| M3 | done | Four automatic kinds in the lints and the generator.Four automatic kinds in the lints and the generator. Each has a before/after pair in |
L |
| M4 | to do |
|
M |
| M5 | to do | A chain of tables. |
M |
| M6 | to do | A wider corpus. |
S |
- M1 done: 380 entries moved to
internal. The cpu stages are exported frombuiltin.dart, which theinstead:text now says. - M2 done:
- The ceiling is 341, with an allowlist with reasons for the three manual entries wave 1 added. The table now holds 1547 entries, 344 by hand.
- A second rule holds the README's and the guide's numbers to the table.
- A third refuses guidance that names a wave, plan or decision.
- M3 done:
regroup,enumToClass,recordToClassandnullToThrow, each with a fixture pair. - M4–M6 open.
FormatSpecslands with M4. - The 0.8 fixture:
migrate_fixture_testnow allows analyzer errors only under aTODO(flutter3d-1.0)the migration left, because amanualentry leaves the code to its reader. - The editing hook: the plugin hook that runs
dart formaton every edited.dartfile rewrites byte-compared fixtures. Edit those through the shell.
rc.1 Wave 2: the API shape (parallel, disjoint; after wave 1) 0/7
| 2A | to do | D13 (encoders) scratch buffers per uniform block in the four encoders, the skin block written in place, the Impeller readback staging pool bounded (moved…D13 (encoders) scratch buffers per uniform block in the four encoders, the skin block written in place, the Impeller readback staging pool bounded (moved here from wave 4 on decision 52, because it is the one change that moves the number on a phone); GPU timings on Impeller through the engine's own timeline where flutter_gpu gives none (decision 53); A6 one |
L |
| 2B | to do | D13 (core) |
L |
| 2C | to do | D36 |
L |
| 2D | to do | A1 |
M |
| 2E | to do | A7 |
L |
| 2F | to do | D41 `Flutter3dView(simulation:D41 |
L |
| 2Z | to do | Snapshots, migration seed and |
M |
rc.1 Step 2.2: the frame's extension points (one agent, alone; after 2Z) 0/2
| 2X | to do | D20 |
L+ |
| 2X-Z | to do | Snapshots (hardware's own line is touched:Snapshots (hardware's own line is touched: additive only), migrations, the namespace rule, analyze, structure, suites, goldens unchanged (the engine's own materials keep their picture); commit, push. |
M |
rc.1 Step 3.0 (one agent, alone) 0/1
| 3E0 | to do | D33 the expression language in foundation:D33 the expression language in foundation: parser, typed AST with units, a deterministic evaluator on Portable maths, a codec; |
L |
rc.1 Step 3.1 (one agent, alone; after 3.0) 0/1
| 3A | to do | D4 |
L |
rc.1 Step 3.2 (parallel, disjoint; after 3.1) 0/7
| 3B | to do | D6 the core interpolates the thermal and fluid laws from the header tables per body state;D6 the core interpolates the thermal and fluid laws from the header tables per body state; a parity test holds the C and Dart interpolators bit for bit; P1/P2 the Dart |
L |
| 3C | to do | D3 |
L |
| 3D | to do | P3 |
M |
| 3E | to do | P5 |
M |
| 3F | to do | D6 (review) |
L |
| 3G | to do | D2 the view wired to |
M |
| 3Z | to do | The rule every world property and material group has a reader (D18), the lux rule covering |
M |
rc.1 Step 4.1 (parallel, disjoint) 0/12
| 4A | to do | What of D13 wave 2 did not reach:What of D13 wave 2 did not reach: ECS |
M |
| 4B | to do |
|
S |
| 4C | to do | D56 vertex stages without |
L |
| 4D | to do | D37 |
L |
| 4E | to do | §2.5.2 what the lesson viewers need from |
L |
| 4L | to do | D35 for the laboratory audience in rc.1 (decision 62):D35 for the laboratory audience in rc.1 (decision 62): |
S |
| 4H | to do | D30 USD import for twins:D30 USD import for twins: primitives, UsdPreviewSurface and MaterialX materials, the hierarchy and custom attributes into prefabs and levels, a report of what was not carried, a twin fixture; the "Bringing assets in" page gains the USD section. |
M |
| 4I | to do | D32 the editor plugin contract:D32 the editor plugin contract: inspectors from hints for plugin components, materials and entity kinds; plugin-registered commands shared with MCP, gizmos, importers, panels, docks and asset-browser entries; the editor installs the project's plugins; the experiment document's editing side of D31; a sample editor plugin in the runtime example. 4E keeps |
L |
| 4K' | to do | D35 WCAG AA in |
M |
| 4F | to do | §2.7.4 web decoders in a Web Worker where the browser allows and documented where not;§2.7.4 web decoders in a Web Worker where the browser allows and documented where not; HDR panoramas decoded off the UI isolate on native; WebGPU |
M |
| 4G' | to do | D28 |
L |
| 4Z | to do | A draw-count and allocation benchmark on the CPU backend in CI ( |
M |
rc.2
Step 4.2 (parallel by application; after 4.1) — 1.0.0-rc.2
0/6
| 4G | to do | D9 on |
L |
| 4H | to do | D9;D9; D14 Strategy's channel, brands, hit test and caps; Hollow's bombs and roof; Dungeon's |
L |
| 4I | to do | D9;D9; D14 Racing's |
L |
| 4J | to do | D9 on |
L |
| 4K | to do | The quickstart, the scaffold and the examples start from |
M |
| 4Z' | to do | The demo allowlist of the |
M |
rc.2
Wave 4.5: feature coverage (parallel, disjoint; after 4.2) — 1.0.0-rc.2
0/10
| 5A | to do | D47 |
L |
| 5B | to do | D48 |
L |
| 5C | to do | D49 subsurface, hair and cloth lighting models in GLSL and CPU, each declared through the plugin slot table of D21;D49 subsurface, hair and cloth lighting models in GLSL and CPU, each declared through the plugin slot table of D21; D50 the terrain layers material (height, slope, mask) and the grass stage with wind and LOD. |
L |
| 5D | to do | D50 |
M |
| 5E | to do | D52 measurements (distance, angle, area, snapping), exploded view, an element tree with show, hide and isolate, camera bookmarks carrying visibility and …D52 measurements (distance, angle, area, snapping), exploded view, an element tree with show, hide and isolate, camera bookmarks carrying visibility and sections, over 5B's clip planes (coded against its sketch); the showcase pages. |
L |
| 5F | to do | D53 the viewer asks |
M |
| 5G | to do | D54 |
L |
| 5H | to do | D57 a Rapier backend on |
L |
| 5I | to do | D59 post parity:D59 post parity: DoF bokeh shape (blade count, rotation, curvature) and quality tiers; AO bent normals, multi-bounce, specular AO, depth-mip chain; SSR glossy blur, resolution scale, distance fade, debug views; linear fog with sky blend and sun in-scatter; SMAA tuned at run time with diagonal search; shockwave screen distortion; animated grain as an option; bloom firefly suppression; per-node debug views; the shadow map and a node mask as custom-pass inputs; goldens for each on four backends; the comparison page's post rows corrected and the missing rows added. |
L |
| 5Z | to do | Snapshots, migrations, the showcase pages for every new node and widget, goldens for the new stages on four backends, the structure counts;Snapshots, migrations, the showcase pages for every new node and widget, goldens for the new stages on four backends, the structure counts; analyze, structure, suites; commit by area, push. |
M |
rc.1 + rc.2 Wave 5: green, recorded, proven, published, documented (mostly sequential) 0/9
| 5.0 | to do | The proof on hardware (the five items above):The proof on hardware (the five items above): pacing on the A55 and an iPhone, the soak, the C-core parity table, rollback between eight phones, the build sizes; plus one session played on Windows with its report in SUPPORT (D56). The pacing and parity tools exist ( |
M |
| 5.1 | to do | Every suite:Every suite: the fast ones, the Flutter ones, the apps, the browser runs ( |
M |
| 5.2 | to do | Re-record the four golden sets after the last shader change, |
M |
| 5.3 | to do | CI:CI: |
M |
| 5.4 | to do | Documents:Documents: the quickstart rewritten from the pub user's side first ( |
L |
| 5.5 | to do | Publishing:Publishing: |
S |
| 5.6 | to do |
|
M |
| 5.6' | to do | D55 the editor distributed:D55 the editor distributed: |
M |
| 5.7 | to do | Commit by area, push, tag |
S |
rc.1 Wave 6: adoption (parallel with wave 5; rc.1) 0/13
| A1 | to do | Answer issue #81 (the |
S |
| A2 | to do | Discussions on with categories;Discussions on with categories; one chat channel named in README and SUPPORT; a paragraph in SUPPORT "where to write and when to expect an answer"; a Code of Conduct contact that is not a security advisory. |
S |
| A3 | to do |
|
M |
| A4 | to do | The site deployed from CI on the tag (today a manual rsync, two versions behind);The site deployed from CI on the tag (today a manual rsync, two versions behind); a curl of five URLs in the release checklist; |
S |
| A5 | to do | README and |
S |
| A6 | to do | Quickstart:Quickstart: |
S |
| A7 | to do | The cookbook as its own item, out of 5.4:The cookbook as its own item, out of 5.4: twenty files in |
M |
| A8 | to do | A download page:A download page: the web editor by URL first, "build from source" second, the native builds of D55 when they exist, each platform with its SUPPORT status, the unsigned fallback described ( |
S |
| A9 | to do | A GitHub Release for every tag with notes;A GitHub Release for every tag with notes; a "what 1.0 is and why migrate" page (strict semver, four backends, determinism, the agent, |
S |
| A10 | to do | A launch checklist:A launch checklist: channels (r/FlutterDev, Show HN, Mastodon, X, the Flutter and Flame Discords), dates, the URL each post leads to, the first comment, who answers in the first 72 hours; one two-minute video (a bug arrives as a tape, a test reproduces it, rollback on phones) shot before the post, not last. The posts through the humanizer. |
M |
| A11 | to do | D58 |
S |
| A12 | to do | SECURITY rewritten to point at SUPPORT's windows and to name the relay, LTI, MCP and Wasm plugins in its scope;SECURITY rewritten to point at SUPPORT's windows and to name the relay, LTI, MCP and Wasm plugins in its scope; ROADMAP rewritten with a revision date; both under a rule; the root |
S |
| A13 | to do | "One number for the shelf" against "a patch of |
S |