# Stacki > Stacki is a desktop visual builder for [Astro](https://astro.build). It opens a project on your machine, runs that project's own `astro dev` server, and shows you the page while you edit it. **What it edits** - **Pages** in `src/pages`, including nested routes and dynamic routes. - **Layouts** in `src/layouts`, and which one wraps each page. - **Components** in `src/components`, their props, and their slots. - **Styles**: your stylesheets and your components' `

Nothing selected

0 project changes

``` `app.js`: ```js // The example app: outlines whatever is selected, and counts project changes. const selected = document.getElementById('selected'); const changes = document.getElementById('changes'); let changeCount = 0; async function follow({ nodeId }) { if (nodeId === undefined) { selected.textContent = 'Nothing selected'; await stacki.overlay.clear(); return; } selected.textContent = `Selected ${nodeId}`; await stacki.overlay.set({ items: [{ kind: 'box', id: 'selected', anchor: { nodeId }, color: '#f97316', label: 'Selected by app', interactive: true }], }); } stacki.on('selection.change', follow); stacki.on('project.change', ({ source }) => { changeCount += 1; changes.textContent = `${changeCount} project changes (last: ${source})`; }); stacki.on('overlay.click', ({ itemId }) => { selected.textContent = `Clicked ${itemId}`; }); stacki.selection.get().then(follow); ``` `icon.svg`: ```xml ``` ## API versions This page documents version 1 of the app API. Later versions add methods, events and fields without removing these. The SDK sends its version with every request, and a Stacki older than the app answers `unsupported-version`.