0xGF/boneyardPublic

Auto generated skeleton loading framework

AI summary: Extracts pixel-perfect skeleton loading screens directly from your real UI without manual measurement or hand-tuning.

Stars
7.5K
+3 today
Forks
294
Watchers
11
Open issues
3
Open PRs
1
Contributors
~17
Commits
246
Branches
25

TypeScriptMITCreated Apr 1, 2026Last push 1mo agoLatest release v1.10.0+28 stars this week+190 this month

Quick answers

What is boneyard?
Extracts pixel-perfect skeleton loading screens directly from your real UI without manual measurement or hand-tuning.
What does boneyard do?
Boneyard is a framework-agnostic tool that automatically generates skeleton loading screens by analyzing your actual UI components. It eliminates the need for developers to manually create, measure, or tune placeholder elements. The CLI captures the layout during build time or from a running device, creating perfectly aligned 'bones'. At runtime, these bones are rendered as fallbacks and can dynamically scale to match the user's text size settings.
Who is boneyard for?
Frontend developers and UI/UX engineers looking to easily implement high-quality, perfectly aligned skeleton loading screens. It is ideal for teams using modern JavaScript frameworks who want to avoid the manual labor of maintaining placeholder components.
How do I get started with boneyard?
npm install boneyard-js
How popular is boneyard on GitHub?
0xGF/boneyard has 7,472 stars and 294 forks on GitHub, and gained 28 stars in the last 7 days.
What license does boneyard use?
0xGF/boneyard is released under the MIT license.

Star history

since Jul 28, 2026
02K4K6KJul 2026Aug 2026Sep 2026Oct 2026
7.5K stars as of Oct 3, 2026. Measured daily since Jul 28, 2026; GitHub no longer exposes earlier star timestamps.

Contribution activity

