Getting a local copy of the Pokémon Showdown Client running takes only a few minutes. The workflow is straightforward: clone, build, and open one of the two test-client HTML files in your browser. There is no separate server to spin up — by default the test client connects to the liveDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/smogon/pokemon-showdown-client/llms.txt
Use this file to discover all available pages before exploring further.
play.pokemonshowdown.com game server, so you can see real battles and chat rooms while developing against your local front-end changes.
Prerequisites
Before you begin, make sure the following tools are installed and available on yourPATH.
Node.js v20+
The build script requires Node.js version 20 or later. Run
node --version to check.Git
Used to clone the repository. Run
git --version to verify it is installed.Step-by-Step Setup
The client requires a build step that compiles TypeScript to JavaScript using Babel. Run the appropriate command for your operating system.
Re-run the build command after every change you make to a source file to see your updates reflected in the test client.
You can also run
node build full (or ./build full) to perform a full rebuild, which regenerates all data files in addition to recompiling TypeScript. New Client (Preact)
Open
play.pokemonshowdown.com/testclient-new.html.This is the active development target — the Preact-based rewrite available at play.pokemonshowdown.com/beta. Use this file when contributing to the new client. Old Client (jQuery)
Open
play.pokemonshowdown.com/testclient-old.html.This is the legacy jQuery-based client. Use this file when fixing bugs in the old client.Some browsers convert
? to %3F when opening files from the local filesystem, which breaks query-string features. If you run into this, serve the files locally with npx http-server from the repository root, then navigate to http://localhost:8080/play.pokemonshowdown.com/testclient-new.html.By default the test client connects to the live Pokémon Showdown server. To point it at a locally running server, append
?~~host:port to the URL.# Connect to a server on localhost port 8000
testclient-old.html?~~localhost:8000
# Connect to a server on localhost port 8000 via http-server
http://localhost:8080/play.pokemonshowdown.com/testclient-old.html?~~localhost:8000
For security reasons, browsers block cross-origin credential sharing, which makes logging into the test client with your normal PS account non-trivial. The default workaround requires you to copy-paste session data each time you refresh. To avoid that friction, create a test key file.
Create the file
config/testclient-key.js (in the repository root’s config/ directory, not inside play.pokemonshowdown.com/config/) with the following content:Known Test Client Limitations
Even with a test key configured, certain account actions do not work in the test client. This is by design.What won't work in testclient
What won't work in testclient
The following features are intentionally disabled or broken in the test client environment:
- Registering a new account — not supported.
- Logging into other registered accounts — not supported. You can switch to unregistered accounts and back, but you cannot authenticate as a different registered user.
Development Workflow
Once set up, the typical change-test loop is:- Edit a TypeScript source file in
play.pokemonshowdown.com/src/. - Run
./build(ornode buildon Windows). - Refresh the test client in your browser.
Next Steps
Architecture
Learn how the client’s four loading phases, observable models, and panel system fit together.
Introduction
Read about the project’s features, browser support matrix, and licensing.
