chenyme/grok2apiPublic

Multi-account API gateway for Grok Build, Grok Web, and Grok Console

AI summary: A multi-account API gateway written in Go that unifies access to Grok Build, Grok Web, and Grok Console via OpenAI and Anthropic-compatible APIs.

Stars
7.8K
+1 today
Forks
2.3K
Watchers
18
Open issues
9
Open PRs
3
Contributors
~99
Commits
1.6K
Branches
8

GoMITCreated Oct 10, 2025Last push 4d agoLatest release v3.1.6+31 stars this week+169 this month

Quick answers

What is grok2api?
A multi-account API gateway written in Go that unifies access to Grok Build, Grok Web, and Grok Console via OpenAI and Anthropic-compatible APIs.
What does grok2api do?
Grok2API acts as a comprehensive gateway that abstracts away the complexities of managing multiple Grok accounts across different provider interfaces. It provides independent account pools and exposes standardized OpenAI and Anthropic-compatible APIs for seamless integration with existing tools. The system handles intelligent routing, model discovery, and bounded failover to ensure stable and resilient access. Built in Go, it features a React-based administration console to manage configurations, monitor audit trails, and oversee remote quota synchronizations. It simplifies the integration of advanced Grok capabilities like image generation and asynchronous video tasks without needing direct API manipulation.
Who is grok2api for?
Software engineers, DevOps professionals, and organizations looking to scale and standardize their access to Grok APIs. It is ideal for those managing multiple accounts or integrating Grok into standard OpenAI-compatible ecosystems.
How do I get started with grok2api?
git clone https://github.com/chenyme/grok2api.git
How popular is grok2api on GitHub?
chenyme/grok2api has 7,772 stars and 2,317 forks on GitHub, and gained 31 stars in the last 7 days.
What license does grok2api use?
chenyme/grok2api is released under the MIT license.

Star history

since Aug 8, 2026
02K4K6KAug 2026Aug 2026Sep 2026Oct 2026
7.8K stars as of Oct 4, 2026. Measured daily since Aug 8, 2026; GitHub no longer exposes earlier star timestamps.

Contribution activity

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

Signals and awards

derived from tracked data
  • Very active

    956 commits in 52 weeks

  • Permissive license

    MIT

  • Continuous integration

    Automated checks passing

What grok2api does

Grok2API acts as a comprehensive gateway that abstracts away the complexities of managing multiple Grok accounts across different provider interfaces. It provides independent account pools and exposes standardized OpenAI and Anthropic-compatible APIs for seamless integration with existing tools. The system handles intelligent routing, model discovery, and bounded failover to ensure stable and resilient access. Built in Go, it features a React-based administration console to manage configurations, monitor audit trails, and oversee remote quota synchronizations. It simplifies the integration of advanced Grok capabilities like image generation and asynchronous video tasks without needing direct API manipulation.

Software engineers, DevOps professionals, and organizations looking to scale and standardize their access to Grok APIs. It is ideal for those managing multiple accounts or integrating Grok into standard OpenAI-compatible ecosystems.

  • Multi-Provider Unification: Bridges Grok Build, Grok Web, and Grok Console under a single unified architecture.
  • Compatible API Endpoints: Exposes both OpenAI and Anthropic-compatible APIs to support a wide range of existing software integrations.
  • Intelligent Routing: Supports model discovery, provider pinning, sticky sessions, and quota guards for optimized request handling.
  • Media Processing Pipeline: Handles image generation, image editing, and asynchronous video jobs with local archiving.
  • Built-in Administration Console: A React frontend for managing accounts, sync statuses, billing, and runtime settings.
  • Egress Management: Integrates proxy pools, SOCKS routing, and FlareSolverr for robust external connectivity.

Where teams use it

Enterprise API Distribution

Teams can pool multiple Grok accounts and distribute API keys internally with managed quotas.

Standardized Tool Integration

Developers can drop in Grok2API as a drop-in replacement for OpenAI endpoints in applications like Codex or Claude Code.

Media Generation Infrastructure

Applications requiring programmatic generation of images and video can leverage Grok's media capabilities via standard requests.

High-Availability Inference

Production environments can utilize bounded failover and sticky sessions to maintain uptime during provider instability.

Getting started: git clone https://github.com/chenyme/grok2api.git

README

main branch

Grok2API

A multi-account API gateway for Grok Build, Grok Web, and Grok Console

English | 简体中文

Go React Docker

chenyme%2Fgrok2api | Trendshift

Tip

Check out DEEIX-AI / DEEIX-Chat, a lightweight, integrated AI platform for model routing, chat, files, tools, billing, identity, and operations.

Note

This project is for technical research and learning purposes only. Please comply with Grok's official terms of use and local laws when using it; otherwise, you will be solely responsible for all consequences!

Sponsors

Want to sponsor this project?

