jundot/omlxPublic

LLM inference server with continuous batching & SSD caching for Apple Silicon — managed from the macOS menu bar

AI summary: A highly optimized LLM inference server for Apple Silicon, controllable directly from the macOS menu bar.

Stars
22.5K
+96 today
Forks
2K
Watchers
116
Open issues
1K
Open PRs
512
Contributors
~293
Commits
2.9K
Branches
64

PythonApache-2.0Created Feb 13, 2026Last push 2d agoLatest release v0.7.0rc1+311 stars this week+1.1K this month

Quick answers

What is omlx?
A highly optimized LLM inference server for Apple Silicon, controllable directly from the macOS menu bar.
What does omlx do?
oMLX is a specialized inference server designed to run Large Language Models efficiently on Apple Silicon (M-series) Macs using the MLX framework. It implements advanced techniques like continuous batching and tiered KV caching, significantly maximizing throughput and memory efficiency compared to naive implementations. The backend exposes an OpenAI-compatible API, allowing it to seamlessly drop into existing workflows and tools. Uniquely, the entire server lifecycle, model downloading, and performance monitoring are managed via a lightweight, native macOS menu bar application, removing the need for complex terminal commands.
Who is omlx for?
Targeted at Mac users with Apple Silicon (M1/M2/M3/M4) chips who want to run powerful local LLMs with high efficiency. It requires macOS and sufficient unified memory to load the desired models.
How do I get started with omlx?
Download the oMLX.dmg release, drag it to Applications, and select a model from the menu bar.
How popular is omlx on GitHub?
jundot/omlx has 22,461 stars and 1,960 forks on GitHub, and gained 311 stars in the last 7 days.
What license does omlx use?
jundot/omlx is released under the Apache-2.0 license.

Star history

since Jul 29, 2026
010K20KJul 2026Aug 2026Sep 2026Oct 2026
22.5K stars as of Oct 2, 2026. Measured daily since Jul 29, 2026; GitHub no longer exposes earlier star timestamps.

Contribution activity

commits per day, last 52 weeks
OctNovDecJanFebMarAprMayJunJulAugSepMonWedFri2025-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-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: 10 commits2026-02-14: 9 commits2026-02-15: 8 commits2026-02-16: 8 commits2026-02-17: 3 commits2026-02-18: 1 commit2026-02-19: 1 commit2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 3 commits2026-02-23: 3 commits2026-02-24: 11 commits2026-02-25: 11 commits2026-02-26: 4 commits2026-02-27: 20 commits2026-02-28: 20 commits2026-03-01: 14 commits2026-03-02: 26 commits2026-03-03: 21 commits2026-03-04: 15 commits2026-03-05: 14 commits2026-03-06: 13 commits2026-03-07: 7 commits2026-03-08: 16 commits2026-03-09: 6 commits2026-03-10: 21 commits2026-03-11: 37 commits2026-03-12: 18 commits2026-03-13: 18 commits2026-03-14: 21 commits2026-03-15: 34 commits2026-03-16: 14 commits2026-03-17: 28 commits2026-03-18: 12 commits2026-03-19: 11 commits2026-03-20: 2 commits2026-03-21: 36 commits2026-03-22: 28 commits2026-03-23: 5 commits2026-03-24: 17 commits2026-03-25: 10 commits2026-03-26: 14 commits2026-03-27: 12 commits2026-03-28: 16 commits2026-03-29: 43 commits2026-03-30: 7 commits2026-03-31: 7 commits2026-04-01: 5 commits2026-04-02: 3 commits2026-04-03: 25 commits2026-04-04: 8 commits2026-04-05: 21 commits2026-04-06: 12 commits2026-04-07: 17 commits2026-04-08: 6 commits2026-04-09: 3 commits2026-04-10: 21 commits2026-04-11: 5 commits2026-04-12: 2 commits2026-04-13: 3 commits2026-04-14: 32 commits2026-04-15: 13 commits2026-04-16: 7 commits2026-04-17: 6 commits2026-04-18: 0 commits2026-04-19: 3 commits2026-04-20: 2 commits2026-04-21: 6 commits2026-04-22: 21 commits2026-04-23: 7 commits2026-04-24: 8 commits2026-04-25: 1 commit2026-04-26: 0 commits2026-04-27: 6 commits2026-04-28: 16 commits2026-04-29: 0 commits2026-04-30: 4 commits2026-05-01: 1 commit2026-05-02: 0 commits2026-05-03: 2 commits2026-05-04: 25 commits2026-05-05: 4 commits2026-05-06: 19 commits2026-05-07: 4 commits2026-05-08: 0 commits2026-05-09: 15 commits2026-05-10: 3 commits2026-05-11: 18 commits2026-05-12: 37 commits2026-05-13: 24 commits2026-05-14: 7 commits2026-05-15: 8 commits2026-05-16: 0 commits2026-05-17: 0 commits2026-05-18: 2 commits2026-05-19: 30 commits2026-05-20: 9 commits2026-05-21: 11 commits2026-05-22: 18 commits2026-05-23: 0 commits2026-05-24: 11 commits2026-05-25: 7 commits2026-05-26: 18 commits2026-05-27: 28 commits2026-05-28: 10 commits2026-05-29: 18 commits2026-05-30: 15 commits2026-05-31: 17 commits2026-06-01: 19 commits2026-06-02: 29 commits2026-06-03: 30 commits2026-06-04: 20 commits2026-06-05: 25 commits2026-06-06: 17 commits2026-06-07: 16 commits2026-06-08: 18 commits2026-06-09: 29 commits2026-06-10: 14 commits2026-06-11: 31 commits2026-06-12: 4 commits2026-06-13: 9 commits2026-06-14: 9 commits2026-06-15: 14 commits2026-06-16: 10 commits2026-06-17: 6 commits2026-06-18: 3 commits2026-06-19: 3 commits2026-06-20: 0 commits2026-06-21: 4 commits2026-06-22: 4 commits2026-06-23: 0 commits2026-06-24: 4 commits2026-06-25: 11 commits2026-06-26: 6 commits2026-06-27: 0 commits2026-06-28: 4 commits2026-06-29: 17 commits2026-06-30: 1 commit2026-07-01: 3 commits2026-07-02: 7 commits2026-07-03: 0 commits2026-07-04: 4 commits2026-07-05: 0 commits2026-07-06: 1 commit2026-07-07: 1 commit2026-07-08: 25 commits2026-07-09: 34 commits2026-07-10: 20 commits2026-07-11: 4 commits2026-07-12: 22 commits2026-07-13: 1 commit2026-07-14: 2 commits2026-07-15: 1 commit2026-07-16: 0 commits2026-07-17: 8 commits2026-07-18: 19 commits2026-07-19: 0 commits2026-07-20: 21 commits2026-07-21: 29 commits2026-07-22: 20 commits2026-07-23: 7 commits2026-07-24: 6 commits2026-07-25: 3 commits2026-07-26: 4 commits2026-07-27: 6 commits2026-07-28: 19 commits2026-07-29: 20 commits2026-07-30: 33 commits2026-07-31: 7 commits2026-08-01: 5 commits2026-08-02: 19 commits2026-08-03: 11 commits2026-08-04: 11 commits2026-08-05: 2 commits2026-08-06: 9 commits2026-08-07: 5 commits2026-08-08: 17 commits2026-08-09: 5 commits2026-08-10: 14 commits2026-08-11: 6 commits2026-08-12: 14 commits2026-08-13: 9 commits2026-08-14: 4 commits2026-08-15: 24 commits2026-08-16: 41 commits2026-08-17: 13 commits2026-08-18: 21 commits2026-08-19: 30 commits2026-08-20: 44 commits2026-08-21: 11 commits2026-08-22: 3 commits2026-08-23: 7 commits2026-08-24: 20 commits2026-08-25: 20 commits2026-08-26: 2 commits2026-08-27: 18 commits2026-08-28: 4 commits2026-08-29: 24 commits2026-08-30: 5 commits2026-08-31: 2 commits2026-09-01: 6 commits2026-09-02: 10 commits2026-09-03: 1 commit2026-09-04: 3 commits2026-09-05: 4 commits2026-09-06: 27 commits2026-09-07: 8 commits2026-09-08: 10 commits2026-09-09: 4 commits2026-09-10: 25 commits2026-09-11: 21 commits2026-09-12: 3 commits2026-09-13: 7 commits2026-09-14: 23 commits2026-09-15: 14 commits2026-09-16: 19 commits2026-09-17: 21 commits2026-09-18: 18 commits2026-09-19: 0 commits2026-09-20: 0 commits2026-09-21: 30 commits2026-09-22: 10 commits2026-09-23: 19 commits2026-09-24: 26 commits2026-09-25: 4 commits2026-09-26: 7 commits2026-09-27: 26 commits2026-09-28: 28 commits2026-09-29: 15 commits2026-09-30: 0 commits2026-10-01: 0 commits2026-10-02: 0 commits2026-10-03: 0 commits
2,772 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Widely adopted

    22,461 stars

  • Very active

    2,772 commits in 52 weeks

  • Community-driven

    ~293 contributors

  • Outside contributions

    94% of recent commits from the community

  • Well documented

    High community health score

  • Permissive license

    Apache-2.0

  • Repeat trending

    13 trending appearances

