stash-cli 0.7.1

A local store for pipeline output and ad hoc file snapshots
Documentation
# Changelog

All notable changes to `stash` are documented in this file.

## 0.7.1

- Reduce binary size by about 40%
- Improve `stash cat` throughput by using a 64KB `BufReader`.

## 0.7.0

`stash log` has been removed in favor of `stash ls`.

- `stash log` removed.
- `stash ls` is now the single listing command.
- Expand `stash ls` output modes:
  - add `--json` with rich per-entry output
  - add `--attrs=list|count|flag`
  - add `--headers` for labeled tabular output
  - make `-l` expand to `--date --size --attrs=flag --preview`
  - color explicit `-a` columns and inline `-A` output in cyan
- Improve listing and store hot paths:
  - reduce allocations in `ls`
  - reuse output buffers in tabular rendering
  - tighten cache validation and id resolution
  - add and tune Criterion benchmarks for `ls`, `attr`, and `push`
- Add `stash rm --after` to remove entries newer than a referenced entry.
- Migrate the internal list cache serialization from `bincode` to `rkyv`.
- Update `signal-hook` to `0.4.4`.
- Keep empty `-A/--attrs=list` cells aligned across `stash ls` rows.
- Refine `stash ls -a/--attr` selection:
  - `-a name` shows the attribute column
  - `-a +name` filters on the attribute
  - `-a ++name` filters and shows in one argument
- Improve the `stash-fzf.zsh` helper:
  - use a richer multiline ref picker
  - fix picker cancel and insertion behavior
  - add `fzf`-powered attribute completion from `stash attrs --count`
  - support `-a`, `-a +`, and `-a ++` attr completion prefixes


## 0.6.0

This is a major code refactor with small perf improvements and significant
code quality improvements.

- Add `stash attrs` for listing attribute keys across the stash, with optional
  per-key counts.
- Improve `stash-rg`, the helper script for searching through stashed
  attributes and data.
- Refactor the Rust codebase into smaller modules:
  - split the old `cli.rs` monolith into per-command modules under `cmd/`
  - split `store.rs` into a `store/` module
  - extract shared display/rendering code into a `display` module
- Simplify and tighten the store/cache implementation:
  - store `Meta` directly in the list cache
  - move `MetaSelection` into store-related code
  - keep `newest()` on the cache-based path
- Improve performance in several hot paths:
  - avoid extra item passes in `ls --preview`
  - fix N+1 cache reads in `stash attrs`
  - reduce allocations in preview and ANSI-trimming helpers
  - speed up attr parsing and ULID encoding
- General internal cleanup and deduplication:
  - deduplicate the push/tee read loop
  - consolidate UTC date conversion helpers
  - simplify path handling and attribute-selection internals

## 0.5.7

- Escape control characters like `\n` in plain-text attribute output for
  `stash attr`, `stash ls`, and `stash log`.
- Add `stash-rg`, a helper script for searching across stashed attributes and
  data with `rg`.
- Add `rstash`, a helper script for pushing stdin or files to a remote stash
  host over `ssh`.

## 0.5.6

- Make `--print` require an explicit value to avoid ambiguity with
  `stash push [file]`.
- Save captured input on `Ctrl-C` in both `stash tee` and stdin-driven
  `stash` when `--save-on-error=true` applies.
- Align interruption handling more closely with `tee`:
  - `SIGINT` returns `130`
  - `SIGTERM` returns `143`
  - non-signal partial saves return `1`
- Treat downstream broken pipes as successful exits while still keeping any
  captured output.
- Keep `partial=true` only for input interruption/failure, not downstream
  output closure.

## 0.5.5

- Replace the earlier quiet flag with `--print=stdout|stderr|null` for
  `stash`, `stash push`, and `stash tee`, with numeric aliases `1`, `2`,
  and `0`.
- Rename `--partial` to `--save-on-error` and default it to `true`.

## 0.5.4

- Add smart default behavior for bare `stash`:
  - in the middle of a pipeline, it behaves like `stash tee`
  - otherwise, it behaves like `stash push`
