steppe

A simple Rust library to track and display the progress of multi-step tasks.

Library
Cargo
v0.4.1
6stars
WTFPL

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum.How we score it →
11/100Needs Attention
Development Activity0
Maintenance0
Community8
Maturity36
Momentum0

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation.How we score it →
73/100Good
Architecture70
Code Quality70
Innovation72
Learning Curve80

Steppe is a lightweight Rust crate for tracking the progress of a task as it moves through multiple steps, each composed of multiple states. It aims for a very simple API to describe steps and update progress, an easy way to display progress live on a TTY or return it from an API, and per-step accumulated timing so you can spot bottlenecks.

The core DefaultProgress struct is thread-safe and cheap to clone, so one thread can update progress while another renders it. Helper macros generate the boilerplate Step implementations, and a Progress trait lets libraries accept a caller-supplied progress implementation.

What You Get

  • A simple API to declare task steps and update progress as work proceeds
  • A thread-safe, cheaply-clonable progress handle you can update and display concurrently
  • Accumulated per-step durations to identify bottlenecks, plus helper macros for boilerplate

Common Use Cases

  • Reporting live progress of a long-running batch or indexing job
  • Exposing task progress through an API response
  • Measuring where time is spent across the steps of a pipeline

Under The Hood

Architecture Steppe represents progress as a stack of steps; each Step reports a current and total state count, and pushing a new step of a given type truncates deeper steps. DefaultProgress wraps a shared, mutex-guarded stack that can be read as a progress view or serialized, while atomic sub-steps update counters without locking. Accumulated durations are recorded as steps complete. Tech Stack Rust (edition 2024) with a small dependency set: convert_case and indexmap at the core, plus optional jiff (time), serde/serde_json, colored_json for TTY rendering, and utoipa for OpenAPI schemas, all gated behind Cargo features. Code Quality Small and focused (~21 commits, single primary author) with insta snapshot tests under tests/. As an early-stage crate it has limited community adoption but a clear, contained scope. API Design The Progress/Step trait split lets libraries accept any progress backend, and the enum/atomic macros remove most boilerplate, giving an ergonomic API for a deliberately narrow problem.

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers

Search