DEVELOPMENT / SOURCE FORMAT

Dowe syntax from the first line

Dowe is a whitespace-oriented declarative language. Learn the three value shapes, then let the shared compiler and formatter keep source consistent across every target.

1 / VALUE SHAPES

Choose the delimiter that matches the data

A scalar is one value, an object gives values names, and an array keeps values in order. Responsive props are objects; imported route graphs and HTTP methods are arrays.

Shape
Example
What it means

No data

There are no records to display

2 / ARRAYS

Use spaces between ordered values

The canonical array form has no commas. Empty arrays remain [], nested braces or brackets keep their contents together, and nested arrays support more than one dimension.

dowe
main
  views:[HomeViews DocsViews]
  server port:8081
    cors methods:["GET" "POST" "PATCH" "DELETE"] headers:["Content-Type" "Authorization"]

const cards:
  value:[
    { title:"First card" tags:["new" "featured"] }
    { title:"Second card" tags:["stable"] }
  ]
Existing comma-separated arrays remain accepted for migration. The formatter rewrites them to the whitespace form, so you can migrate files incrementally.

3 / OBJECTS AND PROPS

Use key:value pairs inside braces

Objects also use spaces, but every entry has a key. Props use the same key:value shape and come before child nodes.

dowe
Grid columns:{ xs:1 lg:2 }
  Button show:{ xs:false md:true } iconStart:{ when:isReady value:"check" }
    "Continue"

Grid:
  columns:{ xs:1 lg:3 }
  gap:4
  Text
    "Three responsive columns"

4 / FIRST-PROJECT CHECKLIST

Avoid the mistakes that slow down a first project

Run the compiler early. Diagnostics, formatting, and the editor integrations all share the same source contract.

Mistake
Correction

No data

There are no records to display

5 / NEXT STEP

Start with the generated project

dowe init creates a blank or CRUD project with the same syntax documented here. After initialization, run the formatter and then compile the server and web targets.