commits per day, last 52 weeks
OctNovDecJanFebMarAprMayJunJulAugSepMonWedFri2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-08: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 0 commits2026-03-03: 0 commits2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 0 commits2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 0 commits2026-03-13: 0 commits2026-03-14: 0 commits2026-03-15: 0 commits2026-03-16: 0 commits2026-03-17: 0 commits2026-03-18: 0 commits2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 0 commits2026-03-23: 0 commits2026-03-24: 0 commits2026-03-25: 0 commits2026-03-26: 0 commits2026-03-27: 0 commits2026-03-28: 0 commits2026-03-29: 0 commits2026-03-30: 0 commits2026-03-31: 0 commits2026-04-01: 9 commits2026-04-02: 11 commits2026-04-03: 11 commits2026-04-04: 15 commits2026-04-05: 7 commits2026-04-06: 15 commits2026-04-07: 24 commits2026-04-08: 23 commits2026-04-09: 10 commits2026-04-10: 5 commits2026-04-11: 1 commit2026-04-12: 28 commits2026-04-13: 1 commit2026-04-14: 0 commits2026-04-15: 2 commits2026-04-16: 0 commits2026-04-17: 4 commits2026-04-18: 0 commits2026-04-19: 0 commits2026-04-20: 0 commits2026-04-21: 4 commits2026-04-22: 6 commits2026-04-23: 2 commits2026-04-24: 0 commits2026-04-25: 0 commits2026-04-26: 0 commits2026-04-27: 0 commits2026-04-28: 0 commits2026-04-29: 0 commits2026-04-30: 0 commits2026-05-01: 1 commit2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 0 commits2026-05-05: 0 commits2026-05-06: 1 commit2026-05-07: 0 commits2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 0 commits2026-05-12: 0 commits2026-05-13: 0 commits2026-05-14: 0 commits2026-05-15: 0 commits2026-05-16: 0 commits2026-05-17: 0 commits2026-05-18: 0 commits2026-05-19: 0 commits2026-05-20: 1 commit2026-05-21: 0 commits2026-05-22: 0 commits2026-05-23: 0 commits2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 0 commits2026-05-28: 0 commits2026-05-29: 0 commits2026-05-30: 0 commits2026-05-31: 0 commits2026-06-01: 0 commits2026-06-02: 0 commits2026-06-03: 0 commits2026-06-04: 0 commits2026-06-05: 0 commits2026-06-06: 0 commits2026-06-07: 0 commits2026-06-08: 0 commits2026-06-09: 0 commits2026-06-10: 0 commits2026-06-11: 0 commits2026-06-12: 0 commits2026-06-13: 0 commits2026-06-14: 0 commits2026-06-15: 0 commits2026-06-16: 0 commits2026-06-17: 0 commits2026-06-18: 0 commits2026-06-19: 0 commits2026-06-20: 0 commits2026-06-21: 0 commits2026-06-22: 0 commits2026-06-23: 1 commit2026-06-24: 0 commits2026-06-25: 0 commits2026-06-26: 0 commits2026-06-27: 0 commits2026-06-28: 0 commits2026-06-29: 0 commits2026-06-30: 0 commits2026-07-01: 0 commits2026-07-02: 0 commits2026-07-03: 0 commits2026-07-04: 0 commits2026-07-05: 0 commits2026-07-06: 0 commits2026-07-07: 8 commits2026-07-08: 0 commits2026-07-09: 0 commits2026-07-10: 0 commits2026-07-11: 0 commits2026-07-12: 0 commits2026-07-13: 0 commits2026-07-14: 0 commits2026-07-15: 0 commits2026-07-16: 0 commits2026-07-17: 0 commits2026-07-18: 0 commits2026-07-19: 0 commits2026-07-20: 0 commits2026-07-21: 0 commits2026-07-22: 0 commits2026-07-23: 0 commits2026-07-24: 1 commit2026-07-25: 0 commits2026-07-26: 0 commits2026-07-27: 0 commits2026-07-28: 0 commits2026-07-29: 0 commits2026-07-30: 0 commits2026-07-31: 0 commits2026-08-01: 0 commits2026-08-02: 0 commits2026-08-03: 0 commits2026-08-04: 1 commit2026-08-05: 0 commits2026-08-06: 0 commits2026-08-07: 0 commits2026-08-08: 0 commits2026-08-09: 0 commits2026-08-10: 0 commits2026-08-11: 0 commits2026-08-12: 0 commits2026-08-13: 0 commits2026-08-14: 0 commits2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 0 commits2026-08-18: 0 commits2026-08-19: 0 commits2026-08-20: 0 commits2026-08-21: 0 commits2026-08-22: 0 commits2026-08-23: 0 commits2026-08-24: 0 commits2026-08-25: 0 commits2026-08-26: 0 commits2026-08-27: 0 commits2026-08-28: 0 commits2026-08-29: 0 commits2026-08-30: 0 commits2026-08-31: 6 commits2026-09-01: 0 commits2026-09-02: 0 commits2026-09-03: 0 commits2026-09-04: 0 commits2026-09-05: 0 commits2026-09-06: 0 commits2026-09-07: 0 commits2026-09-08: 0 commits2026-09-09: 0 commits2026-09-10: 0 commits2026-09-11: 0 commits2026-09-12: 0 commits2026-09-13: 0 commits2026-09-14: 0 commits2026-09-15: 0 commits2026-09-16: 0 commits2026-09-17: 0 commits2026-09-18: 0 commits2026-09-19: 0 commits2026-09-20: 0 commits2026-09-21: 0 commits2026-09-22: 0 commits2026-09-23: 0 commits2026-09-24: 0 commits2026-09-25: 0 commits2026-09-26: 0 commits2026-09-27: 0 commits2026-09-28: 0 commits2026-09-29: 0 commits2026-09-30: 0 commits2026-10-01: 0 commits2026-10-02: 0 commits2026-10-03: 0 commits
198 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Permissive license

    MIT

What boneyard does

