-
v0.5.7 Stable
released this
2026-10-18 20:09:41 -04:00 | 70 commits to main since this release0.5.7 — Streamer chord behind ZR
The Streamer toggle is now L+R with ZR held, then Y. The ZL variant, and both triggers
together, do nothing. ZR is already the hold every window edit needs since 0.5.6.Why: after the first 0.5.6 online session the card's saved settings had
streamer=truewithout
the operator meaning it, so the opponent's name, connection, settings and ping were hidden by
design; the chord had flipped it unnoticed during window use (ZL is also Training's
controlled-fighter swap modifier). The 0.5.5 live-peer rule was not involved: no code 112 fired,
the handshake, confirm and 494 RTT samples were all there.No INI change. If Streamer is already on in a saved config, turn it off on the Streamer row with
ZR held, or with L+R+ZR+Y.Also recorded in this release's docs: the first console boot of 0.5.6 ran Vanilla+ in menus, the
character select and Training with 0 early-present mismatches over 89,500 presents, and its online
match kept a locked render cadence (p99 16.87 ms) while the simulation stalled on remote inputs,
so that match's instability was the connection, not frame drops.Verification: 238 host tests, clippy clean, no-default-features build, Skyline build. Console
check owed: L+R+ZL+Y changes nothing, L+R+ZR+Y flips the Streamer row.Assets:
libssbu_online_deluxe_rewrite.nroand itsmanifest.json(SHA-256 in the manifest).
Install path:sd:/atmosphere/contents/01006A800016E000/romfs/skyline/plugins/. Plugin API
unchanged (v4); FX Control 0.2.1 remains compatible.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
v0.5.6 Stable
released this
2026-10-18 17:24:04 -04:00 | 73 commits to main since this release0.5.6 — Vanilla+ is the default, UltraRes 1080p, ZR-hold for every window edit
Vanilla+. Vanilla keeps the game's own three-image swap chain but presents the acquired image
at the flush that carried that frame's last submission, one CPU update earlier than the game does,
the same early present LessLag has used since 0.4.0 and LLUltra/LLDoubles since 0.5.2. The console
traces show the acquired image is complete at that flush in the three-image shape too, so this
saves the whole update (about 9 to 13 ms in menus and on the character select) of display latency
without touching the ring, the acquire or the simulation.- New INI key
vanilla_plus(true/false, default true): withrender_mode=vanillaand Auto
both defaulting on, the shipped default mode is now Vanilla+ (Auto's Vanilla choice outside matches
included). - Hold L and R and tap X to toggle it live; the setting is saved. The NetProfile row, the
in-match strip and the native character-select banner readVanilla+(manual),Vanilla+*
(cleanup hold) orAuto:Van+; plainVanilla/Auto:Vanwhen off. No new NetProfile entry. early_present=falsestill turns every early present off. The peer exchange still announces
Vanilla; L+R+ZL/ZR+X (the fork's retired FPS++ chord) stays inert.- Eden smoke of this build: 59,203 early presents each matched by one skipped game present,
0 mismatches, 60 fps on menus, character select, Training and a Training hot swap, toggle round
trip saved. Console: not yet verified.
UltraRes 1080p.
ultra_resolution=1080(the UltraRes row walks 576p → 720p → 1080p) lets console
LLUltra render at the native level; dynamic resolution still steps down from it. Offered because an
overclocked console (Horizon OC) held 60 at 720p. Default stays 576p.ZR-hold everywhere. With the Deluxe window open, a Left/Right value change on any row needs ZR
held in every scene, not only while a fight is live; a plain Left/Right is ignored and Up/Down still
move the selection. ZL + D-pad on the native online panes (window closed) is unchanged.Verification: 238 host tests, clippy clean, no-default-features build, Skyline build. Console
checks owed: Vanilla+ visuals andrenderer-status.txtcounters in menus/CSS/Training, the L+R+X
round trip, LLUltra 1080p at 60 under OC, the ZR-hold round trip. Details:docs/VALIDATION.md
("0.5.6 — 2026-10-18"),docs/RENDERING.md("Vanilla+").Assets:
libssbu_online_deluxe_rewrite.nroand itsmanifest.json(SHA-256 in the manifest).
Install path:sd:/atmosphere/contents/01006A800016E000/romfs/skyline/plugins/. Plugin API
unchanged (v4); FX Control 0.2.1 remains compatible.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- New INI key
-
v0.5.5 Stable
released this
2026-10-18 16:08:42 -04:00 | 78 commits to main since this release0.5.5 — the opponent display needs a live peer
Fixes the operator-reported case where, after choosing Rematch Yes while the opponent
declined, the opponent's player info stayed on screen.- A bound opponent station that has produced no RTT sample for 10 s (
pia_rtt::LIVE_MS) is
treated as disconnected: the Player Info opponent column, the in-match strip'sPeer:line
and its facts, the ping cell, the peer-gated Settings rows and the native CSS banner line all
hide. A new binding gets the same 10 s grace, so a fresh opponent shows at once. - New event code
112 PeerStaleinevents.log:a= station index,b= silence in ms, one
row per live-to-silent transition. A112row in ordinary play would mean 10 s is too short
for the console's loading gaps; please report it. - Arena roster lines and the station-left protocol gate are unchanged. No INI change.
Background: Deluxe only learns of a graceful leave through Pia's station-left hook, which drops
leaves whose protocol id differs from the RTT table's, and nothing aged a bound peer out. The Eden
LAN-Online harness could not reproduce the console case (its decline ends the session, which
already cleared the peer), so the hiding branch is covered by unit tests and the console run.
Details:docs/VALIDATION.md("0.5.5 — 2026-10-18").Verification: 236 host tests, clippy clean, no-default-features build, Skyline build; Eden smoke
of this NRO showed the opponent throughout a live match, at the results screen and on the
"Rematch?" prompt with no false112. Console: not yet verified (first boot of this build
pending; 0.5.4 booted fine on 2026-10-18).Assets:
libssbu_online_deluxe_rewrite.nro(1,437,696 B, SHA-256
cf57cf80f25f2e837deabaf859489dc00653692c269fb4a6e2069a6a1b9bf8c2, build id
0.5.5-6a9e61afdac8-1792351203) and itsmanifest.json. Install path:
sd:/atmosphere/contents/01006A800016E000/romfs/skyline/plugins/. Plugin API unchanged (v4);
FX Control 0.2.1 remains compatible.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- A bound opponent station that has produced no RTT sample for 10 s (
-
v0.5.4 Stable
released this
2026-10-17 17:14:48 -04:00 | 83 commits to main since this release0.5.4 — the per-file reduction pass
Patch release of the
reduction-candidatework merged intomainon 2026-10-17.
No behavior change intended; the product is still one NRO. (This merge was briefly tagged
v0.6.0by mistake; that tag and release were removed the same hour. 0.5.4 is the release.)What changed
peer_transport.rs,pia_rtt.rs,native_banner.rsandruntime/ui.rsrewritten around fewer
abstractions (one counter table, one publication type, one text builder and one style decision for
the native banner, one row model and two renderers for the Player Info window). Source went from
22,253 to 15,332 code lines (comments and blanks excluded,#[cfg(test)]modules excluded), −31 %.- Earlier reduction tiers on this branch: the Tier 1 and Tier 2 removals recorded in
docs/FORK_PARITY.mdanddocs/VALIDATION.md.
Evidence (see
docs/VALIDATION.md)- Input-latency trials repeated on the candidate package (build
0.5.3-962eb3d1d19f): same frame
reduction as before the pass. - Coverage trace of the whole product on the coverage variant of the same source (Eden offline
scenarios, LAN-NSO Quickplay, two arenas, Background matchmaking, Co-op): 1,047 of 1,192
instrumented functions executed. The functions never executed are listed in the evidence root's
coverage-1017/report-final/never-functions.md; none of them are on the match path. - The hook sites behind
deluxe_rewrite_arenaanddeluxe_rewrite_background_matchmakingnever
fired in any scenario (a correctness finding, left for a follow-up).
Known limits
- Not device-tested before this release: the 0.5.4 NRO is installed on the operator's console as part
of this release; the card run is the acceptance test. - The candidate and coverage builds abort at startup on Windows Eden (an
nn::fs::RenameDirectory
abort from the plugin); Linux Eden and the console are fine. Follow-up open.
Assets:
libssbu_online_deluxe_rewrite.nroandmanifest.json(SHA-256 inside the manifest).Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
v0.5.1 Stable
released this
2026-10-15 08:00:09 -04:00 | 165 commits to main since this release0.5.1 — render-opts teardown guard
Fixes a crash at the Training → character-select exit (and other scene exits) on LessLag, LLUltra and LLDoubles.
What happened. With render options active, Deluxe relocates the game's fighter model update into the post-scene hook. When a fighter module unloaded in the same frame, that relocated update could run on a torn-down module and the game aborted (kernel
InvalidHandleinsidenn::os::LockMutex,Userspace PANIC). On the 0.5.0 release this hit 5 times in about 22 Training exits in Eden.The guard.
fighter_probebumps an unload epoch for every module unload. On a frame where the epoch changed, the post-scene hook skips the relocated model update and the fighter worker but still submits the queue, records event code 48 (RenderTeardownGuard) and counts it asteardown_guard_skipsinrenderer-status.txt. For the next 180 scene frames the frame recorder falls back to the game's own ordering, then render options resume.Evidence. Eden: 22 Training → character-select exits on the candidate with the guard firing on every exit and zero aborts, against 5 aborts in about 22 exits on 0.5.0 the same night (
docs/VALIDATION.md, 0.5.0 and 0.5.1 entries). Console, 2026-10-15: the operator ran repeated Training exits and a LessLag match on this exact NRO without a crash. Observed on the console and not addressed here: frame rate dropped into the 40s–50s during Kirby's charged hammer in Training while the zoom itself did not drop; see the 0.5.1 ledger entry.Install. One NRO,
libssbu_online_deluxe_rewrite.nro, over the previous build. No config change. Remove the original Online Deluxe fork, SsbuSync and the PIA manager if present (docs/INSTALL.md). Verified on the latest skyline-dev Skyline; the Skyline bundled with upstream Online Deluxe is to be checked next.Build
0.5.1-231f4c82ec3a-1792064680, NRO SHA-256aee3852d905218e922886d338e2540cd4dd379a25c23e5f4f32981b2a24642da, moduled60c4a2e…1fdf.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
v0.5.0 Stable
released this
2026-10-14 17:10:25 -04:00 | 179 commits to main since this release0.5.0 — character FX moves to its own plugin; plugins get their own pages
Character FX is no longer in Deluxe. The On / Off / Reduced effect policy,
its tables and the EFF siblings now ship as the separate
FX Control plugin,
one row per covered fighter plus an All row. Deluxe carries no effect hooks and
no FX row; the NRO is about 70 KB smaller and the Debug view loses its FX
tracker rows. A 0.4.xconfig.inistill loads: the oldeffectsand
effects_scopekeys are ignored and dropped on the next save. If you want the
effects, install FX Control next to Deluxe; its page appears in the window
cycle automatically.Plugin API descriptor version 3. A plugin can ask for its own page in the
window cycle (settings → plugins → each own page → performance), titled with
its label, and may declare up to 32 options. A second export,
ssbu_online_deluxe_online_context_v1, hands plugins the host's ready /
online / match / training bits so they can scope themselves to online play
without hooking the game's scene sites. The Rust SDK is 3.0.0 and still
registers with older hosts (version 2, then version 1) while the spec fits
eight options.Scene tracker as its own hook family. The main-menu, Quickplay, arena,
local-wireless and stage-setup hooks were installed from inside the FX family
until 0.4.2; they are theSCENEfamily now (DISABLE_SCENE), so Auto, the
banners, the captures and the online-context export never depended on FX.Timing capture schema 2.
timing-<id>.csvno longer carries the three FX
columns;tools/analyze_timing.pyreads schema 1 and 2.Tested together with FX Control 0.1.0 in Eden (2026-10-14): the window
cycle ran Settings → FX Control → Performance, Deluxe's Settings had no FX
row, the plugin read Deluxe's online context, and Sephiroth's Gigaflare was
recorded under On, Off and Reduced at 60 fps. That run used the 0.5.0
candidate built fromb0ca667(8b1c936f…); the attached NRO is the same code
rebuilt from the tagged commit (only the embedded build string differs).
Console verification follows the install; seedocs/VALIDATION.md("0.5.0").Assets:
libssbu_online_deluxe_rewrite.nroandmanifest.json(SHA-256 in the
manifest). Smash 13.0.5. Install FX Control 0.1.0 alongside for the effects.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
v0.4.2 Stable
released this
2026-10-14 13:52:29 -04:00 | 194 commits to main since this release0.4.2 — the online entry the scene hooks "missed"
The Quickplay hook was firing all along. What lost the connection was the
main-menu hook: Smash's background matchmaking returns to the main menu while
the search continues and starts the waiting room and the match from there, and
the rewrite reset the connection to Offline on every main-menu entry. The fork
kept Quickplay across the main menu for that reason.- Main-menu entry now keeps a live Quickplay connection (anything else still
resets to Offline). - A Singles/Doubles stage that runs five seconds under a menu-set Quickplay
without the online-latency hook is demoted to Offline, so a stale Quickplay
(the menu hook also fires on some offline menus) cannot keep an offline match
classified online. - Install log code 107 records both decisions; the context row of a demotion
carries source0x0ff11e.
Manual profiles are unaffected. Auto now runs online matches as online from the
stage load; 0.4.1's latency-hook fallback remains as a second net.Repository: the handoff file was purged from the whole history at the
operator's request; tags were re-pointed to the rewritten commits.Assets:
libssbu_online_deluxe_rewrite.nroandmanifest.json(SHA-256 in the
manifest). Smash 13.0.5.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Main-menu entry now keeps a live Quickplay connection (anything else still
-
v0.4.1 Stable
released this
2026-10-14 13:29:49 -04:00 | 196 commits to main since this release0.4.1 — three follow-ups from the first 0.4.0 console session
Opponent leaves the banner when they decline a rematch. The station-leave
event retired the opponent only through a station-to-id binding that exists
with the opt-in peer observer; with the observer off the single remaining
peer stayed shown until the whole session ended. An unbound station leave now
retires the only confirmed peer (two or more peers are left alone).Auto recognises an online match the scene hooks missed. Two Quickplay
matches ran with the connection still classified Offline. When the
online-latency hook fires on a stage the hooks left Offline, Auto now treats
that stage as an online match (LessLag on console, LLUltra on emulator,
LLDoubles for doubles). Menus and the waiting room stay Vanilla, classified
connections are never rewritten, manual selections ignore it.Native status edits need ZL. On an online character select or arena pane
the fork-style D-pad editing changed the input buffer (Left/Right) and the
profile (Up/Down) while the D-pad was moving the character-select hand, which
rewrote settings nobody chose. Hold ZL with the direction to edit; the D-pad
alone only moves the hand. ZL+ZR is still the view chord, and the Settings
window still edits with the plain D-pad.Also in 0.4.0 → 0.4.1: nothing else. 0.4.0 shipped the two-image LessLag
present-at-flush CSS fix (console: 49.9 → 59.85 fps on the hand sweep), the
Vanilla*banner and the opt-inCAPTURE_MATCHmatch capture.Assets:
libssbu_online_deluxe_rewrite.nroandmanifest.json(SHA-256 in the
manifest). Smash 13.0.5.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
v0.4.0 Stable
released this
2026-10-14 13:14:22 -04:00 | 198 commits to main since this release0.4.0 — the character-select stall fix, plus match captures
Two-image LessLag presents at the flush. The console trace showed the real
CSS stall: the game presents a frame only after running the next frame's whole
CPU update, 13.7 ms after submitting it (16 ms with the hand moving), and in a
two-image ring a present after the vsync costs the next acquire a full vsync.
LessLag now presents the acquired image at the end of the flush that submits
it and skips the game's later present of that index. On the console the CSS
hand sweep went from 49.9 fps with 20 % of frames over 20 ms to 59.85 fps
with 1.3 %; texture-wait p95 16.4 ms → 2.95 ms. Online matches: 59.7–59.9 fps,
0.2–0.4 % of frames over 20 ms including the stage load. Eden under a 120 %
CPU quota: p99 19–22 ms vs 32–33 ms before. Counters inrenderer-status.txt
(early_presents,early_present_skips,early_present_mismatches); install
log code 105 records a mismatch.Vanilla*in the banner. A manual selection that the cleanup hold is
running as Vanilla (the regular CSS right after a match) now readsVanilla*
in the banner, the arena lines and the settings row instead of the saved
profile name.Match capture (opt-in). Create an empty
CAPTURE_MATCHin
sd:/ultimate/ssbu_online_deluxe_rewrite/before boot: every stage load arms
the timing + API capture pair (timing-<id>.csv,api-<id>.csv, label
match_singles/match_doubles/match_training) and the capture ends
when the game leaves the stage (results screen or character select), ten
minutes at most. Both files stream to the card from the background thread,
about 4 MB per minute. The flag also installs the three read-only
CAPTURE_CSShooks. Debug view rowMatch capture; install log code 106;
tools/analyze_timing.pyandtools/analyze_render_trace.pyaccept
# reason=scene_end. The capture CSVs'enginefooter is sampled per poll
while recording, so a profile change after the capture no longer labels it
Mixed.Known, not in this release. The opponent window stays after the opponent
declines a rematch. Two online matches were classifiedofflineby the scene
hooks although the latency hook fired; manual profiles are unaffected.Assets:
libssbu_online_deluxe_rewrite.nroandmanifest.json(SHA-256 in the
manifest). Smash 13.0.5.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
v0.3.9 Stable
released this
2026-10-14 08:41:57 -04:00 | 210 commits to main since this release0.3.9 — draw-slot budgets trimmed in the ImGui backend
The embedded ImGui backend is built from fork
intpa/imgui-smashcommitc185303(archive09b296a0…, 13,851,844 B; the companion crate pin is77cdab7). Each of the backend's eight draw slots held a 256 KiB + 256 KiB command pool and a 64 KiB + 64 KiB control block in game heap, 5 MiB in all, for recordings that never exceeded 1,256 B of command memory or 120 B of control memory across the Eden evidence (Deluxe and Elite menus open together through menus, character select, a match and results). Each slot now plans 32 KiB + 32 KiB of command memory, exactly one 64 KiB NX memory-pool page, and 8 KiB + 8 KiB of control memory: 640 KiB over eight slots, with more than 25x the observed maximum before the reserve is touched. An oversized frame is still finished from the reserve and discarded rather than aborting. Geometry buffers stay demand-grown (64 KiB initial, 1 MiB cap); the 4 KiB uniform buffer is unchanged.Deluxe's own code is unchanged; the NRO size is the same because only constants moved.
renderer-status.txtshows the live maxima on the embedded host (imgui_draw_max_command,imgui_draw_max_control,imgui_draw_overflow).Standalone companion. Built from the same fork commit:
libimgui_smash.nro888,832 B, SHA-256946de84f98546cb791640e40fbf5848ea3965c511631ef18b32e5c805b67d50e, identical segment layout, export set,1.92.7 WIP (19263)tag andtext_offset == 0as the 0.3.8 companion (a3f794b2…). It ships from the fork's release.Eden acceptance (2026-10-14, isolated profile, Astra low driver): three runs with Deluxe 0.3.9: external host with the draw-stats build of the companion plus Elite (both windows open on the main menu and the character select, every Deluxe view, then a Shulk vs Wolf match with the compact strip, pause, quit, results and CSS return), embedded host (all views on the main menu and the CSS, portrait hovers), and reversed load order with the release companion plus Elite. All at 59.9–60.0 fps, no crash, assert or window loss. Live counters: run 1 standalone 29,658 submissions, 0 command overflows, 0 failed or pending slots, largest recording 1,448 B command / 120 B control (4.4 % of the 32 KiB initial budget); run 2 embedded 13,201 submissions, 0 overflows, max 1,040 B / 120 B. Details and screenshots in
docs/VALIDATION.mdand the tangentimgui-fork-1014/eden-test/slots-N-shots/.Also in this tag:
docs/VALIDATION.mdrecords the Astra analysis of the four hardware CSS captures from the 0.3.7 boot (css-budget/hw-0.3.7-1014/ANALYSIS.md): in genuine two-image LessLag the character-select dips are texture-ready fence stalls after acquire (81 % of the directional-input increment), not acquire/present calls and not backoff pickup; ranked next experiments stay in existing visual-request hooks.Gates: 303 host tests, host and Skyline Clippy with warnings denied,
cargo build --no-default-features, rustfmt,tools/test_prepare_imgui.py, fork host tests (command_memory_reserve_testwith the new layout assertions,draw_slot_rules_test, both frame-guard tests), Skyline release build.Asset SHA-256 Size libssbu_online_deluxe_rewrite.nro8c20799f3974f45beaf28c2373982bcc546f08f6496ee58ed95852fd78496cca1531904 Build
0.3.9-4fd77a238f9e-1791980278, module8910f60912630c0f4f273a88ffc0889e236e68a7f41c54c1590ae1041955628b, game 13.0.5.manifest.jsoncarries the ELF, source-archive and imgui archive digests.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)