Skip to content

Building from source

Trove is open source under the MIT license. This page gets you from a fresh clone to a running desktop build.

ToolVersionWhy
Node.js≥ 24Runs the workspace tooling. Use nvm use.nvmrc pins it.
pnpm≥ 10The workspace package manager. Install via Corepack.
RuststableCompiles the Tauri core. Install with rustfmt and clippy.
Go≥ 1.23Only needed to build the collector sidecar (pnpm build:collector).

You’ll also need the platform-specific Tauri system dependencies — see the Tauri prerequisites guide for macOS, Windows, and Linux.

  1. Clone the repository:

    Terminal window
    git clone https://github.com/Intevity/trove.git
    cd trove
  2. Use the pinned Node version and install dependencies:

    Terminal window
    nvm use
    pnpm install

    The first pnpm install also installs the lefthook git hooks via the prepare script — Prettier + ESLint on staged files at commit time, and pnpm typecheck && pnpm test at push time.

  3. Build the workspace packages the app imports from their dist/:

    Terminal window
    pnpm build

    This compiles @trove/shared, @trove/collector-presets, and the rest. Skip it on a fresh clone and the app fails to resolve them.

Trove bundles a custom OpenTelemetry Collector binary built with ocb. You build it once per platform; both steps are gitignored outputs, so every contributor builds locally for their host.

  1. Build the binary (≈ 1–2 min on first run — it downloads and compiles the collector components):

    Terminal window
    pnpm build:collector

    scripts/build-collector.sh resolves your host Rust target triple, installs the pinned ocb via go install if it isn’t already on PATH, and writes the binary to resources/otelcol/dist/<triple>/trove-otelcol[.exe].

  2. Stage the binary where Tauri’s externalBin resolver expects it:

    Terminal window
    pnpm bundle:sidecar

    This copies the binary into packages/app/src-tauri/binaries/trove-otelcol-<triple>[.exe]. Tauri strips the suffix at bundle time, so the runtime sees a plain trove-otelcol next to the app executable.

Boot the desktop app with the Vite dev server and Rust hot reload:

Terminal window
pnpm --filter @trove/app tauri:dev

To produce signed, distributable bundles, the Tauri build runs directly:

Terminal window
pnpm build:app:release # pnpm -F app tauri build

Release outputs land in packages/app/src-tauri/target/release/bundle/:

PlatformOutput
macOSmacos/Trove.app, .dmg
Linux.deb, .rpm, .AppImage
Windows.msi, NSIS installer

Before opening a PR, run the same checks CI runs:

Terminal window
pnpm lint
pnpm format:check
pnpm typecheck
pnpm test
cargo clippy --manifest-path packages/app/src-tauri/Cargo.toml --all-targets -- -D warnings
cargo test --manifest-path packages/app/src-tauri/Cargo.toml

See Testing for the coverage gate and Contributing for the PR conventions.