dmake 0.0.3

Dart native
Flutter Android iOS

Simple, flexible build system in Dart. Inspired by CMake and GNU Make.

dmake #

Simple, flexible build system in Dart. Supports incremental builds, file watching, and snapshotting for faster startup.

Usage #

dmake is a DSL that creates a simple graph of inputs and outputs.

Try compiling a Dart app! In tool/all.dart:

import 'package:dmake/dmake.dart';
import 'package:dmake/dart.dart';

main(List<String> args) {
  make(args, () {
    if (isRelease) {
      // Build to JS in release mode.
    } else {
      // Run all web/ files through dartdevc.
      all(glob('web/*.dart', recursive: false), dartdevc);

Then, run dart tool/all.dart. All of your .dart files in web/ will be built to JavaScript via the Dart dev compiler.

Release mode #

It's pretty common to have different build rules in debug and release mode. To switch over to dart2js, run dart tool/all.dart --release.

Snapshotting Builds #

Build systems are called very often, and therefore should start up quickly. Using the dmake executable, you can easily snapshot your build script.

To create a snapshot of tool/all.dart, just run pub run dmake.

If you had another file, say, tool/foo.dart, the command would become pub run dmake -t foo.

The single caveat is that to distinguish between arguments passed to the dmake toplevel and to your actual script, you need to separate them with a --.

For example, to run in release mode:

pub run dmake -- --release

Run pub run dmake --help for help.

You can also pub global activate dmake. In this case, you can simply run dmake, dmake -t foo, etc.

Infrastructure #

dmake includes utilities for quickly building files in different languages:

  • package:dmake/dart.dart
  • package:dmake/sass.dart
pub points

Simple, flexible build system in Dart. Inspired by CMake and GNU Make.

Repository (GitHub)
View/report issues


API reference





args, glob, graphs, io, logging, mime, path, rxdart, watcher


Packages that depend on dmake