Desktop application for running and monitoring Snakemake-based microbiome analysis pipelines. Configure samples, launch runs, track progress in real time, and view generated reports — all from a single interface.
Built with Tauri 2 (Rust) + Svelte 5 + TailwindCSS 4 + Vite 8.
| Layer | Technology |
|---|---|
| Frontend | Svelte 5, TailwindCSS 4, shadcn-svelte, Lucide icons |
| Backend | Rust (2024 edition), Tauri 2 |
| Bundler | Vite 8 |
| Package Manager | Bun |
| Pipeline Engine | Snakemake (external) |
| CI/CD | GitHub Actions |
sudo apt install libwebkit2gtk-4.1-dev build-essential curl wget file \
libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-dev patchelf
xcode-select --install)The bundled Docker image (microbiome-runner.tar.gz) is not included in this repository. To use the Docker execution backend you must supply your own Snakemake-based microbiome analysis image and configure its path in the app's Settings screen. Alternatively, use the Conda backend, which requires only a Conda/Mamba installation and a Snakemake environment.
The app ships with a simple login gate. Default credentials for local development:
| Username | Password |
|---|---|
admin |
admin123 |
This is purely a local UI gate and does not connect to any remote authentication service.
# Clone the repository
git clone https://github.com/CesurAkcay/microbiome-runner.git
cd microbiome-runner
# One-command bootstrap (checks prerequisites + installs deps)
./setup.sh
Or manually:
bun install
# Full Tauri dev (frontend + Rust hot-reload)
bun run dev
# Frontend only (Vite on port 5173)
bun run dev:frontend
# Svelte type checking
bun run check
# Run frontend tests (vitest)
bun run test
# Run frontend tests in watch mode
bun run test:watch
# Run Rust tests (cargo-nextest)
bun run test:rust
# Run all coverage (Rust + frontend)
bun run test:coverage
# Rust coverage only (outputs lcov.info)
bun run test:coverage:rust
# Frontend coverage only
bun run test:coverage:frontend
The app follows a clear frontend/backend split. The Rust backend handles pipeline execution, file I/O, and system operations. The Svelte frontend manages all UI and state. They communicate through two mechanisms:
invoke() from @tauri-apps/api/core (27 commands: pipeline control, history, settings, environment checks, filesystem utilities, export)app.emit("pipeline-event", event), frontend listens with listen() from @tauri-apps/api/eventRuleStarted, RuleCompleted, RuleFailed, Progress, LogLine, RunCompleted, RunStopped, SampleStarted, SampleCompleted, SampleResult, SystemMetrics
microbiome-runner/
├── src/ # Frontend (Svelte 5)
│ ├── App.svelte # Root component (auth gate + shell)
│ └── lib/
│ ├── components/
│ │ ├── shell/ # Layout: AppShell, Sidebar, HeaderBar, ThemeToggle
│ │ ├── views/ # Main views (Home, Launch, RunDetail, History, Settings, Observability, Help, Login)
│ │ ├── pipeline/ # Pipeline UI (progress, controls, sample cards)
│ │ ├── history/ # History cards, rerun dialog
│ │ ├── reports/ # PDF and Excel viewers
│ │ └── ui/ # shadcn-svelte primitives
│ ├── state/ # Svelte 5 rune-based state singletons
│ │ ├── runs.svelte.ts # Run lifecycle, event handling
│ │ ├── ui.svelte.ts # View navigation
│ │ ├── config.svelte.ts # Pipeline config + validation
│ │ ├── settings.svelte.ts # App settings (theme, paths, backend)
│ │ ├── samples.svelte.ts # Sample form state
│ │ ├── reports.svelte.ts # Report handling
│ │ └── auth.svelte.ts # Authentication + roles
│ ├── i18n/ # Internationalization (en, tr)
│ └── types/ # TypeScript type definitions
├── src-tauri/ # Backend (Rust)
│ └── src/
│ ├── lib.rs # Tauri command handlers, app builder
│ └── pipeline/
│ ├── runner.rs # Pipeline execution engine
│ ├── state.rs # Pipeline state (stop signals, PIDs)
│ ├── types.rs # Event enums, configs, records
│ ├── history.rs # Run record persistence (JSON)
│ ├── parser.rs # Snakemake output parser
│ ├── conda.rs # Conda backend
│ ├── docker.rs # Docker backend
│ ├── preflight.rs # Environment checks
│ ├── settings.rs # Settings serialization
│ ├── logging.rs # Structured logging (tracing)
│ ├── util.rs # Shared pipeline utilities
│ └── mod.rs # Module declarations
├── .github/workflows/build.yml # CI/CD pipeline
└── build-all.sh # Cross-platform build script
App.svelte
├── LoginView (when not authenticated)
└── AppShell (when authenticated)
├── AppSidebar (navigation + run list + NewRunDialog)
├── HeaderBar (title, global progress, run controls, theme/language toggle)
└── ViewContainer (dynamic view switching)
├── HomeView
├── LaunchView (configure & launch runs)
├── RunDetailView (progress, controls, batch overview, sample results, logs)
├── HistoryView (past runs with filtering/selection)
├── SettingsView (conda/docker paths, defaults, UI settings)
├── ObservabilityView (metrics, pipeline logs, app logs)
└── HelpView (usage guide)
State is managed via class-based singletons using Svelte 5 runes ($state, $derived, $derived.by()). Each state module exports a single instance (e.g., runsState, authState, settingsState).
Run records are stored as individual JSON files (UUID-named) in the OS-specific config directory. App settings are persisted as app_settings.json in the same directory.
The app supports two languages, switchable from the header bar:
en)tr)Translations are stored in src/lib/i18n/translations/ with typed keys via TranslationKey.
Every git commit triggers automatic checks via Husky + lint-staged:
If any check fails, the commit is blocked.
# Run all checks
bun run quality
# Auto-fix all issues
bun run quality:fix
# Individual commands
bun run lint # ESLint check
bun run lint:fix # ESLint auto-fix
bun run format # Prettier format
bun run format:check # Prettier check (no changes)
bun run check # Svelte type checking
bun run lint:rust # Rust fmt + clippy
bun run clippy # Rust clippy only
bun run fmt # Rust format only
# Full production build (auto-detects platform)
bun run build
# Frontend only
bun run build:frontend
# Linux build (.deb)
./build-all.sh
# Windows build (run on a Windows machine)
powershell -ExecutionPolicy Bypass -File build-windows.ps1
| Platform | Formats | Location |
|---|---|---|
| Linux | .deb, .AppImage, .rpm |
src-tauri/target/release/bundle/deb/ |
| macOS | .dmg, .app |
src-tauri/target/aarch64-apple-darwin/release/bundle/dmg/ |
| Windows | .exe (NSIS installer) |
src-tauri/target/release/bundle/nsis/ |
Install the built packages on target machines:
sudo dpkg -i microbiome-runner_0.1.0_amd64.debsudo rpm -i microbiome-runner-0.1.0.x86_64.rpmchmod +x MicrobiomeRunner-App_0.1.0.AppImage && ./MicrobiomeRunner-App_0.1.0.AppImage.dmg and drag to ApplicationsMicrobiomeRunner_0.2.0_x64-setup.exe installerMicrobiomeRunner_x.x.x_aarch64.dmg from the latest release.dmg and drag MicrobiomeRunner to ApplicationsRequirements:
Docker auto-start: When running a pipeline with the Docker backend, the app automatically launches Docker Desktop if it is not running.
The NSIS installer handles everything automatically:
%LOCALAPPDATA%\MicrobiomeRunner\Requirements:
sudo apt purge mass-biome-appsudo rpm -e microbiome-runnerGitHub Actions workflow (.github/workflows/build.yml) runs on tag pushes (v*) and manual dispatch:
| Job | Runner | Steps |
|---|---|---|
| lint | ubuntu-22.04 |
cargo fmt --check + cargo clippy |
| lint-frontend | ubuntu-latest |
ESLint + Prettier check + svelte-check |
| build | Linux, macOS, Windows | Full Tauri build with platform-specific bundles |
On tagged releases, artifacts are uploaded as a GitHub draft release. On manual dispatch, artifacts are uploaded as workflow artifacts.
This project includes a CLAUDE.md that gives Claude Code full context — architecture, commands, conventions, and known gotchas.
claude # Start Claude Code — reads CLAUDE.md automatically
See CONTRIBUTING.md for dev setup, code style, commit conventions, and the PR process.
MIT — see LICENSE