Pocket DeepChat is a local-first AI chat client for Nintendo Switch homebrew. It runs as a PocketJS guest, stores sessions as an append-only Tape, and talks to supported model providers over HTTPS.
- key-only presets for OpenAI, Anthropic, StepFun, StepFun Plan, DeepSeek, Kimi, and GLM, plus a custom OpenAI-compatible Responses endpoint
- provider model discovery, paged model selection, and per-provider model memory
- optional persistent API key storage
- streaming responses, cancellation, recovery, and provider state
- multiple local sessions and append-only Tape persistence
- Switch software keyboard input with CJK and emoji font fallback
- automatic follow-to-bottom, left-stick scrolling, and L/R page scrolling
- light, dark, and Switch system themes
- diagnostics for host ABI, networking, fonts, storage, and frame timing
| Control | Action |
|---|---|
| A | Activate the focused action / send |
| B | Back / close |
| X | Open or close the session drawer |
| Y | Open the Switch software keyboard |
| D-pad | Move focus |
| Left stick | Scroll conversation history |
| L / R | Scroll one page |
| L / R in model picker | Change model page |
| Plus | Open settings |
| Minus | Open diagnostics |
| Plus + Minus | Exit |
workspace/
├── pocketjs/ # required sibling checkout
└── pocket-deepchat/ # this repository
The app deliberately uses a sibling PocketJS checkout instead of vendoring the framework. The tested dependency is:
| Dependency | Tested revision | License | Purpose |
|---|---|---|---|
| PocketJS | ba0401c5ddebe446e45a2ddb34d09aad2b106d5a |
MIT | Framework, compiler, and Switch host |
| SolidJS | ^1.9 |
MIT | Reactive UI runtime |
| Noto Emoji | bundled font hash documented in assets/licenses/README.md |
OFL-1.1 | Emoji glyph fallback |
PocketJS's Switch path also builds QuickJS through libquickjs-sys (MIT) and
uses ab_glyph (MIT OR Apache-2.0). devkitPro, libnx, switch-tools, Rust, Bun,
and Ryujinx are build or test tools and are not redistributed by this
repository. PocketJS includes additional optional backends and development
dependencies that are not used by this Switch application; see its own
package.json, hosts/switch/Cargo.toml, and license files for the complete
dependency graph.
Check out the tested PocketJS revision next to this repository:
git clone https://github.com/zerob13/pocketjs.git
git -C pocketjs checkout ba0401c5ddebe446e45a2ddb34d09aad2b106d5a- Bun
- devkitPro with the
switch-devpackage group - Rust nightly
nightly-2026-05-28withrust-src - Ryujinx for emulator testing
On macOS, PocketJS expects devkitPro under /opt/devkitpro unless
DEVKITPRO or DEVKITA64 is set.
sudo dkp-pacman -Syu
sudo dkp-pacman -S --needed switch-dev
rustup toolchain install nightly-2026-05-28 --component rust-srcFirmware and keys are proprietary user-local Ryujinx inputs. Do not add them to this repository.
bun install
bun run test
bun run check:switch
bun run build:switchThe release artifact is written to:
dist/switch/pocket-deepchat.nro
Build and launch it in Ryujinx:
bun run run:ryujinxRun the complete local verification pipeline:
bun run verifyProvider configuration and session data are stored in the Switch application
data directory, not in the repository. .env files, build outputs, PocketJS
plans, dependency trees, logs, and OS metadata are ignored by Git.
Open + Settings, choose a provider, enter its API key, and run A Test.
Built-in providers pin a working endpoint and default model, so no base URL or
model entry is required. Use Fetch models to load the provider's live
/models catalog, then open Model to select an entry. Catalogs and the
selected model are stored per provider.
| Preset | Endpoint | Default model |
|---|---|---|
| OpenAI Responses | https://api.openai.com/v1/responses |
gpt-5.4 |
| OpenAI Chat Completions | https://api.openai.com/v1/chat/completions |
gpt-5.4 |
| Anthropic Messages | https://api.anthropic.com/v1/messages |
claude-sonnet-5 |
| StepFun | https://api.stepfun.com/v1/chat/completions |
step-3.5-flash |
| StepFun Plan | https://api.stepfun.com/step_plan/v1/chat/completions |
step-3.7-flash |
| DeepSeek | https://api.deepseek.com/chat/completions |
deepseek-v4-flash |
| Kimi | https://api.moonshot.cn/v1/chat/completions |
kimi-k2.6 |
| GLM | https://open.bigmodel.cn/api/paas/v4/chat/completions |
glm-5.2 |
| Custom Responses | user-defined /responses-compatible base URL |
user-defined |
Requests are made by the Switch host over HTTPS with provider-native
authentication and streaming SSE. scripts/validation-provider.ts is only a
manual local validation server; the production entry point does not import or
start it. Protocol behavior follows the
OpenAI Responses streaming events
and the current
Anthropic model list.
All three protocol families support streaming text chat. File tools are
currently enabled for Responses providers only.
docs/README.md— document map and decisionsdocs/phase1.md— product and architecture specificationdocs/implementation-and-validation.md— implementation and acceptance planassets/licenses/README.md— bundled asset notices
Pocket DeepChat is licensed under the MIT License. Third-party components remain under their respective licenses.