PaintNode uses GitHub Releases as the Tauri updater backend.
Required by Linux updater builds:
TAURI_SIGNING_PRIVATE_KEY: full contents of the Tauri updater private keyTAURI_SIGNING_PRIVATE_KEY_PASSWORD: password for the Tauri updater private key
Generate a repository-owned updater key before the first release and replace the
public key in src-tauri/tauri.conf.json. Keep an offline backup of the private
key and password: GitHub secrets cannot be read back, and losing this key prevents
future releases from updating installations that trust it.
- Linux x86_64:
.debinstaller and AppImage - Tauri updater: signed metadata in
latest.json; Linux.deband AppImage installations each receive their matching package format
This repository does not publish macOS bundles. macOS users download the
original builds from
https://github.com/white-cornerstone/paintnode/releases/latest.
Linux release builds run on Ubuntu 22.04, the oldest supported CI baseline, to
avoid linking against a newer glibc than supported Ubuntu/Debian installations.
The .deb automatically installs the PaintNode.desktop launcher and application
icons under the system hicolor icon theme.
- Update versions in
package.json,src-tauri/tauri.conf.json, andsrc-tauri/Cargo.toml. - Add release notes at
docs/release-notes/<version>.md. - Run
npm run check,npm run verify:release-config,npm test, andcargo check --locked --manifest-path src-tauri/Cargo.toml. - On Linux, run
npm run tauri:build:linuxandnpm run verify:linux:deb. - Before the first Linux app release (and whenever provider versions change), run
the Provider runtimes workflow for
provider-runtimes-latest, enable the explicit production confirmation, and verify that both Codex and Claude list alinux-x64artifact inruntime-manifest.json. The app release workflow checks the published Linux runtime target and stops before publishing if it is missing or incompatible. - Commit the release.
- Push a tag such as
paintnode-v0.1.1. - GitHub Actions builds a draft Linux release, validates that
latest.jsoncontains Linux x86_64 AppImage and.debentries, then publishesPaintNode for Linux v0.1.1atomically with both packages and updater artifacts.
The release notes file becomes both the GitHub release body and the notes shown in the in-app updater dialog. The workflow fails if the file is missing so placeholder text does not ship to users.
The app checks:
https://github.com/Emilio-01-T/paintnode/releases/latest/download/latest.json