QNTX Distribution Strategy

Current State

The app is QNTX-App, and how it is distributed is written there.

Unix-like hosts only — see ADR-029.

What We Distribute

Distribution Channels

1. GitHub Releases (Quick Win - High Priority)

What: Attach binaries to git tags automatically

Platforms to distribute:


2. Container Registries (Already Done ✓)

Current:

Could Add:

Multi-arch manifests: ✅ Already implemented


4. Package Managers by Platform

macOS

Linux


5. Language-Specific Package Managers

Not Recommended (QNTX is a platform, not a library):


Implementation Roadmap

Phase 1: Foundation (Week 1)

Goal: Make QNTX downloadable

  1. GitHub Releases workflow

  2. Update README

Deliverable: Users can download QNTX for their platform from GitHub


Phase 2: Package Managers (Week 2-3)

Goal: Native installation experience

  1. Homebrew tap

  2. winget manifest

Deliverable:

brew install teranos/tap/qntx        # macOS/Linux

Phase 3: Linux Distribution (Week 4)

Goal: Native package managers for Linux

  1. APT repository (Debian/Ubuntu)

  2. Snap package

Deliverable:

sudo apt install qntx               # Debian/Ubuntu
snap install qntx                   # Any Linux

Phase 4: Mobile (Month 2)

Goal: Official app store presence

  1. Google Play Store

  2. iOS App Store


Technical Implementation Details

CLI Binary Distribution

Using goreleaser:

.goreleaser.yml:

builds:
  - main: ./cmd/qntx
    binary: qntx
    goos:
      - linux
      - darwin
    goarch:
      - amd64
      - arm64
    ldflags:
      - -X github.com/teranos/QNTX/internal/version.Version={{.Version}}
      - -X github.com/teranos/QNTX/internal/version.CommitHash={{.Commit}}

archives:
  - format: tar.gz

release:
  github:
    owner: teranos
    name: QNTX

GitHub workflow:

- uses: goreleaser/goreleaser-action@v5
  with:
    version: latest
    args: release --clean
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Tauri App Distribution

Add to existing workflows:

- name: Build Tauri app
  uses: tauri-apps/tauri-action@v0
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  with:
    tagName: ${{ github.ref_name }}
    releaseName: 'QNTX ${{ github.ref_name }}'
    releaseBody: 'See CHANGELOG.md for details'
    releaseDraft: false
    prerelease: false

Tauri automatically:


Homebrew Formula

homebrew-tap/Formula/qntx.rb:

class Qntx < Formula
  desc "Continuous Intelligence Platform"
  homepage "https://github.com/teranos/QNTX"
  version "0.16.14"

  on_macos do
    if Hardware::CPU.arm?
      url "https://github.com/teranos/QNTX/releases/download/v0.16.14/qntx_Darwin_arm64.tar.gz"
      sha256 "..."
    else
      url "https://github.com/teranos/QNTX/releases/download/v0.16.14/qntx_Darwin_x86_64.tar.gz"
      sha256 "..."
    end
  end

  on_linux do
    if Hardware::CPU.arm?
      url "https://github.com/teranos/QNTX/releases/download/v0.16.14/qntx_Linux_arm64.tar.gz"
      sha256 "..."
    else
      url "https://github.com/teranos/QNTX/releases/download/v0.16.14/qntx_Linux_x86_64.tar.gz"
      sha256 "..."
    end
  end

  def install
    bin.install "qntx"
  end
end

Auto-update with brew bump-formula-pr.


Cost Analysis

ChannelSetup CostOngoing CostEffort
GitHub ReleasesFreeFreeMedium
HomebrewFreeFreeLow
wingetFreeFreeLow
Docker (GHCR)FreeFreeDone ✓
Snap StoreFreeFreeMedium
Google Play$25 onceFreeMedium
Apple App StoreFree (have account)$99/yearHigh
F-DroidFreeFreeMedium

Total upfront: $25-124 (depending on iOS) Annual: $0-99 (depending on iOS)


Metrics to Track

Post-distribution, monitor:


Recommended Priority

  1. GitHub Releases (CLI + desktop apps) - Week 1
  2. Homebrew - Week 2
  3. winget - Week 2
  4. Docker - Already done ✓
  5. Snap/APT - Week 3-4
  6. Google Play - Month 2
  7. iOS App Store - When budget allows

Next Steps

  1. Create .goreleaser.yml for CLI builds
  2. Add release workflow (.github/workflows/release.yml)
  3. Update Tauri workflows to build on tags (not just check)
  4. Create release (tag v0.16.15 to test)
  5. Document installation methods in README
  6. Create homebrew-tap repository
  7. Submit winget manifest

Questions to Answer