A keyboard-first command terminal for the browser.
Access search, browser commands, and web shortcuts — all from one command bar.
Getting Started · Features · Contributing · Wiki · Community · Security · Code of Conduct · License
cmdOS is a Chrome extension that replaces repetitive browser actions with keyboard commands. Instead of navigating menus, bookmarks, and tabs manually, you open cmdOS with Alt + S and run commands from one place.
It is entirely local-first — your data stays on your machine. No account required to use the core features.
Open cmdOS with Alt + S from any page and run commands instantly.
/notes → Open your notes
/link → Create or open a saved link
/screenshot → Capture the current page
/shortcuts → Manage keyboard shortcuts
### 🛠️ Browser Commands
Built-in commands available from the command bar:
- Visible-page and full-page screenshots
- Image download from current page
- Table extraction and CSV export
- Print-friendly PDF generation
---
## Tech Stack
| Layer | Technology |
|---|---|
| UI | React 19, TypeScript |
| Build | WXT, Vite 6, Turborepo |
| Styling | Tailwind CSS |
| Package manager | pnpm workspaces |
| Local Database | Dexie.js (IndexedDB) — all data stored locally on device |
| Storage | Chrome Extension APIs (local-first) |
| Extension | Manifest V3 |
---
## Repository Structure
<pre>
cmdOS/
├── background/ # Service worker, manifest, extension bootstrap
├── packages/ # Shared internal packages (monorepo)
│ ├── ui/ # Design system components
│ ├── shared/ # Utility helpers and schemas
│ ├── storage/ # Chrome storage helpers
│ ├── env/ # Environment variable schemas
│ └── module-manager/ # Core module configuration
├── src/
│ ├── allObjectFolder/ # Core object types — the heart of the extension
│ │ └── src/createObject/
│ │ ├── links/ # Link and Tab Session objects
│ │ ├── notes/ # Rich note objects
│ │ ├── snippets/ # Reusable text snippets
│ │ ├── commands/ # Command definitions and handlers
│ │ ├── session/ # Session tracking objects
│ │ ├── automationBeta/ # Automation workflow objects
│ │ ├── ChatAgent/ # AI agent integration
│ │ ├── aiPrompt/ # AI prompt objects
│ │ ├── todos/ # Task and to-do objects
│ │ └── tags/ # Tag management
│ ├── settings/ # Extension settings UI and logic
│ │ ├── authentication/ # Login and auth UI
│ │ ├── backup/ # Data backup and restore
│ │ ├── generalSettingsPageUi/ # General settings panel
│ │ ├── uiPersonalization/ # Theme and appearance settings
│ │ ├── uxLayoutCustomization/ # Layout customization options
│ │ └── allWorkspaceManager/ # Workspace and folder management
│ ├── storage/ # Storage abstraction layer
│ ├── shared-components/ # Reusable UI components and utilities
│ ├── welcomeGuide/ # Onboarding and tutorial flows
│ └── pages/ # Extension entry points
│ ├── AltS_search_newtab/ # Primary new tab workspace dashboard
│ ├── popup/ # Browser toolbar popup
│ ├── contentScript/ # Injected content scripts
│ └── content-ui/ # Injected UI overlays
├── docs/ # Documentation and guides
└── .env # Environment config (pre-configured for local dev)
</pre>
---
## Getting Started
### Prerequisites
- **Node.js** `>= 22.12.0` — [Download](https://nodejs.org)
- **pnpm** `>= 9.15.1` — `npm install -g pnpm`
- Google Chrome or any Chromium-based browser
### Installation
**1. Clone the repository**
```bash
git clone https://github.com/cmdOS-App/cmdOS.git
cd cmdOS
2. Install dependencies
pnpm installThe .env file is already pre-configured with the OSS extension public key and Google OAuth client ID. No changes needed to run locally.
Start the WXT dev server with hot reload:
pnpm devThen load the extension in Chrome:
- Open
chrome://extensions/ - Enable Developer mode (top right toggle)
- Click Load unpacked
- Select the
.output/chrome-mv3/directory
WXT watches your files and automatically reloads the extension when you save changes. All your notes, snippets, and data are stored locally in Dexie.js (IndexedDB) — nothing leaves your device.
Build the production extension (with the shared OSS extension ID locked):
pnpm run wxt:build:chrome:ossThe built extension will be in .output/chrome-mv3/. Load it in Chrome:
- Open
chrome://extensions/ - Enable Developer mode
- Click Load unpacked
- Select
.output/chrome-mv3/
The
wxt:build:chrome:osscommand automatically sets the correct build variant, loads the OSS environment file, and locks the shared extension ID so Google OAuth redirect URIs match for all contributors.
To create a .zip ready for the Chrome Web Store:
pnpm run wxt:zip:chrome:osspnpm type-checkpnpm lint
pnpm prettierWe welcome contributions! Please read CONTRIBUTING.md and our Code of Conduct before opening a pull request.
Copyright © 2024–2026 RPA TASKLABS AUTOMATION SOFTWARE PRIVATE LIMITED · Apache License 2.0