Skip to content

Repository files navigation

Pocket DeepChat

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.

MVP

  • 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

Controls

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

Repository layout

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

Requirements

  • Bun
  • devkitPro with the switch-dev package group
  • Rust nightly nightly-2026-05-28 with rust-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-src

Firmware and keys are proprietary user-local Ryujinx inputs. Do not add them to this repository.

Build and test

bun install
bun run test
bun run check:switch
bun run build:switch

The release artifact is written to:

dist/switch/pocket-deepchat.nro

Build and launch it in Ryujinx:

bun run run:ryujinx

Run the complete local verification pipeline:

bun run verify

Provider 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.

Providers

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.

Documentation

License

Pocket DeepChat is licensed under the MIT License. Third-party components remain under their respective licenses.

About

Pocket.js + DeepChat

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages