Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 400,000 packages pre-installed, including tattoo with all npm packages installed. Try it out:

var tattoo = require("tattoo")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

tattoo v2.0.0

Test all the things over and over


Test all the things over and over.


npm install -g tattoo

GitHub token

  1. Generate a GitHub token here:
  2. Put the token in a file called github-token in your working dir


When you run tattoo, it will create and/or reuse a directory called ./tattoo_workspace, relative to the current working dir. This folder is used to clone test target repositories and their dependencies. You can change the directory used with the --workspace-dir or -w option.

Test one repo

tattoo PolymerElements/paper-input

This is the simplest possible case. What actually happens here is that tattoo clones the repository into the local filesystem as ./tattoo_workspace/paper-input, installs all of the dependencies and devDependencies in its bower.json also into ./tattoo_workspace. Then it essentially runs cd ./tattoo_workspace/paper-input && wct --local chrome.

Test two repos

tattoo PolymerElements/paper-input PolymerElements/paper-icon-button

In this case, tattoo clones both repositories into ./tattoo_workspace as paper-input and paper-icon-button, then installs all of their combined dependencies and devDependencies into ./tattoo_workspace. Conflicts in dependencies are currently resolved arbitrarily, but there's an issue (#24) to address that. It then runs wct for both custom element repos.

Test all the paper repos

tattoo PolymerElements/paper-*

Tattoo supports wildcards in repository references so the above actually clones all the PolymerElements repos that start with paper-, installs their dependencies and runs wct for all of the paper element repos.

Test all the paper repos on a specific branch

tattoo "PolymerElements/paper-*#2.0-preview"

In the previous examples, tattoo cloned the requested repositories and simply ran tests on whatever HEAD of their repo is, (typically master branch). It is frequently the case that a specific branch, tag or commit/SHA1 reference is the desired target for test. Tattoo supports this with the #hashref syntax so the above example PolymerElements/paper-*#2.0-preview would tell tattoo to run tests for all the paper- elements which have a branch called 2.0-preview. If the branch name is invalid for a given repo, it should be skipped/excluded.

Test all the repos except that one

tattoo PolymerElements/* -s PolymerElements/style-guide

Test repos with different browser

tattoo PolymerElements/* --wct-flags="--local safari"

Test repos with a config.

Create a tattoo_config.json file to persist a base of options to tattoo. For example:

  "test": [
  "require": [
  "verbose": true,
  "wctflags": ["--local canary", "--color"]

Tattoo will automatically find that file, load its options, and then apply any additional command line arguments. So you could simply run with the config as-is by typing:


Or test the paper-button repo and the paper-hat repo by typing the following, since paper-button is in the config and arguments are additive.

tattoo PolymerElements/paper-hat

Config files support most of the same options as the command-line flags:

  • "test": ["PolymerElements/paper-button#2.0-preview", "PolymerElements/*", etc] Repositories to test.

  • "require": ["PolymerElements/iron-list", "PolymerElements/paper-*", etc] Explicit repos to clone into workspace, but not test. This is useful if you want to force a specific version of a web package that wouldn't be installed by default.

  • "exclude": ["PolymerElements/style-guide", "*/*-deprecated", etc] Repositories not to load. Filters out items from the test and require list.

  • "skip-test": ["PolymerElements/iron-meta", "*/*-alpha", etc] Repositories not to test.

  • "fresh": true|false Clears the workspace for each run, i.e. will clone all repos from remote instead of updating local copies.

  • "github-token": "0123456789ABCDEF1337" Provide a github token via this setting instead of using "github-token" file.

  • "verbose": true|false When true, output all the things.

  • "wct-flags": ["--local chrome"] Set to specify flags passed to wct.

  • "workspace-dir": "/tmp/tattoo-workspace" Specify a different target folder to clone repos and run web-component-tester from.

Clean up installation

rm -rf tattoo_workspace

Or start with a fresh workspace as part of command

tattoo -f

Get help on the cli

tattoo -h

tattoo (test all the things over & over)

  Runs the web-component-tester on custom element git repositories.

  Run test for a specific GitHub repository:
  $ tattoo PolymerElements/paper-button

  Run test for a whole bunch of GitHub repositories:
  $ tattoo PolymerElements/paper-*

  See more examples at


  -t, --test string[]          Repositories to test.  (This is the default
                               option, so the --test/-t switch itself is not
  -s, --skip-test string[]     Repositories not to test.  Overrides the values
                               from the --test
  -r, --require string[]       Explicit repos to load.  Specifying explicit
                               repos will disable running on the default set of
                               repos for the user.
  -e, --exclude string[]       Repositories not to load.  Overrides the values
                               from the --repo and --test flag.
  -f, --fresh                  Set to clone all repos from remote instead of
                               updating local copies.
  -c, --config-file string     Specify path to a json file which contains base
                               configuration values.  Command-line options
                               supercede values in file where they differ.  If
                               file is missing, Tattoo will ignore.
  -C, --color string           Set to "off" if you do not want color in your
                               output.  Defaults to "on".
  -g, --github-token string    Provide github token via command-line flag
                               instead of "github-token" file.
  -v, --verbose                Set to print output from failed tests.
  -w, --wct-flags string[]     Set to specify flags passed to wct.
  -d, --workspace-dir string   Override the default path "tattoo_workspace"
                               where the repositories will be cloned and web-
                               component-tester will run.
  -h, --help                   Print this usage example.
  -V, --version                Print out the version of tattoo.


RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free