# Changelog
All notable changes to Buildprof will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
## [0.2.4] - 2026-09-11
### Changed
- The UI no longer probes localhost for a native Trace Processor when it
starts. Chrome asked for permission to access other apps and services on
the device for that probe before any trace was opened, and blocking it
silently broke loading traces from the CLI.
- The CLI explains that Chrome permission prompt while it waits for the
browser to fetch a trace, and how to recover after blocking it.
- When the UI fetches a trace from this machine, the loading page says to
allow that prompt. If the fetch fails, the error says whether Chrome is
blocking the site or nothing answered, and how to recover, instead of the
generic download error.
## [0.2.3] - 2026-09-09
### Added
- `--no-file-events` records the process timeline without filesystem tracing,
reducing overhead for builds that open many files. Compiler tracing remains
independently selectable.
- Recordings carry their collection settings. The UI indicates when file
events were not recorded and explains why file lists and dependency links
are unavailable. Older recordings continue to open.
### Changed
- Event names and categories are written once per trace and referenced by id
from each event, instead of being repeated as strings on every event. Traces
are smaller and load faster; nothing changes in what the UI shows.
## [0.2.2] - 2026-09-04
### Changed
- The UI no longer calls out a recorder that differs from it only in the
patch version; patch releases never change the trace format.
- Release notes list the same install options as the README, followed by the
version's changelog section.
### Fixed
- `.deb` and `.rpm` packages for aarch64 are built on an arm64 runner instead
of failing the sanity check on x86_64.
## [0.2.1] - 2026-09-04
### Fixed
- The static musl builds compile again; the ptrace request type differs
between glibc and musl.
- Releases are created as drafts titled `Buildprof <version>` for review.
Publishing one triggers the UI deploy, the crates.io publish, and the
Linux packages, which a release published by automation never did.
## [0.2.0] - 2026-09-04
### Added
- `buildprof.version` and `buildprof.trace_format` trace attributes, visible
in Trace Processor's `metadata` table, so the UI can tell which recorder
wrote a trace.
- SSH sessions print the `ssh -L` port forward to run from your own machine
instead of trying to launch a browser on the build host.
- `--wait <SECONDS>` bounds how long Buildprof waits for a browser to fetch a
trace (default 600; 0 waits forever).
- `buildprof examples` and `buildprof open --example <NAME>` open recordings
hosted next to the UI.
- Clear messages when ptrace or seccomp is unavailable (Docker without
`SYS_PTRACE`, Yama `ptrace_scope` 3, gVisor), when the command cannot be
executed, and when port 9001 is already taken.
- Prebuilt binaries on GitHub Releases for x86_64 and aarch64 Linux (glibc
2.28 or newer, plus static musl builds) and for macOS, with a shell
installer, a Homebrew tap, `.deb` and `.rpm` packages, and mise support.
- Every released UI is deployed permanently under
`https://buildprof.lalitm.com/v<version>/`; the CLI opens the UI matching
its own version and the UI links to the matching version when a trace was
recorded by a different release.
### Changed
- Traces are now written as a single zstd stream, typically 9 to 20 times
smaller than before. The UI detects the compression from the file's magic
bytes and the `.buildprof` extension is unchanged. Querying a trace directly
needs a Trace Processor build from July 2026 or later; the `perfetto` Python
package's bundled build is older, so pass
`TraceProcessorConfig(fetch_latest_trace_processor=True)` for now.
- Building from source now requires Rust 1.91.
## [0.1.0] - 2026-08-22
### Added
- Linux process-tree recording with command, working-directory, and exit-status
metadata.
- File-open and rename events for reconstructing artifact flow.
- Perfetto trace output with packed process and file tracks.
- Optional Clang and nightly Rust compiler-internal traces.
- Conformance coverage for Make, CMake with Ninja, Meson with Ninja, Cargo, and
Go builds.