APIMart Thanks to APIMart for sponsoring this project! APIMart is a low-cost API platform for AI image & video generation — GPT-Image-2 from $0.006/image, 160+ images per dollar. One async API covers both image and video: submit a task, get an ID, fetch results via polling or callback. Batch tens of thousands of images without timeouts, switch models without changing code. Pay-as-you-go with no monthly fee — sign up here to get started.
PackyCode PackyCode is a stable and professional API relay for Claude Code, Codex, Gemini, and leading Chinese models. With fast unified access, full-stack observability, risk controls, elastic scaling, and cost optimization, it delivers a smooth developer experience. Sign up here to bring production-ready AI into your workflows.
DEEIX AI / DEEIX Chat DEEIX-Chat is an open-source, self-hostable AI Chat platform for individuals, teams, and enterprises that need stable, long-term, unified access to multiple models. It brings models, conversations, files, tool calling, and administration together in one deployable and extensible system. Click here to start deploying.
RightCode Right Code is an enterprise-grade AI Agent distribution platform that primarily provides stable access services for Claude Code, Codex, Gemini, and other models. It supports invoicing and dedicated one-to-one assistance for enterprises and teams. Thanks to Right Code for providing token support. Click here to register and get started.
Swiftproxy Swiftproxy provides 90M+ clean residential IPs across 220+ locations, supporting HTTP(S)/SOCKS5, IP rotation, Sticky Sessions, and precise location targeting. It helps API services and automation workflows access online platforms reliably from different locations, making it suitable for API requests, automation, data collection, and location-based access. Residential proxies start at $0.7/GB. Free testing is available, and code PROXY90 gives 10% off. Try Swiftproxy now.

Overview

Grok2API is a Go gateway with a built-in React admin console. It manages independent Grok Build, Grok Web, and Grok Console account pools and exposes unified OpenAI- and Anthropic-compatible APIs.

Architecture

flowchart LR
    %% Color definitions
    classDef access fill:#e1f5fe,stroke:#01579b
    classDef core fill:#fff3e0,stroke:#e65100
    classDef providers fill:#f3e5f5,stroke:#4a148c
    classDef infra fill:#e8f5e9,stroke:#1b5e20
    classDef upstream fill:#fce4ec,stroke:#880e4f

    subgraph Access["Access Domain"]
        direction LR
        Clients["API Clients"]
        Admin["React Admin"]
    end

    subgraph Core["Gateway Core Domain"]
        direction LR
        Management["Management Services<br/>Accounts · Models · Keys · Settings"]
        Sync["Account Sync<br/>Credentials · Quota · Models"]
        Gateway["Gateway Service<br/>Protocols · Routing · Selection · Retry"]
        Audit["Audit Service<br/>Usage · Client Billing"]
        Management --> Sync
        Gateway -.-> Audit
    end

    subgraph Providers["Provider Channel Domain"]
        direction LR
        Registry["Provider Registry"]
        Build["Grok Build<br/>OAuth · Dynamic Models · Billing"]
        Web["Grok Web<br/>SSO · Remote Quota · Media"]
        Console["Grok Console<br/>SSO · Local Window · Stateless"]
        Registry --> Build
        Registry --> Web
        Registry --> Console
    end

    subgraph Infra["Shared Infrastructure Domain"]
        direction LR
        Egress["Egress Manager<br/>Scopes · Proxy Pool · Fallback · Clearance"]
        Database[("SQLite / PostgreSQL")]
        Runtime[("Memory / Redis")]
    end

    Upstream["🌐 Grok Upstream"]

    %% Cross-domain calls
    Clients --> Gateway
    Admin --> Management
    Gateway --> Registry
    Sync --> Registry
    Build -->|grok_build| Egress
    Web -->|grok_web / asset| Egress
    Console -->|grok_console| Egress
    Egress --> Upstream
    Management --> Database
    Audit --> Database
    Gateway <--> Runtime

    %% Application styles
    class Clients,Admin access
    class Management,Sync,Gateway,Audit core
    class Registry,Build,Web,Console providers
    class Egress,Database,Runtime infra
    class Upstream upstream
Loading

The Gateway routes requests through the Provider Registry. Account Sync refreshes credentials, quota, and models. Each Provider keeps independent account state and uses an isolated egress scope; usage, audits, and client billing are finalized after the request.

Core capabilities

Area Capabilities
APIs Responses, Chat Completions, Anthropic Messages, Images, and asynchronous Videos
Clients Codex, Claude Code, OpenAI-compatible SDKs, and Anthropic-compatible SDKs
Accounts Bulk import/export, quota sync, credential renewal, conversion, tools, and cleanup
Routing Model discovery, Provider pinning, sticky sessions, quota/concurrency guards, and bounded failover
Sessions Stored responses, compact, prompt-cache affinity, and optional reasoning replay
Media Image generation/editing, video jobs, local archiving, and URL/Base64/SSE output
Egress HTTP/SOCKS/Resin and Trojan/VLESS/Shadowsocks/VMess tunnels, subscriptions, probes, proxy pools, allocation, fallback, and FlareSolverr
Operations Dashboard, model routes, client keys, audits, runtime settings, and media libraries

Provider boundaries

Provider Authentication Models Main capabilities
Grok Build OAuth / Device OAuth Discovered per account Responses, Chat, Messages, compact, stored responses, paid-account video
Grok Web SSO Built-in, filtered by tier Responses, Chat, Messages, stored responses, images, image editing, video
Grok Console SSO Built-in Stateless Responses, Chat, Messages, images, image editing, video, TTS, STT, Realtime

Each Provider keeps its own credentials, quota, health, cooldown, concurrency, and model capabilities. Account retries stay within one route; when one public model ID intentionally aggregates multiple routes, the gateway may select another schedulable route without mixing Provider state.

Quick start

Official images support linux/amd64 and linux/arm64.

git clone https://github.com/chenyme/grok2api.git
cd grok2api
cp config.example.yaml config.yaml

