Project Structure
What every file and folder in a Woozie project does and when you'd use it.
Project Structure
Every Woozie project looks like this:
myapp/
main.woozie -- homepage (required)
woozie.rules -- config file
style.woozie -- custom style overrides (optional)
script.js -- custom JavaScript (optional)
pages/ -- additional pages
about.woozie
contact.woozie
plugins/ -- local reusable components
navbar.woozie
comet_modules/ -- installed community packages
.woozie_build/ -- compiled output (auto-generated, don't edit)main.woozie
This is your homepage. Every project needs one. It starts with app:
app:
heading "Hello World"
text "Welcome to my site."woozie.rules
Your project config. It's a simple key: value format. No comments allowed in this file.
version: 3.2
theme: dark
title: My Site
font: Inter
lang: en| Key | What it does | Default |
|---|---|---|
theme | light or dark | light |
title | Page title in the browser tab | Woozie App |
font | Any Google Font name | Inter |
lang | HTML language code | en |
color | Primary accent color (any CSS color) | purple |
favicon | Path to your favicon file | none |
style.woozie
This is where you override the look of any component. Comments are allowed here with //.
// make cards rounder
card:
border-radius = 20px
// taller hero
hero:
padding = 8rem 2remSelector names match component names — hero, card, button, nav, etc.
script.js
Drop a script.js file in your project root and Woozie automatically includes it on every page. Write whatever JavaScript you want — DOM manipulation, API calls, animations, anything.
See Custom JavaScript for details.
pages/
Each .woozie file inside pages/ becomes its own page with a clean URL:
pages/about.wooziebecomes/aboutpages/contact.wooziebecomes/contactpages/pricing.wooziebecomes/pricing
plugins/
Put a .woozie file in here and its filename becomes a reusable tag. If you create plugins/navbar.woozie, you can use @navbar in any page after registering it in woozie.rules.
comet_modules/
Community packages installed with woozie add <name> land here. You don't need to touch this folder directly.