The Rome team recently announced Rome v10, dubbed the first stable release since the start of a Rust rewrite. The new release includes only a small part of the all-in-one toolchain that Rome envisions, namely the linter and formatter. The Rust-based tools according to multiple benchmarks provide between one and two orders of magnitude improvement vs. ESLint and Prettier. The tools are available as a VSCode extension.
Micha Reiser summarized the new release as follows:
Rome is an ambitious project aiming to unify the dozens of frontend language tools into a single easy-to-use tool built from scratch.
This release includes our fast linter and formatter; they require minimal configuration, come with beautiful and descriptive diagnostics, and have built-in support for JavaScript and TypeScript.
Lucas Garron reported 50x speed improvement over a combination of ESLint (linter) + Prettier (formatting tool) when used on a large codebase of over 400 files. Garron said:
I really hope @rometools accomplishes for linting/formatting (and more) what
esbuild
did for compilation. […]
I hope @rometools reaches its goal of being a full toolbox for JS/TS project management. I was originally drawn to @sebmck's “why not do linting, building, and testing in one tool?” I still envy other ecosystems with good de facto tooling, but I’m hopeful we’ll get there!
In the meantime, type bundling & (type)doc generation still remain painfully slow.
The Rome formatter aims at feature parity with Prettier, the de-facto standard for code formatting in the front-end community. Sebastian McKenzie described Rome’s vision of a single toolchain as follows:
Rome is not only a linter, but also a compiler, bundler, test runner, and more, for JavaScript, TypeScript, HTML, JSON, Markdown, and CSS. We aim to unify the entire frontend development toolchain.
Rome is a monolithic tool containing functionality that has traditionally been separate tools in the frontend ecosystem. We call this a toolchain. It is not a collection of existing tools, but completely custom, built largely from scratch, and contained entirely in a single package and codebase.
Rome is designed to replace Babel, ESLint, webpack, Prettier, Jest, and others.
The development community has seen in recent years constant improvement and innovation in tooling to increase the developer experience across the development life cycle. Developers often turn to tooling to address two core issues: productivity and complexity.
All-in-one, end-to-end toolchains that come preconfigured with good defaults are consistent with DevOps practices that encourage automation to reduce lead time and defects. As a matter of fact, DevOps platforms (also called internal developer platforms or value stream delivery platforms) seek to provide a complete, integrated workflow rather than individual building blocks to product engineers. In the words of Naphat Sanguansin, CTO at Prodvana:
The focus on an end-to-end workflow freed consumers of the tool to focus on what matters most to them: shipping features.
Will Rome replicate the emerging success of integrated DevOps platforms? Rome, by focusing on a bespoke toolchain rather than reusing existing pieces (cf. quick-lint-js), is trading time-to-market for optimized speed and simplicity. Rome was introduced in August 2020. Following its 2021 pivot to Rust, Rome is only now making generally available the first pieces of its vision.
The released Rome tools are available as a VSCode extension. The Rome project is open-sourced under the MIT license. Contributions are welcome and should follow the project’s code of conduct.