https://github.com/ymerej-noyorb/pad.local
ποΈ A local-first developer workspace - VS Code, terminal, AI, and browser panels on an infinite canvas.
https://github.com/ymerej-noyorb/pad.local
ai-tools developer-tools electron excalidraw react terminal typescript vscode
Last synced: about 2 months ago
JSON representation
ποΈ A local-first developer workspace - VS Code, terminal, AI, and browser panels on an infinite canvas.
- Host: GitHub
- URL: https://github.com/ymerej-noyorb/pad.local
- Owner: ymerej-noyorb
- License: mit
- Created: 2026-04-03T21:42:22.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2026-05-01T11:22:59.000Z (about 2 months ago)
- Last Synced: 2026-05-01T13:18:34.162Z (about 2 months ago)
- Topics: ai-tools, developer-tools, electron, excalidraw, react, terminal, typescript, vscode
- Language: TypeScript
- Homepage: https://padlocal.vercel.app/
- Size: 7.22 MB
- Stars: 4
- Watchers: 0
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README

# pad.local
[](https://nodejs.org)
[](https://www.electronjs.org)
[](https://github.com/ymerej-noyorb/pad.local)
[](LICENSE)
[](https://padlocal.vercel.app)
> Your local-first dev workspace. Build once, everything you need, zero infrastructure cost.
pad.local is a desktop app inspired by [pad.ws](https://github.com/coderamp-labs/pad.ws), stripped down to its essence: a whiteboard, a code editor, a terminal, an AI panel, and a browser β all in one window, running entirely on your machine.
Open source. No cloud. No auth. No database.
---
## What's inside
| Panel | Tech |
| -------------- | --------------------------------------------------------------------------------------------------------------- |
| π¨ Whiteboard | Excalidraw β the canvas everything lives in |
| π» Code editor | VS Code, Cursor, Windsurf, or VSCodium (`serve-web`) β your extensions, your settings |
| π₯οΈ Terminal | xterm.js + node-pty |
| π€ AI | Claude, ChatGPT, Gemini, Copilot, Perplexity, Mistral |
| π Browser | Embedded webview with address bar, device presets (Firefox list + custom sizes), touch simulation, and DevTools |
All panels live as nodes inside the Excalidraw canvas β drag them anywhere, resize them, draw around them. Any panel can go fullscreen with F11 (Windows / Linux) or Ctrl+Cmd+F (macOS) β Escape to exit.
You can organize your work across multiple **workspaces** β independent canvases, each with its own layout of panels. Switch, create, rename, or delete workspaces from the toolbar.


---
## Getting started
### Prerequisites
**Node.js 20.19+** (22 LTS or 24 LTS recommended β minimum imposed by Vite 7) and at least one of **VS Code**, **Cursor**, **Windsurf**, or **VSCodium** installed and available in your `PATH`.
Supported platforms: macOS, Windows, Linux. **WSL is not supported** β VS Code's CLI in WSL is a remote wrapper that does not expose `serve-web`.
#### Install Node.js β macOS
Using [nvm](https://github.com/nvm-sh/nvm) (recommended):
```bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
# restart your terminal, then:
nvm install 24
nvm use 24
```
Or using Homebrew: `brew install node@24`
#### Install Node.js β Windows
Using [nvm-windows](https://github.com/coreybutler/nvm-windows/releases) (recommended) β download the installer, then:
```powershell
nvm install 24
nvm use 24
```
Or download the official **v24 LTS** installer from [nodejs.org](https://nodejs.org).
> Install Node.js in native Windows, not inside WSL.
#### Install Node.js β Linux
Using [nvm](https://github.com/nvm-sh/nvm) (recommended):
```bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
# restart your terminal, then:
nvm install 24
nvm use 24
```
Or via NodeSource (Ubuntu / Debian):
```bash
curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash -
sudo apt-get install -y nodejs
```
### Run
```bash
git clone https://github.com/ymerej-noyorb/pad.local
cd pad.local
npm install
npm run dev
```
---
## Building for distribution
### macOS β produces a `.dmg`
```bash
npm run build:mac
```
Output: `dist/pad.local.dmg`.
### Windows β produces a `.exe` installer
```bash
npm run build:win
```
Output: `dist/pad.local-setup.exe` (NSIS installer). No administrator rights required.
### Linux β produces an `.AppImage` and a `.deb`
```bash
npm run build:linux
```
Outputs: `dist/pad.local.AppImage` and a `.deb` package. To run the AppImage directly β no installation needed:
```bash
chmod +x dist/pad.local.AppImage
./dist/pad.local.AppImage
```
---
## Stack
- **[Electron](https://www.electronjs.org/)** β Desktop shell
- **[React](https://react.dev/) + TypeScript** β UI
- **[electron-vite](https://electron-vite.org/)** β Build tooling
- **[Excalidraw](https://github.com/excalidraw/excalidraw)** β Fullscreen canvas
- **[VS Code](https://code.visualstudio.com/)** (or Cursor, Windsurf, VSCodium) β Editor, served via `serve-web`
- **[xterm.js](https://xtermjs.org/) + [node-pty](https://github.com/microsoft/node-pty)** β Terminal
---
## How it works
When you launch pad.local, Electron loads Excalidraw fullscreen. From there:
- **Workspaces** β the folders icon in the toolbar opens the workspace switcher; each workspace is an independent canvas with its own layout of panels; create, rename, delete, or switch workspaces instantly β terminal sessions and editor servers survive the switch
- **New editor** β a picker lists the VS Code forks detected on your machine (VS Code, Cursor, Windsurf, VSCodium) β selecting one spawns its `serve-web` server on demand and embeds it as a canvas node
- **New terminal** β a picker lists the shells detected on your OS β selecting one spawns a PTY and embeds it as a canvas node
- **New AI** β a picker lists all supported AI providers β selecting one opens the provider's web interface in a webview node, authenticated via your own session (no API key needed)
- **New browser** β a blank browser node appears instantly with an address bar β type a URL and hit Enter to load it; pick a device from the preset dropdown (full Firefox device list + custom sizes) to resize the node instantly; enable touch simulation for phone/tablet presets to test touch interactions; open the embedded DevTools to inspect the page
Each Editor node runs an independent server on its own port. Multiple editors, terminals, AI panels, and browser nodes of different types can coexist on the same canvas. Each AI provider keeps its own isolated session β you stay logged in across restarts.
Everything runs locally. Nothing leaves your machine.
---
## Persistence
- Workspace list and active workspace β `workspaces.json` in Electron's userData folder
- Each workspace canvas (elements, positions, zoom level) β `scene-{workspaceId}.json` β one file per workspace
- Terminal working directory β restored on next launch (zsh and fish only via OSC 7)
- Editor last opened folder/workspace β restored on next launch
- AI sessions β persistent per provider (you stay logged in across restarts)
- Browser custom device sizes β persisted in localStorage (available across restarts)
- Editor / terminal β your actual filesystem, no abstraction
---
## Design principles
- **Local first** β works offline, always
- **Zero infra** β no server, no database, no auth
- **Your editor, your rules** β your extensions, your keybindings, your themes β pad.local embeds the editor you already use, unchanged
---
## Known limitations
- **WSL not supported** β VS Code's CLI in WSL is a remote wrapper that does not expose `serve-web`.
- **Supported editors: VS Code forks only** β The Editor panel works by embedding a local HTTP server (`serve-web`) in a webview. Only VS Code, Cursor, Windsurf, and VSCodium support this. JetBrains IDEs and Zed have no equivalent; terminal-based editors (Neovim, Vim, Helixβ¦) work via the Terminal panel instead.
- **VS Code 1.119.0 breaks serve-web** β A regression in VS Code 1.119.0 ([issue #315003](https://github.com/microsoft/vscode/issues/315003)) prevents the extension host from connecting, causing an endless "Time limit reached" error. Stay on **VS Code β€ 1.118.x** until a patch is released. Disable auto-updates (`File > Preferences > Settings` β search `update mode` β set to `manual`). To roll back: download the [1.118.0 installer](https://update.code.visualstudio.com/1.118.0/win32-x64-user/stable) and reinstall over the existing installation β your extensions and settings are preserved.
- **Security warnings on first launch** β The distributed binaries are not code-signed. On Windows, SmartScreen will warn you ("Windows protected your PC") β click _More info β Run anyway_ to proceed. On macOS, Gatekeeper will block the app on first open β go to _System Settings β Privacy & Security_ and click _Open Anyway_. This is expected for an unsigned open-source app.
---
## Inspired by
[pad.ws](https://github.com/coderamp-labs/pad.ws) β great concept, now abandoned (last commit Aug 2025, site down). pad.local is the "just run it" version β and adds an AI panel that pad.ws never had.
[ai-assistant-electron](https://github.com/Andaroth/ai-assistant-electron) β inspired the `partition="persist:ai-"` pattern for isolated per-provider cookie stores in the AI panel.
---
## License
[MIT](LICENSE)