What omlx does

oMLX is a specialized inference server designed to run Large Language Models efficiently on Apple Silicon (M-series) Macs using the MLX framework. It implements advanced techniques like continuous batching and tiered KV caching, significantly maximizing throughput and memory efficiency compared to naive implementations. The backend exposes an OpenAI-compatible API, allowing it to seamlessly drop into existing workflows and tools. Uniquely, the entire server lifecycle, model downloading, and performance monitoring are managed via a lightweight, native macOS menu bar application, removing the need for complex terminal commands.

Targeted at Mac users with Apple Silicon (M1/M2/M3/M4) chips who want to run powerful local LLMs with high efficiency. It requires macOS and sufficient unified memory to load the desired models.

  • Apple Silicon optimization: Built specifically on Apple's MLX framework to fully utilize unified memory and Neural Engine hardware.
  • OpenAI API compatibility: Serves models via standard endpoints, making it instantly compatible with UI clients and coding agents.
  • Continuous batching: Processes multiple requests simultaneously, drastically improving throughput for concurrent API calls.
  • Native menu bar UI: Provides a simple GUI to start, stop, and monitor models without touching the command line.
  • Tiered KV caching: Intelligently manages context memory to prevent the server from crashing when context windows get large.

Where teams use it

Local AI coding assistance

Developers point their IDE tools like Cursor to the local oMLX server to get zero-latency code completions without paying API fees.

Running private autonomous agents

Researchers execute multi-step agent loops entirely on their Mac, ensuring sensitive data never leaves their machine.

High-throughput local processing

Engineers batch process thousands of text classification tasks locally overnight using the continuous batching capabilities.

Offline model experimentation

Enthusiasts easily download and test the latest open-source models using the intuitive menu bar interface.

Getting started: Download the oMLX.dmg release, drag it to Applications, and select a model from the menu bar.

README

main branch

oMLX

oMLX

LLM inference, optimized for your Mac
Continuous batching and tiered KV caching, managed directly from your menu bar.

Buy Me A Coffee

License Python 3.11-3.13 Apple Silicon

junkim.dot@gmail.com · https://omlx.ai/me

Install · Quickstart · Features · Models · CLI Configuration · Benchmarks · oMLX.ai

English · 中文 · 한국어 · 日本語


oMLX Admin Dashboard

Every LLM server I tried made me choose between convenience and control. I wanted to pin everyday models in memory, auto-swap heavier ones on demand, set context limits - and manage it all from a menu bar.

oMLX persists KV cache across a hot in-memory tier and cold SSD tier - even when context changes mid-conversation, all past context stays cached and reusable across requests, making local LLMs practical for real coding work with tools like Claude Code. That's why I built it.

