- Rust 93.2%
- Python 6.3%
- PowerShell 0.4%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Release 648 (NRO, manifest, SHA256SUMS.txt) matched anonymously; the clean tag build is byte-identical to the Eden-tested one. Installed over hekate UMS at 17:15Z (installed_verified, verified_in_place); rollback archive on the card. README links 0.10.2. |
||
| config | ||
| docs | ||
| patches/imgui-smash | ||
| reference | ||
| sdk | ||
| src | ||
| tests | ||
| tools | ||
| .gitattributes | ||
| .gitignore | ||
| AGENTS.md | ||
| build.rs | ||
| Cargo.lock | ||
| Cargo.toml | ||
| LICENSE | ||
| README.md | ||
| rust-toolchain.toml | ||
Online Deluxe rewrite
AI-assisted, human-directed and reviewed.
Tested in Eden and on an Erista Switch without issues observed.
Works with Switch firmware 23.0.1, Atmosphère 1.12.1
and Skyline beta 2eb226f (latest checked 2026-10-25).
Validation.
A Rust/Skyline rebuild of Online Deluxe for Super Smash Bros. Ultimate 13.0.5, shipped as one NRO: lower-latency rendering, a small in-game Player Info window and the fork's character-select and network display. No overclocking.
0.10.2 — download NRO and manifest treats an Elite Smash or Quickplay stage as online from its stage load. 0.10.0 let Window Options show or hide each plugin's own page on its own (one row per page, such as FX Control or CPU Pilot). 0.9.0 put the player modes on the You line (ZR+Left/Right picks Stealth, Streamer or the overclock clock, L+R+X toggles it), treated waiting-room practice as Training and used about 300 KiB less memory. Status and version history.
Install only this NRO. It replaces the original Online Deluxe fork, SsbuSync and the PIA manager, so remove all three. If SsbuSync is still loaded, Deluxe switches its hooks off and you are playing the old fork. Install guide
What it does
A window you can open anywhere
Hold L+R and tap D-pad Down to step through the pages; after the last page the window hides.
Settings that need ZR
Select a row with Up/Down, then hold ZR and press Left/Right. A plain D-pad press, a taunt or menu navigation never changes a setting.
Stealth, Streamer and OC on the You row
The You row carries three player-mode icons: the Stealth eye, the Streamer TV and, with the game-aware Horizon-OC fork, a clock.
- Select You.
- Hold ZR and press Left/Right to move the light-blue frame between the icons.
- Press L+R+X to toggle the framed one.
The eye closes and the TV turns green when they are on. This works in the window and in the match strip. ZR+X, ZR+Y and ZR+L3 were removed in 0.9.0; ZR+L3 had been triggering by accident in online matches.
Horizon-OC only when online
The clock decides when Smash's saved Horizon-OC profile may apply.
| Mode | Clock |
|---|---|
| always, as Horizon-OC itself does | White |
| online | Green while the profile is applied, grey while it is held back |
In online mode the profile stops 15 s after the last player disconnects unless one reconnects. Toggle the mode with L+R+X on the framed clock.
These three clips are from Eden with the test-only hoc-standin answering for Horizon-OC, offline, so the clock stays grey; no clock was changed. The two You-row clips show the retired 0.8.1 chords and have not been re-recorded for 0.9.0.
A compact strip in matches
In ordinary matches the window becomes a two-row strip at the top left.
On character select, the fork's status line keeps your profile and input buffer, plus the opponent's settings and coloured ping while their station is live. Native display
Lower-latency rendering
Vanilla, LessLag, LLUltra and LLDoubles trade buffered frames for latency, and Auto picks one per scene. The default is Vanilla+. See the profile table and the measured frames.
Plugin pages
Other mods can add rows or a whole page through the exported API and Rust SDK. The separate FX Control plugin adds its character-FX pages this way.
Plugins explains the API, including a plugin's own ImGui windows. Also in the NRO: dispatcher backoff and opt-in timing captures.
These examples are offline Eden captures of 0.7.0 with manual LessLag,
vanilla_plus=false and the optional FX Control companion. They show the menu,
not online play, Switch performance or FX's gameplay effects. More in
Screenshots; sources in
Media provenance.
Optimizations added by this rewrite
Two things the original Online Deluxe does not do; both have an INI switch
(dispatcher_backoff, early_present, default on). Basics first:
How Deluxe LessLag and LLUltra work.
Dispatcher backoff. When the main CPU task keeps finding no work it can do, the rewrite lets it sleep briefly, with growing pauses up to a small limit, so other tasks get the core. Locks and checks stay as they are. The operator also observed its benefit on Switch, alongside the Eden results. How it works.
Present at the flush. The game asked for a frame to be shown only after the next frame's CPU update, which could miss a refresh. The rewrite queues the presentation as soon as the frame's commands are submitted. It does not make frames faster to compute; it gives the display more time to show them on schedule. How it works.
Conceptual timing diagram, not a measured trace.
Before and after in Eden under a CPU quota calibrated to the console's character-select dip (both switches off on the left, on on the right; LessLag, Performance view open):
| Scene | Both off (upstream behaviour) | Both on |
|---|---|---|
| Character select, hand sweep | ![]() |
![]() |
| Training, LessLag, Pyra Blazing End | ![]() |
![]() |
The console went from 49.9 to 59.85 fps on the hand sweep with the 0.4.0 fix. Emulator clips show the mechanism, not console numbers; the quota, the clip procedure and the measured values are in Mimicking the Switch in Eden and the console results in Rendering profiles.
Controls
| Press | Effect |
|---|---|
| L+R + Down | Next page: Settings → plugin pages → Performance → Window Options → hidden |
| Up / Down | Select a row |
| ZR + Left / Right | Change the selected value (shown as < value >); on You, move the light-blue frame between Stealth, Streamer and OC |
| L+R + X, You selected | Toggle the framed mode: Stealth, Streamer or OC (online/always) |
| L+R + X, NetProfile selected | Toggle Vanilla+; with manual console LLUltra, cycle LLUltra → LLUltra+ → LLUltra++ |
| L+R + X anywhere else | Nothing: it toggles only what is highlighted |
| L+R + Plus or Minus | Show or hide Debug |
Everything else, including 0.6.2's older chords, is in Controls; the You-row icons are drawn in privacy-indicators.svg, and the Horizon-OC clock that follows them (0.8.1) in oc-indicators.svg.
Rendering profiles
| Profile | Textures | Presentation | Console | Emulator |
|---|---|---|---|---|
| Vanilla | 3 | TwoBehind; Vanilla+ (the default) presents at the flush | 1080p, DRS off | 1080p, DRS off |
| LessLag | 2 | OneBehind, presents at the flush | 1080p, DRS on | 1080p, DRS off |
| LLUltra | 2 | Immediate, earlier flush, presents at the flush | 576p, DRS on; ultra_resolution raises it to 720p or 1080p (0.7.0 menu labels: LLUltra+ / LLUltra++) |
1080p, DRS off |
| LLDoubles | 3 | OneBehind, presents at the flush | 1080p, DRS on | 1080p, DRS on |
Auto uses Vanilla in menus, offline matches and Training; online singles get
LessLag on console or LLUltra on emulator; online matches with more than two
fighters get LLDoubles. How Auto recognises an online match, the cleanup hold
(Vanilla*) and DRS are in Rendering profiles.
Measured input delay
Captured frames from a synthetic input to the first visible response in Eden, three trials per cell, on the 0.5.2 build (the earlier builds gave the same normal-phase counts):
| Profile | Normal phase | Later phase | Frames saved vs Vanilla |
|---|---|---|---|
| Vanilla | 6, 6, 6 | 6, 6, 6 | — |
| LessLag | 3, 3, 3 | 3, 3, 3 | 3 |
| LLUltra | 2, 2, 2 | 2, 3, 3 | 4 normal, 3–4 later |
| LLDoubles | 4, 4, 4 | 4, 4, 5 | 2 normal, 1–2 later |
| Vanilla: 6 frames | LessLag: 3 frames | LLUltra: 2 frames | LLUltra, late press: 3 frames |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
These are emulator captures with synthetic input, not Switch input-to-photon measurements. Method, every trial and the caveats: LATENCY_METHODOLOGY.md; full results: PERFORMANCE.md.
Configuration
sd:/ultimate/ssbu_online_deluxe_rewrite/config.ini, created with defaults on
first boot; menu edits are saved automatically. Keys, boot flags and the Eden
overrides are in Configuration.
Diagnostics
Logs live under sd:/ultimate/ssbu_online_deluxe_rewrite/ (install.log,
events.log, hang-trace.log, renderer-status.txt, panic.log). Keep the
exact NRO and its debug bundle when reporting a crash. Event codes, log
formats, bisection flags and the Eden test lifecycle are in
Debugging.
Build
cargo clippy --all-targets -- -D warnings
cargo build --no-default-features
cargo test
cargo skyline clippy -- -- -D warnings
/usr/bin/pwsh -NoLogo -NoProfile -NonInteractive -Command '& ./tools/Build.ps1 -Package'
Toolchain, native dependency and release steps: Build.
Documentation
| Topic | Document |
|---|---|
| Install, coexistence with other plugins, rollback | INSTALL.md |
| Controls and the settings rows | CONTROLS.md |
| Screenshots and GIFs | SCREENSHOTS.md |
| Media builds, encoding and scope | MEDIA_PROVENANCE.md |
| Rendering profiles, Auto, present-at-flush, measured results | RENDERING.md |
| Mimicking the Switch in Eden (CPU quota bias for clips and A/B runs) | EMULATOR_METHOD.md |
| Native character-select and arena display | NATIVE_DISPLAY.md |
| Dispatcher backoff | DISPATCHER_BACKOFF.md |
| How another plugin plugs in (menu rows, or its own ImGui windows) | PLUGINS.md, sdk/README.md |
| Timing captures | CAPTURES.md |
| Configuration keys and boot flags | CONFIGURATION.md |
| Logs, event codes, crash diagnosis, Eden test lifecycle | DEBUGGING.md |
| Performance measurement method and results | PERFORMANCE.md, LATENCY_METHODOLOGY.md |
| Build, toolchain, release | BUILD.md, IMGUI_DEPENDENCY.md |
| Validation ledger (every build, install and console result) | VALIDATION.md, STATUS.md |
| Fork provenance and deliberate differences | reference/README.md, FORK_PARITY.md |
License
This repository is licensed under the GNU Affero General Public License v3.0 (LICENSE), the same license as upstream saad-script/ssbu-online-deluxe.
Exceptions, not covered by LICENSE:
sdk/: the plugin SDK insdk/(deluxe-plugin-abi,deluxe-plugin-sdkand the demo plugin) is original work and is not derived from upstream. It is licensed under the MIT License (sdk/LICENSE).patches/imgui-smash/: these files modify, and build, the C++ library of Coolsonickirby/imgui-smash (bb47b205). They keep imgui-smash's license, the GNU GPL v2 (patches/imgui-smash/LICENSE, copied verbatim fromimgui-smash/LICENSEatbb47b205).