Generate secrets and place them in config.yaml:

openssl rand -hex 32
openssl rand -base64 32
secrets:
  jwtSecret: "replace-with-the-generated-hex-value"
  credentialEncryptionKey: "replace-with-the-generated-base64-key"

bootstrapAdmin:
  username: "admin"
  password: "replace-with-a-strong-password"

Start the service:

docker compose pull
docker compose up -d
docker compose logs -f grok2api

Open http://127.0.0.1:8000. The image already includes the frontend; SQLite data and local media are stored in the Compose volume.

Run from source

cp config.example.yaml config.yaml
make run

For frontend development:

cd frontend
pnpm install
pnpm dev

Set up the gateway

  1. Sign in with the bootstrap administrator.
  2. Connect a Build, Web, or Console account.
  3. Wait for its quota and model capabilities to sync.
  4. Review the public routes under Model Routes.
  5. Create a client key under Client Keys.
  6. Call a /v1/* endpoint with that key.

After first sign-in, change the administrator password and remove bootstrapAdmin from the configuration. Never rotate credentialEncryptionKey after credentials have been stored.

Account operations

Provider Connect or import Export
Build Device OAuth, JSON/JSONL Re-importable account file
Web Pasted/TXT SSO, JSON/JSONL Re-importable account file
Console Pasted/TXT SSO, JSON/JSONL Re-importable account file

Imports accept UTF-8 BOM. Bulk quota sync, Build credential renewal, Web→Build/Console conversion, account tools, and cleanup report live progress.

Build refresh tokens may rotate when renewed. Do not actively share one Build credential between grok2api, the official CLI, another gateway, or another independent client: one client can consume a token that another client still holds. Authorize each active client separately, or transfer the credential only after the previous client has stopped using it.

Web account tools can accept the terms, set a random birthday corresponding to an age of 20–40, and enable NSFW. Completed steps are recorded and skipped on later runs.

Automatic deletion of old reauthRequired accounts is available but disabled by default. Active inference leases and video jobs are protected.

Tip

To migrate from the Python version, export Grok Web SSO tokens as TXT and import them under Grok Web. Old pool metadata and databases are not compatible.

Models and routing

Build models are discovered from each account's actual capabilities. Web and Console use built-in catalogs. The Model Routes page shows Provider-qualified routes, endpoint capabilities, and supporting-account counts; clients should treat the currently serviceable results from GET /v1/models as authoritative.

Grok Build

Build does not use one global static model list. Account synchronization reads the upstream /models endpoint, and different accounts, subscription tiers, or staged rollouts may expose different models. Routing retains these per-account capabilities instead of replacing the global catalog with one account's response.

Model Type Availability Gateway surfaces
Conversation models returned by upstream /models (for example, grok-4.5) Conversation Returned by the selected account Chat Completions, Responses, Messages, compact, stored responses
grok-composer-2.5-fast Conversation Grok Build OAuth accounts Chat Completions, Responses, Messages; supplemented from the OAuth session contract when a sparse upstream catalog omits it
grok-imagine-video-1.5 Video Super/paid Build accounts Videos; not assigned to Free or unknown-entitlement accounts

Conversation requests are translated to the Build Responses protocol while preserving the tool, reasoning, multi-turn, and prompt-cache compatibility required by Codex and Claude Code. Build currently exposes no image generation or image editing routes.

Grok Web

Web uses a built-in catalog filtered by account tier; higher tiers inherit lower-tier models.

Model Type Minimum tier Gateway surfaces
grok-chat-fast Conversation Basic Chat Completions, Responses, Messages
grok-chat-auto Conversation Super Chat Completions, Responses, Messages
grok-chat-expert Conversation Super Chat Completions, Responses, Messages
grok-chat-heavy Conversation Heavy Chat Completions, Responses, Messages
grok-imagine-image-lite Image Basic Images Generations
grok-imagine-image Image Basic Images Generations (enable_pro=false)
grok-imagine-image-2.0 Image Basic Images Generations (enable_pro=true)
grok-imagine-image-edit Image Edit Basic Images Edits
grok-imagine-video Video Basic for 720p; Super for 480p Videos

Web Imagine generation maps aspect_ratio and n to the browser protocol. size remains an OpenAI-compatible aspect-ratio alias, while generation-only resolution and quality are ignored on Web routes because the upstream product is selected by the model name rather than by those Console-oriented controls.

Grok Console

Console uses the catalog built into the current release. Conversation forwarding is stateless, while image, video, and voice use the standard xAI resource APIs.

Model Type Gateway surfaces
grok-4.20-0309-non-reasoning Conversation Chat Completions, Responses, Messages
grok-4.20-0309-reasoning Conversation Chat Completions, Responses, Messages; the model reasons but the upstream rejects configurable reasoningEffort
grok-4.20-multi-agent-0309 Conversation Chat Completions, Responses, Messages
grok-4.5 Conversation Chat Completions, Responses, Messages
grok-4.3 Conversation Chat Completions, Responses, Messages
grok-build-0.1 Conversation Chat Completions, Responses, Messages
grok-imagine-image Image, Image Edit Images Generations, Images Edits
grok-imagine-image-quality Image, Image Edit Images Generations, Images Edits
grok-imagine-image-2.0 Image, Image Edit Images Generations, Images Edits
grok-imagine-video Video Videos
grok-imagine-video-1.5 Video Video generation, including Free Console accounts
grok-voice-latest, grok-voice-think-fast-2.0, grok-voice-think-fast-1.0 Voice TTS and Realtime WebSocket proxy
grok-stt Voice STT and OpenAI-compatible audio transcriptions

Generation and editing capabilities for the same Console image model are grouped into one logical model row; no separate -edit model copy is required.

Public names normally omit the Provider. Internally, routes use Build/, Web/, or Console/; qualified names can pin a request to one source.

Web can be weakly linked one-to-one with matching Build and Console accounts. Links share only an anonymous egress identity and provenance display. They never merge credentials, quota, health, cooldown, concurrency, capabilities, or billing.

Codex, Claude Code, and prompt caching

Responses and Messages support streaming, tools, reasoning, multi-turn sessions, and compaction. Stable client session signals are preserved for Grok Build prompt-cache affinity. Cache hits still require a compatible upstream account and an unchanged prompt prefix. A still-decryptable g2a_compact_v1 summary from this gateway instance is expanded even if the session or PromptCacheKey remaps; an invalid prefixed blob is rejected with 400. Other compaction blobs keep their original encrypted_content when forwarded as upstream state, and any Build rejection is returned to the client.

Responses and Chat Completions report OpenAI-style total input. Messages reports Anthropic-style uncached input and cache reads separately. Audits retain total and cached input for billing reconciliation.

API

Inference endpoints use a client key:

Authorization: Bearer g2a_xxx_xxx
Method Path Purpose
GET /healthz, /readyz Liveness and readiness
GET /v1/models Serviceable models
POST /v1/responses Responses JSON/SSE
POST /v1/responses/compact Compact a supported Response session
GET, DELETE /v1/responses/{id} Read or delete a stored response
POST /v1/chat/completions Chat Completions JSON/SSE
POST /v1/messages Anthropic Messages JSON/SSE
POST /v1/images/generations, /v1/images/edits Generate or edit images
POST, GET /v1/videos/* Create and inspect video jobs
POST /v1/tts, /v1/audio/speech, /v1/audio/tasks Synthesize speech
POST /v1/stt, /v1/audio/transcriptions Transcribe audio
GET /v1/stt, /v1/realtime Proxy voice WebSocket sessions
GET /v1/media/images/{asset_id}, /v1/media/videos/{asset_id} Read archived media

Stored responses and compact depend on the selected Provider. The signed-in admin console provides live examples at /docs; Swagger is available only when server.swaggerEnabled: true.

/v1/audio/transcriptions supports json (default), verbose_json, and text. Video edit/extension routes must resolve to Console grok-imagine-video; custom public model names remain supported. Monetary billing is applied only when the gateway can reliably measure the official pricing unit: TTS is reserved and settled from its input character count, while REST and streaming STT are settled from the actual audio duration returned by a successful response. Because STT duration is known only after completion, concurrent requests may briefly take a billing-limited key beyond its spend limit. Realtime, video edits/extensions, and custom routes without a recognized official price are currently audited as unpriced; they remain callable and do not consume the spend limit.

Client keys support model allowlists and optional RPM, concurrency, spend, and expiry limits.

curl http://127.0.0.1:8000/v1/responses \
  -H "Authorization: Bearer g2a_xxx_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "your-model",
    "input": "Explain quantum tunneling in three sentences.",
    "stream": true
  }'

Egress and Cloudflare

Egress nodes are scoped to Build, Web, Console, or Web assets. The admin console supports:

  • HTTP, HTTPS, SOCKS4/4A, SOCKS5/5H, Resin, Trojan, VLESS, Shadowsocks, and VMess
  • TCP, WebSocket, and TLS tunnel transports; unsupported variants are rejected during import
  • Subscription and text/Base64 import
  • Batch probes, filtering, deletion, assignment, and balancing
  • Fallback per scope: none, direct, or a fixed node
  • Proxy-pool mode without global cooldown after one connection failure
  • Immediate recovery probes after fixed-proxy transport failures, with per-node coalescing and bounded waiting for fast retry
  • Optional Egress Quality Guard for active per-node model probes, guarded quarantine, and recovery; enable it with the built-in quality-guard Compose profile
  • Nodes whose proxy username contains {account} are treated as lease-scoped: a passive anomaly temporarily removes only the audited account lease, then recovery pins the probe to that same account and node. An unhealthy probe renews the hold; an expired hold no longer blocks routing if the sidecar is unavailable, so stale guard state cannot strand an account indefinitely. The shared node is never disabled and the rendered proxy identity is never exposed. Ordinary fixed sticky sessions can still be managed as separate nodes

Hysteria and TUIC are not supported yet. FlareSolverr accepts only HTTP/SOCKS proxy URLs, so automatic clearance refresh cannot use a tunnel share URL directly.

To enable the guard, add a qualityGuard section to config.yaml, then start the profile. The main service creates and reuses a non-exportable system probe identity automatically:

qualityGuard:
  enabled: true
  model: "grok-4.6"
  # Withhold thinking-model streams that have no streamed reasoning.
  # Observe for up to 30s. A stub plus enough visible output at the deadline
  # is withheld; empty stub-only streams keep waiting. Floor-met dumps that
  # flush a short greeting in under 1s are also withheld.
  requestRetry:
    enabled: true
    maxAttempts: 6
    holdTimeout: 30s
    minOutputTokens: 8
    onExhausted: fail_closed # fail_open | fail_closed
    accountCooldown: 12h
    idleAccountCooldown: 15m

requestRetry runs on the gateway request path and is independent of the sidecar. config.example.yaml keeps enabled: false; set it true to intercept. When enabled, a thinking-model stream with enough visible output and no streamed reasoning is not delivered; replay-safe stateless requests may try another account. TUI follow-ups (previous_response_id) and hosted-tool turns are still held for classification, but a quality withhold never replays account-bound state or side-effecting tools across accounts; onExhausted returns 503 quality_degraded or releases that held body. Context compaction, image, video, and ForcedEgress probe requests are unchanged.

docker compose --profile quality-guard up -d --build

Existing preview deployments that still contain clientKeyID can upgrade directly. The field is accepted for compatibility but ignored and can be removed; any manually created probe key is intentionally left untouched.

After changing this configuration, run docker compose --profile quality-guard restart grok2api egress-quality-guard to reload the base settings; policy edits made in the admin page still hot-reload.

The normal docker compose up -d command does not start the guard or generate probe traffic. The sidecar receives a narrowly scoped internal credential from the main service and never stores or uses the administrator password. See the linked guide before enabling automatic quarantine.

Resin usernames can contain {account}:

socks5h://Default.{account}:RESIN_PROXY_TOKEN@resin:2260

The placeholder becomes a stable anonymous identity. Linked Web, Build, and Console accounts can share it; raw tokens and email addresses are not used.

For managed Web/Console Cloudflare Clearance:

docker compose --profile flaresolverr up -d

Then use http://flaresolverr:8191 under Runtime Settings → Media & Network → Clearance and select one of the managed modes:

  • FlareSolverr proactively refreshes stale fixed-egress Clearance on the configured schedule.
  • On demand keeps the last successful Clearance regardless of age and solves again only after an upstream rejection explicitly invalidates it. Scheduled refresh does not launch a browser in this mode.

Manual never invokes FlareSolverr. The on-demand mode can make the first request without a managed Clearance; if Cloudflare rejects it, the next lease performs one deduplicated solve.

The egress layer retries only connection failures known to occur before request submission. It does not replay submitted generation requests, authentication failures, exhausted quotas, or upstream rate limits.

When a fixed proxy enters cooldown after a transport failure, grok2api starts an independent connectivity probe immediately. Concurrent failures share one probe. A later request bound to that node waits for at most five seconds, reloads persisted node state after a healthy probe, and continues without waiting for the full cooldown. An unhealthy probe preserves the cooldown. Proxy-pool leases use fresh tunnels, so one rotating exit failure never cools the whole pool. See Immediate egress failure probe and bounded retry for the design and safety invariants.

Configuration and deployment

config.yaml contains startup settings; Provider and operational settings are managed in the admin console and hot-reload unless marked otherwise.

Deployment Database Runtime store Media
Single instance SQLite Memory Local directory
Multiple instances PostgreSQL Redis Shared read/write directory

Multi-instance deployments require a unique deployment.instanceID per replica, one shared clusterID, and sharedMedia: true only after the media directory is shared correctly.

PostgreSQL credentials can be injected without storing them in config.yaml:

GROK2API_DATABASE_URL='postgresql://user:password@host:5432/grok2api?sslmode=require' docker compose up -d

A non-empty GROK2API_DATABASE_URL overrides database.postgres.dsn and automatically selects the postgres driver. An empty value is ignored. Supported URL schemes are postgres:// and postgresql://; SQLAlchemy's postgresql+asyncpg:// form is rejected with a migration hint. The application does not implicitly read the generic DATABASE_URL; platforms that provide it can map it explicitly with GROK2API_DATABASE_URL: "${DATABASE_URL}". Database configuration precedence is built-in defaults, config.yaml, then GROK2API_DATABASE_URL. The current CLI has no database override.

Client IPs behind a reverse proxy

Request audits record the normalized client IPv4 or IPv6 address. Direct deployments need no extra configuration. Behind Nginx or another reverse proxy, configure both sides:

  1. Forward the standard client IP headers from the proxy:
location / {
    proxy_pass http://127.0.0.1:8000;

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}
  1. Trust only the proxy address or its isolated network in config.yaml:
server:
  trustedProxies:
    - "127.0.0.1"

With Docker, the peer seen by grok2api may be the bridge gateway or another container rather than 127.0.0.1. Inspect the Compose network before configuring it:

docker network inspect grok2api_default \
  --format '{{(index .IPAM.Config 0).Subnet}}'

For example, an isolated network reported as 172.20.0.0/16 can be configured as a trusted proxy CIDR. Never use 0.0.0.0/0 or ::/0; grok2api rejects unrestricted trusted-proxy ranges. Without trustedProxies, forwarded headers are ignored and audits contain the direct TCP peer address, preventing clients from spoofing X-Forwarded-For.

If Cloudflare is in front of Nginx, configure Nginx's real-IP module with CF-Connecting-IP and Cloudflare's official proxy ranges first. Do not trust CF-Connecting-IP from arbitrary peers. Restart grok2api after changing server.trustedProxies; reload Nginx after changing its configuration.

Important optional settings:

  • audit.ledgerMode: observe reports ledger faults; enforce can pause new inference to protect billing integrity.
  • routing.accountIsolatedConnections: partitions outbound TCP/HTTP pools by account for external L4 or connection-hash load balancers. It is off by default because it increases connections, TLS handshakes, memory, and file-descriptor usage.
  • routing.segmentedSelectorEnabled: enabled by default for pools with at least 3,000 eligible accounts; bounds dynamic concurrency reads while retaining quota/tier priorities, sticky sessions, full-planner fallback, and atomic guards.
  • routing.autoAssignMaxNodeShare / routing.autoAssignMaxMigrationShare: optional large-pool guards. 0 (default) keeps the historical unbounded first-pass evacuation and the existing 200-move ceiling for capacity/rebalance repair. Set 0.05–1 only when a quarantined node would otherwise dump thousands of auto accounts onto the last healthy exits. GROK2API_AUTO_ASSIGN_MAX_NODE_SHARE and GROK2API_AUTO_ASSIGN_MAX_MIGRATION_SHARE override the YAML when set.
  • Build response-header timeout and exact-match 403 invalidation rules are hot-reloadable.
  • Sync latest version applies the validated Grok Build client version and User-Agent.

Production checklist

  • Use HTTPS and enable auth.secureCookies.
  • Keep Swagger disabled on public deployments.
  • Use strong, backed-up secrets; never commit credentials, cookies, exports, or databases.
  • Back up config.yaml, the database, and media storage.
  • Use PostgreSQL, Redis, and shared media for multiple instances.
  • Put a reverse proxy and access controls in front of public deployments.

Development

cd backend
go test ./...
go test -race ./...
go vet ./...
go build ./cmd/grok2api
cd frontend
pnpm install --frozen-lockfile
pnpm lint
pnpm build

Regenerate Swagger after changing public API annotations:

make swagger

Documentation

View on GitHub

Recent activity

commits and pull requests

Recent open issues

view all

Releases and announcements

31 total
  1. v3.1.6v3.1.6Sep 16, 2026

    ## What's Changed * perf: paginate nodes and reduce status polling overhead by @chenyme in https://github.com/chenyme/grok2api/pull/1005 * fix: quarantine runtime-selected account leases by @chenyme in https://github.com/chenyme/grok2api/pull/1008 * fix: cool accounts after non-streaming idle responses by @chenyme in https://github.com/chenyme/grok2api/pull/1009 * fix(gateway): keep portable reasoning summaries on compaction 400 recovery by @haswysa in https://github.com/chenyme/grok2api/pull/1010 * fix: withhold fake encrypted thinking (ciphertext floor + burst dump) by @lij768423-svg in https://github.com/chenyme/grok2api/pull/1013 * fix: hold TUI dumps (stub expiry, floor-met burst, previous_response_id) by @lij768423-svg in https://github.com/chenyme/grok2api/pull/1015 * fix(audit): record stream failure after a prior 429 retry by @buddhism5080 in https://github.com/chenyme/grok2api/pull/1018 * fix(audit): keep hidden reasoning recovery and pinned-account 503s by @buddhism5080 in https://github.com/chenyme/grok2api/pull/1019 * fix(gateway): skip accounts whose credential material fails to load by @buddhism5080 in https://github.com/chenyme/grok2api/pull/1020 * fix(aud

  2. v3.1.5v3.1.5Aug 25, 2026

    ## What's Changed * fix: treat only streamed thinking as quality-hold evidence by @lij768423-svg in https://github.com/chenyme/grok2api/pull/977 * fix: fill required output_text.annotations for Grok CLI serde by @lij768423-svg in https://github.com/chenyme/grok2api/pull/978 * fix: hold TUI tool-schema and after-tool agent turns by @lij768423-svg in https://github.com/chenyme/grok2api/pull/979 * fix: retry empty completed streams instead of waiting for idle by @lij768423-svg in https://github.com/chenyme/grok2api/pull/980 * fix: allow clearing account cooldown and configure empty-stream penalty by @lij768423-svg in https://github.com/chenyme/grok2api/pull/981 * fix: emit response.failed with required model for Grok TUI serde by @lij768423-svg in https://github.com/chenyme/grok2api/pull/984 * feat: isolate account-bound proxy leases by @chenyme in https://github.com/chenyme/grok2api/pull/971 * feat(audit): 请求审计中新增不同账号调度详情、完整HTTP请求/响应报文、默认7天全量日志记录等完整诊断生命周期重要功能 by @jeikl in https://github.com/chenyme/grok2api/pull/983 * fix: lengthen requestRetry hold so grok-4.6 thinking is not withheld by @lij768423-svg in https://github.com/chenyme/grok2api/pull/989 * fix: align video gene

  3. v3.1.4v3.1.4Aug 19, 2026

    ## What's Changed * feat(audit): record reasoning effort by @kkx600 in https://github.com/chenyme/grok2api/pull/951 * fix(accounts): distinguish quota recovery states by @kkx600 in https://github.com/chenyme/grok2api/pull/952 * feat(accounts): display Free quota tokens in M units by @kkx600 in https://github.com/chenyme/grok2api/pull/953 * fix: keep compaction summary when session key drifts by @lij768423-svg in https://github.com/chenyme/grok2api/pull/956 * feat: bound auto-assign share and per-cycle migrations by @lij768423-svg in https://github.com/chenyme/grok2api/pull/957 * fix: honor GROK2API_BASE_URL in quality-guard sidecar by @lij768423-svg in https://github.com/chenyme/grok2api/pull/958 * feat: withhold missing-thinking streams and retry another account by @lij768423-svg in https://github.com/chenyme/grok2api/pull/959 * fix: deduplicate streamed reasoning sources by @chenyme in https://github.com/chenyme/grok2api/pull/960 * fix: avoid duplicate view_image tool definitions by @chenyme in https://github.com/chenyme/grok2api/pull/961 * feat(accounts): support Grok Build refresh-token imports by @kkx600 in https://github.com/chenyme/grok2api/pull/950 * docs: docume

  4. v3.1.3v3.1.3Aug 17, 2026

    ## What's Changed * feat: Console/Web media + Voice + video R2V/edits/extensions + OpenAI audio compat by @llmdph in https://github.com/chenyme/grok2api/pull/885 * feat: sync imagine quota from upstream after generation by @scvxzf1 in https://github.com/chenyme/grok2api/pull/886 * fix(egress): scope proxy to subscriptions by @MMortise in https://github.com/chenyme/grok2api/pull/888 * feat(egress): support Trojan, VLESS, SS, and VMess proxies by @MMortise in https://github.com/chenyme/grok2api/pull/890 * fix(console): 视频输入上限按字段拆分并限制参考图生视频时长 by @741075810 in https://github.com/chenyme/grok2api/pull/909 * feat: forward x_search time range and image search in console provider by @0xlinn in https://github.com/chenyme/grok2api/pull/892 * fix(build): preserve grok-4.5 capability with grok-4.6 by @2164312714-svg in https://github.com/chenyme/grok2api/pull/906 * fix(models): 模型发现遇到别名冲突时跳过该项而非整批回滚 by @741075810 in https://github.com/chenyme/grok2api/pull/910 * feat: add on-demand clearance refresh mode by @EmmaStoneX in https://github.com/chenyme/grok2api/pull/895 * fix(models): 同步模型改为异步触发,避免 Cloudflare 100s 超时 by @mcheiyue in https://github.com/chenyme/grok2api/pull/899 * feat: a

  5. v3.1.2v3.1.2Aug 10, 2026

    ## What's Changed * refactor: remove SearchTools from ModelSpec and update related logic in console provider by @chenyme in https://github.com/chenyme/grok2api/pull/858 * feat: 适配 Web Gateway 新协议并完善账号路由 by @piexian in https://github.com/chenyme/grok2api/pull/859 * feat: classify stream-failed audits as errors and add picklist filters by @MMortise in https://github.com/chenyme/grok2api/pull/860 * fix(accounts): stop web→console progress number flicker by @buddhism5080 in https://github.com/chenyme/grok2api/pull/861 * fix(console): align DPoP proof iat with mint response Date skew by @buddhism5080 in https://github.com/chenyme/grok2api/pull/862 * fix(cli): treat JWT bfs claim as bot risk alias by @buddhism5080 in https://github.com/chenyme/grok2api/pull/863 * 添加订阅代理配置并完善拉取代理信息支持 by @MMortise in https://github.com/chenyme/grok2api/pull/866 * feat: 新增 Grok Build 流式空闲超时配置 by @MMortise in https://github.com/chenyme/grok2api/pull/871 * feat(media): server-side image ingest (URL import + upload) for stable image-to-video input by @741075810 in https://github.com/chenyme/grok2api/pull/872 * fix(cli): treat bot_flag_source/bfs 1 and 2 as bot risk by @buddhism5080 in https://github.

Code frequency

additions and deletions
+118.4K-118.4KWeek of 2025-10-05: +4,263 linesWeek of 2025-10-05: -359 linesWeek of 2025-10-12: +3,410 linesWeek of 2025-10-12: -1,515 linesWeek of 2025-10-19: +492 linesWeek of 2025-10-19: -57 linesWeek of 2025-10-26: +1,102 linesWeek of 2025-10-26: -947 linesWeek of 2025-11-02: +0 linesWeek of 2025-11-02: -0 linesWeek of 2025-11-09: +1 linesWeek of 2025-11-09: -1 linesWeek of 2025-11-16: +1,632 linesWeek of 2025-11-16: -2,242 linesWeek of 2025-11-23: +0 linesWeek of 2025-11-23: -0 linesWeek of 2025-11-30: +0 linesWeek of 2025-11-30: -0 linesWeek of 2025-12-07: +6 linesWeek of 2025-12-07: -5 linesWeek of 2025-12-14: +3,974 linesWeek of 2025-12-14: -1,420 linesWeek of 2025-12-21: +43 linesWeek of 2025-12-21: -6 linesWeek of 2025-12-28: +0 linesWeek of 2025-12-28: -0 linesWeek of 2026-01-04: +0 linesWeek of 2026-01-04: -0 linesWeek of 2026-01-11: +0 linesWeek of 2026-01-11: -0 linesWeek of 2026-01-18: +0 linesWeek of 2026-01-18: -0 linesWeek of 2026-01-25: +0 linesWeek of 2026-01-25: -0 linesWeek of 2026-02-01: +33,073 linesWeek of 2026-02-01: -19,906 linesWeek of 2026-02-08: +8,573 linesWeek of 2026-02-08: -6,974 linesWeek of 2026-02-15: +21,876 linesWeek of 2026-02-15: -15,630 linesWeek of 2026-02-22: +6,208 linesWeek of 2026-02-22: -1,122 linesWeek of 2026-03-01: +52,881 linesWeek of 2026-03-01: -45,989 linesWeek of 2026-03-08: +837 linesWeek of 2026-03-08: -227 linesWeek of 2026-03-15: +2,091 linesWeek of 2026-03-15: -945 linesWeek of 2026-03-22: +145 linesWeek of 2026-03-22: -35 linesWeek of 2026-03-29: +32,047 linesWeek of 2026-03-29: -46,483 linesWeek of 2026-04-05: +29,723 linesWeek of 2026-04-05: -18,048 linesWeek of 2026-04-12: +39,731 linesWeek of 2026-04-12: -637 linesWeek of 2026-04-19: +3,720 linesWeek of 2026-04-19: -3,534 linesWeek of 2026-04-26: +807 linesWeek of 2026-04-26: -174 linesWeek of 2026-05-03: +0 linesWeek of 2026-05-03: -0 linesWeek of 2026-05-10: +0 linesWeek of 2026-05-10: -0 linesWeek of 2026-05-17: +0 linesWeek of 2026-05-17: -0 linesWeek of 2026-05-24: +0 linesWeek of 2026-05-24: -0 linesWeek of 2026-05-31: +18 linesWeek of 2026-05-31: -14 linesWeek of 2026-06-07: +18 linesWeek of 2026-06-07: -2 linesWeek of 2026-06-14: +0 linesWeek of 2026-06-14: -0 linesWeek of 2026-06-21: +0 linesWeek of 2026-06-21: -0 linesWeek of 2026-06-28: +0 linesWeek of 2026-06-28: -0 linesWeek of 2026-07-05: +0 linesWeek of 2026-07-05: -0 linesWeek of 2026-07-12: +118,405 linesWeek of 2026-07-12: -59,143 linesWeek of 2026-07-19: +34,454 linesWeek of 2026-07-19: -5,209 linesWeek of 2026-07-26: +22,404 linesWeek of 2026-07-26: -2,868 linesWeek of 2026-08-02: +20,531 linesWeek of 2026-08-02: -4,243 linesWeek of 2026-08-09: +22,901 linesWeek of 2026-08-09: -5,199 linesWeek of 2026-08-16: +22,440 linesWeek of 2026-08-16: -8,739 linesWeek of 2026-08-23: +5,295 linesWeek of 2026-08-23: -785 linesWeek of 2026-08-30: +4,206 linesWeek of 2026-08-30: -846 linesWeek of 2026-09-06: +1,399 linesWeek of 2026-09-06: -293 linesWeek of 2026-09-13: +1 linesWeek of 2026-09-13: -17 linesWeek of 2026-09-20: +630 linesWeek of 2026-09-20: -69 linesOct 5, 2025Sep 20, 2026
+499.3K lines added, -253.7K removed over the last year.

Commits per week

last 52 weeks
1240Week of 2025-09-28: 0 commitsWeek of 2025-10-05: 5 commitsWeek of 2025-10-12: 29 commitsWeek of 2025-10-19: 6 commitsWeek of 2025-10-26: 6 commitsWeek of 2025-11-02: 0 commitsWeek of 2025-11-09: 1 commitsWeek of 2025-11-16: 11 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 2 commitsWeek of 2025-12-14: 9 commitsWeek of 2025-12-21: 1 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: 52 commitsWeek of 2026-02-08: 35 commitsWeek of 2026-02-15: 31 commitsWeek of 2026-02-22: 33 commitsWeek of 2026-03-01: 43 commitsWeek of 2026-03-08: 10 commitsWeek of 2026-03-15: 11 commitsWeek of 2026-03-22: 5 commitsWeek of 2026-03-29: 6 commitsWeek of 2026-04-05: 44 commitsWeek of 2026-04-12: 26 commitsWeek of 2026-04-19: 22 commitsWeek of 2026-04-26: 4 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: 1 commitsWeek of 2026-06-07: 1 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: 124 commitsWeek of 2026-07-19: 99 commitsWeek of 2026-07-26: 56 commitsWeek of 2026-08-02: 58 commitsWeek of 2026-08-09: 86 commitsWeek of 2026-08-16: 75 commitsWeek of 2026-08-23: 30 commitsWeek of 2026-08-30: 25 commitsWeek of 2026-09-06: 6 commitsWeek of 2026-09-13: 2 commitsWeek of 2026-09-20: 1 commitsSep 28, 2025Sep 20, 2026
956 commits in the last 52 weeks.

When work happens

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

Who is committing

last 52 weeks
Maintainer commits1,097 (70%)
Community commits481 (30%)

1,578 commits in total over the last year.

DateListRankStars gained
Aug 9, 2026daily#5+55
Aug 8, 2026daily#5+55
  • avelino/awesome-go

    A curated list of awesome Go frameworks, libraries and software

    186.9K stars · Go

  • farion1231/cc-switch

    A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io

    140K stars · Rust

  • kubernetes/kubernetes

    Production-Grade Container Scheduling and Management

    128.3K stars · Go

  • microsoft/TypeScript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

    111.3K stars · Go

  • JuliusBrussee/caveman

    🪨 why use many token when few token do trick. Viral skill + proxy for coding agents that cuts 65% of tokens by talking like a caveman.

    109.8K stars · Go

  • infiniflow/ragflow

    RAGFlow is a leading open-source Retrieval-Augmented Generation (RAG) engine that fuses cutting-edge RAG with Agent capabilities to create a superior context layer for LLMs

    91.7K stars · Go