Install

macOS App

Download the .dmg from Releases, drag to Applications, done. The app includes in-app auto-update, so future upgrades are just one click. The macOS app also installs a lightweight ~/.omlx/bin/omlx CLI shim so terminal commands and Apple Shortcuts can control the app-managed server.

Homebrew

brew tap jundot/omlx https://github.com/jundot/omlx
brew install jundot/omlx/omlx

# Upgrade to the latest version
brew update && brew upgrade omlx

# Run as a background service (auto-restarts on crash)
omlx start

# Optional: MCP (Model Context Protocol) support
/opt/homebrew/opt/omlx/libexec/bin/pip install mcp

Optional GLM-5.2 / MiniMax M3 native custom kernels currently require a HEAD build:

brew install jundot/omlx/omlx --HEAD --with-custom-kernel

From Source

git clone https://github.com/jundot/omlx.git
cd omlx
pip install -e .          # Core only
pip install -e ".[mcp]"   # With MCP (Model Context Protocol) support

# GLM-5.2 / MiniMax M3 / Qwen3.5 native custom kernels (strongly recommended
# if you serve those families -- see note below)
OMLX_WITH_CUSTOM_KERNEL=1 pip install -e .

Requires macOS 15.0+ (Sequoia), Python 3.11–3.13, and Apple Silicon (M1/M2/M3/M4/M5).

