#ci #cli #release-automation

app cranko

A cross-platform, cross-language release automation tool

16 unstable releases (3 breaking)

new 0.3.3 Oct 18, 2020
0.3.2 Oct 17, 2020
0.3.0 Sep 28, 2020
0.2.3 Sep 24, 2020
0.0.27 Sep 17, 2020

#311 in Command line utilities

Download history 56/week @ 2020-09-01 24/week @ 2020-09-08 28/week @ 2020-09-15 71/week @ 2020-09-22 47/week @ 2020-09-29 1/week @ 2020-10-06 46/week @ 2020-10-13

82 downloads per month

MIT license

6.5K SLoC

Build Status


Cranko is a release automation tool implementing the just-in-time versioning workflow. It is cross-platform, installable as a single executable, supports multiple languages and packaging systems, and is designed from the ground up to work with monorepos.

To learn more, check out the book!


Cranko is delivered as a single standalone executable for easy installation on continuous integration systems. On Unix-like systems (including macOS), the following command will drop an executable named cranko in the current directory:

curl --proto '=https' --tlsv1.2 -sSf https://pkgw.github.io/cranko/fetch-latest.sh | sh

On Windows systems, the following command will do the same in a PowerShell window:

[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://pkgw.github.io/cranko/fetch-latest.ps1'))

For more details and additional methods, see the Installation section of the book.

Getting Started

Because Cranko is a workflow tool, to really start using it you’ll need to learn a bit about how it works and then think about how to integrate it into your development processes. To learn more, check out the Getting Started and Just-in-Time Versioning sections of the book.

Development Roadmap

Cranko is still a new project and is lacking many features that would be useful. Here are some of the things on the radar:

  • Built-in support for more languages / frameworks:
    • Rust
    • NPM
    • Python
    • Visual Studio?
  • Per-repo config file
    • Identify upstream remote from its URL
    • Customize project configuration
      • Custom per-project "rewriter" additions
    • Defined "unaffiliated" projects
  • Revamp error handling infrastructure
  • cranko bootstrap command to help people onboard
  • Figure out how we're going to make a test suite for this beast

Here are some larger projects that would be cool:

  • Split the main implementation into multiple crates
  • Pluggable framework for auto-generating release notes (e.g., taking advantage of Conventional Commit formats, auto-linking to GitHub pull requests)
  • Pluggable framework for knowing when releases should be made and/or determining how to bump version numbers (e.g., Conventional Commits plus semantic-release type standards)
  • Pluggable framework for deciding which commits affect which projects
  • Additional templates for release notes, tag names, etc. etc.
  • More robust CLI interface for querying the project/release graph so that external tools can build on Cranko as a base layer.

cargo Features

The cranko Cargo package provides the following optional features:

  • vendored-openssl — builds the git2 dependency with its vendored-openssl feature, which uses a builtin OpenSSL library rather than attempting to link with the system version. This is useful when cross-compiling because often the target environment lacks OpenSSL.


Are welcome! Please open pull requests or issues against the pkgw/cranko repository.


Cranko copyrights are held by Peter Williams and the Cranko project contributors. Source code is licensed under the MIT License.


~560K SLoC