Distributing Mixins

Distributing Mixins

Once you have created a mixin, it is time to share it with others so that they can try it out and use it too. Porter has built-in commands for managing mixins. All you need to do is get your mixin ready, and publish them to a file server:


Your mixin should be compatible with the following architectures and operating systems:

  • GOOS: windows, linux, darwin
  • GOARCH: amd64

If you are creating your mixin in Go, you may find the magefile that we use for our Porter mixins helpful as a starting point.


Porter expects mixins to be published with a specific naming convention:

  • runtime: VERSION/MIXIN-linux-amd64

* Note: Porter uses GOOS and GOARCH which are terms from the Go programming language, because it is written in Go. You must use the same terms, for example darwin and not macos, in order to Porter to recognize your mixin properly.

Here is an example from the exec mixin:

base url/
└── v0.4.0-ralpha.1+dubonnet
    ├── exec-darwin-amd64
    ├── exec-linux-amd64
    └── exec-windows-amd64.exe

If you are distributing your mixing via Github releases, upload just the mixin executables as artifacts to a release named after the mixin version, and it will match exactly what Porter expects. Then provide the following URL to your users, https://github.com/org/project/releases/download.


When porter installs a mixin, it builds a url from the command-line arguments:

porter mixin install NAME --version VERSION --url URL
  • runtime url: URL/VERSION/NAME-linux-amd64

When --version is not specified, it is defaulted to latest which should represent the most recent version of the mixin.

You may also choose to publish canary versions of the mixin, which are unpublished builds from the “main” branch. The official Porter mixins follow this pattern. If you have other published tagged builds of your mixin, porter can handle installing them as well.


See the Search Guide on how to search for available mixins and/or add your own to the list.