Performance benchmarking and visualization toolkit for Julia projects with persistent history tracking and interactive dashboards.
- Interactive Dashboards: Real-time visualization with WGLMakie.jl and Bonito.jl
- Persistent History: Track performance across commits with incremental storage
- GitHub Integration: Automated CI workflows with GitHub Actions
- Multiple Storage Formats: Organized by date, group, and commit hash
- Static HTML Pages: Shareable benchmark reports via GitHub Pages
- Progressive Loading: Fast startup with on-demand historical data access
- CSV Export: Export benchmark data for external analysis
using Pkg
Pkg.add(url="https://github.com/hpsc-lab/BenchmarkExplorer.jl")using BenchmarkExplorer
using BenchmarkTools
suite = BenchmarkGroup()
suite["example"] = @benchmarkable sin(1.0)
results = run(suite)
save_benchmark_results(results, "myproject"; data_dir="data", commit_hash="abc123")Interactive Mode (Bonito + WGLMakie - full features):
julia dashboard_interactive.jlClassic Mode (original dashboard):
julia dashboard.jlOpen http://localhost:8000 in your browser.
New: Interactive mode uses unified architecture with shared core for both local and static deployments.
Add to .github/workflows/benchmarks.yml:
name: Benchmarks
on:
push:
branches: [main]
schedule:
- cron: '0 2 * * *'
jobs:
benchmark:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: hpsc-lab/BenchmarkExplorer.jl@main
with:
benchmark_script: 'benchmarks/benchmarks.jl'
group_name: 'myproject'
julia_version: '1.10'
persist_to_branch: 'gh-pages'
github_token: ${{ secrets.GITHUB_TOKEN }}- Enable GitHub Pages in repository settings
- Source:
gh-pagesbranch, root directory - View results at:
https://username.github.io/repository/
- Quick Start Guide - Get started in 5 minutes
- External Setup - Use in your own repository
- Unified Architecture - Dual-mode system
- Data Structure - Storage format specification
data/
├── by_date/ # Benchmarks organized by date
├── by_group/ # Per-group incremental runs
├── by_hash/ # Lookup by git commit hash
├── index.json # Metadata index
├── latest_100.json # Recent runs cache
└── all_runs_index.json # Complete history index
See DEVELOPMENT.md for detailed architecture documentation.
julia scripts/populate_history.jl
julia dashboard.jlContributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
MIT License - see LICENSE file for details.
If you use BenchmarkExplorer.jl in your research, please cite:
@software{benchmarkexplorer,
title = {BenchmarkExplorer.jl: Performance Tracking for Julia},
year = {2025},
url = {https://github.com/hpsc-lab/BenchmarkExplorer.jl}
}Built with:
- BenchmarkTools.jl - Benchmarking framework
- Bonito.jl - Web framework
- WGLMakie.jl - Plotting library
- Trixi.jl - Example PDE solver
- Enzyme.jl - Automatic differentiation
- Issues: GitHub Issues
- Discussions: GitHub Discussions