Visual Builder for Astro.
A Mac & Windows desktop app for editing Astro projects visually.
MIT licensed — fork it, build on it, ship your own version.
- Pages — browse every page in
src/pages, create new pages (including nested routes likeblog/post-1), and delete pages. - Layouts — choose which layout from
src/layoutswraps each page, and edit the layout's props (e.g.title). - Components — every component in
src/componentsappears in the palette. Drag one into the page structure (or double-click to append), drag to reorder, click ✕ to remove. - Props — the props panel reads each component's
interface Props/Astro.propsdestructure and generates typed fields (text, number, checkbox). Defaults are shown as placeholders. - Live preview — the app runs
astro devfor the opened project and embeds it. Edits are auto-saved (300 ms debounce), so Astro's hot reload updates the preview as you type. - Git & GitHub — the branch chip in the title bar shows the current branch and dirty state. From its dropdown you can switch branches, create branches, commit, push, or publish a brand-new repo to GitHub (via the
ghCLI). - Code fallback — pages with markup too complex for the visual model open in a code editor instead, still with live preview.
- New project — "New Project…" scaffolds a minimal Astro starter (layout + 5 components + home page) and runs
npm installfor you.
npm install
npm run devnpm run dev starts Vite (renderer hot reload) and launches Electron against it.
To run against a production build of the UI:
npm startIf you're building for yourself or from a fork, use the unsigned build — it needs no Apple Developer account and no certificates:
npm run dist:mac:unsigned # .dmg + .zip, no signing (build on macOS)
npm run dist:win # NSIS installer (build on Windows)Output lands in release/. macOS will warn the first time you open an
unsigned build; right-click the app and choose Open to get past Gatekeeper.
The signed variants are for maintainers with the release certificates:
npm run dist:mac # requires a Developer ID cert + notarization credentialsOfficial builds are published by CI, not from anyone's laptop. Pushing a
v* tag runs .github/workflows/release.yml, which builds a signed and
notarized macOS universal build plus a Windows installer, uploads them to
the stacki-releases repo, and only makes the release visible once both
platforms have landed. Shipped apps auto-update from that feed via
electron-updater.
Signing and notarization credentials live in GitHub Actions secrets. They are never in this repository, and GitHub does not expose them to workflows triggered from forks — so a fork can build and run everything here, but cannot produce a build signed with the official identity. That's intended.
If you fork this and publish your own builds, change build.appId and
build.publish in package.json to your own identifiers so your releases
don't collide with the official update feed.
Issues and pull requests are welcome. A few notes:
npm run devis all you need for day-to-day work — no credentials required.- Please don't add workflows that use
pull_request_target, or any workflow that exposes secrets to code from a fork. - Report security issues privately to the maintainer rather than opening a public issue.
- Node.js 18+ and npm (the app shells out to
npm install/astro devfor opened projects) gitfor version control features- GitHub CLI (
gh), authenticated viagh auth login, for "Publish to GitHub"
Pages are parsed into a simple model: optional layout wrapper + a flat list of
self-closing component instances with props. The editor writes that model back
as clean .astro source. Pages containing arbitrary HTML, expressions, or
nested children fall back to the built-in code editor — nothing is ever
rewritten destructively.