Skip to content
PluginStats

@jordandavila/fluid-canvas weekly downloads statistics

By jordandavila · npm · Tailwind plugins

Proportional canvas design system for Tailwind CSS — poster scaling from your Figma frame, with rem floors and a user text-size multiplier. Ships a v3 plugin and a v4 CSS-first build from one source of truth.

View on npm Stale · Oct 18, 2026

@jordandavila/fluid-canvas has 7 recorded weekly downloads on npm, a decrease of 12.5% over the past 30 days.

Weekly downloads
7
Official API · Oct 18, 2026
7-day growth
+16.7%
+1 weekly downloads
30-day growth
-12.5%
-1 weekly downloads
90-day growth
—
Insufficient history
Rank
—
Among tracked npm listings

About @jordandavila/fluid-canvas

@jordandavila/fluid-canvas

Proportional canvas design system for Tailwind CSS. Author every measurement in design px straight from the Figma frame; the composition scales like a poster. One package, two builds — a Tailwind v3 plugin and a Tailwind v4 CSS-first build — kept identical by a parity check that runs on every release.

--uw: calc(min(100cqi, 2560px) / 1920);  /* one design px, WIDTH canvas  */
--uh: calc(100svh / 1080);               /* one design px, HEIGHT canvas */

p-u-24 is exactly 24px at the 1920 frame and proportional everywhere else. No clamp ramps, no per-breakpoint overrides.

Type roles split into a fixed rem part and a scaling part, which is what keeps browser zoom working (measured 1.75× growth on body at 200%, where a purely viewport-derived size grows not at all) and collapses the breakpoint seam to +0.2% on h1. The width canvas reads cqi, so a component inside a container-type: inline-size ancestor scales to that ancestor, not the window.


Install

npm install @jordandavila/fluid-canvas

tailwindcss is a peer dependency: ^3.4.0 || ^4.0.0.

Tailwind v4 — CSS only
/* app.css */
@import 'tailwindcss';
@import '@jordandavila/fluid-canvas';
Tailwind v3 — plugin
// tailwind.config.ts
import fluid, { defaultPreset } from '@jordandavila/fluid-canvas/v3'

export default {
  content: ['./src/**/*.{ts,tsx,njk,html}'],
  plugins: [fluid(defaultPreset)],
}
// tailwind.config.js (CommonJS) — use the named export, not `.default`
const { fluid, defaultPreset } = require('@jordandavila/fluid-canvas/v3')

Either way you get the same class names:

<section class="py-section">
  <div class="ui-container flex flex-col gap-u-24">
    <h1 class="text-h1">Poster scale</h1>
    <p class="text-body max-w-measure">Design px in, proportional px out.</p>
  </div>
</section>

Entry points

