slvDev/esp32-aiPublic

AI summary: A demonstration of running a 28.9M parameter language model directly on an ESP32-S3 microcontroller.

Stars
4.5K
+15 today
Forks
594
Watchers
58
Open issues
11
Open PRs
10
Contributors
~1
Commits
81
Branches
1

PythonMITCreated Jul 23, 2026Last push 11d ago+42 stars this week+187 this month

Quick answers

What is esp32-ai?
A demonstration of running a 28.9M parameter language model directly on an ESP32-S3 microcontroller.
What does esp32-ai do?
This project proves the feasibility of running a large language model entirely on a deeply resource-constrained ESP32-S3 microcontroller without any internet connectivity. It achieves an impressive 9.88 tokens per second by implementing a memory architecture inspired by Google's Per-Layer Embeddings, keeping the vast majority of the 28.9 million parameters in slow flash memory. Only the necessary activations and core logic are loaded into the tiny 512KB SRAM and 8MB PSRAM during inference. The model, trained on TinyStories, generates coherent short text directly on the chip, demonstrating extreme edge AI capabilities rather than complex reasoning.
Who is esp32-ai for?
This project is aimed at embedded systems engineers, IoT developers, and AI researchers interested in extreme edge inference. It is not for general consumers looking for a ChatGPT replacement, but rather for hardware enthusiasts who want to push the boundaries of what is possible on a $5 microcontroller. Users must be familiar with flashing ESP32 chips and understanding memory architectures.
How do I get started with esp32-ai?
https://huggingface.co/slvDev/esp32-ai-tinystories
How popular is esp32-ai on GitHub?
slvDev/esp32-ai has 4,453 stars and 594 forks on GitHub, and gained 42 stars in the last 7 days.
What license does esp32-ai use?
slvDev/esp32-ai is released under the MIT license.

Star history

since Jul 29, 2026
02K4KJul 2026Aug 2026Sep 2026Oct 2026
4.5K stars as of Oct 3, 2026. Measured daily since Jul 29, 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: 0 commits2026-04-02: 0 commits2026-04-03: 0 commits2026-04-04: 0 commits2026-04-05: 0 commits2026-04-06: 0 commits2026-04-07: 0 commits2026-04-08: 0 commits2026-04-09: 0 commits2026-04-10: 0 commits2026-04-11: 0 commits2026-04-12: 0 commits2026-04-13: 0 commits2026-04-14: 0 commits2026-04-15: 0 commits2026-04-16: 0 commits2026-04-17: 0 commits2026-04-18: 0 commits2026-04-19: 0 commits2026-04-20: 0 commits2026-04-21: 0 commits2026-04-22: 0 commits2026-04-23: 0 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: 0 commits2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 0 commits2026-05-05: 0 commits2026-05-06: 0 commits2026-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: 0 commits2026-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: 0 commits2026-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: 0 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: 9 commits2026-07-21: 14 commits2026-07-22: 4 commits2026-07-23: 3 commits2026-07-24: 0 commits2026-07-25: 0 commits2026-07-26: 1 commit2026-07-27: 0 commits2026-07-28: 0 commits2026-07-29: 0 commits2026-07-30: 0 commits2026-07-31: 8 commits2026-08-01: 14 commits2026-08-02: 7 commits2026-08-03: 1 commit2026-08-04: 0 commits2026-08-05: 0 commits2026-08-06: 0 commits2026-08-07: 5 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: 0 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: 8 commits2026-09-17: 0 commits2026-09-18: 0 commits2026-09-19: 0 commits2026-09-20: 0 commits2026-09-21: 0 commits2026-09-22: 4 commits2026-09-23: 3 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
81 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Breakout launch

    4,453 stars in 73 days

  • Permissive license

    MIT

What esp32-ai does

This project proves the feasibility of running a large language model entirely on a deeply resource-constrained ESP32-S3 microcontroller without any internet connectivity. It achieves an impressive 9.88 tokens per second by implementing a memory architecture inspired by Google's Per-Layer Embeddings, keeping the vast majority of the 28.9 million parameters in slow flash memory. Only the necessary activations and core logic are loaded into the tiny 512KB SRAM and 8MB PSRAM during inference. The model, trained on TinyStories, generates coherent short text directly on the chip, demonstrating extreme edge AI capabilities rather than complex reasoning.

