Skip to main content

rainbow-fmt logo

rainbow-fmt

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.1.0). JSON and JSONC 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/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.1.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.1.0
File Size Uploaded
rainbow_fmt-0.1.0.tar.gz 122.5 kB Details

Built distribution (wheel)

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

Total release size: 178.5 kB

Release files / rainbow_fmt-0.1.0.tar.gz

Download URL rainbow_fmt-0.1.0.tar.gz
Size 122.5 kB
Tags Source
SHA-256 checksum
How to use checksums
c1bf74bd8bcbb2a57190608a8bafb020da74939c60d7250178f2f0b42cba36fb
BLAKE2b-256 checksum
How to use checksums
c87afa9e1e9e7684eb7b3943f16388653be2e4a360b91af834cc59ccb42ed8e4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.12.14

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

Download URL rainbow_fmt-0.1.0-py3-none-any.whl
Size 56.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
43bef8dd092d2eb3cbea7e7b62330bdb0bca3b6e255c350289d1aebce5550d27
BLAKE2b-256 checksum
How to use checksums
76ea95ed28639da2a25e5f4d2ec0f911d270b81b26135f4bf30ddf558cbe96be
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.12.14

Release history Release notifications | RSS feed

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

This release

0.1.0 This release

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