Consilium uses the Flintglade name and dragon mark for distribution. The
stable application ID is com.flintglade.consilium; changing it later would
break desktop identity and require a new Flathub submission.
Consilium itself is free and open source under Apache-2.0. Release packages link to Flintglade, source and issues live in the canonical repository, and optional project support is available through Patreon. Third-party providers may charge for their own services, but payment never unlocks a Consilium feature.
The tag workflow builds native Tauri bundles on their target operating systems:
| Platform | Downloadable artifacts | Build host |
|---|---|---|
| Linux x86_64 | AppImage, Debian package, and RPM | Ubuntu 22.04 |
| Windows x86_64 | NSIS setup executable and MSI | current GitHub Windows runner |
| Windows x86_64 portable | ZIP containing Consilium.exe, project license, dependency notices, and a usage README |
current GitHub Windows runner |
Every Linux package includes the repository LICENSE: the deb installs it as
/usr/share/doc/consilium/copyright, while the RPM and AppImage install it as
/usr/share/licenses/consilium/LICENSE. Each package also includes the exact
generated THIRD_PARTY_NOTICES.txt; the local Flatpak installs it beside its
project license. The portable ZIP contains both LICENSE.txt and
THIRD_PARTY_NOTICES.txt. Linux package metadata records
Flintglade <support@flintglade.com> as the deb Maintainer and
https://flintglade.com/ as the deb Homepage and RPM URL.
The notice inventory comes from cargo metadata --locked and records each
third-party package's name, version, declared license expression, precise
crate version page, direct source-archive URL, and Cargo source without
normalizing or guessing. It uses cargo tree --locked -p grok-chat-desktop
for the two native release targets and embeds every license, copyright,
attribution, and notice file found in those exact locked crate archives. This
keeps the material section aligned to the desktop executable actually shipped,
while the complete inventory still covers all workspace dependencies. The
source-package links provide the locked source corresponding to the binary.
Regenerate and review the notice after any lockfile change:
packaging/generate-third-party-notices.sh
packaging/generate-third-party-notices.sh --checkTwelve release crates currently omit their license files from their published
crate archive. packaging/license-fallbacks.json maps them to exact
commit-pinned upstream files or exact files from another locked crate, records
reviewed SHA-256 hashes, and must cover that missing set exactly. Generation
stops if metadata, source files, hashes, UTF-8 text, or fallback coverage drift.
Nineteen MIT or legacy MIT/Apache materials contain a generic permission text
without a concrete holder line. packaging/attribution-supplements.json
covers that set exactly with commit-pinned upstream COPYRIGHT files or exact
authorship/source notices from the locked package. This avoids inventing a
holder or treating a generic template as attribution. Repository attributes
also disable checkout newline conversion for the generated notice and both
reviewed material sets, while fixing the project license to LF, so Linux
inspection compares the same reviewed bytes that Windows packaging received.
The Windows installers use Tauri's resource mapping to install the notice file
with the application. A Tauri installer accepts only one licenseFile for its
license-dialog page, so the project LICENSE remains that page and dependency
notices are delivered as a separate installed resource instead of being
merged into the dialog.
Push an annotated vMAJOR.MINOR.PATCH tag only after all package versions and
tauri.conf.json agree. The workflow validates the tag, creates a draft
release, attaches all six application artifact types, and uploads
SHA256SUMS. On a workflow rerun, any previously published checksum file is
removed from the download and explicitly excluded from its own input set. The
owner must install each artifact on a clean machine or VM before publishing
the draft. Tauri's updater is intentionally absent until an updater endpoint
and signing key are owned, backed up, and documented.
The final workflow downloads all draft assets and runs:
packaging/verify-release-assets.sh release-assetsThat check requires one artifact of each expected type; compares every bundled
project license and dependency notice to the repository copies; inspects deb,
RPM, and MSI metadata; requires the portable ZIP's exact four-file layout; and
checks the portable, MSI, and NSIS application payloads as x86-64 PE32+
executables before generating SHA256SUMS. It deliberately inspects the
application embedded in NSIS rather than inferring product architecture from
the NSIS launcher stub, whose architecture can differ from its payload.
Windows bundles are unsigned unless the release owner configures an owned code signing certificate outside the repository. Unsigned artifacts may trigger SmartScreen. Signing secrets, certificate files, passwords, and timestamping credentials must live in protected CI secrets, never source. Publishing an unsigned installer is an explicit owner decision that must be stated in the release notes.
The portable ZIP is the raw desktop executable produced at the Cargo workspace
path target/release/grok-chat-desktop.exe, renamed to Consilium.exe and
packaged with the README, project license, and dependency notices. It does not
install shortcuts or an uninstaller and it does not carry Tauri's WebView2
bootstrapper; the machine must already have a current Microsoft WebView2
Runtime. "Portable" applies to the executable, not its state: session data
defaults to
%LOCALAPPDATA%\Flintglade\Consilium\sessions.json, not inside the ZIP.
GROK_CHAT_DATA_DIR remains available when a custom private location is
preferred. The raw-executable path is an extra convenience channel and does
not replace clean-machine tests of the supported installers.
Linux AppImages should be built on the oldest supported base with WebKitGTK
4.1; the workflow uses Ubuntu 22.04 for that compatibility boundary. The
AppImage, deb, and RPM are direct-download formats, not a claim of app-store
publication. The AppImage embeds validated AppStream metadata under
usr/share/metainfo so catalogs can read the project description, release,
homepage, source, and optional-support links directly from the artifact.
AppImageHub is a community catalog, not a file host. Consilium's AppImage must
remain directly downloadable from a public GitHub release; it must not be
wrapped in a ZIP or require authentication. Once a stable release passes the
artifact check and runs on the catalog's supported compatibility baseline, the
owner can add a one-line data file linking to
https://github.com/flintglade/consilium and open a pull request to the
AppImageHub catalog repository.
The published release asset is named
consilium-<version>-x86_64.AppImage, following AppImage's portable filename
convention even though Tauri's intermediate bundle uses Debian's amd64
architecture label.
The catalog runs its own automated checks and may apply additional human review. A passing Consilium release makes submission possible, but it does not guarantee listing. The release owner should submit only after checking the extracted AppImage metadata, icon, desktop entry, first-launch state, and download URL. AppImageHub continues to link to the GitHub-hosted file after a listing is accepted; it does not take over release hosting.
packaging/flatpak/com.flintglade.consilium.local.yml is a real local Flatpak
recipe. It builds from the working tree with an offline Cargo source manifest,
installs the Flintglade icons, desktop entry, AppStream metadata, and Apache
license, and grants only display, IPC, and network access. No home-directory
permission is present. The Flatpak can use local OpenAI-compatible endpoints
and direct APIs; host-installed provider CLIs are outside the sandbox.
Local validation:
packaging/check-distribution.sh
flatpak remote-add --user --if-not-exists flathub \
https://dl.flathub.org/repo/flathub.flatpakrepo
flatpak-builder --force-clean --user --install-deps-from=flathub \
--repo=flatpak-repo flatpak-build \
packaging/flatpak/com.flintglade.consilium.local.yml
flatpak build-bundle flatpak-repo Consilium.flatpak \
com.flintglade.consilium \
--runtime-repo=https://dl.flathub.org/repo/flathub.flatpakrepoThe local manifest is deliberately not a Flathub submission manifest. Before any submission, a human owner must complete every gate below:
- Establish the owner-confirmed canonical source repository at
https://github.com/flintglade/consilium, create a stable tag, and make the repository and tag reachable without authentication. - Replace the local
dirsource with that immutable tag archive plus its verified SHA-256 hash. Regeneratecargo-sources.jsonfrom the taggedCargo.lockusing Flathub'sflatpak-builder-toolsCargo generator. Flathub builds have no network access and must build entirely from declared source. - Confirm that GNOME runtime
50is still the newest supported runtime at submission time; update it if necessary and rebuild both x86_64 and aarch64. - Verify the app through the domain derived from
com.flintglade.consilium. The owner has identifiedflintglade.comas their domain; Flathub will provide a unique token that the owner must publish at its required HTTPS well-known path. Do not rename the ID after release casually. - Capture privacy-safe Linux screenshots under the rules in
packaging/screenshots/README.md, publish them at immutable HTTPS URLs from the release tag/commit, and add them to the AppStream metadata. - Run
packaging/check-distribution.sh --flathub-ready,flatpak-builder-lint manifest,flatpak-builder-lint appstream, a clean build withorg.flatpak.Builder, and a sandboxed functional smoke test. - Obtain an explicit written eligibility decision from Flathub before opening a pull request. As of 2026-07-13, Flathub's Requirements prohibit AI-assisted application content and AI-generated submission material, review comments, and replies, with exceptions only at Flathub's discretion for mature, well-maintained projects. Consilium currently contains AI-assisted work and has not established the release history that policy expects. This file, the manifest, and automation must not be copied into a submission unless Flathub says they are eligible.
- If Flathub grants an exception, the human owner must independently prepare and submit the pull request, respond to reviewers without AI-generated text, enable GitHub 2FA, accept the Flathub repository invitation, and complete Flathub verification. Reviewer approval and store publication are external decisions; repository automation cannot promise them.
Until those gates are satisfied, distribute the tested AppImage, deb, and RPM from the draft-to-public release workflow and describe Flathub as planned, not available.
Consilium does not currently ship a Snap recipe or claim a Snap Store listing. A strictly confined package could expose the local OpenAI-compatible and direct API routes, but it could not transparently use arbitrary provider CLIs installed on the host. That route needs a dedicated recipe, complete WebKitGTK runtime staging, correct desktop interfaces, and functional tests of session storage and every advertised provider inside the built package.
A package that preserves the host-CLI routes would likely need classic confinement. The Store requires a separate human review and publisher vetting before a classic package can be distributed, and relying on host-installed software is not by itself an accepted justification. Consilium therefore must not assume that route will be approved.
The practical sequence is:
- Publish and clean-machine test the normal GitHub release first.
- Have the owner create a Snapcraft account, register the intended package name, and choose either the reduced strict route set or a justified classic design.
- Build the recipe without credentials, test installation and all advertised features on multiple supported distributions, and upload to a non-stable channel.
- Complete the Store's automated checks and any required human review. For a classic design, obtain approval before attempting a stable release.
- Promote only the reviewed revision, then re-install it from the Store on a separate test machine before advertising availability.
Until those steps are complete, Snap remains an evaluated distribution route, not a download option.
- Tauri distribution and signing overview
- Tauri Windows installer formats
- Tauri AppImage compatibility guidance
- Tauri RPM packaging and signing
- Tauri platform-specific configuration
- Official Tauri GitHub Action
- Flathub requirements
- Flathub submission process
- Flathub MetaInfo guidelines
- Flathub screenshot quality guidelines
- Flatpak manifest documentation
- AppStream MetaInfo specification
- AppImage distribution and AppImageHub submission
- Snap publishing workflow
- Snap classic-review process