This project is aimed at embedded systems engineers, IoT developers, and AI researchers interested in extreme edge inference. It is not for general consumers looking for a ChatGPT replacement, but rather for hardware enthusiasts who want to push the boundaries of what is possible on a $5 microcontroller. Users must be familiar with flashing ESP32 chips and understanding memory architectures.

  • Extreme Edge Inference: executes a 28.9 million parameter language model entirely on a microcontroller without relying on any external servers.
  • Per-Layer Embedding Architecture: drastically reduces RAM requirements by storing the massive 25M-parameter embedding table in slow flash memory.
  • Optimized Memory Tiering: strategically allocates activations to SRAM, the core head to PSRAM, and lookups to flash to achieve 9.88 tokens per second.
  • Offline Operation: functions completely disconnected from the internet, ensuring total privacy and reliability in remote environments.
  • Custom Model Support: provides specific quantized models like Barista for Q&A and TinyStories for text generation optimized for the ESP32 memory layout.
  • Minimal Footprint: compresses the entire model size down to 14.9MB at 4-bit quantization to fit within the constraints of the ESP32-S3.

Where teams use it

Offline Edge AI Prototyping

Used by hardware engineers to demonstrate the capability of running generative text models on low-power, offline IoT devices.

Embedded System Research

Used by AI researchers to study and optimize memory-constrained inference techniques like Per-Layer Embeddings on actual silicon.

Local Interactive Toys

Used by makers to build offline, interactive devices that generate simple stories or answer specific queries without cloud dependencies.

Privacy-Preserving Hardware

Used by developers to create hardware interfaces that parse and generate text entirely locally, ensuring no data ever leaves the device.

Getting started: https://huggingface.co/slvDev/esp32-ai-tinystories

README

main branch

Running a 28.9M parameter LLM on a microcontroller

𝕏 slvDev  ·  LinkedIn

28.9M-parameter LLM running on an ESP32-S3

This is a 28.9 million parameter language model that generates text on an ESP32-S3 microcontroller. It runs on the chip itself, with nothing sent to a server, and it displays generated text at 9.88 tokens per second on a small screen wired to the chip. It fits because most of the model lives in flash instead of RAM, using Per-Layer Embeddings, an idea from Google's Gemma 3n.

The same chip also runs a port of part of the fruit fly connectome: 48,311 neurons and 9.46 million connections from a real fly brain, escaping a spider on screen. See Porting part of the fruit fly connectome to ESP32.

The numbers

Parameters 28.9M stored (25M of them in a flash lookup table)
Chip ESP32-S3, 512KB SRAM, 8MB PSRAM and 16MB flash
Speed 9.88 tok/s end to end, 94.9 ms/token of compute
Connectivity none, everything runs on the device
Model size 14.9MB at 4-bit

Why it is hard, and how it fits anyway

A microcontroller has very little fast memory. The ESP32-S3 gives you 512KB of SRAM, and only the values touched many times per token can live there: activations and norm weights. The dense core and output head, scanned once per position, sit in PSRAM. What is left is the embedding tables, and their size is what normally decides how big a model can be.

In this model, most parameters sit in an embedding table, which the model reads from rather than computes on. So that 25-million-parameter table stays in slow flash, and only the few rows each token needs are pulled from it, about 450 bytes. Most of the model is therefore never loaded to run it: it sits in flash and is sampled a little at a time.

That idea is Google's Per-Layer Embeddings, from Gemma 3n. Here it runs on the memory layout of a microcontroller instead of a phone or a GPU.

Each tier holds whatever is read at its own frequency:

  SRAM  (fast, tiny)   activations and norm weights, touched many times a token
  PSRAM (medium)       the core and output head, read once per position
  FLASH (huge, slow)   the 25M-param table, about 6 rows read per token (~450 B)

What it does, and what it does not

The model was trained on TinyStories, so it writes short, simple stories and mostly keeps them coherent. It will not answer questions, follow instructions, write code, or know facts. That limit comes from the small part of the model that does the reasoning, and the memory trick does not change it. What is interesting here is the architecture, fitting a large model onto a tiny chip, rather than what a 28.9 million parameter model can say.

Porting part of the fruit fly connectome to ESP32

This is a port of part of a real brain to the same board. It holds 48,311 neurons and 9,462,135 connections from the male fruit fly connectome, MaleCNS v1.0, with the synaptic contact count of every connection kept exactly. The graph is 13.5MiB compressed in flash, and every simulation step goes through all of its connections, on both cores with the chip's SIMD instructions.

It is only part of the brain because the whole nervous system does not fit: the smallest lossless encoding we found is 24.49MiB, against about 14MiB of flash left for it. Why only part of it.

The numbers

Neurons 48,311: central brain, visual projection and descending
Connections 9,462,135, carrying 49,481,754 synaptic contacts
Graph size 13.5MiB compressed in flash, blocks cached in PSRAM
Decisions a new decision about every 1.7 s
Trained nothing: the demo reads the fly's own escape neurons

