# Elementor Ultra — exjsx.dev > Open-source toolchain: AI agents build native, editable Elementor pages. > Typed JSX in, Elementor V4 out over REST, pass/fail verification on every > save at 1200/1920/390 px. MIT. This page was built by an AI agent with the > stack it describes. This file is canonical for machines; the same facts > render at https://exjsx.dev/?mode=agent ## Prereqs Node >= 18; macOS/Linux/WSL2; no Docker; no existing WordPress needed (a local playground provides one); network: registry.npmjs.org + raw.githubusercontent.com ## Setup (paste to any MCP-capable agent) Set up Elementor Ultra on this machine by fetching and following https://raw.githubusercontent.com/Algorismus-io/elementor-ultra/4b28b0c1ac863a27f9f1433fd4239054a0dffee6/SETUP.md step by step. Verify each step before the next. sha256(SETUP.md) = 67fc2699df8e42f56cb011096106cbc407199bb5065c55f2ea3b27a2de04f0a6 Latest (unpinned): https://raw.githubusercontent.com/Algorismus-io/elementor-ultra/main/SETUP.md ## Wizard (interactive alternative — run one, not both) npx @algorismus/create-elementor-ultra@1.0.0 ## Stack - @algorismus/elementor-jsx@1.6.0 — compiler + the `exjsx` CLI — https://github.com/Algorismus-io/elementor-jsx - @algorismus/elementor-ultra-mcp@1.0.0 — 90+ MCP tools — https://github.com/Algorismus-io/elementor-ultra-mcp - @algorismus/elementor-ultra-studio@0.5.0 — gates + doctor — https://github.com/Algorismus-io/elementor-ultra-studio - @algorismus/elementor-ultra-playground@1.2.0 — local WordPress, no Docker — https://github.com/Algorismus-io/elementor-ultra-playground - elementor-ultra-mcp WordPress plugin@1.2.3 (GPL) — the REST seam - Tested against Elementor 4.1.4 / 4.2.0; Elementor free is enough. ## Auth MCP server -> WordPress REST via a WP Application Password (core mechanism). Created during setup; stored in your MCP client config; revoke in WP Admin -> Users -> Profile -> Application Passwords. ## Loop npx exjsx dev --gates # save -> rebuild -> diff deploy -> verify at 1200/1920/390 px ## Verify npx eu-studio check --pages / # expect pass:true, gates green at all widths ## Safety Backup-first writes; per-page rollback (elementor_page_rollback tool); server-side validator rejects bad trees before save; base_hash optimistic concurrency; op_id idempotency. ## Docs & proof - https://docs.wpos.ai/ultra - https://docs.wpos.ai/ultra/examples/overview — 8 sites built live on camera, one prompt each - https://exjsx.dev/showcase/ — 50 more pages from one run (~1 developer day): fifty invented brands, fifty real Elementor pages, ranked best-first by a human design review; each case study embeds the live page, sandboxed. Machine index: https://exjsx.dev/showcase/index.json — all fifty are fictional demonstrations. ## License MIT (c) 2026 Algorismus (also operates wpos.ai). Independent project — not affiliated with or endorsed by Elementor Ltd. --- # Full API card (verbatim output of `exjsx api`, v1.6.0) # elementor-jsx — the one-page API card Read THIS instead of grepping the source. Everything an agent needs to author a site; every name below is real and tested. Print it any time with `exjsx api`. ## fs-project layout ``` site/ site.config.mjs export default { name: 'mysite' } theme.mjs export default defineTheme({ mode:'literal', colors:{...}, fonts:{...} }) components/*.jsx shared components (import-free — prelude provides the API as free vars) pages/home.page.jsx export const meta = { title, slug?, seo?, template? } export default ({ theme }) =>
(token access: theme.spec.colors.* / theme.spec.fonts.*) Components DON'T need {t} prop-drilling: `useTheme()` (free var) returns the active theme anywhere in the tree — const t = useTheme(). ``` Build/deploy: `exjsx build ` → `exjsx deploy ` (idempotent; self-primes CSS; detects Elementor version over REST — no wp-cli needed; a stray EXJSX_WPCLI pointing at another site is auto-ignored). `exjsx lint ` before every deploy. Live loop: `exjsx dev [--gates]` — watch + rebuild (ms) + smart deploy (page-only ~3s; full only when classes/variables change) + preview at :4477 that reloads on save and shows build errors in an overlay; `--gates` re-runs the eu-studio check on changed pages after each save. ## Intrinsics (the ONLY tags) | tag | notes | |---|---| | `box` `div` `col` `row` `section` | flex containers. `row` forces dir row; `section` renders `
` | | `h1 h2 h3 h4` / `heading` | text props below apply; inline `//
` children OK | | `text` `p` | paragraph; `href` renders a REAL anchor (use for links/buttons-as-links) | | `img` | `src` = URL string (inline `alt` OK) or attachment id (alt comes from media manifest) | | `html` | raw HTML/SVG/style/script carrier — `raw` prop or children | NO `