-
v0.3.8 Stable
released this
2026-10-14 06:36:04 -04:00 | 213 commits to main since this release0.3.8 — ImGui backend from the Forgejo fork, trimmed
The embedded ImGui backend is now built from the fork
intpa/imgui-smash(branchdeluxe, commit7f0e47c): upstreamCoolsonickirby/imgui-smashbb47b205plus the renderer correction that used to be a local patch, with the Dear ImGui demo and metrics windows, the debug tools and two unused default fonts removed. The displayed font (JetBrains Mono NL) and theig*ABI are unchanged, so the overlay looks the same and still borrows a standalonelibimgui_smash.nrowhen one is present.0.3.7 0.3.8 Archive libimgui_smash.a17,181,302 13,851,556 NRO size 1,896,448 1,531,904 .text1,402,336 1,179,744 .rodata343,120 225,200 .data69,912 48,864 .bss138,672 131,568 Resident image 1.95 MB 1.59 MB Deluxe's own code is unchanged.
patches/imgui-smash/archive-pin.jsonnow points at the fork and applies no patch;tools/prepare_imgui.pytreats the patch step as optional.Standalone companion. The same fork commit builds the standalone backend plugin:
libimgui_smash.nro888,832 B (was 1,282,048), SHA-256a3f794b2d2af15d5f2c2868f22e81c865702524160640864604731b7afe6775d, identical export set,1.92.7 WIP (19263)tag andtext_offset == 0. It is not a release asset here; it ships from the fork.Eden acceptance (2026-10-14): external host (trimmed standalone + Elite Legal Stages), embedded host, and reversed load order all render Deluxe's Debug and settings views and Elite's stage list cleanly at 60 fps with no asserts. Evidence in the tangent directory
imgui-fork-1014/eden-test/.Gates: 303 host tests, host and Skyline Clippy with warnings denied,
cargo build --no-default-features, rustfmt,tools/test_prepare_imgui.py, Skyline release build.Asset SHA-256 Size libssbu_online_deluxe_rewrite.nroc247bd377a4220233c4bf56470d23a6ea267b752b99cfd02eb3b26b4805572221531904 Build
0.3.8-5c97c9c935fe-1791974104, module34009bd1fe3ac9b329b74635e8738496e84bdde82cbde6e1adc71322d41c251b, 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)
-
v0.3.7 Stable
released this
2026-10-13 22:39:10 -04:00 | 216 commits to main since this release0.3.7 — runtime footprint trims
What the plugin holds while the game runs, after a symbol-level pass over the 0.3.6 ELF:
- Diagnostics thread stack 2 MiB → 256 KiB. The Switch std gives every Rust thread a 2 MiB stack from the game heap unless the spawner sets one; Deluxe never did. About 1.75 MiB of heap back for the whole run. Hardware check: heartbeats keep arriving in
hang-trace.log, no crash report namingdeluxe-diagnostics. - Pia RTT station table allocated on first use. The 107 KB table (253 stations × 100-sample ring) lived in
.data; it is now allocated by the diagnostics poll after the first RTT sample of the process and never exists offline. Until it exists the overlay shows exactly what an empty table shows (tested). - API trace chunks 4096 → 2048 rows (80 KiB
.bss); still ~1.9 s per chunk at the measured hardware rate against the 500 ms drain. - Callback capture buffer (64 KiB) allocated per capture and freed after export; the render path still never allocates.
Sections
.text1402336 /.rodata343120 /.data69912 /.bss138672; resident image 1.95 MB (0.3.6: 2.21 MB). With the stack the steady-state cost drops by about 2.0 MB.Not in this release: the embedded imgui backend trims, which are being prepared in the fork
intpa/imgui-smashfor both the embedded archive and the standalone companion plugin.Gates: 303 host tests, host and Skyline Clippy with warnings denied,
cargo build --no-default-features, rustfmt, Skyline release build.Asset SHA-256 Size libssbu_online_deluxe_rewrite.nro8562746a292942cf23df19f9e6781cc37b623dda305337161b730e14813707ea1896448 Build
0.3.7-61d022bdc3db-1791945438, modulec4beb790b8effb2e07ab4676fabab248c8c8733fcef47ab0abe332931f1dd5f7, game 13.0.5.manifest.jsoncarries the ELF and source-archive digests.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Diagnostics thread stack 2 MiB → 256 KiB. The Switch std gives every Rust thread a 2 MiB stack from the game heap unless the spawner sets one; Deluxe never did. About 1.75 MiB of heap back for the whole run. Hardware check: heartbeats keep arriving in
-
released this
2026-10-13 19:54:54 -04:00 | 220 commits to main since this releaseKernel memory probe. Every hang-trace heartbeat now carries mem_used, mem_total, mem_free and heap_region in bytes from svcGetInfo on the game process (TotalMemorySize, UsedMemorySize, HeapRegionSize), refreshed every 500 ms by the diagnostics thread and shown as a Memory row in the Debug view's Performance table. No hook changed; the UI path makes no system call. The same call works under Eden, so console and emulator headroom compare directly.
Build 0.3.6-c45b2f91b4ee-1791935605. NRO SHA-256 792d88778925c0e6963cf5bead29b1158f73f1b535c59948ae20fef93938c5e4 (2002944 B). Gates: 301 host tests, host and Skyline clippy with warnings denied, no-default-features build, fmt, Skyline release build. See docs/VALIDATION.md "0.3.3" (0.3.6 paragraph) and docs/DEBUGGING.md "Hang trace".
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
released this
2026-10-13 18:32:04 -04:00 | 223 commits to main since this releaseThe API trace no longer holds a capture in memory. Rows are packed to 20 bytes and streamed: hooks fill one of two 4096-row chunks (160 KiB in .bss, the whole resident cost) while the diagnostics thread drains the other into the open api-.csv every 500 ms. Nothing is copied at the end. Capture length is bounded by the 30 s duration, not by capacity; rows that arrive while both chunks are full are counted in skipped.
CSV: header written when the capture arms; engine, reason, skipped and event_count move to the footer before "# complete=1". tools/analyze_render_trace.py reads metadata anywhere and is unchanged.
Release profile opt-level = "s": .text 1590896 -> 1401296 B. Idle resident image 2.21 MB (0.3.2: 3.99 MB); a running capture adds about 190 KB where 0.3.3/0.3.4 added 2 MiB plus a 2 MiB copy at export.
Build 0.3.5-ee936bc148d5-1791930600. NRO SHA-256 6b22546e0a0579011f37c3ff3780e7a9f9955226195424ff02665ad142a65dfb (2002944 B). Gates: 300 host tests, host and Skyline clippy with warnings denied, no-default-features build, fmt, Skyline release build. See docs/VALIDATION.md "0.3.3" (0.3.5 paragraph).
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
released this
2026-10-13 18:11:00 -04:00 | 226 commits to main since this releaseFollow-up to 0.3.3: the per-capture API trace allocation is now fallible. Arming a timing or CSS capture on a game heap that cannot spare 2 MiB is refused and reported as "timing capture could not be armed" instead of aborting the game. Nothing else changed; resident footprint stays 2.23 MB.
Build 0.3.4-f1d570ccb074-1791929407. NRO SHA-256 f514bfe81f142541e5211bc2a9302581fc0d162159d111d5ebd56df41a2042de (2183168 B). Gates: 298 host tests, host and Skyline clippy with warnings denied, no-default-features build, fmt, Skyline release build. Not yet run on hardware. See docs/VALIDATION.md "0.3.3" (0.3.4 paragraph).
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
released this
2026-10-13 17:41:25 -04:00 | 230 commits to main since this releaseResident footprint 3.99 MB -> 2.23 MB. 0.3.1 kept the 65536-event API trace in .bss; 0.3.3 allocates it on the diagnostics thread when a timing/CSS capture is armed and frees it after the CSV export. No capture, hook, flag or overlay row changed.
Context: 2026-10-13 evening console boots (0.3.2 + Training Modpack r31 + the OBS companion's trace build) failed before the title with null-pointer faults in unrelated game threads and no plugin frame on any stack, the pattern of a game heap the loaded plugin set has outgrown. This release removes Deluxe's 1.9 MB share of that growth. Not yet run on hardware.
Build 0.3.3-528137cdff51-1791927586. NRO SHA-256 e930c8f34d1752bf24b1819cc8b86322abef3c2303ef50f3ef8544a5ae9d25f3 (2183168 B). Gates: 298 host tests, host and Skyline clippy with warnings denied, no-default-features build, fmt, Skyline release build. See docs/VALIDATION.md "0.3.3".
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
Deluxe 0.3.2 — hang trace Stable
released this
2026-10-13 13:19:55 -04:00 | 234 commits to main since this releaseAlways-on
hang-trace.logfor loading-screen freezes: a 5 s heartbeat of this plugin's hook call counts (present, backoff idle pass and sleep, the three CAPTURE_CSS hooks, common-module load/unload, per-fighter tick, cut-in) marking any hook that entered and never returned as ACTIVE with its age, plus first-firing and scene-change lines stamped by system tick. Requested by the Training Modpack freeze investigation. No behaviour change.Build 0.3.2-85a756321310-1791911904. NRO SHA-256 73823f8f67d6a3b2d3a0de35814042fa1ecea293fef01dae0828cbc1f6eefd8d (2183168 B), module 63b8b5fb9d494c24eeb1b78c2691c1fb70814d945402c7f38ca62900d28aa8fc. Gates: 298 host tests, host and Skyline clippy -D warnings, no-default build, rustfmt, Skyline release build. Not yet run on hardware or Eden. See docs/VALIDATION.md '0.3.2' and docs/DEBUGGING.md 'Hang trace'.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
released this
2026-10-12 22:41:36 -04:00 | 238 commits to main since this releaseCharacter-select capture and backoff eligibility gate.
- Dispatcher backoff now sleeps only after a scene hook has fired and while the tracked window presented within the last 250 ms; the Performance row reads
Armeduntil then (install log code 102a=5marks the first pass). Boot, the logo/movie/title sequence and a stalled renderer run the game's original loop. - Opt-in
CAPTURE_CSSboot flag (empty file insd:/ultimate/ssbu_online_deluxe_rewrite/): three read-only hooks (dispatcher registration0x3549720, dependency wait0x354ccd0, UI job0x375e260) and an automatic 30 s capture on each character-select entry. Keep the hand still for ten seconds, then move it for twenty. Newapi-<tick>.csvrows: 60/61 per-frame actual backoff sleep totals, 62/63 read-only thread priority and core mask, 64 UI dispatch, 66 dependency waits, 77 UI job span. Nothing is set or reordered. Without the flag these hooks do not exist. - Manual L+R+Up capture lasts 30 s; the API trace holds 65536 events in
.bss, so the NRO is smaller than 0.3.0. tools/analyze_render_trace.pyreports acss_capturesection.
Smash 13.0.5. NRO SHA-256
9511e8c0f7946bd50434d78f7607283a84f13d299dfe6e6e2aad88c77b43e840(2174976 bytes, build0.3.1-00660a3d63cc-1791859184). Hardware validation of the character-select capture is pending; see docs/VALIDATION.md.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Dispatcher backoff now sleeps only after a scene hook has fired and while the tracked window presented within the last 250 ms; the Performance row reads
-
released this
2026-10-12 15:59:32 -04:00 | 240 commits to main since this releaseDispatcher idle backoff: the character-select slowdown fix, applied to all profiles and scenes.
Root cause (Astra xhigh trace): the game's task dispatcher (main+0x354a6d0) busy-polls six empty job queues while the main thread waits ~4.8 ms per CSS frame on one nn::ui2d::Layout animation job (main+0x375e260, worker 1); in a match the same wait is ~0.9 ms. The two-image LessLag ring cannot hide the resulting variance. This release adds one inline hook at main+0x354ab48 that lets MainThread sleep briefly (5 us doubling to 50 us after 16 spinning passes) only when every queue is empty, every pending counter is still non-zero and no fiber is ready to resume. No job, counter, lock or ordering changes. Performance view gains a "Backoff" row; DISABLE_BACKOFF flag and dispatcher_backoff.ini tunables documented in README.
Eden production A/B/A (175% CPU quota): CSS LessLag 55.6 -> 60.0 -> 54.2 fps (off/on/off) at 26.6 -> 19.5 -> 26.8 CPU ms/frame; Vanilla 60.0; live match 59.8 fps at 16.3 CPU ms/frame; unlimited 60. Installed on the Switch 2026-10-12 19:58Z; hardware observation pending (docs/VALIDATION.md).
Standalone version: https://git.syntaxbyexample.com/intpa/ssbu-dispatcher-backoff (one owner per hook site; do not stack both).
Assets: libssbu_online_deluxe_rewrite.nro SHA-256 f22d94950be1b4601ad9137a8d87acf6eccf2ec599eb48812e6f386f8e7403d8 (2465792 bytes, build 0.3.0-8aeaa5391343-1791833455, module cac8cc1b...ca31) and its manifest.json.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
released this
2026-10-12 12:44:26 -04:00 | 245 commits to main since this releasev0.2.1: defer host persistence until a pending plugin change is applied
Pinned reference for plugin consumers. Crates at this tag: deluxe-plugin-abi
2.0.0, deluxe-plugin-sdk 2.0.0 (unchanged from v0.2.0); host crate 0.2.1.
Change versus v0.2.0: a REQUEST_PENDING answer no longer writes the plugin
INI; the host persists when it observes current(option) equal to the pending
choice (checked every overlay draw, page hidden or not) or when a later
request on that option returns REQUEST_APPLIED; stepping a pending change
back to the live value cancels it and writes nothing. APPLIED unchanged.Clean host NRO built from this exact tree:
build_id 0.2.1-aa8c33ff469b-1791823438
file libssbu_online_deluxe_rewrite.nro
sha256 eb87feb1cbcbc2b2c4f4adbe15008d424def377fe2e1d854eaaf880c7ef69f88
size 2453504 bytes
module_id 8e8e9491d0eddd5891357113cf68ca83b8f5fe0f1a82f6717eedc875f455977f
elf sha256 d3e08612f7a6017c06d49e08bc7b35c0c938946a35f15bb333ce077d518d0b36
Game 13.0.5. 286 host tests + SDK round-trip; host and Skyline Clippy -D
warnings; no-default build; rustfmt; Skyline release. Not installed on
hardware (the Switch has d773).Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)