ImportBuildNotes
@jordandavila/fluid-canvasv4 CSSthe default — v4 is CSS-first, so this is a stylesheet
@jordandavila/fluid-canvas/v4v4 CSSexplicit alias of the above
@jordandavila/fluid-canvas/v4/canvas.cssv4 CSSengine only, bring your own tokens
@jordandavila/fluid-canvas/v4/tokens.cssv4 CSStokens only
@jordandavila/fluid-canvas/v4/utilities/*.cssv4 CSSindividual utility groups
@jordandavila/fluid-canvas/v3JS plugindual ESM + CJS, typed
@jordandavila/fluid-canvas/runtime/text-scaleJS--ui-text-scale control, shared by both

The root export is a stylesheet, not JavaScript. import x from '@jordandavila/fluid-canvas' in a Node script will not do what you want — v3 users always go through /v3.


Demos

Two runnable demos rendering identical markup, one per Tailwind major — a live instrument panel, a type specimen that lights up each rem floor as it engages, and the text-size control wired to the shipped runtime.

npm install && npm run build
cd demos/v3 && npm install && npm start   # serves /v3/ and /v4/ on :5173

See demos/README.md.


Documentation

  • v3 guide — plugin options, presets, the bare-value map
  • v4 guide — file map, @theme tokens, composing partials

Both cover the type-scale modes, the floor table, the full utility surface, and the accessibility story. Start with whichever Tailwind you are on.


Why one package for two Tailwind majors

The alternative is two packages (-v3 / -v4 suffixes) or two release lines on different majors. Both were rejected:

  • A suffix reads like the package's own version. fluid-canvas-v3@2.1.0 is a genuinely confusing string.
  • Two release lines mean backporting every fix, and nothing mechanically guarantees the two stay in sync.

Shipping both from one tree makes the parity guarantee real: prepublishOnly compiles the same fixture through Tailwind v3 and Tailwind v4 and refuses to publish unless every class rule and every token variable resolves identically. The cost is a few unused KB in node_modules for whichever build you skip.

Versioning

The package version tracks this system, not Tailwind. 1.x supports Tailwind 3.4+ and 4.x simultaneously. Dropping a Tailwind major is a breaking change and would be a major bump here — it will not be signalled by the package name.

Relationship to @jordandavila/tailwind-fluid

Separate package, separate system. That one scales against a per-breakpoint Figma frame and uses *-fluid-* class names; this one is a poster model with *-u-* / *-uh-* names. Neither replaces the other and no migration is implied.


Development

npm install
npm test          # build → compile both fixtures → parity check
npm run build     # tsup: v3/dist ESM + CJS + types
npm run typecheck
npm run release:dry

The v4 fixture lives in test/v4 with its own node_modules. That is deliberate: Tailwind 3 and Tailwind 4 both provide a tailwindcss binary, so they cannot share one install without a bin collision. The root install pins Tailwind 3 (it is also the type source for the plugin) and test/v4 nests Tailwind 4.

Publishing
npm login
npm publish            # prepublishOnly runs typecheck + full parity test

The package is scoped, so publishConfig.access is set to public — without it npm would attempt a restricted (paid) publish.

License

ISC © Jordan Davila

Description from the npm listing.

  • tailwindcss
  • tailwindcss-plugin
  • tailwind-v4
  • design-system
  • design-tokens
  • fluid-typography
  • responsive
  • figma
  • accessibility
  • wcag

README badge

Show your rank in a README or on your website. The badge updates automatically.

Charts

Images: 30d · 1y · all time · 1600×900 dark

Adoption over time

@jordandavila/fluid-canvas weekly downloads on npm, last 90 days: 7 weekly downloads as of Oct 18, 2026.@jordandavila/fluid-canvasWeekly downloads on npm · Last 90 days7downloads / week020406080100120140160Jul 20Aug 4Aug 19Sep 3Sep 18Oct 3Oct 18downloads / weekobservedarchived (Internet Archive)no observationsJul 25, 2026 – Oct 18, 2026 · 86 observations · Updated Oc…pluginstats.com
@jordandavila/fluid-canvas weekly downloads on npm, last 90 days: 7 weekly downloads as of Oct 18, 2026.

7/30/90-day growth

@jordandavila/fluid-canvas weekly downloads growth on npm: +16.7% over 7 days, -12.5% over 30 days, 90-day growth unavailable.@jordandavila/fluid-canvasWeekly downloads growth on npm7downloads / week now7-day growth+1 weekly downloads+16.7%30-day growth-1 weekly downloads-12.5%90-day growth+7 weekly downloadsInsufficient historyGrowth vs. nearest observation to each baseline date · Updated Oct 18, 2026pluginstats.com
@jordandavila/fluid-canvas weekly downloads growth on npm: +16.7% over 7 days, -12.5% over 30 days, 90-day growth unavailable.

Ranking history

@jordandavila/fluid-canvas npm ranking history: currently #2157 (by weekly downloads).@jordandavila/fluid-canvasnpm ranking · by weekly downloads · Last 90 days#2157current rank#2110#2120#2130#2140#2150#2160Jul 23Aug 7Aug 22Sep 6Sep 21Oct 6Oct 21rankOct 18, 2026 – Oct 21, 2026 · 4 observations · Updated Oct 18, 2026pluginstats.com
@jordandavila/fluid-canvas npm ranking history: currently #2157 (by weekly downloads).

Listing placement

All npm2,429 listings · 122 pages · 1,215 shown · page 112, #11 (overall #2,231)
All npm: every listing in weekly downloads order

Listing placement

Tailwind plugins260 listings · 13 pages · page 10, #13 (overall #193)
Tailwind plugins: every listing in weekly downloads order

Filled points are observed values; hollow points come from Internet Archive snapshots of the listing page. Dashed segments span periods with no observations — values between points are not interpolated.

Each band is one page of 20. Weekly downloads on a linear scale. Placement is projected from weekly downloads, so it can differ from the marketplace's own sort order. Hover a dot to see the listing.

Recent observations

Full history (122)
Recent weekly downloads observations for @jordandavila/fluid-canvas
Date (UTC)Weekly downloadsChange vs. previous
7+4
3-1
4-1
5-1
6-1
70
7+1
6+1
5+1
40
40
4+1
30
3—

Similar npm Tailwind plugins plugins

All 20 @jordandavila/fluid-canvas alternatives

Data source

Weekly downloads (trailing 7 complete days) come from the official npm downloads API. Downloads include CI and mirrors and are not equivalent to installs or users. npm publishes no ratings.

Listing: https://www.npmjs.com/package/@jordandavila/fluid-canvas. First seen Oct 16, 2026; last successful collection Oct 23, 2026. See the methodology.