shrinkpath 0.1.2

Smart cross-platform path shortening for CLIs, prompts, and tools
Documentation
# shrinkpath

**Smart cross-platform path shortening for Rust and JavaScript/TypeScript.**

```
/Users/john/Library/Application Support/Code/User/settings.json  (62 chars)
                            ↓  shrink_to(path, 35)
             /Users/john/.../User/settings.json                   (35 chars)
```

The filename is never truncated. The username is preserved when possible. Everything else adapts to fit your target length.

**[GitHub Repository →](https://github.com/SecurityRonin/shrinkpath)**

---

## What it does

shrinkpath shortens a path string to fit a target length, working on the string alone — no filesystem access, so it runs in WASM, embedded, or anywhere. It handles `/home/...`, `~/...`, `C:\Users\...`, `\\server\share\...`, and `.\...` from any host OS, and it always returns a result at or under your target length (unless the filename itself is longer — filenames are sacred).

```rust
use shrinkpath::{shrink_to, shrink_fish};

let short = shrink_to("/home/john/projects/rust/myapp/src/lib.rs", 30);
assert!(short.len() <= 30);
assert!(short.ends_with("lib.rs"));

let fish = shrink_fish("/home/john/projects/rust/myapp/src/lib.rs");
assert_eq!(fish, "/h/j/p/r/m/s/lib.rs");
```

---

## Packages

| Platform | Package | Install |
|---|---|---|
| Rust | [crates.io/crates/shrinkpath]https://crates.io/crates/shrinkpath | `cargo add shrinkpath` |
| JavaScript/TypeScript | [@4n6h4x0r/shrinkpath]https://www.npmjs.com/package/@4n6h4x0r/shrinkpath | `npm install @4n6h4x0r/shrinkpath` |

Both packages have full feature parity. The npm package is a pure TypeScript implementation (not WASM) with zero dependencies.

---

## Strategies

shrinkpath ships four strategies. Pick the one that fits, or use **Hybrid** (the default) and let the algorithm decide.

- **Fish** — abbreviate every directory segment to its first character (`/home/john/projects/lib.rs``/h/j/p/lib.rs`). The shortest possible result.
- **Ellipsis** — replace middle segments with `...`, keeping the identity head and the segments nearest the filename (`/home/john/projects/rust/src/lib.rs``/home/john/.../src/lib.rs`). The most readable.
- **Hybrid (default)** — a graduated four-phase approach that produces the best result for any target length, each phase strictly less destructive than the next.
- **Unique** — abbreviate each segment to the shortest prefix that distinguishes it from every other segment in the path.

Segments are classified by how important they are to keep: the filename is sacred, the username/profile is identity (dropped last), home roots are context, and everything else is expendable (dropped first).

---

## Highlights

- **Target-length guarantee**`shrink_to(path, 30)` always returns ≤ 30 chars (unless the filename is longer).
- **Identity-preserving** — the username segment is the last thing to go, not the first.
- **Cross-platform** — Unix, tilde, Windows drive, UNC, and dot-relative paths, auto-detected from the string.
- **Zero dependencies** — the library has none; `clap` is only pulled in for the optional CLI.
- **Segment metadata**`shrink_detailed()` returns per-segment data for colored prompts, breadcrumbs, or tooltips.
- **Optional `fs` feature** — git-repo-root detection and filesystem-aware disambiguation when you opt in.

See the [README](https://github.com/SecurityRonin/shrinkpath#readme) for the full API, CLI flags, and algorithm details.

---

[Privacy Policy](privacy.md) · [Terms of Service](terms.md) · [GitHub](https://github.com/SecurityRonin/shrinkpath) · © 2026 Security Ronin Ltd.