Skip to main content

rainbow-fmt logo

rainbow-fmt

pipeline coverage pypi downloads Socket Badge

Every shade of style. A code formatter that formats code your way.

rainbow-fmt is a highly configurable, pluggable code formatter for HTML, CSS, SCSS, JavaScript, TypeScript, Svelte, Python, and any other language or DSL someone cares to describe.

It is deliberately the anti-Prettier / anti-Black. Those tools end style debates by removing choice. rainbow-fmt ends them by letting a team write its decisions down once — and then enforcing them consistently, for every language in the repository.

Status

Alpha (0.3.0). JSON, JSONC, CSS, Python, JavaScript and TypeScript can be formatted from the command line; other languages are planned (docs/roadmap.md). See STATUS.md and CHANGELOG.md.

Quick start

pip install rainbow-fmt            # Python 3.12 or newer

rainbow-fmt format src/            # rewrite files in place
rainbow-fmt check .                # exit 1 if any file would change
rainbow-fmt diff config.json       # show the changes
rainbow-fmt options config.json    # the options for a file, and where each comes from

Every formatted file is verified before it is written: the syntax tree and the comments must be unchanged, and formatting the result again must change nothing (docs/cli.md).

Write your decisions down in rainbow.toml (or pyproject.toml [tool.rainbow], YAML, or package.json), in the project root:

preset = "rainbow:balanced"        # start from a preset (optional)

[core]
max_width = 100
indent_size = 2

[language.json]
object_wrap = "always"             # "preserve" | "fit" | "always"
align_values = true

[[override]]
files = ["legacy/**"]
core.indent_size = 4

.editorconfig is read too. All options and the resolution order are in docs/configuration.md.

Documentation

Document Contents
docs/overview.md Vision, principles, non-goals, comparison with existing tools
docs/architecture.md The major pieces and how they fit together
docs/css.md The CSS pack: what it changes, its options
docs/python.md The Python pack: what it changes, its options
docs/javascript.md The JavaScript pack: what it changes, its options, differences from Prettier
docs/typescript.md The TypeScript pack (also TSX): what types add, member separators, unions, .d.ts files
docs/cli.md The format, check, diff and options commands
docs/configuration.md Configuration model: options, cascading, presets, preserve
docs/extending.md How new languages and DSLs are added
docs/doc-ir.md Reference for the Doc IR builders and the printer
docs/benchmark.md python -m rainbow_fmt.benchmark and the CI baseline
docs/releasing.md Publishing a release to PyPI
docs/roadmap.md High-level, phased plan and open decisions
docs/adr/ Architecture Decision Records

Development

Requires Python 3.12 or newer.

python -m venv .venv
source .venv/bin/activate          # Windows: .venv\Scripts\activate
pip install -e '.[dev]'

pytest                             # tests + coverage report
ruff check . && ruff format --check .
mypy                               # strict; configured in pyproject.toml

The same checks, plus a package build and a benchmark (python -m rainbow_fmt.benchmark, docs/benchmark.md), run in GitLab CI on every push and merge request (.gitlab-ci.yml). Pushing a tag vX.Y.Z that matches __version__ publishes the package to PyPI (docs/releasing.md).

New features are developed tests-first: the tests describing the intended API are written and reviewed before the implementation. Architectural decisions are recorded in docs/adr/.

License

MIT — see LICENSE.

Project tracking

TODO.md (high-level tasks), TASKS.md (detailed next tasks), STATUS.md (current state).

Metadata

Release files for rainbow-fmt 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rainbow-fmt 0.3.0
File Size Uploaded
rainbow_fmt-0.3.0.tar.gz 311.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for rainbow-fmt 0.3.0
File Interpreter ABI Platform
rainbow_fmt-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 434.4 kB

Release files / rainbow_fmt-0.3.0.tar.gz

Download URL rainbow_fmt-0.3.0.tar.gz
Size 311.2 kB
Tags Source
SHA-256 checksum
How to use checksums
5fde6357dfec326bd79a51833857ed748b3721c543d50db0a6773bc225965b09
BLAKE2b-256 checksum
How to use checksums
77a085911c2cad99fd69bc0f8d3029deebcf3b2e7e6d57edd79824fde4ad6faa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / rainbow_fmt-0.3.0-py3-none-any.whl

Download URL rainbow_fmt-0.3.0-py3-none-any.whl
Size 123.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6ab5dd0200449075e5c36c82de9c8c591198147e62e8c51ebefabd435d33bc0e
BLAKE2b-256 checksum
How to use checksums
1333dfda03dccb23d89816b00ab64dcf80a5e1cde1a70dc040cced5c19df5a13
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.12.15

Release history Release notifications | RSS feed

0.4.0

2 release files

This release

0.3.0 This release

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page