<div align="center">
# humfmt
**Ergonomic human-readable formatting toolkit for Rust**
[](https://github.com/MuXolotl/humfmt/actions/workflows/ci.yml)


</div>
---
`humfmt` is a lightweight Rust library for turning raw machine values into human-friendly text.
Designed to provide:
- compact number rendering (`15320 -> 15.3K`)
- fluent builder-style customization
- locale-ready suffix formatting
- ergonomic extension trait API
- zero-macro, zero-nonsense usage
The crate aims to be tiny, intuitive, and pleasant enough that formatting stops feeling like work.
---
## β¨ Quick Example
```rust
use humfmt::Humanize;
fn main() {
println!("{}", humfmt::number(15320)); // 15.3K
println!("{}", 1_500_000.human_number()); // 1.5M
}
````
---
## βοΈ Customized Formatting
```rust
use humfmt::{Humanize, NumberOptions};
fn main() {
let out = 15_320.human_number_with(
NumberOptions::new()
.precision(2)
.long_units()
);
println!("{out}"); // 15.32 thousand
}
```
---
## β
Current Features
* [x] Compact number formatter
* [x] Builder-style `NumberOptions`
* [x] `Humanize` extension trait
* [x] Long and short suffix units
* [x] Locale abstraction foundation
* [x] Doctests and integration tests
---
## πΊοΈ Planned Roadmap
Upcoming humanizers planned for future releases:
* [ ] `bytes()` β human-readable byte sizes
* [ ] `duration()` β compact duration formatting
* [ ] `ago()` β relative time rendering
* [ ] `ordinal()` β 1st / 2nd / 3rd style helpers
* [ ] additional locale packs
* [ ] zero-allocation optimization pass
---
## π¦ Installation
Add dependency:
```toml
[dependencies]
humfmt = "0.1"
```
(Currently unreleased β crates.io publication coming soon.)
---
## π§ͺ Development Status
`humfmt` is under active early-stage development.
Public API is being shaped carefully before the first crates.io release.
Expect rapid iteration, formatter additions, and locale improvements.
---
## π Documentation
* examples available in `/examples`
* integration tests available in `/tests`
* rustdoc examples available on all public number APIs
---
## π License
Licensed under MIT.
---
## β Philosophy
This crate follows one simple rule:
> Human formatting should feel stupidly easy.
No giant config structs.
No formatting gymnastics.
No "why is this so annoying?" moments.
Just:
```rust
println!("{}", 1500000.human_number());
```
and move on with your life.