Skip to content
PluginStats

boneyard-js weekly downloads statistics

By 0xGF · npm · Vite plugins

Pixel-perfect skeleton loading screens. Wrap your component in <Skeleton> and boneyard snapshots the real DOM layout — no manual descriptors, no configuration.

View on npm Fresh · Oct 18, 2026

boneyard-js has 65,206 recorded weekly downloads on npm, a decrease of 5.1% over the past 30 days, ranking #536 of 2,322 tracked listings.

Weekly downloads
65,206
Official API · Oct 18, 2026
7-day growth
-23.3%
-19.9K weekly downloads
30-day growth
-5.1%
-3.5K weekly downloads
90-day growth
+23.5%
+12.4K weekly downloads
Rank
#536
Among tracked npm listings

About boneyard-js

boneyard

Pixel-perfect skeleton loading screens, extracted from your real DOM.

Wrap your component in <Skeleton>, run the CLI, and get positioned bone rectangles that match your actual layout. No manual sizing, no guesswork.

Quick start

npm install boneyard-js
import { Skeleton } from 'boneyard-js/react'

function BlogPage() {
  const { data, isLoading } = useFetch('/api/post')

  return (
    <Skeleton name="blog-card" loading={isLoading}>
      <BlogCard data={data} />
    </Skeleton>
  )
}
npx boneyard-js build http://localhost:3000
// app/layout.tsx — import once, all skeletons auto-resolve
import './bones/registry'

Frameworks

// React
import { Skeleton } from 'boneyard-js/react'

// Preact
import { Skeleton } from 'boneyard-js/preact'

// React Native
import { Skeleton } from 'boneyard-js/native'
<!-- Svelte -->
<script lang="ts">
  import Skeleton from 'boneyard-js/svelte'
</script>

<Skeleton name="profile-card" loading={isLoading}>
  <ProfileCard />
</Skeleton>
<!-- Vue -->
<script setup>
import Skeleton from 'boneyard-js/vue'
</script>

<Skeleton name="profile-card" :loading="isLoading">
  <ProfileCard />
</Skeleton>
// Angular
import { SkeletonComponent } from 'boneyard-js/angular'

Config

Create boneyard.config.json in your project root. Controls both the CLI and runtime defaults.

{
  "breakpoints": [375, 768, 1280],
  "out": "./src/bones",

  "color": "#e5e5e5",
  "darkColor": "#2a2a2a",
  "animate": "shimmer",
  "shimmerColor": "#ebebeb",
  "darkShimmerColor": "#333333",
  "speed": "2s",
  "shimmerAngle": 110
}

All color values accept any valid CSS color (hex, rgba, hsl, etc.).

KeyDefaultDescription
breakpointsautoViewport widths for capture (auto-detects Tailwind)
out./src/bonesOutput directory for .bones.json and registry.js
wait800ms to wait after page load before capturing
color#f0f0f0Bone fill color (light mode)
darkColor#222222Bone fill color (dark mode)
animatepulsepulse, shimmer, or solid
shimmerColor#f7f7f7Shimmer highlight (light mode)
darkShimmerColor#2c2c2cShimmer highlight (dark mode)
speed2s / 1.8sAnimation duration (shimmer / pulse)
shimmerAngle110Shimmer gradient angle in degrees
staggerfalseDelay between bones in ms (true = 80ms)
transitionfalseFade out when loading ends in ms (true = 300ms)
selectcontainerWidth used to pick the responsive breakpoint: container (measured width) or viewport (window.innerWidth). Use viewport for app-shell layouts where the container is narrower than the window
urldev serverCapture origin for the Vite plugin, e.g. https://myapp.dev — use when the dev server sits behind a reverse proxy (portless, custom HTTPS origins) so auth cookies scoped to the real origin apply. Defaults to the server's own localhost:<port>. Also available as a boneyardPlugin({ url }) option

Per-component props override config. Config overrides package defaults.

Fixtures

When your component needs API data or auth to render, provide a fixture for the CLI to snapshot instead:

<Skeleton
  name="dashboard"
  loading={isLoading}
  fixture={<DashboardFixture />}
  snapshotConfig={{ leafTags: ["section"] }}
>
  <Dashboard data={data} />
</Skeleton>

Use leafTags to treat elements as atomic bones — prevents the extractor from recursing into children and creating unwanted internal shapes. A leaf tag is atomic only while everything it holds is inline: <p>Hello <strong>world</strong></p> is one bone, but an li (or any listed tag) wrapping block-level content — a card inside a list item, say — is walked into like a container, so lists of cards keep their inner structure.

