prepare a dart package for publishing in 5minutes

When publishing a dart package you should spend a minute and read the recommendations from the dart team about publishing. However it makes sense to add a few more things to show up how nice your new package is and what awesome things it can do.

dartanalyzer and code linting#

use something like dartanalyzer --fatal-warings lib/ bin/ to scan your code for issues.

tests and coverage#

Let's say you are familiar with tests and wrote tons of them, then it would be nice to collect this data and prepare a little batch at your README in your repo that shows the percentage. Just like this one Coverage Status

to get there we use the test_coverage package, add it to your pubspec.yaml:

  test: ^1.4.0
  mockito: ^3.0.0
  test_coverage: ^0.2.0

Then you can run your tests with the command pub run test_coverage. It will generate a small test in test/.test_coverage.dart that combines the execution of all your tests and coverage metrics will be collected during testing and stored at coverage/

coverage as report#

If you are curious about the coverage data use genhtml -o coverage coverage/ to generate a nice html report that is easy to view in a browser. But only locally.

For github I going to use the coveralls platform to generate the report and the nice badge. It's free and an account is easy to setup. Later more about this.

dartfmt and nice readability#

to the no issues with the standard code formatting rules better run dartfmt -n --set-exit-if-changed lib/ test/ bin/ to check or dartfmt -w lib/ test/ bin/ to reformat your code base. Tip to it early and every build.

now lets automate this stuff#

for this lets prepare a small Makefile that helps with this (shell scripts are also fine but I prefer make for small projects)


build: lib/*dart test/*dart bin/*dart deps
    dartanalyzer ${DARTANALYZER_FLAGS} lib/ bin/
    dartfmt -n --set-exit-if-changed lib/ test/ bin/
    pub run test_coverage

deps: pubspec.yaml
    pub get

    dartfmt -w lib/ test/ bin/

build-local: reformatting build
    genhtml -o coverage coverage/
    open coverage/index.html

    pub publish

small and handy. There you see build targets. The default one is the first and called build this will be used later on by travis to perform a build.

Locally you can run make build-local to get help also with the code reformatting and check the coverage report.

Travis CI as build server#

add a .travis.yml to your project:

language: dart
  - stable
  - gem install coveralls-lcov
script: make
  - coveralls-lcov --repo-token $COVERALLS_TOKEN coverage/

and go to to setup and account and a project. There you can define a build variable COVERALLS_TOKEN that should contain the token you will get on (as described earlier).

don't forget all the badges in your README#

so the there is the build status, coverage and the pub version badge to add. Here I show the examples of my little tool valgene just for demonstration.

[![Build Status](](
[![Coverage Status](](

that will look then like this: Build Status Coverage Status Pub

finally publish your package#

after all this commit, create tag, wait for a green build and then run make publish and you are done. Just published a nice and shiny dart package.

Enjoy and thanks for Reading