Architecture
The 11 Pipedash crates, the request flow on desktop and web, the core modules and the database tables.
Pipedash is a Rust workspace with 11 crates and a React frontend. One core library holds the logic. Two shells expose it, a Tauri app and an Axum server. Seven plugin crates talk to the CI/CD providers.
Crates
| Crate | Purpose |
|---|---|
pipedash-core | Framework-agnostic core library. Application services, domain types, infrastructure, plugin wiring and the event bus |
pipedash-desktop | The Tauri app. Native commands, keyring token store and the Tauri event adapter |
pipedash-plugin-api | The plugin contract. The Plugin trait, the plugin registry, config and table schemas and shared types |
pipedash-plugin-github | GitHub Actions plugin |
pipedash-plugin-gitlab | GitLab CI/CD plugin |
pipedash-plugin-bitbucket | Bitbucket Pipelines plugin |
pipedash-plugin-buildkite | Buildkite plugin |
pipedash-plugin-jenkins | Jenkins plugin |
pipedash-plugin-tekton | Tekton CD plugin |
pipedash-plugin-argocd | ArgoCD plugin |
pipedash-web | REST API server. Axum routes, WebSocket events and an optional embedded frontend |
Request flow
The React interface talks to a shared service object. Inside Tauri it uses IPC commands. Anywhere else it uses the REST API and a WebSocket.
Both shells call the same services in pipedash-core, so a command and its REST route behave the same way. The server nests its routes under /api/v1. The REST API page lists them.
Core modules
pipedash-core has 6 public modules and a CoreContext that wires them together.
application: theProviderService,PipelineServiceandMetricsService, plus theRefreshManagerthat polls providers.domain: plain types for providers, pipelines, runs, metrics and validation, withDomainError.infrastructure: config loading, the database layer, the HTTP client manager, request deduplication, token stores, secret stores, storage migration and sync.plugins: builds the plugin registry from the 7 plugin crates.event: theCoreEventenum, theEventBustrait and aNoOpEventBus.logging: tracing setup.
The shells supply the event bus and the token store. The core stays free of Tauri and Axum types.
Storage schema
SQLx applies the migrations for the active backend, SQLite or PostgreSQL. These are the main tables.
| Table | Content |
|---|---|
providers | Provider name, type, config JSON, refresh interval, version for optimistic locking, last fetch time, status and error. The SQLite backend also holds encrypted_token and token_nonce here |
pipelines_cache | The last fetched pipelines per provider: name, status, repository, branch, workflow file, last run and metadata JSON |
workflow_parameters_cache | Trigger form parameters per workflow, with cached_at and expires_at |
run_history_cache | Run data per pipeline and run number, with a run hash |
table_preferences | Column preferences per provider and table |
provider_permissions | The permissions the token has, per provider and permission name |
storage_metadata | A single row with the storage backend configuration and a checksum |
storage_migrations | An audit trail of backend migrations: status, counts, backup path and timing |
encrypted_tokens | PostgreSQL only. Nonce and ciphertext per provider |
Deleting a provider cascades to its cached pipelines, preferences and permissions.
Metrics tables
Metrics live in the main database. Older installs that kept a separate metrics file move their data into the main database at startup.
| Table | Content |
|---|---|
metrics_global_config | One row with the enabled flag and the default retention. The defaults are off and 7 days |
metrics_config | Enabled flag and retention per pipeline |
pipeline_metrics | One value per pipeline, run number, metric type and timestamp, with metadata JSON and a run hash |
metrics_processing_state | The last processed run number and time per pipeline |
metrics_storage_info | One row with the metric count, estimated size and last cleanup time |
A unique index on pipeline, run number, metric type and run hash deduplicates entries. The metrics page explains what Pipedash records.