01 · START
Create your first entry
Bind the exact namespace URI on xs:entry. Ordinary XML becomes output; xs:* elements control composition.
Comparison is exact and case-sensitive. The address identifies the vocabulary; the build never fetches it over the network.
Start the tutorial<xs:entry xmlns:xs="https://xmlsquish.moesegfault.dev/ns">
<Prompt>Hello, xmlsquish.</Prompt>
</xs:entry>LEARNING PATH
Read in workflow order
Getting started
Bind the exact namespace URI on xs:entry. Ordinary XML becomes output; xs:* elements control composition.
→02Source model
An entry builds a prompt; pack delivers entries and assets; SOPack distributes a compiled library. A module publishes macros. Imports make module definitions visible without executing them.
→03Macros & expansion
Macros have namespace-qualified names and explicit parameters. Expansion resolves a fixed target and creates an isolated invocation frame.
→04Control & scope
xs:ifr provides regular-expression matching and lexical named captures. Scalar and XML content remain separate throughout evaluation.
→05Build & artifacts
Lower DSL to IR, optimize compile-time work, link referenced units, then distribute prompt, pack or SOPack products.
→06Agent Skills
Declare a local or Git skill at the workspace root, lock its complete tree, and reconcile a safe copy into .agents/skills. These instructions do not change the XML language.
→07Directive reference
Use the filter as a shortcut. Every contract remains present in the HTML and addressable by a stable fragment.
→08Limits & invariants
Recursive programs run within explicit budgets, while stable identity and language invariants keep projects auditable.
→Three boundaries to remember
entry ≠ modulexs:module may contain imports and macros only. xs:entry has declarations followed by an output-producing body; an entry cannot be imported.
string ≠ XMLUse xs:insert to emit a scalar as escaped text. It never reparses <, >, or & as markup. Use xs:fill/xs:slot when structure must remain XML.
namespace ≠ releaseNever append a version or trailing slash to the namespace URI. Use snapshots only when auditing the contract implemented by an older release.