Create signed release metadata files for ToDesktop Installer.
This tool requires the native minisign command to generate keys and sign files:
# View installation instructions
npx @todesktop/create-release-metadata --install-minisign
# On macOS
brew install minisign
# On Ubuntu/Debian
apt install minisign
# On Windows
# Download from https://jedisct1.github.io/minisign/Generate a new signing key pair using minisign:
# Generate a new signing key pair
minisign -G
# This will create minisign.key (secret key) and minisign.pub (public key)
# or
minisign -G -p minisign.pub -s minisign.key# Basic usage
npx @todesktop/create-release-metadata \
--secret-key minisign.key \
MyApp-1.2.3-arm64.zip MyApp-1.2.3-x64.zip
# With release notes
npx @todesktop/create-release-metadata \
--secret-key minisign.key \
--release-notes-file release-notes.md \
MyApp-1.2.3-arm64.zip MyApp-1.2.3-x64.zip
# With expiration date
npx @todesktop/create-release-metadata \
--secret-key minisign.key \
--expires "2099-12-31T23:59:59Z" \
MyApp-1.2.3-arm64.zip MyApp-1.2.3-x64.zip
# For a beta release
npx @todesktop/create-release-metadata \
--secret-key minisign.key \
--stage beta \
MyApp-1.2.3-arm64.zip MyApp-1.2.3-x64.zip
# Custom output filename (overrides default manifest-{stage}-{platform}.json)
npx @todesktop/create-release-metadata \
--secret-key minisign.key \
--output-filename "release.json" \
MyApp-1.2.3-arm64.zip MyApp-1.2.3-x64.zip
# Provide password for the minisign key (for automation)
npx @todesktop/create-release-metadata \
--secret-key minisign.key \
--password "my-secure-key-password" \
MyApp-1.2.3-arm64.zip MyApp-1.2.3-x64.zip
# Show detailed progress information
npx @todesktop/create-release-metadata \
--secret-key minisign.key \
--verbose \
MyApp-1.2.3-arm64.zip MyApp-1.2.3-x64.zipIf you don't provide a password via the --password option, the tool will allow you to enter it interactively when minisign prompts for it.
Verify the generated manifest signature using the minisign utility:
# Verify the manifest file
minisign -Vm manifest-latest-mac.json -p minisign.pubExample output of successful verification:
Signature and comment signature verified
Trusted comment: timestamp:1655234567 filename:manifest-latest-mac.json
import { createReleaseMetadata } from "@todesktop/create-release-metadata";
async function createRelease() {
const manifestPath = await createReleaseMetadata({
distributables: ["MyApp-1.2.3-arm64.zip", "MyApp-1.2.3-x64.zip"],
secretKeyPath: "path/to/minisign.key",
releaseNotes: "What's new in this release:\n- Feature A\n- Bug fix B",
expires: "2099-12-31T23:59:59Z",
// Optional: provide password for the minisign key
password: "my-secure-key-password",
// Optional: show detailed progress information
verbose: true,
});
console.log(`Created manifest at ${manifestPath}`);
}The manifest is output as JSON with embedded minisign signatures:
{
"version": "1.2.3",
"schemaVersion": 1,
"releaseDate": "2024-03-20T10:00:00.000Z",
"expires": "2099-12-31T23:59:59Z",
"files": [
{
"path": "MyApp-1.2.3-arm64.zip",
"sha512": "abcdef1234567890...",
"size": 123456789,
"arch": "arm64",
"minisig": "untrusted comment: signature from minisign secret key\n..."
},
{
"path": "MyApp-1.2.3-x64.zip",
"sha512": "0987654321fedcba...",
"size": 123456789,
"arch": "x64",
"minisig": "untrusted comment: signature from minisign secret key\n..."
}
],
"releaseNotes": "What's new in this release:\n- Feature A\n- Bug fix B"
}Important:
- Version is automatically extracted from the filename (e.g.,
MyApp-1.2.3-arm64.zip→1.2.3). This includes prerelease tags like1.2.3-beta.1. Use--app-versiononly if you need to override the detected version. - Architecture must be detectable from the filename. Include one of:
arm64,aarch64,x64,x86_64,amd64,x86,ia32,i386, oruniversal.
| Option | CLI | API | Description |
|---|---|---|---|
--secret-key <path> |
-k |
secretKeyPath |
Path to the minisign secret key |
--release-notes <text> |
-n |
releaseNotes |
Release notes in Markdown format |
--release-notes-file <path> |
releaseNotesPath |
Path to a file containing release notes | |
--app-version <version> |
appVersion |
Version of the application (auto-detected from filename by default) | |
--platform <platform> |
platform |
Platform to create metadata for (default: mac) | |
--stage <stage> |
stage |
Release stage, e.g., latest, beta, stable (default: latest) | |
--output-dir <path> |
-o |
outputDir |
Directory where metadata files will be written |
--output-filename <name> |
outputFilename |
Output filename (default: manifest-{stage}-{platform}.json) | |
--expires <timestamp> |
expires |
Expiration date in ISO 8601 format | |
--password <password> |
password |
Password for the minisign secret key (optional) | |
--verbose |
verbose |
Show detailed progress information during execution | |
--install-minisign |
N/A | Show instructions for installing minisign |
MIT