Boneyard is a framework-agnostic tool that automatically generates skeleton loading screens by analyzing your actual UI components. It eliminates the need for developers to manually create, measure, or tune placeholder elements. The CLI captures the layout during build time or from a running device, creating perfectly aligned 'bones'. At runtime, these bones are rendered as fallbacks and can dynamically scale to match the user's text size settings.

Frontend developers and UI/UX engineers looking to easily implement high-quality, perfectly aligned skeleton loading screens. It is ideal for teams using modern JavaScript frameworks who want to avoid the manual labor of maintaining placeholder components.

  • Automatic generation: Extracts skeleton layouts directly from real UI elements without manual coding.
  • Broad framework support: Works natively with React, Preact, Vue, Svelte 5, Angular, and React Native.
  • Dynamic scaling: Automatically adjusts bone positions and sizes at runtime to match user font scale settings.
  • Suspense integration: Provides a specialized BoneSuspense component that renders skeletons as fallbacks naturally.
  • Vite and CLI support: Includes a dedicated CLI tool and Vite plugin for capturing bones during build time or via HMR.

Where teams use it

Automated loading states

Generate perfectly aligned skeleton placeholders for complex UI components without manual CSS tuning.

Cross-framework implementation

Maintain consistent loading screen aesthetics across different frontend stacks within the same organization.

Mobile app placeholders

Scan and capture accurate loading skeletons directly from a running React Native device.

Accessible loading UIs

Ensure loading placeholders automatically adapt to users who have custom text sizing enabled.

Getting started: npm install boneyard-js

README

main branch

Boneyard

boneyard

Pixel-perfect skeleton loading screens, extracted from your real UI. No manual measurement, no hand-tuned placeholders.

Works with React, Preact, Vue, Svelte 5, Angular, and React Native.

Quick start

npm install boneyard-js

React

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

function BlogPage() {
  const { data, isLoading } = useFetch('/api/post')
  return (
    <Skeleton name="blog-card" loading={isLoading}>
      {data && <BlogCard data={data} />}
    </Skeleton>
  )
}
With <Suspense> / useSuspenseQuery

Drop in <BoneSuspense> anywhere you'd use a <Suspense> boundary. The skeleton renders as the fallback at runtime, and the CLI captures bones from the resolved children at build time.

import { BoneSuspense } from 'boneyard-js/react'

function Page() {
  return (
    <BoneSuspense name="user-card">
      <UserCard />  {/* uses useSuspenseQuery */}
    </BoneSuspense>
  )
}

No initialData or placeholderData required — the build-time --wait window lets the query resolve naturally. Pass a fixture if the query can't finish in time.

Vue

<script setup>
import Skeleton from 'boneyard-js/vue'
import './bones/registry'
const loading = ref(true)
</script>

<template>
  <Skeleton name="card" :loading="loading">
    <Card />
  </Skeleton>
</template>

Svelte 5

<script>
  import Skeleton from 'boneyard-js/svelte'
  import '$lib/bones/registry'
  let loading = true
</script>

<Skeleton name="card" {loading}>
  <Card />
</Skeleton>

Preact

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

function BlogPage() {
  const { data, isLoading } = useFetch('/api/post')
  return (
    <Skeleton name="blog-card" loading={isLoading}>
      {data && <BlogCard data={data} />}
    </Skeleton>
  )
}

Angular

import { SkeletonComponent } from 'boneyard-js/angular'

@Component({
  imports: [SkeletonComponent],
  template: `
    <boneyard-skeleton name="card" [loading]="isLoading">
      <app-card />
    </boneyard-skeleton>
  `
})

React Native

import { Skeleton } from 'boneyard-js/native'

<Skeleton name="profile-card" loading={isLoading}>
  <ProfileCard />
</Skeleton>
npx boneyard-js build --native --out ./bones
# Open your app on device — bones capture automatically

Dynamic Type: Generate bones at default font scale. Boneyard automatically scales bone positions at runtime to match the user's text size setting.

Generate bones

