Every upstream piece, at the commit in UPSTREAM.md. Generated by
mix run tools/port_status.exs; notes come from tools/port_notes.exs.
191 pieces. green: 191, tolerance: 0, blocked: 0, todo: 0.
- green: registered, and frame-for-frame identical to upstream in every
golden run, text and colours (
test/pieces/<slug>_test.exs). - tolerance: identical except for the cells allowed in
test/fixtures/tolerances.exs(seePORTING.md). - blocked: cannot be matched; not registered; the note says why.
- todo: not ported yet.
Frame times are milliseconds on average, played as upstream's
scripts/check.ts times them (every 1/fps seconds for 6 s), on the machine
that generated this file. Upstream's budgets: text pieces 4 ms, scenes 10 ms;
a piece over its budget says so.
| piece | category | status | avg ms | notes |
|---|---|---|---|---|
| almalinux | distros | green | 0.09 | |
| alpine-dawn | scenes | green | 10.35 (budget 10) | a certified fast pow in the halftone dot, redone with :math.pow wherever a decision sits near its threshold; static cells precomputed to their dot |
| alpine-linux | distros | green | 0.12 | |
| analog-clock | objects | green | 0.02 | reads env.now; notes the wall clock at the first frame rather than at init (the same instant when played at once) |
| aquarium | creatures | green | 0.04 | |
| arch-linux | distros | green | 0.08 | |
| aurora | nature | green | 0.20 | |
| aurora-fjord | scenes | green | 12.61 (budget 10) | a certified fast pow for the dot and the rays; terms with a zero envelope skipped; over the 10 ms budget, under 3x |
| bar-chart | data | green | 0.05 | writes clip at the frame's edge where unusual options would make upstream's lines grow past cols; a dataset with no values draws zeros where upstream throws |
| big-text | type | green | 0.00 | |
| black-hole | space | green | 0.32 | only the ray-path entries some ray uses are integrated, each once, in upstream's push order |
| bonsai | nature | green | 0.07 | its own hash; a leaf off the grid reads JS's undefined and is skipped |
| boot-log | ui | green | 0.03 | |
| bouncing-balls | physics | green | 0.26 | balls bounded 1..5 as upstream clamps them; a highlight power below half an ulp of the sum is skipped |
| box-frames | ui | green | 0.00 | |
| butterfly | creatures | green | 0.62 | shading skipped exactly where only a hit/miss is needed; per-column perspective hoisted |
| c | logos | green | 0.14 | |
| calendar | ui | green | 0.00 | reads env.now; keeps upstream's play-time offset from the wall clock, re-synced the same way |
| campfire | nature | green | 0.72 | a negative lift to the power 1.4 (NaN upstream) skips the tongue; the flood fill's += 2 marker changes the stored Float32 value, reproduced |
| candle | objects | green | 0.77 | halo neighbours by flat index wrap across rows, as upstream's do; the candlestick is traced once in init |
| candlesticks | data | green | 0.08 | seeds go raw into mulberry32, as upstream's; an open of 0 prints NaN% or Infinity% as upstream does |
| cat | creatures | green | 0.01 | |
| centos | distros | green | 0.09 | |
| cherry-blossom | nature | green | 0.06 | |
| chladni | physics | green | 0.13 | upstream's NaN crossing sentinel is a missing key; grain trips precomputed in init (~0.1 s) |
| clojure | logos | green | 0.16 |
| coffee | objects | green | 0.03 | upstream's NaN from a negative base to the power 1.5 just above the surface draws the wisp as '|' or '.', reproduced; the still picture is traced in init (~0.14 s) | | contour-map | nature | green | 1.14 | the || 1e-9 fallbacks for a zero hypot and gradient are kept | | cpp | logos | green | 0.13 | | | cpu-meters | data | green | 0.05 | restarts from a cached post-warm-up snapshot when t goes back, as upstream rebuilds to the same state | | csharp | logos | green | 0.13 | | | css | logos | green | 0.14 | | | cube | shapes | green | 0.16 | | | dart | logos | green | 0.13 | | | debian | distros | green | 0.06 | | | deep-reef | scenes | green | 12.47 (budget 10) | a certified fast pow, with Float32 store checks; writes past the buffer's end dropped as a typed array drops them; over the 10 ms budget, under 3x | | deepin | distros | green | 0.08 | | | desert-night | scenes | green | 8.31 | its own octave-shifted fBm; a certified fast pow; b = A B grouped as upstream; ~1.3 s init | | digital-clock | ui | green | 0.03 | reads env.now; keeps upstream's play-time offset from the wall clock, re-synced the same way | | dissolve | type | green | 0.08 | the word index wraps with rem where unusual options would make upstream throw | | dividers | ui | green | 0.00 | | | dna-helix | shapes | green | 0.07 | | | donut | shapes | green | 1.71 | | | doom-fire | effects | green | 1.81 | 200 warm-up steps in init (~0.3 s); noise rows reused across steps, as the spread shifts a row a step | | double-pendulum | physics | green | 0.05 | restores its post-warm-up state when t goes back, as upstream re-integrates to the same bits | | earth | space | green | 0.43 | | | earthrise | scenes | green | 1.70 | only the box round the Earth and the twinkling stars are redrawn; the colour cache evolves in mono frames too, as upstream's; ~1.3 s init (heightfield) | | eclipse | space | green | 0.23 | conservative fast paths (squared-distance pre-tests, skipped corona steps that cannot change a cell), checked byte for byte against a build without them | | elementary-os | distros | green | 0.08 | | | elixir | logos | green | 0.09 | | | endeavouros | distros | green | 0.12 | | | epicycles | generative | green | 0.03 | sqrt of a tiny negative from rounding (upstream's NaN) skips the dot | | equalizer | data | green | 0.04 | tests (held -= dt) < 0 on the unrounded double, stores the Float32 | | erlang | logos | green | 0.11 | | | falling-sand | physics | green | 0.57 | | | fedora | distros | green | 0.11 | | | fern | nature | green | 3.36 | 36,000 points a frame: placed with :math approximations, and wherever a point lies within 1e-5 of a cell edge or a cell's character could flip under a rigorous error bound, worked again on the plain path in upstream's order; a property test holds the fast frame to the exact one | | ferris-wheel | objects | green | 0.08 | slanted rim cells picked in a JS Map's insertion order | | file-tree | ui | green | 0.00 | lines trimmed with JS whitespace rules (U+0085 and U+FEFF differ from String.trim/1) | | fireflies | nature | green | 0.20 | count truncated and bounded 0..500; the seed goes to mulberry32 as given | | fireworks | effects | green | 0.05 | | | flag | physics | green | 1.42 | strip crossings worked out once per row level; ~17,000 sin/cos a frame keep it near its budget | | flow-field | generative | green | 0.33 | ink at or below the visible floor is dropped from the state, exactly | | form-controls | ui | green | 0.06 | the clear-email event reads upstream's final script time, as its closure does | | fountain | physics | green | 0.25 | its own three-round hash, in unsigned arithmetic | | fox | creatures | green | 0.04 | | | fractal-tree | nature | green | 0.95 | children start from their parent's Float32-stored tip; the parent's stroke uses the unrounded one | | galaxy | space | green | 0.34 | closest of the space pieces to its budget: two pow and two cos per lit sample | | gauge | data | green | 0.03 | upstream's NaN band sentinel is nil | | gentoo | distros | green | 0.09 | | | glider-gun | generative | green | 0.00 | | | glitch | type | green | 0.02 | | | glxgears | shapes | green | 1.93 | ~67,000 points a frame: face points rotated from precomputed rests; depths quantised with exact tie-breaking by upstream's rule wherever candidates could differ | | go | logos | green | 0.09 | | | gyroscope | shapes | green | 2.02 | the stand's depth buffer computed once; only each cell's final winner is shaded; pow(x, 24) bracketed, exact when the bracket straddles a ramp step | | harmonograph | physics | green | 0.05 | pen positions kept as a 16-bit binary; ~71,000 pow calls in init | | haskell | logos | green | 0.14 | | | hawa-mahal | objects | green | 0.03 | stateful lamps on a clamped play clock | | heart | shapes | green | 2.15 | the sign of a - z*cbrt(q) from signs or a cubed comparison with a margin; cbrt only when that is ambiguous | | heartbeat | data | green | 0.04 | | | heatmap | data | green | 0.06 | | | hilbert-curve | generative | green | 0.08 | | | hourglass | objects | green | 0.17 | the outline marks cells by flat index, wrapping across rows as upstream's does | | html | logos | green | 0.13 | | | icosahedron | shapes | green | 0.06 | per-edge line style kept in state, as upstream's closure keeps it | | java | logos | green | 0.07 | | | javascript | logos | green | 0.16 | | | jellyfish | creatures | green | 0.15 | per-frame trail table by lag; edge sums kept in upstream's order | | julia | logos | green | 0.14 | | | julia-set | generative | green | 0.55 | | | kali-linux | distros | green | 0.09 | | | kite | objects | green | 0.03 | | | kotlin | logos | green | 0.15 | | | kyoto-dusk | scenes | green | 3.67 | pow(peak, 1.1) tabulated by upstream's 1025-step tone table; a per-cell memo of last frame's steps | | landscape | nature | green | 0.09 | reads env.now every frame; night and the moon are not reached at the fixtures' instant and were checked against Node | | langtons-ant | generative | green | 0.07 | the first frame runs 10,350 steps | | lava-lamp | objects | green | 0.12 | | | lighthouse | objects | green | 0.27 | beam terms that would underflow to exactly 0 are skipped | | lightning | nature | green | 0.21 | | | linux-mint | distros | green | 0.10 | | | lorenz | physics | green | 0.46 | the depth sum runs in the trail ring's raw index order, as upstream sums it | | lua | logos | green | 0.12 | | | mandelbrot | generative | green | 2.02 | frames deep in the zoom (15-30 s of each 48 s loop) cost 12-18 ms, over budget for that stretch; a zero derivative (upstream's Infinity) draws nothing | | manjaro | distros | green | 0.11 | | | marine-drive | scenes | green | 6.88 | the water's noises from a per-frame lattice; a glint below half an ulp of the water colour is skipped | | marquee | type | green | 0.03 | JS whitespace rules for trim | | matrix-rain | effects | green | 0.15 | | | maze | generative | green | 0.12 | mazes cached by number; the wall-closing phase is between golden times and was checked against Node | | misty-forest | scenes | green | 5.13 | d = (dist[k] = x) keeps the unrounded double while later reads get the Float32 | | mobius-strip | shapes | green | 1.93 | deferred shading on a Float32 depth buffer; upstream's widest-view search runs in init | | moon-phases | space | green | 0.16 | | | morse | type | green | 0.05 | | | newtons-cradle | physics | green | 0.11 | | | night-coast | scenes | green | 7.57 | the reference scene: time-invariant terms per cell, float-typed hot helpers, a bounded pow in the dot with exact fallback, a per-cell memo across frames, and a per-frame lattice for the sea's noise | | nixos | distros | green | 0.09 | | | not-found | ui | green | 0.03 | | | ocaml | logos | green | 0.16 | | | ocean-sunset | scenes | green | 12.54 (budget 10) | static cells precomputed to their dot, and terms skipped where they are exactly zero | | opensuse | distros | green | 0.07 | | | owl | creatures | green | 0.03 | | | pendulum-wave | physics | green | 0.03 | | | perl | logos | green | 0.16 | | | php | logos | green | 0.13 | | | planet | space | green | 0.25 | upstream's module-level albedo variable is returned alongside the ring opacity instead | | plasma | generative | green | 0.21 | | | plucked-string | physics | green | 0.04 | | | pond-ripples | physics | green | 0.04 | | | pop-os | distros | green | 0.09 | | | progress-bar | ui | green | 0.02 | | | python | logos | green | 0.12 | | | r | logos | green | 0.16 | | | radar | data | green | 0.07 | the corner text is cut at the frame's edge when range or unit overflow it (upstream's line grows) | | rain | nature | green | 0.06 | its own hash, in unsigned arithmetic | | reaction-diffusion | generative | green | 9.15 (budget 4) | 50 steps over 2,880 cells a frame; rows as lists with is_float guards so the arithmetic stays unboxed, and an exact fast Float32 rounding (Veltkamp split); over upstream's 4 ms budget, under 3x | | red-hat | distros | green | 0.10 | | | rocket | space | green | 0.17 | puff splats folded per cell in upstream's puff order, with a Float32 store at each add | | rocky-linux | distros | green | 0.09 | | | rotozoomer | effects | green | 0.95 | | | ruby | logos | green | 0.16 | | | rule-30 | generative | green | 0.00 | | | ruled-mountains | nature | green | 0.32 | | | rust | logos | green | 0.18 | | | saptarishi | space | green | 0.02 | | | scala | logos | green | 0.09 | | | scramble | type | green | 0.00 | | | sea-swell | nature | green | 0.12 | | | sierpinski | generative | green | 0.07 | | | skeleton | ui | green | 0.02 | | | skyline | objects | green | 0.07 | stateful windows on a clamped play clock | | smoke | physics | green | 0.78 | replays upstream's dt loop exactly, sub-step remainders included; 270 warm-up steps in init | | snake | creatures | green | 0.27 | a pure function of t; tail slots keep JS Map insertion order | | snowfall | nature | green | 0.12 | steps in 0.05 s pieces by repeated subtraction from a clamped dt, as upstream; 400 warm-up steps | | solar-system | space | green | 0.03 | the centre is held as an integer so it can index cells | | sparkline | data | green | 0.02 | the format option is not supported; digits held to 0..100 (toFixed throws outside); missing keys follow upstream's ?? defaults | | sparks | effects | green | 0.18 | its own hash in unsigned arithmetic; Float32 heat with a store at every add | | spider | creatures | green | 0.03 | upstream's 0/0 silk slope at the sprite's top row draws nothing; the port returns early there | | spinners | ui | green | 0.05 | with names chosen, the frame shrinks to fit them, as upstream (and leaves meta's size) | | split-flap | type | green | 0.14 | an unparseable time (upstream's NaN) is nil; JS whitespace rules for trim | | spring | shapes | green | 0.12 | | | starfield | space | green | 0.07 | | | starlings | creatures | green | 1.31 | flocking: velocities update bird by bird mid-step and neighbours are visited in upstream's linked-list order; the NaN falcon sentinel is nil; 200 warm-up steps in init | | storm-plains | scenes | green | 5.07 | Float32 floor, jitter and ear stores kept; static cells use a precomputed dot | | sundial | objects | green | 0.02 | reads env.now; the day of the year counts from local midnight on 1 January; redrawn once a minute, the key ignoring the date as upstream's does | | sunrise | nature | green | 0.51 | | | swift | logos | green | 0.15 | | | synthwave | effects | green | 0.06 | every floor row prebuilt in init | | taj-dawn | scenes | green | 7.34 | pow(peak, 1.1) tabulated over upstream's 1025-step tone table; floors stored as Float32 | | terminal | ui | green | 0.02 | | | tesseract | shapes | green | 0.08 | edge styles kept in state; solid or dotted decided once a frame | | three-body | space | green | 0.01 | the 7200 leapfrog steps of one lap run once in init, in upstream's order; frames index the lap | | torus-knot | shapes | green | 1.42 | deferred shading on a Float32 depth buffer; upstream's extent search runs in init | | train | objects | green | 0.21 | a puff a hair past its life (NaN power upstream) draws nothing | | tunnel | effects | green | 1.46 | ray directions and start depths precomputed | | tux | distros | green | 0.08 | | | tv-static | effects | green | 0.04 | | | twisted-ring | shapes | green | 2.50 | face strips wholly in front or behind are decided at their ends | | typescript | logos | green | 0.16 | | | typewriter | type | green | 0.00 | | | ubuntu | distros | green | 0.09 | | | uptime-bar | data | green | 0.06 | | | varanasi-ghats | scenes | green | 13.82 (budget 10) | lamp light and streaks added into Float32 cells in upstream's order; static cells precomputed to their dot, as ocean-sunset; a negative base to the 1.8 (NaN) that upstream always overwrites is skipped | | vinyl | objects | green | 0.06 | | | void-linux | distros | green | 0.09 | | | voronoi | generative | green | 0.95 | upstream's Infinity starting distance is a finite sentinel; coincident seeds (NaN) leave the cell blank | | wave-interference | physics | green | 0.34 | | | wave-text | type | green | 0.00 | Number(x) || fallback reproduced: 0 takes the default | | whale | creatures | green | 0.05 | its own hash, in unsigned 32-bit arithmetic | | wind | nature | green | 0.99 | noise corners hashed once a frame into a table | | windmill | objects | green | 0.63 | | | zig | logos | green | 0.13 | | | zorin-os | distros | green | 0.10 | |