HTML-first WordPress. Your pages are plain HTML files; a plugin renders them live as real WordPress pages, no page builder, no block editor, no build step, no DB-stored content. Author with an AI agent, edit in place, collect client feedback, resolve it, and ship. The category line: source-rendered WordPress — your files are the pages; WordPress serves, routes, and edits them.
⚠️ Early / internal, being dogfooded on instawp.com. Expect churn. That said, the full clone → deploy → AI-build → render loop is validated end-to-end on throwaway InstaWP sandboxes.
InstaStudio is a workflow layer on top of InstaWP, not a
separate product. It rides InstaWP's connection layer (InstaMCP + the instawp CLI)
rather than reinventing transport.
- Build — an AI agent writes plain HTML.
- Edit — "Edit in Place" edits the source
.htmlvisually. - Review — reviewers pin feedback on the live site.
- Resolve — an agent works the feedback export and fixes the same source files.
- Ship — push to InstaWP (sandbox → production).
A page is one HTML file in site/. The iwp-studio plugin reads it live and serves
it as a real WordPress page:
<!-- site/pricing.html -> /pricing/ -->
<head>
<title>Pricing</title>
<link rel="stylesheet" href="assets/style.css">
</head>
<body>
<div id="site-nav"></div> <!-- markers: your body is what's between them -->
<section class="hero"> … your content … </section>
<div id="site-footer"></div>
<script src="assets/chrome.js"></script> <!-- shared nav/footer, single source -->
</body>wp instastudio pages registers the WordPress pages, and /pricing/ is live. No
build, no import, no drift, the file is the source of truth. The engine is a plugin,
so it works with any theme.
- A WordPress site to render into (an InstaWP sandbox is easiest, disposable and promotable to production; local WP works too).
- An AI coding agent (e.g. Claude) and a way to reach the site: InstaMCP or the
instawpCLI (npm i -g @instawp/cli).
One command (cloud, easiest) — creates a sandbox and sets up everything (deploy + activate + register pages):
npm i -g @instawp/cli && instawp login # once
git clone https://github.com/InstaWP/studio.git && cd studio
bash scripts/quickstart.sh mystudio # -> https://mystudio.instawp.site is liveThen point your AI agent at CLAUDE.md and ask it to "add a page."
Manual / local, or step-by-step (full walk-through in docs/GETTING-STARTED.md)
- Assemble into a WordPress install:
bash scripts/bootstrap.sh /path/to/wordpress(or copyplugins/iwp-studio+plugins/iwp-feedbackintowp-content/plugins/,themes/iwp-studiointowp-content/themes/, andsite/intowp-content/site/). Activate the two plugins + the companion theme. On a cloud site,bash scripts/publish.shpushes the files. - Create the pages —
wp instastudio pagespublishes a WordPress page for every.htmlinsite/(slug = filename) and sets the front page. - Connect your agent via InstaMCP or the
instawpCLI and point it atCLAUDE.md. - Build → Review → Resolve → Ship — ask it to "add a page" (the
build-pageskill), collect feedback with the widget, resolve with theresolve-feedbackskill, and ship withscripts/publish.sh.
The engine
| Path | What |
|---|---|
plugins/iwp-studio/ |
The source-rendered engine (a plugin). Renders source HTML live as pages, includes Edit in Place (click text/images to edit → writes back to the source) and wp instastudio pages. Works with any theme (takes over only mapped pages via template_include). Clean/generic, see its README for what's intentionally left out. |
themes/iwp-studio/ |
Companion theme. Satisfies WordPress, renders any non-source request, and ships a structured blog (real WP posts, categories, authors, search) styled to match your pages. Pages stay HTML files; the blog stays structured content. Bring your own theme instead if you like. |
Your site
| Path | What |
|---|---|
site/ |
Starter source site — HTML pages (index.html, about.html) + shared assets/chrome.js (nav/footer) + assets/style.css (design tokens) + DESIGN.md. The source of truth. Replace with your own. |
CLAUDE.md / AGENTS.md |
Agent instructions — the model, page conventions, hard rules, and workflow. Point your AI agent here first. |
Review + agent playbooks
| Path | What |
|---|---|
plugins/iwp-feedback/ |
InstaWP Feedback — a floating widget to drop pin comments on any element; threaded replies; triage in wp-admin → Feedback. Built for an agent loop: export → resolve → re-import by id (idempotent JSON). Full wp iwpfb CLI. Team-gated (logged-in) by default. |
skills/build-page/ |
Build playbook — how an agent authors a page in the design system. |
skills/resolve-feedback/ |
Resolve playbook — read a feedback export, map each item to its source .html, apply safe in-design-system fixes, re-import. Installable as a Claude Code skill; canonical form is an InstaMCP site-skill (travels with the site, any MCP agent). |
Setup + ops
| Path | What |
|---|---|
docs/ |
GETTING-STARTED.md (setup + workflow) · BLUEPRINT.md (packaging later) · instawp-cli-chroot-bug.md (a known instawp CLI issue on some nodes + the workaround these scripts use). |
scripts/ |
quickstart.sh (one command: create a cloud sandbox → deploy → activate → register pages) · bootstrap.sh (assemble into a local WP install) · publish.sh (ship site/ + theme + plugins to a cloud site) · wp.sh (run WP-CLI on a cloud site). publish.sh + wp.sh wrap the instawp CLI and auto-fall-back around a docroot quirk on some nodes. |
wp iwpfb list [--unresolved | --status=<s>] [--type --page --format=table|json|csv|ids|count]
wp iwpfb get <id> [--format=json]
wp iwpfb create --message="…" [--type --page --name --status]
wp iwpfb update <id> [--status --resolution --message]
wp iwpfb reply <id> --text="…" [--team]
wp iwpfb export [--unresolved] [--format=json|md] [--file=<p>] # no --file -> STDOUT
wp iwpfb import <file> [--dry-run] # apply status + resolution by idGPL-2.0-or-later. See LICENSE.