Akira Switch
More actions
| Akira | |
|---|---|
| General | |
| Author | xlanor |
| Type | Other Apps |
| Version | 0.5.1 |
| License | AGPL-3.0 |
| Last Updated | 2026/06/19 |
| Links | |
| Download | |
| Website | |
| Source | |
Akira is a homebrew application for the Nintendo Switch, built with xfangfang's fork of borealis that utilises a forked variant of chiaki-ng. It is maintained by xlanor and kkwong.
Features
The biggest feature change is the addition of PSN remote play, building on Streetpea's work on chiaki-ng and grill2010's reverse engineering of the PSN API. When this is successful, two screens come up: the first is for the CTRL holepunching, and the second for DATA holepunching after the session has been initialised. Rather than show an empty screen, the logs are streamed.
Other features include:
- Remappable input buttons/touchscreen
- Initial wireguard support
- deko3d zero-copy decoding and rendering pipeline
- Selectable gyro source, allowing the left/right joycon to be selected as the actual gyro source when playing in detached
- Gyro reset
- A whole lot of configurable settings
How to get started
Screenshots
|
|
Changelog
v0.5.1
What's Changed
- Bump deps: brls, wg by @xlanor in #61
- i18n for companion by @xlanor in #62
- Fix unreliable taps with region aware clicks. by @xlanor in #63
v0.5.0
Notes on FSR: the developer needs to reconsider the UX, as hardcoding 540p to 720p FSR will break it on 1080p TV screens (not fully scaled). Since the Switch only outputs 1080p when docked, upscaling beyond that is considered a waste of power and will most likely result in GPU stutters. The UX bits may need rearranging to auto-detect resolution (1080p output should always start a 720p stream). For now, when playing docked (such as on a TV) with FSR, select 1080p. The developer will take a short break from features and look at frame mixing and interpolation later.
Dithering (for colour banding) and FSR (720p->1080p, 540p->720p) are now available under settings. FSR is decomposed into two settings: selecting FSR from the resolution will enable EASU, while sharpness is left as an independent setting that can be used without EASU. If issues are encountered, turn them off.
What's Changed:
- debanding (#58)
- debug: add ipc server for overlay debug (#59)
- implement fsr 1.0 (#60), by xlanor and kelvin8906
v0.4.13
What's Changed (these changes should not impact most users):
- Add low latency mode and ring buffer queue (#48), by kelvin8906
- Move low latency mode to hidden power user settings (#52), by kelvin8906
- do not increment stats in single frame mode (#54)
These changes will impact Chinese users — the nro will now use the system locale for simplified Chinese if that is set. An option is also added (requiring a restart) to switch to zh-hans manually.
- i18n: add simplified chinese (#53)
v0.4.12
What's Changed:
- optimize gpu usage (#47)
v0.4.11
What's Changed:
- rebased chiaki-ng to tip (#46)
v0.4.10
What's Changed:
- handle preshared key in wireguard config (#45)
v0.4.9
What's Changed:
- added detection when stream dies, asks user if they want to rcon (#35)
- Make rumble configurable (#38)
- rebased chiaki-ng (#39)
- Bump wg (#41)
- set correct texture res if stream was downgraded (#42)
- enable button mapping in settings as well as disable of swipe if needed (#43)
- fix: touchscreen clicks and swipes (#44)
v0.4.8
What's Changed:
- v0.4.8 (#34)
v0.4.7
This should have no new features, just dependency bumps and refactoring work as the project moves to C++ std 23. As always, if something breaks please file a report with full information on how to reproduce.
What's Changed:
- bump ffmpeg to 8.1 (#31)
- refactored file structure and also addressed issues caught by static analysis (#33)
v0.4.6
Please read the wiki.
What's Changed: testing out holepunch adjustments (#30)
NAT tester:
- Rewrite mapping test with 3 probes to detect port-dependent symmetric NAT
- Rewrite filtering test per RFC 5780 §4.4 (CHANGE-REQUEST 0x06/0x02)
- Display as Cone NAT (Type 2) / Symmetric NAT (Type 3) with compat table
- Add SymmetricPortOnly detection for port-only-dependent mappings
- Always write dedicated NAT log file via brls::Logger save/restore
Logging:
- Separate discovery into its own log to reduce noise
- Add per-connection log files (getConnectionLogFilePath)
- Add underscore separator in log filenames (DDMMYY_HHMMSS)
- Add debug discovery log toggle in settings
Submodule bumps:
- chiaki-ng: NAT traversal for non-port-preserving NATs (spray fix, poll() replacing select(), clear_socket_error, socket init fixes)
- borealis: add getLogOutput() for log file save/restore
v0.4.5
Thanks to StreetPea for fixing the remote play changes introduced by the latest PSN update (per upstream chiaki-ng issue #727) as well as other changes. Of note for Switch is internal major refactoring by streetpea for the audio bits, as well as the remote play changes for the latest PS firmware update.
What's Changed:
- bump chiaki-ng (#29)
v0.4.4
What's Changed:
- added ci build and pr build (#27)
- bump deps (#26)
- refactor gpu decoding to remove unnecessary copies (#28)
v0.4.3
- Small fix where some error dialogs didn't unlock controls properly.
Side note: the developer noticed the project was posted to GBATemp and asks that all users read the documentation under README and Wiki, as well as the network bits from chiaki-ng's or PSPlay's documentation, since the page was linked directly to releases. For reference: running chiaki shows "Chiaki" in the top-left corner (anything related to 2.2.0 is chiaki, the final version, notwithstanding kkwong's patched version with 1080p support); running chiaki-ng shows "Chiaki-ng"; running akira shows "Akira". When reporting issues with Akira, please make sure the top-left corner says "Akira".
What's Changed:
- fix: button token underflow (#25)
v0.4.2
This contains one fix and two chores.
Fixes:
- Render res was previously hardcoded during early deko3d debugging and did not scale when plugged into a TV. Thanks to Rosalie for reporting this. It is now fixed by grabbing borealis's x and y on render.
Chores:
- Rebuild chiaki-ng tree, no changes but keeping it aligned with upstream makes it easier to rebase
- ffmpeg has been bumped to 8.0.1 from switch-ffmpeg 7.1.5
What's Changed:
- Bump libs (#24)
v0.4.1
This release brings a significant fix:
- ports the colour fix from egoistically; colours should look much better, especially on OLED
And other misc library bumps:
- curl bumped to release version of 8.18
- wireguard relays moved out of akira
- fixed the drawing of lines in the ps5 controller
- fix some logspam
What's Changed:
- chore: housekeeping chores, library bumps (#23)
v0.4.0
This adds two new screens to allow remapping to either a combination of buttons or a button directly.
- Trackpad swipes can be mapped (for example, mapped as L1+R3 Up/down/left/right). This is included as a "Synthetic Swipe" from edge to edge in that specific direction, tested against Spider-Man (up brings the camera up, down closes the camera, L/R brings up the phone).
- Conflicts will still work but will show up as red. Please make sure your mapping is fine before sending a bug report.
- PMULL mode has been promoted from being an option to being the default. The setting has been removed.
- Invert ab setting has been deprecated because of mappable a/b/x/y in the menu.
Full credits for the vectors used go to zacksly.
What's Changed:
- feat: remapping (#22)
v0.3.1
This enables an option for thread affinity to reduce load on Core 3 where system services also run. It is still experimental and should benefit wireguard users.
What's Changed:
- feat: allow optional affinity for threads (#21)
v0.3.0
This implements a minimal version of the wireguard protocol client and some bits of the TCP/IP stack from lwip. When VPN connectivity is enabled, traffic will be sent to a local relay which then forwards it over a VPN tunnel to your wireguard server. The entire implementation is done in userland, so it will not be as performant as a typical wireguard client. Streaming settings are set to 720p only, and raising them further is not recommended. It is meant as a "last resort" in the event that the network the Switch is on cannot be punched through, and was also built for fun. There is a little stuttering, which is likely related to rekeying.
v0.2.7
(No release notes beyond the full changelog v0.2.6...v0.2.7.)
v0.2.6
This fixes a commonly seen crash. When the FEC in chiaki fails, it may present as a slight glitch and report a corrupted frame; if unfortunate, it may take a while for the IDR frame to arrive. During that time, chiaki keeps sending corrupted P-frames that cannot be decoded, which will either resolve eventually or cascade into a crash. Instead, the app now lives with some jerkiness and immediately requests an IDR frame. The setting is available to toggle, but keeping it on is recommended. Recovery time is approximately 200ms and will present as a slight skip, unless there is sustained packet loss. The changes are being upstreamed in chiaki-ng #697.
What's Changed:
- fix (libchiaki): request IDR when FEC fails (#19)
v0.2.5
What's Changed:
- add button to disable sleep on exit, default false (#18)
v0.2.4
What's Changed:
- feat (settings): allow for user to select gyro preferred controller in settings (#16)
Note: auto discovery on the same network had not been tested in a while; please report if it breaks.
v0.2.3
This release brings significant changes and should be stable enough for use.
Settings changes:
- NAT detection now reports mapping and filtering types separately (may still not be fully accurate)
- Similar to chiaki-ng, use always-online-stun to find a STUN server, but specifically fetch RFC 5780 STUN servers for filtering detection (purely for the debug network menu)
- Separate resolution/FPS/bitrate settings for local vs remote connections
- Added holepunch retry toggle; if enabled, remote will retry holepunch automatically with backoff intervals
- Added power user menu with bitrate limit unlock, up to 30k bitrate for 1080p and 25k bitrate for 720p (not recommended)
- Added benchmark tool to see how pmull compares to table lookup on the Switch
- Hides sensitive secrets by default in view for both settings & config tab, press button to reveal
- enable experimental ghash using pmull by default
Dockerfile changes:
- Fixed Dockerfile protobuf compatibility with chiaki-ng nanopb, just use python3-protobuf
Streaming changes (libchiaki):
- Complete GCM hardware acceleration — ghash now uses ARM NEON PMULL intrinsics with Karatsuba multiplication, on top of the inline ASM used for the AES bits in libnx
- Left table mode in as a fallback; both are compiled, and the chiaki session takes a flag at runtime to decide whether to use the pmull or table path
- Added experimental crypto with default = true to use this path by default
- Reuse the AES context rather than recreate each time
- Show the ghash mode in stats debug overlay
v0.2.2
This adds a network debug screen to check the type of NAT the Switch is behind, and provides the same functionality in the companion app with the expectation that it can be used on the same network as the PS to check. Only basic checks, might not be accurate.
What's Changed:
- feat: add debug tools for NAT (#12)
v0.2.1
Misc fixes and annoyances.
- Hopefully last change to config.
- Added ability to edit name / settings in individual host settings
- Added validation for fqdn and ipv4
- Added chiaki stats to stream menu
- Update icon to capybara
What's Changed:
- feat: add settings/ip/fqdn edit, add chiaki stats to stream menu, refactor config for host type (#9)
v0.2.0
Pertaining to UI:
- Added forceUnblockInputs because it was getting painful to track with nested views
Pertaining to hosts:
- Fixed a crash when deleting the last host in the scrollview (focus now goes to the find remote host button)
- Force a redraw of the entire view rather than adding things and causing the view tree to panic; likewise for removing things
- Added little badges for manual hosts
Pertaining to settings:
- Moved away from .conf to .toml
- Added a debug tab that also makes it easy for users to check for bugs when writing to conf (always reads from file)
- Added a wol retry for manual hosts
- Properly propagate global settings for res/fps to hosts
- Unlocked bitrates
Defaults: 720p and 1080p are the same as chiaki (10,000 and 15,000 respectively); 720p and 1080p can now go up to 15,000 and 20,000 respectively.
Pertaining to rendering/stream/decoding:
- Replaced naive GMAC algorithm (bit-by-bit XOR) with an 8-bit lookup table implementation
- Frame queue becomes a handoff queue, passing the frame to a 3-frame circular buffer that copies the frame and releases it immediately
- PS5 can resume streams with non-keyframes, so handle that properly; simplify NAL into a single scan
What's Changed:
- fix: crash when deleting hosts with only 1 item as well as move to tomlplusplus for config (#6)
- fix: decoder fixes (#7)
- fix: add unblock inputs and unlock bitrate (#8)
v0.1.8
1. Fixes an issue where, if the PSN account id is not looked up, a dialog is shown rather than doing nothing.
2. Adding a host manually should show the settings/connect button.
3. Deleting a host broke on the last item in the list due to borealis focus, now hacked around (focus jumps to the Find Remote button).
4. Added a workaround for connecting a PSN remote host with a different name; PSN remote hosts require the name to match an already registered host to copy over the RP key, so a link dialog is shown to relink when names don't match.
What's Changed:
- fix: proper error for register w/o account id, delete host segfaults on last host in list, adding host manually is not behaving well (#5)
v0.1.7
Accidentally hardcoded a background colour which does not work well on light themes.
v0.1.6
What's Changed:
- fix: memory management, GPU resource cleanup and ownership fixes (#4)
Fixes for holepunch:
- holepunch session is freed by chiaki-ng after initialisation; null ours to prevent a double free
Fixes for deko3d renderer:
- don't rely on declaration order — explicitly destroy shaders BEFORE destroying pools
- properly free video texture ids, font texture ids, font memblocks and GPU memblocks on cleanup
- replaced font sampler with nanovg's samplers
Fixes for io:
- switch to unique pointers rather than raw pointers
- wait for the GPU to finish rendering before freeing something
v0.1.5
What's Changed:
- fix: crashes during sleep/disconnect (#3)
v0.1.4
What's Changed:
- feat: initial work for PSN remote play (#2)
v0.1.3
What's Changed:
- feat: add CHIAKI_EVENT_MOTION_RESET (#1)
New Contributors: xlanor made their first contribution in #1.
v0.1.2
- Initial release.
Credits
This software was built with reference/code from:
- Streetpea — the original chiaki-ng code
- moonlight-switch — XITRIX's deko3d renderer for moonlight for the deko3d bits
- switchfin — the patches used by dragonflylee in switchfin
- wiliwili — for how to get started with the new borealis API
- duckstation — Duckstation's uam fork for runtime shader compilation
Credits:
- PS5 icons by Zacksly
- Switch icons by zacksly
- Florian Grill (PXPlay dev) for the reverse engineering of the PS Remote Play API
- Streetpea for chiaki-ng and your tireless effort in maintaining this library
- moonlight-switch for the deko3d rendering code that I based it off with some changes
- thestr4ng3r for the original chiaki
- devkitpro for the associated homebrew packages
- yellows8 for the work on the libnx backend which I used and updated for curl 8.18.0
- xfangfang, dragonflylee, and XITRIX for all the work on borealis, moonlight, wiliwili, and switchfin
- kkwong for the initial hwacel and rumble patches
- H0neyBadger for the initial switch port, as well as all switch/chiaki contributors especially Egoistically and kkwong
- micro-ecc for the ECDH implementation that was vendored in
- vecteezy for the capybara logo
External links
- Github - https://github.com/xlanor/akira
- HB-App - https://hb-app.store/switch/Akira