Moving WebStorm's Brain to a Server: Remote Development with JetBrains Gateway
WebStorm's Remote Development via JetBrains Gateway moves indexing, Node runtimes, and build tools to a remote server while keeping your local editor responsive. A practical walkthrough with SSH, port forwarding, and the trade-offs you'll actually hit.
25 Mar 2026, 12:52 UTC

The problem: your laptop is not a build server
You open a 50,000-file TypeScript monorepo. WebStorm starts indexing. The fan spins up, battery drops, and the UI stutters every time you trigger a refactor. Meanwhile, the CI pipeline runs the same code on a 32-core Linux box in 90 seconds. Wouldn't it be nice if your IDE used that hardware too — without moving your editor, shortcuts, or muscle memory?
JetBrains Gateway makes that possible. It splits WebStorm into a local thin client (rendering, input, debugger UI) and a remote backend (indexing, language services, Node runtime, build tools) that runs over SSH. The project files never leave the server; only encrypted UI streams and debugger protocol messages cross the wire.
What runs where
| Local (thin client) | Remote (backend) |
|---|---|
| Editor rendering, keymaps, themes | Project indexing, PSI, type resolution |
| Debugger UI, breakpoints, watches | Node.js / npm / Vite / webpack processes |
| Git UI (commit, diff, log) | Git operations on remote filesystem |
| Terminal emulator (optional) | Shell, file watchers, language servers |
The backend is a full WebStorm installation (same version as the client, enforced at connect time). It downloads on first connect (~500 MB) and stays warm. You can pre-warm it via remote-dev-server CLI in CI so indexing finishes before you open the project.
Worked example: SSH target with a Vite + React project
Assume you have a Linux VM (devbox.example.com) with Node 20, Docker, and your repo cloned at ~/work/my-app. You'll need:
- JetBrains Gateway installed locally (standalone installer from jetbrains.com)
- SSH key access to the VM (
ssh devboxworks) - A JetBrains account with an active WebStorm subscription
Step 1 — Add the SSH target in Gateway
- Open Gateway → New Connection → SSH.
- Host:
devbox.example.com, User:youruser, Port:22. - Authentication: Key pair (Gateway reads
~/.ssh/configand~/.ssh/id_ed25519automatically). - Click Check Connection and Continue. Gateway verifies SSH, then downloads the matching WebStorm backend.
Expected check: Status bar shows Remote Development: devbox.example.com and the backend version matches Help → About on the client.
Step 2 — Open the project
- After backend starts, Gateway lists remote directories. Pick
~/work/my-app. - WebStorm opens. Indexing runs on the remote CPU — watch the progress bar in the bottom right.
- Open
package.json, runnpm installfrom the remote terminal (View → Tool Windows → Terminal).
Step 3 — Forward the dev server port
- Run
npm run devin the remote terminal. Vite printsLocal: http://localhost:5173. - In Gateway's connection window (or the Port Forwarding tab in the Remote Development tool window), add a mapping: Remote port 5173 → Local port 5173.
- Open
http://localhost:5173in your local browser. Hot-module-reload works because file watchers run on the remote filesystem.
Diagnostic decision: If HMR feels laggy, ping the VM. RTT > 50 ms makes keystrokes feel sluggish; > 100 ms is painful. Consider a closer region or a dedicated dev cloud instance.
Trade-offs you'll hit
- No offline mode. The thin client cannot index, resolve, or refactor without the backend. Keep a local clone for flights;
git pullwhen you reconnect. - Plugin compatibility. Plugins that shell out to local binaries (local Docker CLI, OS-specific tools) fail unless the same binaries exist on the remote
PATH. Check JetBrains' compatibility list, but expect trial and error. - GPU rendering stays local. WebGL/Canvas-heavy front-end work renders on your machine, but debugging that browser requires the browser to run on the remote host (or port-forwarded).
- License validation. The remote host needs outbound internet for periodic checks unless you provision an offline activation token.
Quick verification checklist
- Disconnect Wi‑Fi mid-session → client shows Reconnecting… and restores editor state when link recovers.
- Compare
Help → Abouton client and backend — versions must match exactly. - Check JetBrains Account → Licenses: only one active seat appears regardless of how many backends you start.
Next step: try it on a real project this week
Spin up a small VM (even a $4/month cloud instance), clone a side project, and run through the steps above. Measure the RTT (ping devbox) and note the indexing time. If the latency feels native and the fan stays quiet, you've just moved your IDE's brain to where the compute lives — without changing a single shortcut.