Escaping a spider, with nothing trained

To show that it computes something, it escapes a spider on the OLED. The spider's growing size drives the fly's own looming detectors, LC4 and LPLC2, on the side it comes from. When the escape neurons on that side get active enough, including DNp01, the giant fiber that makes a real fly jump, the fly leaps away from that side.

No model was trained for this. The port ships a small text file naming those input and output neurons and one threshold; the behavior comes from the fly's own wiring. I checked it first: stimulating the looming detectors activates those escape neurons 30 to 100 times more than random visual neurons do, and ranking all 1,316 descending neurons by specificity puts the known escape neurons on top.

It is a selected part of the nervous system, not the whole fly: what is ported, what is left out and how it runs is in docs/fly-connectome/.

Run it yourself

Models

  • Barista - espresso question answering
  • TinyStories - story generation
  • Fly - fruit fly connectome escaping a spider

Commands

Download and deployment are separate operations: one reaches the network, the other touches the board.

scripts/fetch_model.sh barista   # download, verify, install into artifacts/
scripts/deploy.sh barista        # generate headers, run gates, compile, flash

tinystories and fly take the same two commands. Each requires the model to be named, because the board holds one at a time and deploying replaces it.

fetch_model.sh checks the inference assets against a SHA-256 and byte size pinned in the script, and cross-checks the release's own metadata.json against those same pins. It installs nothing unless every check passes, so a failed download leaves what you already have untouched. deploy.sh downloads no model: it works from whatever is already in artifacts/<model>/. It does run two of its header tools through uv, which fetches one pinned wheel the first time on a machine that has never cached it.

The firmware details and the boot output to expect live in firmware/esp32_barista/README.md, firmware/esp32_tinystories/README.md and firmware/esp32_fly/README.md. The reusable architecture is in src/; the training, ablation and quantization code that reproduces the published numbers is in research/tinystories/, and the tools that find a circuit in the fly graph and export it are in research/fly/. The language model's full method, its ablations and its on-chip measurements are written up in RESULTS.md; the fly's measurements are in firmware/esp32_fly/README.md.

Credit

TinyStories is the dataset this trains on: short synthetic stories simple enough that a small model can still learn to write coherently (Ronen Eldan and Yuanzhi Li, Microsoft Research, arXiv:2305.07759). The other half is Per-Layer Embeddings, Google's design from Gemma 3n, which is what lets a big model fit on a small chip.

Andrej Karpathy's llama2.c is the reference for training a small language model and running it in plain C.

The fly graph comes from MaleCNS v1.0, the male Drosophila central nervous system connectome by the FlyEM Project at HHMI Janelia, the University of Cambridge, the MRC Laboratory of Molecular Biology and Google Research, used under CC BY 4.0. What was selected and changed is in docs/fly-connectome/ATTRIBUTION.md.

Measurements

Detailed measurements and ablations are documented in RESULTS.md.

View on GitHub

Recent activity

commits and pull requests

Recent open issues

view all

Code frequency

additions and deletions
+7.6K-7.6KWeek of 2026-07-19: +3,885 linesWeek of 2026-07-19: -225 linesWeek of 2026-07-26: +7,606 linesWeek of 2026-07-26: -2,976 linesWeek of 2026-08-02: +3,253 linesWeek of 2026-08-02: -247 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 linesWeek of 2026-08-30: +0 linesWeek of 2026-08-30: -0 linesWeek of 2026-09-06: +0 linesWeek of 2026-09-06: -0 linesWeek of 2026-09-13: +0 linesWeek of 2026-09-13: -0 linesJul 19, 2026Sep 13, 2026
+14.7K lines added, -3.4K removed over the last year.

Commits per week

