Skip to content

joegasewicz/warden

Repository files navigation

pub package Dart

Warden

Static builder & bundler for Dart projects

Warden is a lightweight CLI tool to watch and compile Dart and Sass files for frontend projects that don’t use Flutter, are focused on building to JavaScript for server-side rendered apps, and work with Node-installed packages. It’s ideal for projects that still want custom JS/CSS assets compiled automatically.

📚 Docs: pub.dev/packages/warden


✨ Features

  • 🔁 Watches your Dart and Sass files and recompiles on change
  • 📦 Moves specified dependencies (e.g. node_modules assets) into your build output
  • 🗂️ Moves specified asset directories (e.g. assets/img/) into your build output
  • 🛠️ Bundles your dependency JS files into a single bundle.js (optional)
  • 🧱 Fully configurable via a warden.yaml file
  • 🎯 Supports multiple tasks like compiling Dart to JS and Sass to CSS

Screenshot


⚙️ Setup

Create a warden.yaml in your project root:

# The root directory of your source files
source_dir: examples

# Where to output built files (JavaScript, CSS, etc.)
destination: static/

main_file: static/main.js # Main Dart-built JS file

# Dependency handling (e.g. node_modules)
dependencies:
  - source: example/node_modules
    bundle: true
    files:
      - "poppyjs/dist/Poppy.min.js"
      - "bootstrap/dist/js/bootstrap.min.js"
      - "bootstrap/scss/bootstrap.scss"
  - source: example/another
    bundle: true
    files:
      - "lib1/dep1.js"
      - "lib2/dep2.js"

# (Optional) Copies across assets folders (e.g. containing .png, .jpg) to the destination directory
assets:
  source: example/assets
  directories: # The directory in source path that you want to copy across to the destination directory
    - img

# Tasks to run
tasks:
  frontend:
    executable: dart
    args: ["compile", "js", "bin/main.dart", "-o", "../static/main.js"]
    src: examples # Working directory for Dart files

  styles:
    executable: dart 
    args: ["run", "sass", "sass/index.scss:../static/index.css"]
    src: examples # Working directory for Sass
    warnings: false # Optional: suppress warnings for this task (default is true)

▶️ Running

Run Warden from your terminal in watch mode:

dart run warden --file=warden.yaml

This will: • Move files listed in dependencies.files into the output directory • Bundle them into a single bundle.js if bundle: true • Compile Dart to JS • Compile Sass to CSS • Watch and recompile on file changes

📦 Installation

dart pub global activate warden

Then run from any Dart project:

warden --file=warden.yaml

🧪 Example Project Structure

examples/
├── bin/
│   └── main.dart
├── lib/
│   └── examples.dart
├── sass/
│   └── index.scss
├── node_modules/
├── warden.yaml

Contributions

Please open an issue or reply to an existing issue requesting that you would like to work on it. PRs that do not fix a known bug or add new features will be closed.

License

MIT © 2025 joegasewicz