Pages
Every Wireweave wireframe starts with a page component - the root container for all content.
Basic Page
page {
// content goes here
}Page Title
Give your page a title:
page "Login" {
// content
}The title appears in the wireframe header and can be used for documentation.
Page Themes
Set the color theme for the entire page:
page "Dashboard" theme:light {
// light theme (default)
}
page "Dashboard" theme:dark {
// dark theme
}Page Layout
Full Width
page fullWidth {
// content spans full width
}Centered Content
page center {
// content is centered
}Max Width
page maxWidth:1200 {
// content limited to 1200px
}Common Page Structures
Landing Page
page "Home" {
navbar {
logo "Brand"
nav { link "Features" link "Pricing" link "About" }
button "Sign Up" primary
}
section hero center {
heading "Welcome to Our Product"
text "The best solution for your needs"
button "Get Started" primary
}
section features {
grid columns:3 {
card { heading "Fast" text "Lightning quick performance" }
card { heading "Simple" text "Easy to use interface" }
card { heading "Secure" text "Enterprise-grade security" }
}
}
footer {
text "Copyright 2026"
}
}Dashboard
page "Dashboard" {
navbar {
logo "App"
nav { link "Dashboard" active link "Settings" }
avatar "User"
}
row {
sidebar width:240 {
menu {
item "Overview"
item "Analytics"
item "Reports"
item "Settings"
}
}
main {
heading "Overview"
grid columns:4 {
card { text "Users" heading "1,234" }
card { text "Revenue" heading "$56,789" }
card { text "Orders" heading "890" }
card { text "Growth" heading "+12%" }
}
card {
heading "Recent Activity"
table { ... }
}
}
}
}Auth Pages
page "Login" center {
card width:400 {
heading "Welcome Back"
text "Sign in to your account"
input "Email" email
input "Password" password
row justify:between {
checkbox "Remember me"
link "Forgot password?"
}
button "Sign In" primary fullWidth
divider "or"
button "Continue with Google" secondary fullWidth
}
}Settings Page
page "Settings" {
navbar { ... }
row {
sidebar {
menu {
item "Profile"
item "Account"
item "Security"
item "Notifications"
}
}
main {
heading "Profile Settings"
card {
row gap:24 {
avatar "User" size:80
stack {
heading "John Doe" level:3
text "john@example.com" muted
button "Change Photo" secondary
}
}
}
card {
heading "Personal Information" level:3
form {
row gap:16 {
input "First Name" text
input "Last Name" text
}
input "Email" email
input "Bio" textarea
row justify:end {
button "Cancel" secondary
button "Save Changes" primary
}
}
}
}
}
}Multiple Pages on a Canvas
Declare several page blocks in a single .wf file to lay them out side-by-side on a wireframe canvas.
Auto-flow
Pages without explicit coordinates flow horizontally, with a default 64px gap:
page "Login" viewport="375x812" {
// mobile auth screen
}
page "Verify Code" viewport="375x812" {
// SMS code entry
}
page "Welcome" viewport="375x812" {
// post-signup landing
}Explicit placement with at(x, y)
Use at(x, y) to pin a page at canvas coordinates. Pages with at(...) are placed exactly where you ask; pages without continue to auto-flow.
page "Login" at(0, 0) viewport="1280x800" {
// ...
}
page "Dashboard" at(1400, 0) viewport="1280x800" {
// ...
}
page "Settings" at(1400, 900) viewport="1280x800" {
// ...
}Use auto-flow for linear journeys; use at(x, y) when the canvas itself communicates structure (parallel branches, before/after pairs, app sections).
Showing flow within a single page
If you want a single page to narrate a flow without splitting into pages, use sections:
page "User Flow" {
section "Step 1: Login" { card { ... } }
section "Step 2: Dashboard" { card { ... } }
section "Step 3: Settings" { card { ... } }
}Next Steps
- Components - Available UI components
- Layouts - Layout options