- Simplify `stash attr` syntax:
  - `stash attr <ref>` lists all attributes
  - `stash attr <ref> key...` reads selected attributes
  - `stash attr <ref> key=value...` writes attributes
  - `stash attr <ref> --unset key...` removes attributes
- Add `stash rm -a` for attribute-based entry removal with confirmation.
- Allow `stash rm` to remove multiple refs in one command.
- Refine `ls` and `log` attribute flags:
  - `-a/--attr` selects attribute filters
  - `-A/--attrs` shows all attributes
- Add `cargo install stash-cli` to the installation docs.
- Use `stash-cli-*` release asset names for the custom Homebrew formula updater.

## 0.5.3 - 2026-04-05

- Rename the published crate to `stash-cli` while keeping the installed binary
  name as `stash`.
- General repository cleanup.

## 0.5.2 - 2026-04-05

- Remove the dedicated `stash version` subcommand in favor of clap's built-in
  `--version`.
- Harden the Homebrew upgrade guard for the breaking `0.5.0` boundary.

## 0.5.1 - 2026-04-05

- Bump the release to `0.5.1`.
- Add protection against unsupported Homebrew upgrades from versions older than
  `0.5.0`.
- Update the custom Homebrew formula generator for `cargo-dist` release assets.

## 0.5.0 - 2026-04-05

- Replace the Go implementation with Rust as the active codebase.
- Move the Rust crate to the repository root.
- Adopt `cargo-dist` for release packaging.
- Split GitHub release packaging from the custom Homebrew formula workflow.
- Switch stash storage to split `data/` and `attr/` directories with lower-case
  ULID filenames.
- Replace `meta.json` with flat `attr` files.
- Store previews directly in entry attributes and simplify preview generation.
- Add and use an ordered list cache for faster listing and history commands.
- Remove indexes, hashing, and MIME/type auto-detection.
- Add the `path` command.
- Expand Rust CLI support:
  - clap-based help and completions
  - colorized `ls` and `log`
  - terminal-width-aware preview sizing
  - attribute-aware `log --format`
- Add Rust command benchmarks and benchmark helpers.
- Update documentation to describe only the Rust implementation.

## 0.4.4 - 2026-04-02

- Simplify writable attribute handling in `stash attr`.

## 0.4.3 - 2026-04-02

- Refine metadata display in `ls` and `log`.

## 0.4.2 - 2026-04-02

- Document shell support.
- Add and install shell completions.
- Improve Homebrew publishing workflow handling.

## 0.4.1 - 2026-04-02

- Split the Homebrew formula update into its own workflow.
- Add manual tag input for release runs.
- Add scripted Homebrew formula publishing.
- Update demo videos.

## 0.4.0 - 2026-04-02

- Introduce `stash attr` as the main metadata interface.
- Remove `inspect` and the old metadata subcommand.
- Refine `ls` output flags and metadata display.
- Add VHS demos.

## 0.3.1 - 2026-04-01

- Show previews in `inspect`.
- Fix README links.

## 0.3.0 - 2026-04-01

- Expand the examples workflow and docs.
- Add `stash tee`.
- Add summary and entry indexes for faster scans and listings.
- Add tests and store benchmarks.

## 0.2.2 - 2026-04-01

- Add `rm --before` and remove `clear`.
- Add `inspect`.
- Make `log` the detailed history view.

## 0.2.1 - 2026-04-01

- Add file-oriented `ls`.
- Improve compact `log` rendering.
- Merge `peek` into `cat`.
- Add the `stash-copy` helper script.

## 0.2.0 - 2026-04-01

- Replace `--full` with `log` ID modes.
- Add stack refs and log metadata filters.
- Update the README for the newer history model.

## 0.1.4 - 2026-04-01

- Clear quarantine bits in the Homebrew cask install flow.

## 0.1.3 - 2026-04-01

- Switch GoReleaser Homebrew publishing back to casks.

## 0.1.2 - 2026-04-01

- Use the supported GoReleaser formula key.

## 0.1.1 - 2026-04-01

- Update GoReleaser publishing configuration.

## 0.1.0 - 2026-04-01

- Initial public release of `stash`.
- Add history views, previews, metadata editing, templates, colors, and
  `STASH_DIR` support.