Battleframe is an unofficial desktop shell for Pokemon Showdown that turns the browser client into a cleaner Windows app with native packaging, persistent shell settings, and a more focused battle workspace.
It keeps compatibility with the official web client and server flow while adding desktop chrome, layout controls, local preferences, and a Tauri bridge for a more app-like experience.
Battleframe is an unofficial project and is not affiliated with Smogon or Pokemon Showdown.
| Before | Battleframe |
![]() |
![]() |
- Native desktop packaging with installer output through Tauri
- A persistent desktop shell around the official Pokemon Showdown client
- Faster access to battles, rooms, replays, and team building from one window
- Local shell settings for layout, theme accent, audio levels, and dense battle logging
- A plugin-ready architecture for desktop-only enhancements such as Battle Pulse
- React + TypeScript shell UI
- Tauri v2 desktop app layer
- Vendored
pokemon-showdown-clientsource for controlled release builds - Same-origin iframe integration against the upstream client
- Native window-state persistence
- Desktop-focused styling and battle layout adjustments
- Internal plugin registry for shell-side extensions
src/- shell app, workspace, plugins, stores, and stylessrc-tauri/- Rust native layer, Tauri config, and bundle assetsvendor/pokemon-showdown-client/- vendored upstream client sourcevendor/showdex/- vendored Showdex source used for the standalone embedded buildscripts/- sync and update helpers for upstream assetspublic/showdown/- synced client build output used at runtime
- Node.js
- Rust
- Visual Studio 2022 C++ Build Tools on Windows for Tauri desktop builds
npm install
npm run tauri devThe root install also installs the vendored Showdown client dependencies through the project postinstall hook.
npm run build
npm run tauri buildRelease bundles are emitted to src-tauri/target/release/bundle/.
Normal app builds only sync the vendored compiled client into public/showdown/.
Battleframe also builds the vendored Showdex standalone bundle and copies it into public/showdown/integrations/showdex/.
If you intentionally update the vendored upstream source, run:
npm run showdown:updateThat rebuilds the vendored client and resyncs the runtime assets.
If you intentionally update the vendored Showdex source, run:
npm run showdex:install
npm run showdex:build
npm run showdown:syncUPSTREAM.mddocuments the pinned upstream source and patch points to preserve during updates.vendor/showdex/LICENSEpreserves the upstream Showdex AGPL-3.0 license text.src-tauri/icons/contains the current Battleframe app icon set used for desktop bundles.