# CLI — works with any framework
npx boneyard-js build

# Watch mode — re-captures on HMR changes
npx boneyard-js build --watch

# React Native — scans from device
npx boneyard-js build --native

Then import the registry once in your app entry:

import './bones/registry'

Vite plugin

For Vite-based projects (React, Preact, Vue, Svelte), use the plugin instead of the CLI — no second terminal needed:

// vite.config.ts
import { boneyardPlugin } from 'boneyard-js/vite'

export default defineConfig({
  plugins: [boneyardPlugin()]
})

Bones are captured automatically when the dev server starts and re-captured on every HMR update.

How it works

Web: The CLI (or Vite plugin) opens a headless browser, visits your app, finds every <Skeleton name="...">, and snapshots their layout at multiple breakpoints.

React Native: The <Skeleton> component auto-scans in dev mode when the CLI is running. It walks the fiber tree, measures views via UIManager, and sends bone data to the CLI. Zero overhead in production.

All frameworks output the same .bones.json format — cross-platform compatible.

CLI flags

Flag Default Description
[url] auto-detected URL to visit
--breakpoints 375,768,1280 Viewport widths, comma-separated
--wait 800 ms to wait after page load
--out ./src/bones Output directory
--force — Skip incremental cache
--watch — Re-capture on HMR changes
--native — React Native device scanning
--no-scan — Skip filesystem route scanning
--cdp — Connect to existing Chrome via debug port
--env-file — Load env vars from file

Props

Prop Type Default Description
loading boolean — Show skeleton or real content
name string — Unique name (generates name.bones.json)
color string rgba(0,0,0,0.08) Bone fill color
darkColor string rgba(255,255,255,0.06) Bone color in dark mode
animate 'pulse' | 'shimmer' | 'solid' 'pulse' Animation style
stagger number | boolean false Stagger delay between bones in ms (true = 80ms)
transition number | boolean false Fade out duration when loading ends (true = 300ms)
boneClass string — CSS class applied to each bone element
fixture ReactNode / Snippet / Slot — Mock content for CLI capture (dev only)
initialBones ResponsiveBones — Pass bones directly (overrides registry)
fallback ReactNode / Snippet / Slot — Shown when loading but no bones available

Config file

{
  "breakpoints": [375, 768, 1280],
  "out": "./src/bones",
  "wait": 800,
  "color": "#e5e5e5",
  "animate": "pulse"
}

Save as boneyard.config.json. Per-component props override config values.

Package exports

Import Use
boneyard-js snapshotBones, renderBones, computeLayout
boneyard-js/react React <Skeleton>
boneyard-js/preact Preact <Skeleton> (no compat needed)
boneyard-js/vue Vue <Skeleton>
boneyard-js/svelte Svelte <Skeleton>
boneyard-js/angular Angular <boneyard-skeleton>
boneyard-js/native React Native <Skeleton>
boneyard-js/vite Vite plugin boneyardPlugin()

Links

Star History

Star History Chart

License

MIT

View on GitHub

Recent activity

commits and pull requests

Recent open issues

view all

Releases and announcements

