Introduction
TAW builds and runs custom WordPress sites: a framework with its own data layer, two themes on top, the taw command inside every theme, and taw-fleet to run all your sites from one terminal.
What is TAW?
TAW is a way to build and run custom WordPress sites without a stack of plugins. It's a framework, taw/core, with its own data layer: post types, fields and options defined in PHP or JSON, with no ACF. Two themes are built on it: TAW Theme, classic and component-based, and TAW Gutenberg, a block theme.
Two tools do the everyday work:
The taw command
taw, in every theme. It scaffolds blocks, reads and writes fields, moves content between sites, and updates the whole theme in one step with taw update.
taw-fleet
A terminal dashboard for every TAW site on your Mac. It shows versions, git, pull requests, deploys, production health and client feedback, creates sites, and starts Claude Code on a site's skills.
TAW is for PHP and WordPress developers who like to work in code: PHP classes, Composer and Vite, not page builders.
How the pieces relate, and how a release reaches a live site: How TAW fits together.
Why TAW?
No ACF, no plugin dependencies: you own your data layer. The data layer, the metabox engine, forms, mail, image helpers and SVG support are built in, so no third-party field plugin can be abandoned under you. The data works the same way in both themes.
Updates like a package
taw update updates taw/core and the framework's files, runs the migrations and the checks, and opens a pull request. The theme's taw.json decides what changes, so nothing asks you questions.
One data layer, two themes
Post types, taxonomies, fieldsets and options pages, defined in PHP or taw-schema/*.json. Read them with typed values through Taw::post(), or show them in the block editor with Block Bindings.
Data in the block editor
Dynamic tags, expressions, conditions, dynamic block settings and the TAW Loop put your fields into any core block, with no custom block code.
Zero-config blocks
In TAW Theme, a block is a folder with a class and a template. taw make:block Hero --type=meta --with-style creates it; each block loads its own CSS and JS only on pages that use it.
Rich metabox engine
19 field types, including repeater, group, post_select, link, icon and datepicker, with conditional logic, tabs and grid layouts. The same fields work on options pages, terms and users.
Forms and email
Form handles CSRF, spam protection, validation, AJAX submission and multi-step wizards. Mailer sends transactional email from MJML or HTML templates.
Content that moves
taw content:export and content:import move a site's content, fields, media and settings as one reviewable JSON file, with a preview first and an undo after.
Production at a glance
The TAW Companion on each live site answers taw-fleet's signed requests: health, plugin updates, vulnerabilities, logs and published content. No passwords, no SSH.
Two themes
| TAW Theme | TAW Gutenberg | |
|---|---|---|
| Kind | Classic theme | Block theme (full site editing) |
| Pages are built from | PHP blocks: MetaBlocks with metabox fields, and UI blocks | Core blocks in the Site Editor, with your fields through Block Bindings and dynamic tags |
| taw/core boots | Everything: Theme::bootstrapFullSite() | The data layer: Boot::data() |
taw commands | All 33 | The 6 that don't need the classic scaffold |
| Front end | Vite, Tailwind CSS v4, Alpine.js v3 | Vite and TypeScript blocks |
Read more: TAW Theme · TAW Gutenberg.
Get started
Create a site
With taw-fleet on a Mac with Local:
brew install Relmaur/tap/taw-fleet
taw-fleet create "Acme Shop" --classic
Or with Composer, in any WordPress install's wp-content/themes:
composer create-project taw/create my-theme \
--repository='{"type":"vcs","url":"https://github.com/Relmaur/taw-create"}'
Scaffold a block
taw make:block Hero --type=meta --with-style
composer dump-autoload
Keep it current
taw update
The Quickstart walks through all of it, including the block's fields and template.