# flowmark
[](https://x.com/ojoshe)
[](https://github.com/jlevy/flowmark-rs/actions/workflows/ci.yml)
[](https://crates.io/crates/flowmark)
[](https://docs.rs/flowmark)

A Markdown auto-formatter for clean diffs and semantic line breaks.
This is a Rust port of [flowmark](https://github.com/jlevy/flowmark) (Python),
with identical CLI and identical output.
See the [Python project](https://github.com/jlevy/flowmark) for full
documentation, including features, CLI reference, configuration, IDE setup, and
agent use.
## Why the Rust version?
- **Single binary, no runtime** — `cargo install` or download a binary. No Python
environment needed.
- **Fast** — useful for large repos or CI pipelines.
- **Library crate** — embed formatting in Rust toolchains via
[docs.rs/flowmark](https://docs.rs/flowmark).
## Installation
Install from [crates.io](https://crates.io/crates/flowmark):
```bash
cargo install flowmark
```
Or download a pre-built binary from
[GitHub Releases](https://github.com/jlevy/flowmark-rs/releases).
## Usage
```bash
# Format a file in place
flowmark --auto myfile.md
# Format all markdown in current directory
flowmark --auto .
# Read from stdin, write to stdout
## Library usage
```rust
use flowmark::FormatOptions;
let opts = FormatOptions::default();
let formatted = opts.reformat_text("# Hello\n\nSome text.");
assert_eq!(formatted, "# Hello\n\nSome text.\n");
```
See [docs.rs/flowmark](https://docs.rs/flowmark) for full API documentation.
## Port status
This crate tracks [flowmark](https://github.com/jlevy/flowmark) **v0.6.4**
with full feature parity:
- Identical formatting output for all supported Markdown constructs
(CommonMark + GFM: tables, footnotes, alerts, strikethrough, task lists, math)
- Identical CLI flags, configuration files, and file discovery
- 430 tests (0 ignored, 0 failures), including 31 cross-language parity tests
- All 292 Python tests have verified Rust counterparts — see the
[port coverage mapping](admin/port-coverage-mapping/) for the full test-by-test
mapping, which is CI-enforced
The port was created using the
[rust-porting-playbook](https://github.com/jlevy/rust-porting-playbook).
## Documentation
| [docs/port-status.md](docs/port-status.md) | **Full project status**, release readiness, architecture, and doc index |
| [docs/publishing.md](docs/publishing.md) | Release process and crates.io publishing |
| [docs/port-sync-playbook.md](docs/port-sync-playbook.md) | How the Rust codebase stays in sync with Python upstream |
| [admin/](admin/) | Port administration: test mapping, dev tools, maintenance procedures |
| [CONTRIBUTING.md](CONTRIBUTING.md) | Build, test, and lint instructions |
| [CHANGELOG.md](CHANGELOG.md) | Release notes |
## License
[MIT](LICENSE)