Skip to content


Bundles are pre-built sets of containers and tasks you can pull into your project with include.

Available bundles


Only use bundles that you trust, as they can contain arbitrary code that will be executed when you run a task or use a container from a bundle.

The following bundles are available:

  • bundle-dev-bundle Provides an opinionated, sensible default environment for bundle development.

  • golang-bundle Provides a development container for Golang, with preconfigured sensible defaults.

  • hadolint-bundle Provides a task to lint Dockerfiles with Hadolint.

  • hello-world-bundle A sample bundle that demonstrates a basic development experience for creating a bundle, including an automated test setup.

  • java-bundle Provides a development container for JVM-based languages that use Gradle, with preconfigured sensible defaults.

  • node-bundle Provides a development container for Node.js, with preconfigured sensible defaults.

  • shellcheck-bundle Provides a task to lint shell scripts with ShellCheck.

: bundles built and maintained by the batect project

If you'd like to share a bundle that you've created, please feel free to submit a PR to update this page.

Tips for building bundles

  • Consider building and publishing any Docker images your bundle uses rather than using build_directory.

    Pulling a pre-built image is generally faster than building an image from a Dockerfile.

    It also prevents issues when packages or other external resources are removed.

  • Do not store state from tasks in the bundle's working copy.

    batect clones the repository and checks out the given tag or branch, and shares this working copy between projects to save time and disk space. Storing state in this working copy would mean that different projects could interfere with one another.

    Instead, store any state in the project's directory. Use the batect.project_directory config variable to get the path to the project's directory. The paths in included files section in the include reference has an example.

  • Publish immutable tags.

    Similar to Docker's behaviour when pulling image tags, batect only checks that it has previously cloned the Git reference (branch name, tag name or commit) - it does not check that the local clone is up-to-date with that reference. Therefore, using an immutable reference such as a tag ensures that everyone using the project gets the exact same version of the bundle.

    It is recommended you use semantic versioning when versioning bundles.

  • Test your bundle.

    Testing your bundles ensures that they work as expected. The hello world bundle has an example of how to do this.