Pico Reforged 2.0: a modern fork of Pico CSS
Pico CSS ended maintenance in October 2026. Pico Reforged continues v2.1.1 as plain modern CSS: why it exists, how it was built and how to switch.
Pico Reforged is a fork of Pico CSS v2.1.1, rewritten as plain modern CSS and published on npm as @rusticstack/pico-reforged. Version 2.0.0 came out on 15 October 2026 and 2.0.1 on 22 October 2026. This post covers why the fork exists, how it was built, and what changes when you switch.
In short: upstream Pico CSS is archived and v2.1.1 is its final release. Pico Reforged keeps the v2.1.1 classes, attributes, --pico-* variables and CDN file names, so most pages move over by changing one URL, and it rebuilds the internals on cascade layers, OKLCH colours and a small compiler.
Why a fork: Pico CSS is no longer maintained
On 4 October 2026 the Pico CSS maintainer merged an end of maintenance notice into the project README. It says that "v2.1.1 is the final release" and that "The repositories are archived. No new issues, PRs or releases." The same notice says nothing breaks: the npm package, the jsDelivr CDN and picocss.com stay online, so existing sites keep working.
What the public record shows, as checked through the GitHub API on 23 October 2026:
| Fact | Evidence |
|---|---|
| Latest release | v2.1.1, published 15 March 2025 |
Last commit on main | 4 October 2026, the merge of the end of maintenance notice (#753) |
| Repository state | picocss/pico is archived (read-only), as are the examples and picocss.com repositories |
| Still open | 93 issues and 32 pull requests |
| Oldest open pull request with no comments | #422, opened 28 December 2023 |
| Oldest open issue with no comments | #486, opened 7 March 2024 |
The notice also lists what a successor would need: "plain modern CSS instead of Sass, built on features it doesn't use today (OKLCH colors, cascade layers, Popover, anchor positioning) with fallbacks for older browsers, and a native compiler that strips unused CSS and makes customization easy." It adds that the project is MIT licensed and free to fork, and asks forks to use their own name. Pico Reforged took that list as its starting brief, with one change described below: it dropped the fallbacks for older browsers.
How it was built
The work is in the public commit history of the repository, which keeps the upstream history underneath it.
- A frozen reference. The first step froze the v2.1.1 build output in the repository for visual comparison, and recorded the plan in ADR 0001 on 14 October 2026.
- Colours as data. The v2.1.1 hex palette was converted once, by script, to OKLCH. Themes pick palette steps and are generated, not written by hand.
- Every module in plain CSS. The Sass partials were rewritten as plain CSS with native nesting, logical properties and range media queries. At that stage the commit notes a kitchen sink difference against v2.1.1 of under 0.003% of pixels.
- A compiler and CLI on top of Lightning CSS, for theme generation, scoping, classless builds, purging and the full set of output files.
- A browser floor. The plan first promised fallbacks for older browsers. That was withdrawn: the floor is now Chrome and Edge 111, Firefox 128, and Safari and iOS Safari 16.4, the same as Tailwind CSS v4, with no legacy build.
- An API check. A test extracts every class, attribute hook, element,
--pico-*variable and keyframe name from the v2.1.1 build and checks the new build against it. The migration guide reports that nothing from v2.1.1 is missing and the list of deliberate removals is empty. - A new default look. On 15 October 2026 ADR 0002 replaced the v2.1.1 look with a denser, quieter one. Markup, class names and variables did not change.
2.0.0 was published to npm the same day. 2.0.1 followed on 22 October 2026 as a docs and packaging release: the CSS is unchanged apart from the version in each file's banner comment, the npm page got the new README, and AGENTS.md is no longer shipped in the package.
What is different from Pico CSS v2.1.1
- Plain CSS source, no Sass. Styles sit in cascade layers (
pico.tokens,pico.theme,pico.core,pico.extras,pico.utilities), so your own CSS wins without!important. - OKLCH colours with
light-dark(), so light and dark are written once. The same 20 themes are included, and the CLI can make a theme from one colour. - A modern default look: a 16px root, 42px controls, 8px corners and solid focus outlines. Field borders and focus rings reach 3:1 contrast in every theme.
- Opt-in extras for apps: tabs, alert, toast, badge, avatar, skeleton, app shell, data table, pagination, stepper and empty state. They are never part of
pico.css. - Popover and anchor positioning patterns, animated dialogs and accordions. The old
details.dropdown,[data-tooltip]and<dialog>markup still works. - Vite and PostCSS (Next.js) plugins that remove unused rules in production. The default purge is safe: a rule is dropped only when a class, id or attribute name it needs appears nowhere in your sources.
- Files for coding agents:
llms.txton the docs site, an agent skill, a component manifest and DTCG design tokens.

File size
The project README reports these sizes for the minified full build:
| File | Raw | gzip | brotli |
|---|---|---|---|
Pico Reforged pico.min.css | 81 kB | 12.2 kB | 10.7 kB |
Pico CSS v2.1.1 pico.min.css | 83 kB | 11.7 kB | 10.1 kB |
So the raw file is slightly smaller and the compressed file slightly larger, with the popover patterns and the new look included. The opt-in modern target (Chrome and Edge 123, Firefox 128, Safari 17.5) ships native nesting and light-dark() and brings pico.min.css to 70 kB raw. On the repository's example Vite app, the default safe purge took the Pico part of the stylesheet from 81,642 to 65,564 bytes. A page that uses more of Pico drops less.
Switching from Pico CSS
For most pages the switch is one URL:
<!-- before -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@picocss/pico@2/css/pico.min.css" />
<!-- after -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@rusticstack/pico-reforged@2.0.1/css/pico.min.css" />Or install it from npm:
npm install @rusticstack/pico-reforgedIn npm projects, replace @picocss/pico with @rusticstack/pico-reforged in your imports. Every v2.1.1 file in css/ exists under the same name. Two things to check before you switch:
- Browsers. Below Chrome and Edge 111, Firefox 128 or Safari 16.4 nothing is tested or supported.
- The look. Pages keep working but look newer. The migration guide lists every visual change and a block of variables that brings most of the v2.1.1 look back.
Credit and licence
Pico CSS and its original design are the work of Lucas Larroche and the Pico contributors. Pico Reforged is a fork with its own name, is MIT licensed like the original, and is not affiliated with Pico CSS or its authors.
Pico Reforged is an independent fork of Pico CSS v2.1.1 (MIT). It is not affiliated with or endorsed by the Pico CSS project. The Pico CSS name and logo belong to their authors.
Links
- The Pico Reforged product page has the short version and answers to common questions.
- Docs and live examples: pico.rusticstack.com
- Source: github.com/RusticStack/pico-reforged, package: @rusticstack/pico-reforged on npm
- Everything else RusticStack makes is in What RusticStack makes and who it's for.
Tags
- pico-reforged
- pico css
- css
- open source