Note on native custom kernels: a plain pip install -e . does NOT build them, and the affected model families then silently fall back to much slower generic paths -- for GLM-5.2 the fused DSA prefill is roughly 30x faster with the kernels (measured 845 vs ~29 tok/s on an M3 Ultra), and the fallback also uses more memory (#2137). Building them requires the Metal toolchain, which Command Line Tools alone do not provide (xcrun: error: unable to find utility "metal"): install full Xcode, or use the official DMG which ships the kernels precompiled. Homebrew can build them with brew install jundot/omlx/omlx --HEAD --with-custom-kernel, but that build also needs full Xcode. To verify your install:

python -c "from omlx.custom_kernels import native_kernel_status; print(native_kernel_status())"

Quickstart

macOS App

Launch oMLX from your Applications folder. The Welcome screen guides you through three steps - model directory, server start, and first model download. That's it. To connect OpenClaw, OpenCode, Codex, Hermes Agent, or Copilot, see Integrations.

oMLX Welcome Screen oMLX Menubar

CLI

# Managed background server (macOS app or Homebrew install)
omlx start
omlx stop
omlx restart

# Foreground server attached to this terminal
omlx serve --model-dir ~/models

The server discovers LLMs, VLMs, embedding models, and rerankers from subdirectories automatically. Any OpenAI-compatible client can connect to http://localhost:8000/v1. A built-in chat UI is also available at http://localhost:8000/admin/chat.

Homebrew Service

If you installed via Homebrew, you can run oMLX as a managed background service:

omlx start                    # Start via brew services
omlx stop                     # Stop
omlx restart                  # Restart

brew services start omlx    # Start (auto-restarts on crash)
brew services stop omlx     # Stop
brew services restart omlx  # Restart
brew services info omlx     # Check status

The service runs omlx serve with zero-config defaults (~/.omlx/models, port 8000). omlx start, omlx stop, and omlx restart are the portable lifecycle commands; Homebrew installs delegate them to brew services. To customize, either set environment variables (OMLX_MODEL_DIR, OMLX_PORT, etc.) or run omlx serve --model-dir /your/path once to persist settings to ~/.omlx/settings.json.

Logs are written to two locations:

  • Service log: $(brew --prefix)/var/log/omlx.log (stdout/stderr)
  • Server log: ~/.omlx/logs/server.log (structured application log)

Features

Supports text LLMs, vision-language models (VLM), OCR models, embeddings, and rerankers on Apple Silicon.

Admin Dashboard

Web UI at /admin for real-time monitoring, model management, chat, benchmark, and per-model settings. Supports English, Korean, Japanese, Chinese, French, Russian, Spanish, and Brazilian Portuguese. All CDN dependencies are vendored for fully offline operation.

oMLX Admin Dashboard

Experimental Multi-Mac Inference

Source builds can split one downloaded language model across unequal-memory Macs using MLX pipeline ranks over Ring or Thunderbolt RDMA/JACCL. The Cluster dashboard handles read-only peer discovery, strict SSH/runtime verification, byte-aware unequal shard planning, measured compute/link rebalancing, headroom-aware execution tuning, activation, and a live shard/performance map on both Macs. Interactive, balanced, and throughput profiles expose coalesced batching, prompt-cache affinity, rotating-KV limits, Ring connection tuning, and a capability-gated experimental token-only output path. See Distributed inference across Macs for setup, security boundaries, current limitations, and the physical-hardware validation checklist.

Vision-Language Models

Run VLMs with the same continuous batching and tiered KV cache stack as text LLMs. Supports multi-image chat, base64/URL/file image inputs, and tool calling with vision context. MiMo V2.6 checkpoints with bundled sidecars also accept sampled-frame video and 24 kHz audio. oQ conversion of official MiMo V2.6 checkpoints preserves image and audio support. OCR models (DeepSeek-OCR, DOTS-OCR, GLM-OCR) are auto-detected with optimized prompts.

Tiered KV Cache (Hot + Cold)

Block-based KV cache management inspired by vLLM, with prefix sharing and Copy-on-Write. The cache operates across two tiers:

  • Hot tier (RAM): Frequently accessed blocks stay in memory for fast access.
  • Cold tier (SSD): When the hot cache fills up, blocks are offloaded to SSD in safetensors format. On the next request with a matching prefix, they're restored from disk instead of recomputed from scratch - even after a server restart.

oMLX Hot & Cold Cache

Continuous Batching

Handles concurrent requests through mlx-lm's BatchGenerator. Max concurrent requests is configurable via CLI or admin panel.

Claude Code Optimization

Context scaling support for running smaller context models with Claude Code. Scales reported token counts so that auto-compact triggers at the right timing, and SSE keep-alive prevents read timeouts during long prefill.

Multi-Model Serving

Load LLMs, VLMs, embedding models, and rerankers within the same server. Models are managed through a combination of automatic and manual controls:

  • LRU eviction: Least-recently-used models are evicted automatically when memory runs low.
  • Manual load/unload: Interactive status badges in the admin panel let you load or unload models on demand.
  • Model pinning: Pin frequently used models to keep them always loaded.
  • Per-model TTL: Set an idle timeout per model to auto-unload after a period of inactivity.
  • Process memory enforcement: Total memory limit (default: system RAM - 8GB) prevents system-wide OOM.

Per-Model Settings

Configure sampling parameters, chat template kwargs, TTL, model alias, model type override, and more per model directly from the admin panel. Changes apply immediately without server restart.

  • Model alias: set a custom API-visible name. /v1/models returns the alias, and requests accept both the alias and directory name.
  • Model type override: manually set a model as LLM or VLM regardless of auto-detection.
  • Profiles: save named bundles of per-model settings and switch between them from the admin panel. A profile can optionally be exposed as its own model: /v1/models then also lists <model>:<profile> (e.g. qwen3-8b:thinking), which serves on the same engine as the base model with the profile's settings overlaid per request — no extra memory, no reload. When the base model has an alias, the exposed ID is advertised as <alias>:<profile>; the directory-name form keeps working, just like for the base model.

oMLX Chat Template Kwargs

Built-in Chat

Chat directly with any loaded model from the admin panel. Supports conversation history, model switching, dark mode, reasoning model output, and image upload for VLM/OCR models.

oMLX Chat

Model Downloader

Search and download MLX models from HuggingFace directly in the admin dashboard. Browse model cards, check file sizes, and download with one click.

oMLX Model Downloader

Integrations

Set up OpenClaw, OpenCode, Codex, Hermes Agent, Copilot, and Pi directly from the admin dashboard with a single click. No manual config editing required.

oMLX Integrations

Performance Benchmark

One-click benchmarking from the admin panel. Measures prefill (PP) and text generation (TG) tokens per second, with partial prefix cache hit testing for realistic performance numbers.

oMLX Benchmark Tool

macOS Menubar App

Native Swift / SwiftUI menubar app (not Electron). Start, stop, and monitor the server without opening a terminal. Includes local usage history with per-model totals and an hourly heatmap, persistent serving stats (survives restarts), auto-restart on crash, and built-in auto-update.

oMLX Menubar Stats

API Compatibility

Drop-in replacement for OpenAI and Anthropic APIs. Supports streaming usage stats (stream_options.include_usage), Anthropic adaptive thinking, and vision inputs (base64, URL).

Endpoint Description
POST /v1/chat/completions Chat completions (streaming)
POST /v1/completions Text completions (streaming)
POST /v1/messages Anthropic Messages API
POST /v1/embeddings Text embeddings
POST /v1/rerank Document reranking
GET /v1/models List available models

Tool Calling & Structured Output

Supports all function calling formats available in mlx-lm, JSON schema validation, and MCP tool integration. Tool calling requires the model's chat template to support the tools parameter. The following model families are auto-detected:

Model Family Format
Llama, Qwen, DeepSeek, etc. JSON <tool_call>
Qwen3.5 Series XML <function=...>
Gemma <start_function_call>
GLM (4.7, 5) <arg_key>/<arg_value> XML
MiniMax Namespaced <minimax:tool_call>
Mistral [TOOL_CALLS]
IFM K2 Horizon XML or JSON inside <ifm|tool_calls>. Requires omlx[grammar]
Kimi K2 <|tool_calls_section_begin|>
Longcat <longcat_tool_call>

Models not listed above may still work if their chat template accepts tools and their output uses a recognized <tool_call> XML format. For tool-enabled streaming, assistant text is emitted incrementally while known tool-call control markup is suppressed from visible content; structured tool calls are emitted after parsing the completed turn.

Models

Point --model-dir at a directory containing MLX-format model subdirectories. Two-level organization folders (e.g., mlx-community/model-name/) are also supported.

~/models/
├── Step-3.5-Flash-8bit/
├── Qwen3-Coder-Next-8bit/
├── gpt-oss-120b-MXFP4-Q8/
├── Qwen3.5-122B-A10B-4bit/
└── bge-m3/

Models are auto-detected by type. You can also download models directly from the admin dashboard.

Type Models
LLM Any model supported by mlx-lm
VLM Qwen3.5 Series, GLM-4V, Pixtral, and other mlx-vlm models
OCR DeepSeek-OCR, DOTS-OCR, GLM-OCR
Embedding BERT, BGE-M3, ModernBERT
Reranker ModernBERT, XLM-RoBERTa

CLI Configuration

# Managed background server (macOS app or Homebrew install)
omlx start
omlx stop
omlx restart

# Start with default settings (memory guard tier = balanced, manage via admin UI)
omlx serve --model-dir ~/models

# Choose a memory guard tier at startup
omlx serve --model-dir ~/models --memory-guard safe

# Set a custom memory guard ceiling in GB
omlx serve --model-dir ~/models --memory-guard-gb 48

# Enable SSD cache for KV blocks
omlx serve --model-dir ~/models --paged-ssd-cache-dir ~/.omlx/cache

# Set in-memory hot cache size
omlx serve --model-dir ~/models --hot-cache-max-size 20%

# Adjust max concurrent requests (default: 8)
omlx serve --model-dir ~/models --max-concurrent-requests 16

# With MCP tools
omlx serve --model-dir ~/models --mcp-config mcp.json

# HuggingFace mirror endpoint (for restricted regions)
omlx serve --model-dir ~/models --hf-endpoint https://hf-mirror.com

# API key authentication
omlx serve --model-dir ~/models --api-key your-secret-key
# Localhost-only: skip verification via admin panel global settings

# Network access requires authentication
OMLX_API_KEY=your-secret-key omlx serve --model-dir ~/models --host 0.0.0.0

The default SSD cache limit, auto, uses 50% of the sum of free disk space and existing SSD cache files, including GDN sidecars. The budget is refreshed during use and does not shrink simply because the cache grows or the server restarts. Other disk usage can change the budget. Set --paged-ssd-cache-max-size 20GB for a fixed limit.

Most settings can also be configured from the web admin panel at /admin. Settings are persisted to ~/.omlx/settings.json, and CLI flags take precedence. Set the main API key before changing the server host to a LAN address or 0.0.0.0, or save both settings together. oMLX refuses to start on any non-loopback address without a main API key. The existing skip_api_key_verification option remains restricted to loopback-only binds.

For keyless inference, stop oMLX, manually set auth.allow_unauthenticated_inference to true in settings.json, and restart. It defaults to false and has no UI toggle. This allows anyone who can reach the server to use inference (including stored Responses and audio), MCP tools, and web search. On network binds, keep a main API key configured and skip_api_key_verification set to false; management endpoints still require authentication.

Architecture
FastAPI Server (OpenAI / Anthropic API)
    │
    ├── EnginePool (multi-model, LRU eviction, TTL, manual load/unload)
    │   ├── BatchedEngine (LLMs, continuous batching)
    │   ├── VLMEngine (vision-language models)
    │   ├── EmbeddingEngine
    │   └── RerankerEngine
    │
    ├── ProcessMemoryEnforcer (total memory limit, TTL checks)
    │
    ├── Scheduler (FCFS, configurable concurrency)
    │   └── mlx-lm BatchGenerator
    │
    └── Cache Stack
        ├── PagedCacheManager (GPU, block-based, CoW, prefix sharing)
        ├── Hot Cache (in-memory tier, write-back)
        └── PagedSSDCacheManager (SSD cold tier, safetensors format)

Development

CLI Server

git clone https://github.com/jundot/omlx.git
cd omlx
pip install -e ".[dev]"
pytest -m "not slow"

macOS App

The native SwiftUI app lives at apps/omlx-mac/. Requires Xcode 26.5+ and Python 3.11+. venvstacks is declared as a dev dependency so pip install -e ".[dev]" (or uv sync --dev) brings the pinned version in. The build script also falls back to uvx venvstacks or pipx run venvstacks if you prefer a host-global tool runner.

# Stage a runnable oMLX.app (xcodebuild + venvstacks Python layers + ad-hoc sign)
apps/omlx-mac/Scripts/build.sh release

# Result lands at apps/omlx-mac/build/Stage/oMLX.app
open apps/omlx-mac/build/Stage/oMLX.app

# Force a fresh venvstacks rebuild (otherwise it's cached by fingerprint)
apps/omlx-mac/Scripts/build.sh release --rebuild-donor

# Stage with optional GLM-5.2 / MiniMax M3 native custom kernels
apps/omlx-mac/Scripts/build.sh release --with-custom-kernel

First cold build takes 10–20 minutes (venvstacks Python layer assembly). Subsequent builds reuse the cached packaging/_export/ and finish in about 4 minutes. See packaging/README.md for the layer configuration and apps/omlx-mac/ for the Swift sources.

Contributing

Contributions are welcome! See Contributing Guide for details.

  • Bug fixes and improvements
  • Performance optimizations
  • Documentation improvements

License

Apache 2.0

Acknowledgments

  • MLX and mlx-lm by Apple
  • mlx-vlm - Vision-language model inference on Apple Silicon
  • vllm-mlx - oMLX started from vllm-mlx v0.1.0 and evolved significantly with multi-model serving, tiered KV caching, VLM with full paged cache support, an admin panel, and a macOS menu bar app
  • venvstacks - Portable Python environment layering for the macOS app bundle
  • mlx-embeddings - Embedding model support for Apple Silicon
  • dflash-mlx - Block diffusion speculative decoding on Apple Silicon
  • MTPLX - Lightning MTP's verify-shape Metal kernels are powered by MTPLX by Youssof Altoukhi, which also inspired the depth-k pipeline
  • mlx-serve - The fused GDN verify prework kernel is adapted from mlx-serve's port of the mlxfast-challenge qwen35_packed_gdn_prework kernel, and Qwen4's fused GDN decode and prefill kernels are adapted from mlx-serve's MIT-licensed transformer.zig; Qwen4 QSA's 128-bit K/V staging is adapted from mlx-serve's MIT-licensed msv_attn_p256 kernel
  • Splash - The verify-shape linear kernels use Splash's bf16 0x4300 | q weight operand with per-group input sums (from its Apache-2.0 linear_q4_sgmatrix.metal), and the tensor-op verify attention adapts the tile design of Splash's paged_attention_tile.h
  • SiliconScope - The menu bar statistics take their design and rendering approach from SiliconScope by Kennt Kim, which also inspired the energy-efficient re-render gating
View on GitHub

Recent activity

commits and pull requests

Releases and announcements

126 total
  1. 0.7.0rc1v0.7.0rc1Sep 24, 202613.6K downloads

    # oMLX 0.7.0rc1 The release candidate for oMLX 0.7.0 brings faster Qwen prefill and decoding, new multimodal models, and the improvements introduced throughout the 0.7.0 development releases. **Download:** [macOS 26 / 27](https://github.com/jundot/omlx/releases/download/v0.7.0rc1/oMLX-0.7.0rc1-macos26-27.dmg) | [macOS 15 Sequoia](https://github.com/jundot/omlx/releases/download/v0.7.0rc1/oMLX-0.7.0rc1-macos15-sequoia.dmg) ## Faster Qwen Prefill and Generation Qwen gains faster prompt processing, batched DFlash decoding, and improved Lightning MTP. DFlash now serves concurrent Qwen3.5-family requests together, while Lightning MTP adds an adaptive depth selector. [#3797](https://github.com/jundot/omlx/pull/3797), [#3903](https://github.com/jundot/omlx/pull/3903), [62171bd](https://github.com/jundot/omlx/commit/62171bdf451a912fc6627905392692b61d3c54c5). <table> <thead><tr><th>Workload</th><th>Model</th><th>Prompt / Concurrent requests</th><th>Before</th><th>After</th><th>Improvement</th></tr></thead> <tbody> <tr><td rowspan="2">Prefill</td><td>Qwen3.8-Flash-Next oQ4e</td><td>16K / 1</td><td>1,522 tok/s</td><td><strong>2,007 tok/s</strong></td><td><strong>+31.9%</stro

  2. 0.7.0.dev4v0.7.0.dev4Sep 18, 2026pre-release12.2K downloads

    > **This release includes extensive internal changes from upgrading core libraries.** If you encounter issues with a previously working model, please open a [GitHub issue](https://github.com/jundot/omlx/issues/new/choose) with logs and switch back to dev2 for now. I plan to test this version for 1-2 days, then proceed with an RC followed by a stable release. > If your server won't start after upgrading, a bug may be affecting externally accessible servers with API key auth disabled. Please enable auth in `settings.json` or reset all settings. A future release will show a warning to help you resolve this. # oMLX 0.7.0.dev4 oMLX 0.7.0.dev4 brings one-click model settings from omlx.ai benchmarks, faster DeepSeek V4.1 prefill with CED, multi-request Lightning MTP, and a customizable dashboard. This release also updates core model libraries and adds layer-streaming oQe calibration and Spark-X2.5 support, alongside fixes for tool calling, vision caching, and distributed serving. **Download:** [macOS 26 / 27](https://github.com/jundot/omlx/releases/download/v0.7.0.dev4/oMLX-0.7.0.dev4-macos26-27.dmg) | [macOS 15 Sequoia](https://github.com/jundot/omlx/releases/download/v0.7.0.

  3. 0.7.0.dev2v0.7.0.dev2Sep 11, 2026pre-release6.3K downloads

    # oMLX 0.7.0.dev2 oMLX 0.7.0.dev2 adds DeepSeek V4.1 Flash with DSpark MTP and Engram SSD offload, faster Qwen prefill on M5 Macs, and experimental MoE expert SSD offload. This release also adds Lightning MTP for GLM-5.3-Flash and fixes model loading, structured output, thinking controls, and distributed serving. ## DeepSeek V4.1 Flash with DSpark MTP and Engram SSD Offload DeepSeek V4.1 Flash now supports text and vision inference, tool calling, and oQ quantization in oMLX. **DSpark MTP**, integrated through Lightning MTP, accelerates generation on supported `-mtp` checkpoints. **Engram SSD offload** keeps Engram tables on disk and reads the required pages on demand, reducing resident memory requirements. Ready-to-use checkpoints: - **[DeepSeek-V4.1-Flash-oQ4e-mtp](https://huggingface.co/Jundot/DeepSeek-V4.1-Flash-oQ4e-mtp)** - **[DeepSeek-V4.1-Flash-oQ3e-mtp](https://huggingface.co/Jundot/DeepSeek-V4.1-Flash-oQ3e-mtp)** — designed to fit 256 GB machines with Engram SSD offload. Available context depends on remaining system memory. Benchmarked on an **M3 Ultra with 512 GiB of unified memory**, using `DeepSeek-V4.1-Flash-oQ4e-mtp` with **Engram in RAM**, Code (Python) context

  4. 0.7.0.dev1v0.7.0.dev1Sep 10, 2026pre-release1.5K downloads

    # oMLX 0.7.0.dev1 > This is a development release. Please report any bugs through [GitHub Issues](https://github.com/jundot/omlx/issues). Thank you to everyone who keeps the issues updated with reports, follow-ups, and testing results. **This development release speeds up Qwen3.8-Flash-Next generation and prefill, improves responsiveness under concurrent requests, rebuilds distributed serving around Cluster v2, and adds IFM/K2-Horizon support and local usage history.** ### Qwen3.8-Flash-Next (tok/s) | Context | 0.6.4 PP | 0.7.0.dev1 best PP | PP change | 0.6.4 TG | 0.7.0.dev1 best TG | TG change | |---|---:|---:|---:|---:|---:|---:| | 4K | 1,111.5 | 1,104.0 | -0.7% | 42.6 | 61.4 | +44.1% | | 16K | 1,124.9 | 1,186.1 | +5.4% | 43.2 | 70.4 | +63.0% | | 32K | 1,115.2 | 1,175.9 | +5.4% | 46.3 | 61.3 | +32.4% | | 64K | 1,100.3 | 1,158.7 | +5.3% | 45.6 | 55.5 | +21.7% | - **Faster Qwen3.8-Flash-Next generation, with and without Lightning MTP.** Reduced host-side decode overhead improved generation throughput by **49.0–55.1% with MTP off** and **39.9–47.6% with MTP on** across 4K–64K contexts. At 4K, throughput increased from **34.8 to 53.9 tok/s** without MTP and **56.

  5. 0.6.4v0.6.4Aug 29, 202653.1K downloads

    # oMLX 0.6.4 oMLX 0.6.4 substantially improves Qwen3.8-Flash-Next prefill and generation performance, while fixing continuous batching, prefix-cache reconstruction, Lightning MTP state handling, GLM-5.3 correctness, and several model-loading and settings issues. ## Qwen3.8-Flash-Next Performance - **Added exact QSA prefill and decode acceleration.** Eligible batch-one text workloads now use native FP32 QSA scoring, deterministic block selection, direct sparse-GQA Metal attention, and a selected-K/V decode path. Unsupported layouts and execution modes continue through the official fallback path. - **Accelerated resident PLE, GDN, and hyperconnection projections** without replacing the checkpoint state used by fallback paths. - **Added warm-prefix restoration for Lightning MTP prompt history.** Matching prefix-cache entries can restore the MTP sidecar instead of replaying the full reusable prompt head. - **Fixed Qwen vision grid compatibility** with newer MLX releases. By @jonathan308 in [#3244](https://github.com/jundot/omlx/pull/3244). Maintainer benchmark on an Apple M3 Ultra with 512 GB of unified memory, using `Qwen3.8-Flash-Next-oQ4e-mtp`, Code (Python) context, 128 genera

Code frequency

additions and deletions
+149.9K-149.9KWeek of 2026-02-08: +64,218 linesWeek of 2026-02-08: -267 linesWeek of 2026-02-15: +2,845 linesWeek of 2026-02-15: -586 linesWeek of 2026-02-22: +18,391 linesWeek of 2026-02-22: -5,482 linesWeek of 2026-03-01: +13,702 linesWeek of 2026-03-01: -1,997 linesWeek of 2026-03-08: +19,718 linesWeek of 2026-03-08: -2,244 linesWeek of 2026-03-15: +54,939 linesWeek of 2026-03-15: -7,919 linesWeek of 2026-03-22: +69,334 linesWeek of 2026-03-22: -3,287 linesWeek of 2026-03-29: +9,505 linesWeek of 2026-03-29: -6,331 linesWeek of 2026-04-05: +10,368 linesWeek of 2026-04-05: -1,658 linesWeek of 2026-04-12: +7,180 linesWeek of 2026-04-12: -1,565 linesWeek of 2026-04-19: +44,044 linesWeek of 2026-04-19: -1,022 linesWeek of 2026-04-26: +5,347 linesWeek of 2026-04-26: -775 linesWeek of 2026-05-03: +18,732 linesWeek of 2026-05-03: -2,926 linesWeek of 2026-05-10: +18,922 linesWeek of 2026-05-10: -3,529 linesWeek of 2026-05-17: +9,313 linesWeek of 2026-05-17: -1,843 linesWeek of 2026-05-24: +59,411 linesWeek of 2026-05-24: -12,897 linesWeek of 2026-05-31: +30,766 linesWeek of 2026-05-31: -11,194 linesWeek of 2026-06-07: +21,373 linesWeek of 2026-06-07: -3,662 linesWeek of 2026-06-14: +18,173 linesWeek of 2026-06-14: -4,377 linesWeek of 2026-06-21: +24,914 linesWeek of 2026-06-21: -5,442 linesWeek of 2026-06-28: +8,386 linesWeek of 2026-06-28: -774 linesWeek of 2026-07-05: +34,531 linesWeek of 2026-07-05: -5,116 linesWeek of 2026-07-12: +8,455 linesWeek of 2026-07-12: -1,138 linesWeek of 2026-07-19: +30,841 linesWeek of 2026-07-19: -1,759 linesWeek of 2026-07-26: +109,972 linesWeek of 2026-07-26: -3,235 linesWeek of 2026-08-02: +149,935 linesWeek of 2026-08-02: -24,139 linesWeek of 2026-08-09: +37,726 linesWeek of 2026-08-09: -2,109 linesWeek of 2026-08-16: +43,327 linesWeek of 2026-08-16: -4,253 linesWeek of 2026-08-23: +31,649 linesWeek of 2026-08-23: -2,547 linesWeek of 2026-08-30: +6,000 linesWeek of 2026-08-30: -1,892 linesWeek of 2026-09-06: +79,870 linesWeek of 2026-09-06: -18,181 linesWeek of 2026-09-13: +3,527 linesWeek of 2026-09-13: -593 linesFeb 8, 2026Sep 13, 2026
+1.1M lines added, -144.7K removed over the last year.

Commits per week

last 52 weeks
1630Week of 2025-10-04: 0 commitsWeek of 2025-10-11: 0 commitsWeek of 2025-10-18: 0 commitsWeek of 2025-10-25: 0 commitsWeek of 2025-11-01: 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: 19 commitsWeek of 2026-02-15: 21 commitsWeek of 2026-02-22: 72 commitsWeek of 2026-03-01: 110 commitsWeek of 2026-03-08: 137 commitsWeek of 2026-03-15: 137 commitsWeek of 2026-03-22: 102 commitsWeek of 2026-03-29: 98 commitsWeek of 2026-04-05: 85 commitsWeek of 2026-04-12: 63 commitsWeek of 2026-04-19: 48 commitsWeek of 2026-04-26: 27 commitsWeek of 2026-05-03: 69 commitsWeek of 2026-05-10: 97 commitsWeek of 2026-05-17: 70 commitsWeek of 2026-05-24: 107 commitsWeek of 2026-05-31: 157 commitsWeek of 2026-06-07: 121 commitsWeek of 2026-06-14: 45 commitsWeek of 2026-06-21: 29 commitsWeek of 2026-06-28: 36 commitsWeek of 2026-07-05: 85 commitsWeek of 2026-07-12: 53 commitsWeek of 2026-07-19: 86 commitsWeek of 2026-07-26: 94 commitsWeek of 2026-08-02: 74 commitsWeek of 2026-08-09: 76 commitsWeek of 2026-08-16: 163 commitsWeek of 2026-08-23: 95 commitsWeek of 2026-08-30: 31 commitsWeek of 2026-09-06: 98 commitsWeek of 2026-09-13: 102 commitsWeek of 2026-09-20: 96 commitsWeek of 2026-09-27: 69 commitsOct 4, 2025Sep 27, 2026
2.8K commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 33 commitsSun 1:00 — 29 commitsSun 2:00 — 24 commitsSun 3:00 — 21 commitsSun 4:00 — 13 commitsSun 5:00 — 18 commitsSun 6:00 — 7 commitsSun 7:00 — 4 commitsSun 8:00 — 5 commitsSun 9:00 — 9 commitsSun 10:00 — 8 commitsSun 11:00 — 9 commitsSun 12:00 — 9 commitsSun 13:00 — 3 commitsSun 14:00 — 15 commitsSun 15:00 — 18 commitsSun 16:00 — 19 commitsSun 17:00 — 28 commitsSun 18:00 — 19 commitsSun 19:00 — 21 commitsSun 20:00 — 19 commitsSun 21:00 — 15 commitsSun 22:00 — 27 commitsSun 23:00 — 29 commitsMon 0:00 — 50 commitsMon 1:00 — 16 commitsMon 2:00 — 14 commitsMon 3:00 — 13 commitsMon 4:00 — 6 commitsMon 5:00 — 5 commitsMon 6:00 — 1 commitsMon 7:00 — 1 commitsMon 8:00 — 2 commitsMon 9:00 — 8 commitsMon 10:00 — 18 commitsMon 11:00 — 11 commitsMon 12:00 — 12 commitsMon 13:00 — 15 commitsMon 14:00 — 17 commitsMon 15:00 — 11 commitsMon 16:00 — 36 commitsMon 17:00 — 33 commitsMon 18:00 — 33 commitsMon 19:00 — 16 commitsMon 20:00 — 8 commitsMon 21:00 — 12 commitsMon 22:00 — 34 commitsMon 23:00 — 22 commitsTue 0:00 — 33 commitsTue 1:00 — 33 commitsTue 2:00 — 19 commitsTue 3:00 — 10 commitsTue 4:00 — 15 commitsTue 5:00 — 5 commitsTue 6:00 — 5 commitsTue 7:00 — 3 commitsTue 8:00 — 8 commitsTue 9:00 — 12 commitsTue 10:00 — 22 commitsTue 11:00 — 51 commitsTue 12:00 — 25 commitsTue 13:00 — 26 commitsTue 14:00 — 24 commitsTue 15:00 — 40 commitsTue 16:00 — 29 commitsTue 17:00 — 34 commitsTue 18:00 — 27 commitsTue 19:00 — 13 commitsTue 20:00 — 7 commitsTue 21:00 — 13 commitsTue 22:00 — 20 commitsTue 23:00 — 27 commitsWed 0:00 — 56 commitsWed 1:00 — 35 commitsWed 2:00 — 6 commitsWed 3:00 — 5 commitsWed 4:00 — 3 commitsWed 5:00 — 5 commitsWed 6:00 — 8 commitsWed 7:00 — 6 commitsWed 8:00 — 8 commitsWed 9:00 — 16 commitsWed 10:00 — 25 commitsWed 11:00 — 18 commitsWed 12:00 — 9 commitsWed 13:00 — 23 commitsWed 14:00 — 18 commitsWed 15:00 — 15 commitsWed 16:00 — 25 commitsWed 17:00 — 26 commitsWed 18:00 — 25 commitsWed 19:00 — 12 commitsWed 20:00 — 6 commitsWed 21:00 — 21 commitsWed 22:00 — 22 commitsWed 23:00 — 41 commitsThu 0:00 — 31 commitsThu 1:00 — 31 commitsThu 2:00 — 16 commitsThu 3:00 — 3 commitsThu 4:00 — 4 commitsThu 5:00 — 2 commitsThu 6:00 — 2 commitsThu 7:00 — 3 commitsThu 8:00 — 15 commitsThu 9:00 — 13 commitsThu 10:00 — 29 commitsThu 11:00 — 35 commitsThu 12:00 — 13 commitsThu 13:00 — 21 commitsThu 14:00 — 23 commitsThu 15:00 — 23 commitsThu 16:00 — 29 commitsThu 17:00 — 21 commitsThu 18:00 — 27 commitsThu 19:00 — 16 commitsThu 20:00 — 11 commitsThu 21:00 — 11 commitsThu 22:00 — 11 commitsThu 23:00 — 27 commitsFri 0:00 — 33 commitsFri 1:00 — 20 commitsFri 2:00 — 14 commitsFri 3:00 — 18 commitsFri 4:00 — 2 commitsFri 5:00 — 11 commitsFri 6:00 — 4 commitsFri 7:00 — 7 commitsFri 8:00 — 13 commitsFri 9:00 — 21 commitsFri 10:00 — 26 commitsFri 11:00 — 22 commitsFri 12:00 — 12 commitsFri 13:00 — 7 commitsFri 14:00 — 10 commitsFri 15:00 — 19 commitsFri 16:00 — 21 commitsFri 17:00 — 9 commitsFri 18:00 — 15 commitsFri 19:00 — 9 commitsFri 20:00 — 11 commitsFri 21:00 — 5 commitsFri 22:00 — 10 commitsFri 23:00 — 11 commitsSat 0:00 — 16 commitsSat 1:00 — 20 commitsSat 2:00 — 13 commitsSat 3:00 — 9 commitsSat 4:00 — 13 commitsSat 5:00 — 6 commitsSat 6:00 — 9 commitsSat 7:00 — 10 commitsSat 8:00 — 10 commitsSat 9:00 — 12 commitsSat 10:00 — 14 commitsSat 11:00 — 8 commitsSat 12:00 — 13 commitsSat 13:00 — 4 commitsSat 14:00 — 14 commitsSat 15:00 — 12 commitsSat 16:00 — 13 commitsSat 17:00 — 22 commitsSat 18:00 — 16 commitsSat 19:00 — 8 commitsSat 20:00 — 5 commitsSat 21:00 — 7 commitsSat 22:00 — 14 commitsSat 23:00 — 28 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits178 (6%)
Community commits2,723 (94%)

2,901 commits in total over the last year.

DateListRankStars gained
Aug 27, 2026weekly#10+1,432
Aug 26, 2026weekly#10+1,432
Aug 25, 2026weekly#9+1,689
Aug 24, 2026weekly#7+1,671
Aug 23, 2026weekly#10+1,597
Aug 22, 2026weekly#12+1,536
Aug 21, 2026daily#5+472
Aug 21, 2026weekly#12+1,388
Aug 20, 2026daily#5+472
Aug 19, 2026daily#9+370
Aug 18, 2026daily#5+78
Mar 11, 2026daily#22+113
Mar 10, 2026daily#8+264