14 total
  1. v1.10.0v1.10.0Aug 31, 2026

    ## Features - **Vite plugin `url` option** — capture through proxied dev origins (portless, custom HTTPS domains) so origin-scoped auth cookies apply. Also readable from `boneyard.config.json`. (#105) - **`ws://` CDP endpoints** — `--cdp` / `cdp` accept a full `ws://…/devtools/browser/<uuid>` endpoint alongside a port, supporting the chrome://inspect remote-debugging toggle (Chrome 144+). Error messages now cover the Chrome 136 `--user-data-dir` requirement. (#91) ## Fixes - `configureBoneyard({ transition, stagger, animate })` was silently ignored — prop defaults short-circuited the config fall-through in every framework. The fade-out transition now actually interpolates (the overlay previously unmounted and remounted at opacity 0), and the fading overlay no longer intercepts clicks meant for revealed content. (#109) - Leaf tags (`li`, `td`, `p`, …) are atomic only while their contents are inline — an `li` wrapping a card is walked into like a container, so lists of cards keep their inner structure. (#112) - The skeleton container reserves the captured bones height while visible, fixing `BoneSuspense` fallbacks collapsing to 0px. (#110) - Skeleton `uid` derives from `useId()` ins

  2. v1.9.0v1.9.0Jul 7, 2026

    Rolls up the recent issue triage into a release. ## Features - **aria-busy** on skeleton containers while loading — React, Preact, Vue, Svelte, Angular, React Native (#93) - **`select: 'container' | 'viewport'`** prop + config option to choose which width picks the responsive breakpoint. Default `'container'` (unchanged); `'viewport'` fixes app-shell layouts where the container is narrower than the window (#92) ## Fixes - **Angular** — shimmer/pulse/stagger animations were completely static under emulated ViewEncapsulation and the esbuild `@angular/build:application` builder; keyframes are now injected into `document.head` (#95, #86) - **Vite plugin** — `env[...]` placeholders in auth cookie/header values are now resolved from `.env` files (opt-in via `resolveEnvVars`), matching the CLI (#84) - **React Native** — `--native` scan no longer drops previously-captured skeletons from the registry when only one screen is open (#87) ## Docs - Documented the Playwright browser install (`npx playwright install chromium`) and a "Reusing an existing browser" section covering `--cdp` / `--remote-debugging-port` (#89, #90) **Full changelog:** https://github.com/0xGF/boneyard/compare/v1.8.2.

  3. v1.8.1v1.8.1Apr 23, 2026

    Patch release. ## Fixes - **HTTPS dev servers** ([#80](https://github.com/0xGF/boneyard/issues/80)) — CLI auto-detect falls back to `https://` per port; non-CDP browser contexts launched with `ignoreHTTPSErrors: true`; Vite plugin honours `server.https` from Vite config when building the capture URL. Works with mkcert, `next --experimental-https`, vite preview, Quasar https mode. - **Previously-captured bones no longer drop out of the registry** ([#81](https://github.com/0xGF/boneyard/issues/81)) — registry regen now merges freshly-captured bones with everything already on disk. Typical scenario: capture `/login` unauthenticated, then add `auth.cookies` and re-run — the login bones now survive into the regenerated registry. `--force` still rebuilds from scratch. The cross-run dropout was especially bad after v1.8.0's single-page mode, which would prune the registry down to the one skeleton captured this run. ## Tests - **143 pass / 0 fail** (was 136 — added 7 new `mergePreservingExisting` tests). **Full Changelog**: https://github.com/0xGF/boneyard/compare/v1.8.0...v1.8.1

  4. v1.8.0v1.8.0Apr 23, 2026

    Minor release. ## Fixes - **Vite plugin no longer fails silently** ([#77](https://github.com/0xGF/boneyard/pull/77), fixes [#75](https://github.com/0xGF/boneyard/issues/75)) — per-route diagnostics on empty captures (final path, page title, marker count, errors), redirect warnings, all real exceptions surfaced (only the benign `Target closed` stays quiet), `__BONEYARD_SNAPSHOT` missing is now a visible warning. New `debug: true` plugin option. - **Vite plugin reads `boneyard.config.json`** — `routes`, `breakpoints`, `wait`, `out`, and `auth` (cookies + headers, sanitized against the same allowlist/blocklist the CLI uses) are now honoured as fallbacks. Plugin options still win. - **Vite plugin `cdp:` reuses your Chrome session** — same fix as [#73](https://github.com/0xGF/boneyard/pull/73), ported to the plugin. - **`npx boneyard-js build <url>/path` actually captures only that page** ([fixes #78](https://github.com/0xGF/boneyard/issues/78)) — the docs documented this as "Specific page" capture, but the implementation kept link-following + filesystem-walking. Now: any URL with a non-root path triggers single-page mode (no link-follow, no filesystem walk, no `config.routes`/`config

  5. v1.7.9v1.7.9Apr 22, 2026

    ## Fixes - **JSON bone typing** ([#74](https://github.com/0xGF/boneyard/pull/74), fixes [#72](https://github.com/0xGF/boneyard/issues/72)) — widen `AnyBone` so `*.bones.json` imports type-check under `resolveJsonModule: true` without `@ts-nocheck` or casts. - **`--cdp` auth reuse** ([#73](https://github.com/0xGF/boneyard/pull/73)) — `chromium.connectOverCDP()` now reuses the existing Chrome context, so cookies and auth state from the user's session carry over (matching the CLI help text). ## Chores - Align `renderBones`/Vue tests with container-skip behavior. Suite is now 123 pass / 0 fail. **Full Changelog**: https://github.com/0xGF/boneyard/compare/v1.7.8...v1.7.9

