0xGF/boneyardPublic

Auto generated skeleton loading framework

AI summary: Skeleton loading framework that auto-captures UI layouts dynamically at runtime.

Stars
6.8K
+3 today
Forks
268
Watchers
10
Open issues
5
Open PRs
1
Contributors
~15
Commits
233
Branches
22

TypeScriptMITCreated Apr 1, 2026Last push 1mo agoLatest release v1.9.0+32 stars this week+42 this month

Star history

since Mar 29, 2026
02K4K6KMar 2026May 2026Jun 2026Aug 2026
6.8K stars as of Aug 6, 2026, tracked back to Mar 29, 2026. Historical curve reconstructed from public GitHub event archives, calibrated to the current total.

Contribution activity

commits per day, last 52 weeks
AugSepOctNovDecJanFebMarAprMayJunJulMonWedFri2025-08-03: 0 commits2025-08-04: 0 commits2025-08-05: 0 commits2025-08-06: 0 commits2025-08-07: 0 commits2025-08-08: 0 commits2025-08-09: 0 commits2025-08-10: 0 commits2025-08-11: 0 commits2025-08-12: 0 commits2025-08-13: 0 commits2025-08-14: 0 commits2025-08-15: 0 commits2025-08-16: 0 commits2025-08-17: 0 commits2025-08-18: 0 commits2025-08-19: 0 commits2025-08-20: 0 commits2025-08-21: 0 commits2025-08-22: 0 commits2025-08-23: 0 commits2025-08-24: 0 commits2025-08-25: 0 commits2025-08-26: 0 commits2025-08-27: 0 commits2025-08-28: 0 commits2025-08-29: 0 commits2025-08-30: 0 commits2025-08-31: 0 commits2025-09-01: 0 commits2025-09-02: 0 commits2025-09-03: 0 commits2025-09-04: 0 commits2025-09-05: 0 commits2025-09-06: 0 commits2025-09-07: 0 commits2025-09-08: 0 commits2025-09-09: 0 commits2025-09-10: 0 commits2025-09-11: 0 commits2025-09-12: 0 commits2025-09-13: 0 commits2025-09-14: 0 commits2025-09-15: 0 commits2025-09-16: 0 commits2025-09-17: 0 commits2025-09-18: 0 commits2025-09-19: 0 commits2025-09-20: 0 commits2025-09-21: 0 commits2025-09-22: 0 commits2025-09-23: 0 commits2025-09-24: 0 commits2025-09-25: 0 commits2025-09-26: 0 commits2025-09-27: 0 commits2025-09-28: 0 commits2025-09-29: 0 commits2025-09-30: 0 commits2025-10-01: 0 commits2025-10-02: 0 commits2025-10-03: 0 commits2025-10-04: 0 commits2025-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: 0 commits2026-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 commits
190 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Permissive license

    MIT

What boneyard does

Boneyard is a developer tool that eliminates the need to manually design skeleton loading states. It works by capturing the actual rendered DOM of an application at runtime (or via a Vite plugin at build time) and automatically generating exact, pixel-perfect skeleton placeholders. It supports multiple frontend frameworks including React, Vue, and React Native, saving the captured layouts as `.bones.json` files that seamlessly scale and animate while data fetches.

Frontend and mobile developers using modern frameworks who want to implement pixel-perfect skeleton loading screens without writing tedious placeholder CSS.

  • Automated DOM capture: Scans the actual application UI to generate exact matching skeleton layouts without manual CSS.
  • Cross-framework compatibility: Works natively with React, Vue, Svelte, and React Native applications.
  • Vite build integration: Includes a plugin that can snapshot skeleton layouts automatically during the dev server build process.
  • Responsive scaling: The generated skeletons automatically adjust to user text scale settings and varied breakpoints.
  • Customizable animations: Provides out-of-the-box support for pulse, shimmer, and solid loading animations.
  • Incremental caching: Optimizes subsequent runs by caching previously captured UI components.

Where teams use it

React skeleton generation

Frontend developers drop a `<Skeleton>` component into their React tree to automatically display a loading state derived from the actual UI.

React Native dynamic scanning

Mobile engineers use the CLI to capture device views and generate exact placeholders for slow network requests.

Responsive web design

Designers ensure loading states look perfect on all screens by capturing skeletons across multiple configured breakpoints.

Automated Vite workflows

Teams speed up development by configuring the Boneyard Vite plugin to update skeleton assets on every HMR reload.

Getting started: npm install boneyard-js && npx boneyard-js build

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

13 total
  1. 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.

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

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

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

  5. ### Features **\`--version\` / \`-v\` flag ([#64](https://github.com/0xGF/boneyard/issues/64))** \`\`\`sh \$ npx boneyard-js --version boneyard-js 1.7.8 \`\`\` **Explicit routes in \`boneyard.config.json\` ([#66](https://github.com/0xGF/boneyard/issues/66))** Universal escape hatch for pages that aren't reachable by link crawling — Angular \`loadChildren\` lazy modules, auth-gated pages, custom routers. List them explicitly: \`\`\`json { \"routes\": [\"/dashboard\", \"/home/some-route\"] } \`\`\` Accepts plain paths or same-origin full URLs. Merged into the crawl queue alongside filesystem discovery. ### Fixes **Filesystem route discovery on Windows ([#65](https://github.com/0xGF/boneyard/issues/65))** \`path.dirname\` and \`path.join\` return backslash-separated paths on Windows, breaking the group-stripping regex and every other string op in \`discoverRoutes()\`. A SvelteKit repro showed \`(protected)/(app)/(admin_devs)/test_page\` staying unchanged — the CLI was crawling \`/(protected)/(app)/(admin_devs)/test_page\` and the dev server 404'd. Added a \`toUrlPath()\` helper that normalizes separators via \`split(/[\\\\/]+/).join('/')\` and applied it to every \`dirName

Commits per week

last 52 weeks
850Week of 2025-08-03: 0 commitsWeek of 2025-08-10: 0 commitsWeek of 2025-08-17: 0 commitsWeek of 2025-08-24: 0 commitsWeek of 2025-08-31: 0 commitsWeek of 2025-09-07: 0 commitsWeek of 2025-09-14: 0 commitsWeek of 2025-09-21: 0 commitsWeek of 2025-09-28: 0 commitsWeek 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: 0 commitsWeek of 2026-07-26: 0 commitsAug 3, 2025Jul 26, 2026
190 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 — 0 commitsMon 10:00 — 0 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 — 2 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 — 0 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 commits152 (65%)
Community commits81 (35%)

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

    453.6K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    385.5K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    384.4K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    384.4K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    384.4K stars · TypeScript

  • anomalyco/opencode

    The open source coding agent.

    194.7K stars · TypeScript