# Install, Launch, Update: Shipping a CLI on Five Platforms -- the devrig Approach

DevFeed: [Install, Launch, Update: Shipping a CLI on Five Platforms -- the devrig Approach](<https://devfeed.tech/articles/install-launch-update-shipping-a-cli-on-five-platforms-the-devrig-approach-25428.md>)

Original publisher: [Read original article](<https://jonnyzzz.com/blog/2026/08/06/devrig-install-launch-autoupdate/>)

Author: Eugene Petrenko

Published: 2026-08-06T00:00:00Z

Content type: tutorial

Language: en

Sources: [Eugene Petrenko](<https://devfeed.tech/sources/eugene-petrenko.md>)

Topics: [Command-line interface](<https://devfeed.tech/topics/cli.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [ide](<https://devfeed.tech/topics/ide.md>)

Tags: [agents](<https://devfeed.tech/tags/agents.md>), [ai-agents](<https://devfeed.tech/tags/ai-agents.md>), [ai-coding](<https://devfeed.tech/tags/ai-coding.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [cli](<https://devfeed.tech/tags/cli.md>), [command-line](<https://devfeed.tech/tags/command-line.md>), [devrig](<https://devfeed.tech/tags/devrig.md>), [distribution](<https://devfeed.tech/tags/distribution.md>), [eugene-petrenko](<https://devfeed.tech/tags/eugene-petrenko.md>), [jdk](<https://devfeed.tech/tags/jdk.md>), [jonnyzzz](<https://devfeed.tech/tags/jonnyzzz.md>), [jvm](<https://devfeed.tech/tags/jvm.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [mcp-steroid](<https://devfeed.tech/tags/mcp-steroid.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [sha-256](<https://devfeed.tech/tags/sha-256.md>), [tag-41199d53f463](<https://devfeed.tech/tags/tag-41199d53f463.md>)

## AI overview

This tutorial presents the devrig approach to distributing and updating a JVM command-line tool across five platforms. It describes generated install scripts with verified JDK coordinates and baked-in URLs and SHA-256 hashes, content-addressed side-by-side installations, binary-owned launchers, and updates performed by running a fresh install script.

## Source excerpt

A JVM command-line tool is easy to write and miserable to ship. You need five platforms, a JDK the user does not have, an update path that never overwrites a running install, and a trust story for a `curl | sh` one-liner. Here is the architecture we ended up with in `devrig`: generate the install script from a model whose JDK coordinates are signature-verified, make installs content-addressed and side-by-side, let the binary own its own launcher, and make "update" mean nothing more than running a fresh install script