Platform overview

Scope, compatibility and the development stack.

On this page

Research snapshot: November 13, 2026, America/New_York. This guide concerns native Switch 2 homebrew applications built with the public ouncebrew stack. Its practical baseline is a pinned kaiHEN runtime, the ounce-devkit toolchain, libounce, and an application that can enter and exit cleanly before larger features are added.

What kaiHEN provides#

kaiHEN describes itself as a homebrew environment and minimal custom firmware. It supplies resident loader and service components rather than a complete application framework. The development repository points existing libnx applications toward libounce and OpenGL or Vulkan. Access is broad enough to include system storage; an application should therefore treat every write target as an explicit product decision. kaiHEN project overview

The stack has several independently versioned parts:

PartDeveloper roleTypical output or interface
kaiHEN RO and HENLoad programs and provide the homebrew environmentNative services and homebrew sessions
ounce-hbloaderRun sequential NROs in a native game processThe game main module
ounce-hbmenuSelect and launch applicationshbmenu.nro
libounceSupply libnx-style runtime and operating-system wrappersHeaders and static libraries
OunceVKSupply Vulkan and EGL/OpenGL renderingStatic driver libraries
libkaihenExpose HEN, JIT and plugin interfaceskaihen.h and supporting libraries
ounce-devkitAssemble build rules, libraries and examplesA devkitPro overlay

The library and compiler arrangement is significant: the devkit layers Switch 2 support over devkitPro rather than replacing its entire toolchain. Development kit installation and usage

Release baseline and dates#

The observed public runtime release is 20261114c, published at 2026-11-13T23:58:11Z. The observed development kit is devkit-20261114, published at 2026-11-13T23:15:00Z. In New York these times are November 13 at 6:58 p.m. and 6:15 p.m. EST. The date-like release names are identifiers, not evidence of a later research date. kaiHEN 20261114c release ounce-devkit 20261114 release

For a new project, record both release identifiers and the individual source commits. Development-kit libraries can be pinned to a different kaiHEN revision from the runtime package. A single label such as “latest kaiHEN” leaves that distinction unresolved. The inspected devkit source list pins libounce 9382b1ec, OunceVK f5afcd27, and kaiHEN eb81e191. Pinned devkit source revisions

Firmware and acquisition scope#

Application development and acquiring an initial homebrew environment are separate dependencies. A working game exploit alone does not establish that a native NRO loader or all required services are available.

RouteUpstream stated baselineHow to interpret it
SmileBASIC through ns2jbSystem software 23.0.1; SmileBASIC full 4.4.9 or the supported demo; Node.js 22+ on macOS or LinuxTreat the documented combination as the baseline; acquisition remains timing sensitive
Civilization VII through civ7-fs-kaihenClaims firmware at or below 23.0.1; reports testing only on 23.0.1 with exFAT supportThe wider inequality is not a tested firmware matrix

The SmileBASIC instructions require SD storage and distinguish the HEN launcher from the older debugging/RPC workflow. ns2jb SmileBASIC acquisition requirements The inspected Civilization launcher README still refers to private kaiHEN 0.0.4 even though a public release now exists. Its release-path assumptions therefore need reconciliation before using it with the public archive. Civilization VII acquisition requirements

Do not infer support for a newer firmware, a different game revision, or another entrypoint from these rows. A firmware-independent application source tree still needs a working runtime on the target console. This pack does not establish a downgrade path or a way to run the acquisition routes on unsupported firmware.

Source compatibility and binary compatibility#

libounce adds a platform record to linked programs. Its NRO definitions identify Switch 1 and Switch 2 separately; a traditional libnx program lacks that record. NRO platform identity record hbmenu warns before launching programs that were not built with the Switch 2 devkit. Switch 2 menu usage and rendering

The useful porting question is consequently: “Which source-level interfaces does this application use?” A portable C parser is easier to reuse than code issuing device ioctls or assuming a particular display-buffer layout. An old .nro filename is not a compatibility guarantee. A successful link is also insufficient: graphics, services, audio, file access and shutdown each have observable behavior to verify.

Capability assessment#

AreaEvidence availableDevelopment consequence
Native application selectionLoader and menu source plus packaged binariesUse this path for the first application
Vulkan and OpenGL ESDriver source and small reference examplesValidate one rendered frame before an engine port
Joy-Con pointer inputSwitch 2-specific HID APIs and wrapperAdd mouse support as a separate input path
JITPublic API, provider and RO implementationBudget publication, cache synchronization and memory
Resident pluginsRuntime and IPC examplesUse only where a separate process is needed
Broad service accessHEN and service-proxy implementationProbe required services and handle failures
Universal compatibilityNo complete hardware matrix in this researchPublish the exact combinations actually tested

Choosing a first project#

The lowest-friction first projects are a diagnostic utility, a small SDL2 application, an existing libnx application with ordinary file access, or a renderer with a modest OpenGL ES feature set. This is an engineering assessment based on interface breadth, not a claim that every application in those categories already works.

An emulator, streaming client or large game engine introduces several coupled systems. Start it as a sequence of milestones: native startup, input, files, one frame, sound, workload, repeated exit, and sustained use. A project depending on a privileged service should prove that service independently before importing a large UI or renderer.

The community homebrew list is useful for finding repositories such as OunceShell, RetroArch, Moonlight, mGBA and game ports. It is a project directory, not a test certificate for a particular release binary. Community application and plugin directory

Initial decision record#

Before choosing a framework, write down the application purpose, target firmware, acquisition route, runtime release, devkit version, rendering API, storage needs, network needs and exit behavior. Identify optional features that can be disabled when unavailable. This makes the first hardware result interpretable and turns later upstream changes into bounded updates.

Continue with Runtime architecture and Toolchain and reproducible builds.