Dark mode

Detected via the .dark class on <html> or any ancestor (standard Tailwind convention). Does not use prefers-color-scheme — gives you explicit control.

When .dark is present, darkColor and darkShimmerColor are used automatically.

CLI

The build command (and the Vite plugin) drive a headless Chromium via Playwright to snapshot your rendered UI. Playwright ships as a dependency of boneyard-js, so it's already in node_modules — but its browser binary is downloaded separately. Install it once before your first build:

npx playwright install chromium

Skipping this step is the most common first-run error. If Playwright reports a missing browser, run the command above. (Note: playwright install only works because Playwright is a dependency here — if you hit Command "playwright" not found in a strict pnpm/monorepo setup, use npx playwright install chromium.)

Prefer not to download a browser — e.g. in CI, or to reuse your logged-in session? See Reusing an existing browser.

npx boneyard-js build                              # auto-detect dev server
npx boneyard-js build http://localhost:3000         # explicit URL
npx boneyard-js build --out src/bones              # custom output
npx boneyard-js build --force                      # regenerate all
npx boneyard-js build --breakpoints 375,768,1280   # custom breakpoints
npx boneyard-js build --cookie "session=abc123"    # auth cookies
npx boneyard-js build --native --out ./bones       # React Native
Reusing an existing browser

Instead of launching (and downloading) Playwright's Chromium, boneyard can attach to a Chrome you're already running over the DevTools Protocol. This reuses your cookies and auth state, and skips the browser download — useful in CI or behind a login.

Chrome exposes two remote-debugging modes, and boneyard supports both:…

Description from the npm listing.

  • skeleton
  • skeleton-screen
  • loading
  • placeholder
  • react
  • react-native
  • vue
  • preact
  • angular
  • vite
  • vite-plugin
  • zero-layout-shift

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

boneyard-js weekly downloads on npm, last 90 days: 65,206 weekly downloads as of Oct 18, 2026, +23.5% over 90 days.boneyard-jsWeekly downloads on npm · Last 90 days65,206downloads / week+23.5% over 90 days020K40K60K80K100K120K140KJul 20Aug 4Aug 19Sep 3Sep 18Oct 3Oct 18downloads / weekobservedarchived (Internet Archive)no observationsJul 22, 2026 – Oct 18, 2026 · 89 observations · Updated Oc…pluginstats.com
boneyard-js weekly downloads on npm, last 90 days: 65,206 weekly downloads as of Oct 18, 2026, +23.5% over 90 days.

7/30/90-day growth

boneyard-js weekly downloads growth on npm: -23.3% over 7 days, -5.1% over 30 days, +23.5% over 90 days.boneyard-jsWeekly downloads growth on npm65,206downloads / week now7-day growth-19,863 weekly downloads-23.3%30-day growth-3,538 weekly downloads-5.1%90-day growth+12,416 weekly downloads+23.5%Growth vs. nearest observation to each baseline date · Updated Oct 18, 2026pluginstats.com
boneyard-js weekly downloads growth on npm: -23.3% over 7 days, -5.1% over 30 days, +23.5% over 90 days.

Ranking history

boneyard-js npm ranking history: currently #536 (by weekly downloads).boneyard-jsnpm ranking · by weekly downloads · Last 90 days#536current rank#100#200#300#400#500#600Jul 22Aug 6Aug 21Sep 5Sep 20Oct 5Oct 20rankOct 17, 2026 – Oct 20, 2026 · 4 observations · Updated Oct 18, 2026pluginstats.com
boneyard-js npm ranking history: currently #536 (by weekly downloads).

Listing placement

All npm2,320 listings · 116 pages · 1,162 shown · page 27, #16 (overall #536)
All npm: every listing in weekly downloads order

Listing placement

Vite plugins253 listings · 13 pages · page 4, #20 (overall #80)
Vite 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 (544)
Recent weekly downloads observations for boneyard-js
Date (UTC)Weekly downloadsChange vs. previous
65,206+22.9K
42,295-7.8K
50,140+137
50,003-17.4K
67,381-17.9K
85,2320
85,232+163
85,069-1.4K
86,471-3.5K
90,020-2.5K
92,568-10.4K
102,976-6.8K
109,746-25K
134,745—

Similar npm Vite plugins plugins

All 20 boneyard-js 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/boneyard-js. First seen Oct 16, 2026; last successful collection Oct 20, 2026. See the methodology.