The Problem

Teams using multiple CI/CD platforms—GitHub Actions, GitLab CI, Buildkite, Jenkins, Tekton, ArgoCD—end up bouncing between dashboards to check pipeline status. Pipedash consolidates those into a single view, polling each provider and surfacing run history, parameters, and status changes in one place.

What This Does

Pipedash is a Tauri desktop app (Rust backend, React/TypeScript frontend) with a web deployment option. It polls configured providers, stores pipeline data in SQLite or PostgreSQL, and lets you trigger, re-run, or cancel workflows with provider-specific parameters. Tokens are encrypted via system keyring or AES-256-GCM with Argon2id-derived keys.

The repo is a workspace of crates: pipedash-core (domain logic, services, repositories, migrations), pipedash-desktop (Tauri entry point), pipedash-plugin-api (plugin trait), and provider plugins (pipedash-plugin-github, pipedash-plugin-argocd, etc.). The src/ directory holds the React frontend.

How It Is Wired

Execution starts in crates/pipedash-desktop/src/main.rs, which boots the Tauri app and registers commands from crates/pipedash-desktop/src/commands.rs. That file is 1,677 lines—the largest in the repo—and routes all frontend-invoked operations into pipedash-core services like pipeline_service.rs and metrics_service.rs. These services write to repositories in crates/pipedash-core/src/infrastructure/database/, which own the SQLite/PostgreSQL effects.

The frontend's src/types/index.ts is the hub: 48 modules import it, making it the highest-blast-radius file. It sits in a circular dependency with src/types/components.ts, so changes there ripple unpredictably. src/services/index.ts (31 importers) and src/hooks/useIsMobile.ts (15 importers) are also high-churn hubs.

The module graph shows 130 internal modules with 346 import edges and 2 modules in a cycle. Deep nesting (max depth 8) appears in 49 files, notably src/components/layout/Navbar.tsx and src/components/pipeline/WorkflowLogsModal.tsx, making control flow hard to follow.

How To Use It

The README documents mise as the task runner. For Docker:

# SQLite backend
mise run examples:sqlite:up
mise run examples:sqlite:down

# PostgreSQL backend
mise run examples:postgres:up

For the desktop app, build via cargo build from the workspace root, or download from the releases page. Web deployments require PIPEDASH_VAULT_PASSWORD to enable API authentication; requests must include Authorization: Bearer <vault_password>.

Real-World Use

A team running GitHub Actions for open-source repos and Jenkins for legacy services deploys Pipedash via Docker with PostgreSQL. They configure two GitHub instances (separate orgs) and one Jenkins instance, set per-provider refresh intervals, and get a single dashboard. When a GitHub workflow fails, they re-run it with the same parameters from Pipedash without opening GitHub's UI.

Code Health & Issues

Static analysis found 79 issues (31 high, 48 medium). Key findings:

  • High - Import cycle - src/types/index.ts and src/types/components.ts participate in a circular dependency; extract shared types or defer imports.
  • High - Hub modules - src/types/index.ts (48 dependents), src/services/index.ts (31), src/hooks/useIsMobile.ts (15); high churn blast radius.
  • High - Deep nesting - 49 files with max indentation depth 8; flatten with early returns.
  • High - Duplicated code - 564 repeated 6-line blocks across 106 files, concentrated in crates/pipedash-core/src/application/services/.
  • High - Oversized files - metrics_repository.rs, repository.rs, commands.rs exceed 1,600 lines each.

SDLC observations:

  • High - No test suite - 272 source files, zero test files; any change ships without regression signal.
  • High - Unpinned GitHub Actions - .github/workflows uses @v3 tags; pin to commit SHAs to prevent supply-chain attacks.
  • High - continue-on-error on a correctness step - .github/workflows/release.yml line 171; a failing test reports green.
  • Medium - Mutable container base - docker/Dockerfile uses oven/bun:latest and cargo-chef:latest; pin by digest.
  • Medium - No dependency scan in CI - add dependency-review-action or osv-scanner.
  • Medium - No non-root USER in docker/Dockerfile.
  • Low - No job timeouts in workflows.

The Bottom Line

Pipedash is a functional multi-provider CI/CD dashboard with a solid plugin architecture and real encryption work. The Rust core is substantial but untested, and the frontend has hub-and-cycle problems that will make changes costly. Worth adopting if you need a self-hosted aggregator and can invest in a test suite before relying on it.