Lichendust

I'm Harley, an artist, animator and programmer.
I make all kinds of useless stuff.

Publishing Software

🌱
🗞️
CONTENTS

I have a few conventions I use for publishing most of my software. They're sort of rules, and I bend them sometimes, but the core of them is this —

  1. Documentation always ships alongside code. If publishing to a forge, the documentation should be natively readable.
  2. Applications should carry their own documentation. If I just have a copy of the binary, I should be able to figure out how it works purely by interrogating it. This can be self-explanatory, particularly in well-designed GUIs1, but with command-line apps or certain kinds of application, this isn't so. Documentation must be available in an obvious way.
  3. Version numbers should exist in as few places as possible, because even one number is easy to forget to change when publishing. I usually embed them as a VERSION string for programs or MAJOR, MINOR, PATCH constants for libraries, and let my build tooling parse those. See the Meander build.sh for an example of this.

For the second point, especially in command-line apps, I always program in every possible version of the help command, even if they don't fit the convention of the rest of the app. So I'll usually have help, usage, -h, --help, etc., all available to catch the request. As long as the user thinks to try one of them, they'll be able to learn everything else from the documentation they're now presented with.

Publication Checklist

Because I've been burned several times by accidentally forgetting to change a version number or pushing a release tag before I meant to or accidentally having mismatched versions of docs side-by-side — and no doubt, even with this checklist, will continue to make impatient human errors — I've tried to create a little system to follow to catch all of this before I ship things.

This seems a bit silly, but I miss one of these things almost every time I update something, and it drives me mad every time.

If a release and/or changelog must be published, ensure the source of truth documentation has been distributed to all relevant endpoints:

Once any part of the distribution ecosystem has been published:

Release / Changelog Template

This is the template I use for most of my release notes and the changelog.md files in software projects. In changelogs, the heading becomes the version number and all heading levels get bumped up by one.

# Patch Release
# Minor Release
# Major Release

or in changelogs:

# v0.0.0

Patch Release
Minor Release
Major Release

Delete whichever heading is not relevant. Write any initial or introductory notes here. Thank contributors if necessary.

## Features

List new features as simple one-liners, or sub-bullets if necessary. Don't go on too long.

- x

## Bugs

Ditto for fixed bugs. Be descriptive only if specificity is needed.

- x
  
## Internal

Document any internal changes here that may be relevant to other developers or to yourself in future, but aren't visible to users.

- x

For any platform not listed, please see the compilation guidelines in the main repository, which can assist you in building for your own operating system and architecture.

Releases are [available over on itch.io](https://lichendust.itch.io/meander). Each release zip file corresponds to the checksums here.
  1. Here, I don't mean Clippy popups that take you on a tour, or the act of reading the keybinding menu. I mean actual, wordless design decisions that enable the user to figure things out without reading or needing things pointed out. Some concepts are obviously too complex for this, but the basics of getting started in an app should be graspable by just looking around at the first working screen the user is presented with.
  2. This is especially important for libraries or compiler-installables, where something like Rust's Cargo or the Go mod proxy will swallow your mislabelled version and render it unfixable without burning the version number and Git tag.
WORD COUNT
975
LAST UPDATED
2025-08-21
BACKLINKS

Gardening My Documentation

August 2025