Code frequency

additions and deletions
+81.6K-81.6KWeek of 2026-03-29: +81,639 linesWeek of 2026-03-29: -32,838 linesWeek of 2026-04-05: +18,560 linesWeek of 2026-04-05: -6,295 linesWeek of 2026-04-12: +6,584 linesWeek of 2026-04-12: -10,655 linesWeek of 2026-04-19: +734 linesWeek of 2026-04-19: -100 linesWeek of 2026-04-26: +1 linesWeek of 2026-04-26: -1 linesWeek of 2026-05-03: +7 linesWeek of 2026-05-03: -5 linesWeek of 2026-05-10: +0 linesWeek of 2026-05-10: -0 linesWeek of 2026-05-17: +300 linesWeek of 2026-05-17: -3 linesWeek of 2026-05-24: +0 linesWeek of 2026-05-24: -0 linesWeek of 2026-05-31: +0 linesWeek of 2026-05-31: -0 linesWeek of 2026-06-07: +0 linesWeek of 2026-06-07: -0 linesWeek of 2026-06-14: +0 linesWeek of 2026-06-14: -0 linesWeek of 2026-06-21: +23 linesWeek of 2026-06-21: -6 linesWeek of 2026-06-28: +0 linesWeek of 2026-06-28: -0 linesWeek of 2026-07-05: +272 linesWeek of 2026-07-05: -20 linesWeek of 2026-07-12: +0 linesWeek of 2026-07-12: -0 linesWeek of 2026-07-19: +0 linesWeek of 2026-07-19: -0 linesWeek of 2026-07-26: +0 linesWeek of 2026-07-26: -0 linesWeek of 2026-08-02: +0 linesWeek of 2026-08-02: -0 linesWeek of 2026-08-09: +0 linesWeek of 2026-08-09: -0 linesWeek of 2026-08-16: +0 linesWeek of 2026-08-16: -0 linesWeek of 2026-08-23: +0 linesWeek of 2026-08-23: -0 linesMar 29, 2026Aug 23, 2026
+108.1K lines added, -49.9K removed over the last year.

Commits per week