last 52 weeks
300Week 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: 0 commitsWeek of 2026-04-05: 0 commitsWeek of 2026-04-12: 0 commitsWeek of 2026-04-19: 0 commitsWeek of 2026-04-26: 0 commitsWeek of 2026-05-03: 0 commitsWeek of 2026-05-10: 0 commitsWeek of 2026-05-17: 0 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: 0 commitsWeek of 2026-06-28: 0 commitsWeek of 2026-07-05: 0 commitsWeek of 2026-07-12: 0 commitsWeek of 2026-07-19: 30 commitsWeek of 2026-07-26: 23 commitsWeek of 2026-08-02: 13 commitsWeek of 2026-08-09: 0 commitsWeek of 2026-08-16: 0 commitsWeek of 2026-08-23: 0 commitsWeek of 2026-08-30: 0 commitsWeek of 2026-09-06: 0 commitsWeek of 2026-09-13: 8 commitsWeek of 2026-09-20: 7 commitsWeek of 2026-09-27: 0 commitsOct 5, 2025Sep 27, 2026
81 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 0 commitsSun 1:00 — 0 commitsSun 2:00 — 0 commitsSun 3:00 — 0 commitsSun 4:00 — 0 commitsSun 5:00 — 0 commitsSun 6:00 — 0 commitsSun 7:00 — 0 commitsSun 8:00 — 0 commitsSun 9:00 — 0 commitsSun 10:00 — 0 commitsSun 11:00 — 2 commitsSun 12:00 — 0 commitsSun 13:00 — 1 commitsSun 14:00 — 0 commitsSun 15:00 — 1 commitsSun 16:00 — 2 commitsSun 17:00 — 1 commitsSun 18:00 — 0 commitsSun 19:00 — 0 commitsSun 20:00 — 1 commitsSun 21:00 — 0 commitsSun 22:00 — 0 commitsSun 23:00 — 0 commitsMon 0:00 — 0 commitsMon 1:00 — 0 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 — 2 commitsMon 10:00 — 1 commitsMon 11:00 — 1 commitsMon 12:00 — 2 commitsMon 13:00 — 0 commitsMon 14:00 — 1 commitsMon 15:00 — 1 commitsMon 16:00 — 0 commitsMon 17:00 — 1 commitsMon 18:00 — 1 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 — 0 commitsTue 4:00 — 0 commitsTue 5:00 — 0 commitsTue 6:00 — 0 commitsTue 7:00 — 0 commitsTue 8:00 — 0 commitsTue 9:00 — 4 commitsTue 10:00 — 1 commitsTue 11:00 — 1 commitsTue 12:00 — 1 commitsTue 13:00 — 1 commitsTue 14:00 — 0 commitsTue 15:00 — 1 commitsTue 16:00 — 2 commitsTue 17:00 — 1 commitsTue 18:00 — 0 commitsTue 19:00 — 0 commitsTue 20:00 — 0 commitsTue 21:00 — 1 commitsTue 22:00 — 5 commitsTue 23:00 — 0 commitsWed 0:00 — 0 commitsWed 1:00 — 0 commitsWed 2:00 — 0 commitsWed 3:00 — 0 commitsWed 4:00 — 0 commitsWed 5:00 — 0 commitsWed 6:00 — 0 commitsWed 7:00 — 0 commitsWed 8:00 — 0 commitsWed 9:00 — 0 commitsWed 10:00 — 8 commitsWed 11:00 — 3 commitsWed 12:00 — 0 commitsWed 13:00 — 0 commitsWed 14:00 — 0 commitsWed 15:00 — 3 commitsWed 16:00 — 1 commitsWed 17:00 — 0 commitsWed 18:00 — 0 commitsWed 19:00 — 0 commitsWed 20:00 — 0 commitsWed 21:00 — 0 commitsWed 22:00 — 0 commitsWed 23:00 — 0 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 — 0 commitsThu 12:00 — 0 commitsThu 13:00 — 0 commitsThu 14:00 — 0 commitsThu 15:00 — 0 commitsThu 16:00 — 0 commitsThu 17:00 — 2 commitsThu 18:00 — 1 commitsThu 19:00 — 0 commitsThu 20:00 — 0 commitsThu 21:00 — 0 commitsThu 22:00 — 0 commitsThu 23:00 — 0 commitsFri 0:00 — 0 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 — 0 commitsFri 11:00 — 0 commitsFri 12:00 — 0 commitsFri 13:00 — 0 commitsFri 14:00 — 0 commitsFri 15:00 — 3 commitsFri 16:00 — 0 commitsFri 17:00 — 2 commitsFri 18:00 — 0 commitsFri 19:00 — 4 commitsFri 20:00 — 2 commitsFri 21:00 — 1 commitsFri 22:00 — 1 commitsFri 23:00 — 0 commitsSat 0:00 — 0 commitsSat 1:00 — 0 commitsSat 2:00 — 0 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 — 0 commitsSat 11:00 — 0 commitsSat 12:00 — 0 commitsSat 13:00 — 0 commitsSat 14:00 — 6 commitsSat 15:00 — 0 commitsSat 16:00 — 2 commitsSat 17:00 — 2 commitsSat 18:00 — 0 commitsSat 19:00 — 3 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 commits81 (100%)
Community commits0 (0%)

81 commits in total over the last year.

DateListRankStars gained
Jul 24, 2026daily#18+4