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)
| File | Size | Uploaded | |
|---|---|---|---|
| rainbow_fmt-0.1.0.tar.gz | 122.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|