last 52 weeks
850Week of 2025-10-05: 0 commitsWeek of 2025-10-12: 0 commitsWeek of 2025-10-19: 0 commitsWeek of 2025-10-26: 0 commitsWeek of 2025-11-02: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 0 commitsWeek of 2026-01-18: 0 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 0 commitsWeek of 2026-02-08: 0 commitsWeek of 2026-02-15: 0 commitsWeek of 2026-02-22: 0 commitsWeek of 2026-03-01: 0 commitsWeek of 2026-03-08: 0 commitsWeek of 2026-03-15: 0 commitsWeek of 2026-03-22: 0 commitsWeek of 2026-03-29: 46 commitsWeek of 2026-04-05: 85 commitsWeek of 2026-04-12: 35 commitsWeek of 2026-04-19: 12 commitsWeek of 2026-04-26: 1 commitsWeek of 2026-05-03: 1 commitsWeek of 2026-05-10: 0 commitsWeek of 2026-05-17: 1 commitsWeek of 2026-05-24: 0 commitsWeek of 2026-05-31: 0 commitsWeek of 2026-06-07: 0 commitsWeek of 2026-06-14: 0 commitsWeek of 2026-06-21: 1 commitsWeek of 2026-06-28: 0 commitsWeek of 2026-07-05: 8 commitsWeek of 2026-07-12: 0 commitsWeek of 2026-07-19: 1 commitsWeek of 2026-07-26: 0 commitsWeek of 2026-08-02: 1 commitsWeek of 2026-08-09: 0 commitsWeek of 2026-08-16: 0 commitsWeek of 2026-08-23: 0 commitsWeek of 2026-08-30: 6 commitsWeek of 2026-09-06: 0 commitsWeek of 2026-09-13: 0 commitsWeek of 2026-09-20: 0 commitsWeek of 2026-09-27: 0 commitsOct 5, 2025Sep 27, 2026
198 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 6 commitsSun 1:00 — 0 commitsSun 2:00 — 0 commitsSun 3:00 — 0 commitsSun 4:00 — 1 commitsSun 5:00 — 0 commitsSun 6:00 — 0 commitsSun 7:00 — 0 commitsSun 8:00 — 0 commitsSun 9:00 — 1 commitsSun 10:00 — 0 commitsSun 11:00 — 7 commitsSun 12:00 — 0 commitsSun 13:00 — 8 commitsSun 14:00 — 5 commitsSun 15:00 — 0 commitsSun 16:00 — 0 commitsSun 17:00 — 0 commitsSun 18:00 — 0 commitsSun 19:00 — 0 commitsSun 20:00 — 0 commitsSun 21:00 — 1 commitsSun 22:00 — 0 commitsSun 23:00 — 6 commitsMon 0:00 — 0 commitsMon 1:00 — 1 commitsMon 2:00 — 0 commitsMon 3:00 — 0 commitsMon 4:00 — 0 commitsMon 5:00 — 0 commitsMon 6:00 — 0 commitsMon 7:00 — 0 commitsMon 8:00 — 0 commitsMon 9:00 — 4 commitsMon 10:00 — 2 commitsMon 11:00 — 0 commitsMon 12:00 — 1 commitsMon 13:00 — 1 commitsMon 14:00 — 3 commitsMon 15:00 — 6 commitsMon 16:00 — 3 commitsMon 17:00 — 1 commitsMon 18:00 — 0 commitsMon 19:00 — 0 commitsMon 20:00 — 0 commitsMon 21:00 — 0 commitsMon 22:00 — 0 commitsMon 23:00 — 0 commitsTue 0:00 — 0 commitsTue 1:00 — 0 commitsTue 2:00 — 0 commitsTue 3:00 — 3 commitsTue 4:00 — 4 commitsTue 5:00 — 0 commitsTue 6:00 — 0 commitsTue 7:00 — 0 commitsTue 8:00 — 1 commitsTue 9:00 — 6 commitsTue 10:00 — 7 commitsTue 11:00 — 5 commitsTue 12:00 — 3 commitsTue 13:00 — 3 commitsTue 14:00 — 1 commitsTue 15:00 — 4 commitsTue 16:00 — 0 commitsTue 17:00 — 0 commitsTue 18:00 — 0 commitsTue 19:00 — 1 commitsTue 20:00 — 0 commitsTue 21:00 — 0 commitsTue 22:00 — 0 commitsTue 23:00 — 0 commitsWed 0:00 — 0 commitsWed 1:00 — 0 commitsWed 2:00 — 5 commitsWed 3:00 — 0 commitsWed 4:00 — 0 commitsWed 5:00 — 7 commitsWed 6:00 — 0 commitsWed 7:00 — 0 commitsWed 8:00 — 0 commitsWed 9:00 — 3 commitsWed 10:00 — 0 commitsWed 11:00 — 2 commitsWed 12:00 — 2 commitsWed 13:00 — 1 commitsWed 14:00 — 5 commitsWed 15:00 — 3 commitsWed 16:00 — 0 commitsWed 17:00 — 2 commitsWed 18:00 — 1 commitsWed 19:00 — 1 commitsWed 20:00 — 5 commitsWed 21:00 — 2 commitsWed 22:00 — 1 commitsWed 23:00 — 2 commitsThu 0:00 — 0 commitsThu 1:00 — 0 commitsThu 2:00 — 0 commitsThu 3:00 — 0 commitsThu 4:00 — 0 commitsThu 5:00 — 0 commitsThu 6:00 — 0 commitsThu 7:00 — 0 commitsThu 8:00 — 0 commitsThu 9:00 — 0 commitsThu 10:00 — 0 commitsThu 11:00 — 10 commitsThu 12:00 — 2 commitsThu 13:00 — 0 commitsThu 14:00 — 1 commitsThu 15:00 — 0 commitsThu 16:00 — 3 commitsThu 17:00 — 6 commitsThu 18:00 — 0 commitsThu 19:00 — 0 commitsThu 20:00 — 0 commitsThu 21:00 — 0 commitsThu 22:00 — 1 commitsThu 23:00 — 0 commitsFri 0:00 — 2 commitsFri 1:00 — 0 commitsFri 2:00 — 0 commitsFri 3:00 — 0 commitsFri 4:00 — 0 commitsFri 5:00 — 0 commitsFri 6:00 — 0 commitsFri 7:00 — 0 commitsFri 8:00 — 0 commitsFri 9:00 — 0 commitsFri 10:00 — 5 commitsFri 11:00 — 2 commitsFri 12:00 — 0 commitsFri 13:00 — 0 commitsFri 14:00 — 1 commitsFri 15:00 — 1 commitsFri 16:00 — 0 commitsFri 17:00 — 0 commitsFri 18:00 — 1 commitsFri 19:00 — 5 commitsFri 20:00 — 2 commitsFri 21:00 — 0 commitsFri 22:00 — 0 commitsFri 23:00 — 3 commitsSat 0:00 — 0 commitsSat 1:00 — 0 commitsSat 2:00 — 1 commitsSat 3:00 — 0 commitsSat 4:00 — 0 commitsSat 5:00 — 0 commitsSat 6:00 — 0 commitsSat 7:00 — 0 commitsSat 8:00 — 0 commitsSat 9:00 — 0 commitsSat 10:00 — 1 commitsSat 11:00 — 0 commitsSat 12:00 — 2 commitsSat 13:00 — 0 commitsSat 14:00 — 2 commitsSat 15:00 — 4 commitsSat 16:00 — 2 commitsSat 17:00 — 1 commitsSat 18:00 — 2 commitsSat 19:00 — 0 commitsSat 20:00 — 0 commitsSat 21:00 — 0 commitsSat 22:00 — 1 commitsSat 23:00 — 0 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits163 (66%)
Community commits83 (34%)

246 commits in total over the last year.

DateListRankStars gained
Apr 4, 2026daily#17+265
Apr 3, 2026daily#16+260
  • freeCodeCamp/freeCodeCamp

    freeCodeCamp.org's open-source codebase and curriculum. Learn math, programming, and computer science for free.

    456.7K stars · TypeScript

  • openclaw/openclaw

    The AI that really does things. Any OS. Any Platform. The lobster way. 🦞

    391.3K stars · TypeScript

  • anomalyco/opencode

    The open source coding agent.

    211.7K stars · TypeScript

  • n8n-io/n8n

    Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

    206.7K stars · TypeScript

  • microsoft/vscode

    Visual Studio Code

    193.5K stars · TypeScript

  • firecrawl/firecrawl

    Supercharge your AI agents with data from the web and beyond. Building the library for superintelligence. 🔥

    188.6K stars · TypeScript