Migration from Press
Conservative migration workflows from Liquid, Shopify, WordPress, WXR, Handlebars/Mustache, and Markdown/MDX.
Migration is designed as a typed checkpoint, not a runtime bridge. Source adapters map legacy templates into stretchpress.blocks.v1, then import that IR back to .quire.
Supported inputs
quire migrate path/to/template.liquid --from liquid --out path/to/page.quire
quire migrate path/to/sections/product.liquid --from shopify --out path/to/product.quire --report path/to/report.json
quire migrate path/to/single.php --from wordpress --name ImportedPost --out path/to/post.quire
quire migrate path/to/export.xml --from wxr --name ImportedWXR --out path/to/post.quire
quire migrate path/to/template.hbs --from handlebars --out path/to/page.quire --report path/to/report.json
quire migrate path/to/page.mdx --from mdx --out path/to/page.quire --report path/to/report.json
Bundle migration
quire migrate-bundle path/to/shopify-theme --from shopify --name Dawn --out migrated/dawn --report migrated/dawn.report.json
Bundle mode writes one .quire file per source when --out is provided and reports an aggregate score.
Report format
Migration reports are typed and versioned:
{
"format": "quire.migration",
"version": 1,
"source": { "from": "liquid", "kind": "liquid-template", "file": "templates/product.liquid" },
"confidence": "starter",
"fidelity": {
"mapped": [],
"partial": [],
"unmapped": [],
"summary": { "mapped": 0, "partial": 0, "unmapped": 0 },
"score": { "percent": 100, "grade": "A" }
},
"inferred": ["model product: Product"],
"warnings": [],
"unsupported": []
}
confidence is derived from fidelity:
starter: fully mappedassisted: partial mappingpartial: unmapped constructs present
Mapping behavior by source type
- Liquid: common objects (
product,collection,cart,post,page) mapped to model fields; filters with formatter equivalents recorded as mapped when possible. - Shopify: supports sections, snippets, template JSON, schema blocks/settings, and section metadata capture for explicit follow-up.
- WordPress PHP/WXR: maps common title/content/metadata helpers and
postmodel outputs; shortcodes and hooks are reported, not executed. - Handlebars/Mustache/MDX: maps simple branches and expressions into typed props; controls/partials are partial mappings that should be converted to components/blocks.
Security and limitations
Migration never executes unsafe legacy code. It is constrained to conservative conversion and may emit manual follow-up:
- no PHP/Liquid/shortcode execution
- no HTML/CSS/JS passthrough into rendered props
- no automatic shortcodes or theme hooks preservation
- no network/database access during migration
Use generated .quire as a starting checkpoint and refine by hand with project schemas and component libraries.
Real-world proof points
The source tree includes:
examples/migration-gallery/with representative.quirecheckpointsexamples/migration-showcase-scale/with multiple public theme fixtures- aggregate and per-document reports under
examples/migration-showcase-scale/reports/andscorecards/