# Quickstart Create a WAMP extension in your workspace and see it rebuild live in Desktop. Source: https://docs.vampikez.fun/start/quickstart/ By the end of this page you have an extension in an ordinary project directory, linked into WAMP Desktop and rebuilding on every save. Install Node 18 or newer and keep WAMP Desktop running. ## Ask an agent to build it Open a WAMP chat in the workspace where the source should live and ask for the app you want. The native agent and each shipped ACP coding runtime receive the `extension-development` skill and use the same public CLI and declarations. ```text Build a Reading List extension in this workspace. Store title, author and a want/reading/done status; add a page with a list and an add form. Run it in WAMP. ``` The agent scaffolds in the current workspace, implements the extension with `wamp ext dev` running, and finishes with `wamp ext install`, so the extension is already in WAMP when it reports back. It does not need a WAMP source checkout or a private import. ## Build it yourself 1. Create a full project: ```bash wamp ext init reading-list --template full cd reading-list ``` 2. Start the development loop: ```bash wamp ext dev ``` The command builds first, links this workspace into the WAMP profile, and watches for edits. A failed build leaves the last good version running. 3. Open **Reading List** from the WAMP sidebar. 4. When you are done, stop `dev` and install it so it stays: ```bash wamp ext install ``` For a branded or non-default Desktop profile, pass its Electron user-data directory with `--user-data-dir`. The CLI refuses to replace a real installed extension or another workspace's link. ## What you end up with - reading-list/ - extension.json identity, compatibility, permissions and contributions - tsconfig.json public extension compiler configuration - main/ - activate.ts tools, data, services and lifecycle registrations - ui/ - index.tsx pages and views - shared/ - schema.ts typed-data schema in the full template - dist/ validated runtime artifacts There is no `package.json` and no `build.mjs`. Add a `package.json` only if you bundle extra npm dependencies; `wamp ext dev` and `wamp ext pack` call the SDK builder directly unless a `build.mjs` is present. The directory name is the extension id. The manifest declares the runtime contract; the generated minimal form looks like this: ```json check title="extension.json" { "name": "Reading List", "description": "Books to read.", "version": "0.1.0", "engines": { "wamp": "^12.0.0" }, "icon": "BookOpen", "main": "dist/main.js", "compat": { "pluginApi": "^4.0.0" }, "activationEvents": ["onStartupFinished"], "contributes": { "pages": [ { "id": "reading-list", "title": "Reading List", "icon": "BookOpen", "context": "both" } ] } } ``` The renderer exports a component under the same page id: ```tsx check title="ui/index.tsx" function ReadingListPage() { return (