path-lib 0.1.0

Cross-platform application and OS directory resolution for Rust, with user and global scopes, hardened sub-path joining, and guarded filesystem operations. Zero dependencies.
# Changelog

All notable changes to `path-lib` will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

---

## [Unreleased]

---

## [0.1.0] - 2026-10-13

Initial release.

### Added

- `App` with `new` (user scope), `global` (machine scope), and `portable`
  (single root) constructors, resolving data, config, cache, logs, state,
  runtime, temp, and documents directories per platform conventions: XDG
  and FHS on Linux and the BSDs, the `Library` domains on macOS, and Known
  Folders on Windows.
- Hardened sub-path accessors (`data_at`, `config_at`, ..., `at`) and the
  free function `join`, accepting either slash style and rejecting
  traversal, drive letters, control and reserved characters, Unicode
  look-alike separators, bidirectional overrides, Windows device names,
  trailing dots and spaces, and oversized input.
- `sanitize` for lossy repair of user-supplied names, and `clean` for
  lexical normalisation.
- Cached OS folders: `home`, `documents`, `desktop`, `downloads`,
  `pictures`, `music`, `videos`, `root`, `temp`, `exe`, `exe_dir`, plus the
  compile-time `os()`. Linux user folders honour `user-dirs.dirs`.
- Guarded filesystem operations: `make_dir`, `make_file`, `exists`,
  `list`, `remove`, `copy`, `move_to`, `find`, and the scoped `App`
  helpers `ensure`, `ensure_all`, `create`, `list`, `remove`, `find`.
- Unit, integration, and property tests; criterion benchmarks; CI for
  Linux, macOS, and Windows on stable and MSRV 1.85.

[Unreleased]: https://github.com/jamesgober/path-lib/compare/v0.1.0...HEAD
[0.1.0]: https://github.com/jamesgober/path-lib/releases/tag/v0.1.0