Skip to content
RusticStack
Menu

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.

RusticStack6 min read

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:

FactEvidence
Latest releasev2.1.1, published 15 March 2025
Last commit on main4 October 2026, the merge of the end of maintenance notice (#753)
Repository statepicocss/pico is archived (read-only), as are the examples and picocss.com repositories
Still open93 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.

  1. 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.
  2. 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.
  3. 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.
  4. A compiler and CLI on top of Lightning CSS, for theme generation, scoping, classless builds, purging and the full set of output files.
  5. 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.
  6. 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.
  7. 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.txt on the docs site, an agent skill, a component manifest and DTCG design tokens.
The Examples page of the Pico Reforged docs site, showing eight example pages in the dark scheme: basic page, forms, class-less article, popover patterns, custom theme, dashboard, kitchen sink and tabs
The examples on pico.rusticstack.com, each a full page you can open and copy.

File size

The project README reports these sizes for the minified full build:

FileRawgzipbrotli
Pico Reforged pico.min.css81 kB12.2 kB10.7 kB
Pico CSS v2.1.1 pico.min.css83 kB11.7 kB10.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-reforged

In 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.

Tags

  • pico-reforged
  • pico css
  • css
  • open source
  • The Pico Reforged docs site at pico.rusticstack.com, with a live preview of a form and a table styled by Pico Reforged

    Pico CSS v2.1.1, rewritten as plain modern CSS

    Pico Reforged is an MIT-licensed fork of Pico CSS v2.1.1, rewritten as plain modern CSS. It keeps v2.1.1 markup working and is on npm as @rusticstack/pico-reforged.