Files
2026-07-13 12:22:33 +08:00

776 lines
63 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="en" class="bg-black">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>CodexBar — every AI coding limit, in your menu bar</title>
<meta
name="description"
content="A tiny macOS menu bar app that tracks AI coding-provider usage windows, credits, costs, and resets across 59 providers — Codex, OpenAI, Claude, Cursor, Gemini, Copilot, LiteLLM, and more."
/>
<meta name="theme-color" content="#0a0a0c" />
<link rel="canonical" href="https://codexbar.app/" />
<link rel="alternate" hreflang="x-default" href="https://codexbar.app/" />
<link rel="alternate" hreflang="en" href="https://codexbar.app/?lang=en" />
<link rel="alternate" hreflang="zh-CN" href="https://codexbar.app/?lang=zh-CN" />
<link rel="alternate" hreflang="zh-TW" href="https://codexbar.app/?lang=zh-TW" />
<link rel="alternate" hreflang="ja" href="https://codexbar.app/?lang=ja-JP" />
<link rel="alternate" hreflang="es" href="https://codexbar.app/?lang=es" />
<link rel="alternate" hreflang="pt-BR" href="https://codexbar.app/?lang=pt-BR" />
<link rel="alternate" hreflang="ko" href="https://codexbar.app/?lang=ko" />
<link rel="alternate" hreflang="de" href="https://codexbar.app/?lang=de" />
<link rel="alternate" hreflang="fr" href="https://codexbar.app/?lang=fr" />
<link rel="alternate" hreflang="ar" href="https://codexbar.app/?lang=ar" />
<link rel="alternate" hreflang="it" href="https://codexbar.app/?lang=it" />
<link rel="alternate" hreflang="vi" href="https://codexbar.app/?lang=vi" />
<link rel="alternate" hreflang="nl" href="https://codexbar.app/?lang=nl" />
<link rel="alternate" hreflang="tr" href="https://codexbar.app/?lang=tr" />
<link rel="alternate" hreflang="uk" href="https://codexbar.app/?lang=uk" />
<link rel="alternate" hreflang="ru" href="https://codexbar.app/?lang=ru" />
<link rel="alternate" hreflang="id" href="https://codexbar.app/?lang=id" />
<link rel="alternate" hreflang="pl" href="https://codexbar.app/?lang=pl" />
<link rel="alternate" hreflang="fa" href="https://codexbar.app/?lang=fa" />
<link rel="alternate" hreflang="th" href="https://codexbar.app/?lang=th" />
<link rel="alternate" hreflang="gl" href="https://codexbar.app/?lang=gl" />
<link rel="alternate" hreflang="ca" href="https://codexbar.app/?lang=ca" />
<link rel="alternate" hreflang="sv" href="https://codexbar.app/?lang=sv" />
<meta property="og:title" content="CodexBar" />
<meta
property="og:description"
content="Track usage windows, credits, and resets across 59 AI coding providers from your macOS menu bar."
/>
<meta property="og:type" content="website" />
<meta property="og:url" content="https://codexbar.app/" />
<meta property="og:image" content="https://codexbar.app/social.png?v=4" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta name="twitter:image" content="https://codexbar.app/social.png?v=4" />
<meta name="twitter:card" content="summary_large_image" />
<link rel="icon" type="image/png" href="./icon.png?v=2" />
<link rel="apple-touch-icon" href="./icon.png?v=2" />
<script>
(() => {
const queryTheme = new URLSearchParams(location.search).get('theme');
let storedTheme = 'system';
try {
storedTheme = localStorage.getItem('codexbar-theme') || 'system';
} catch (_) {}
const preference = queryTheme === 'light' || queryTheme === 'dark' ? queryTheme : storedTheme;
const resolvedTheme = preference === 'system'
? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')
: preference;
document.documentElement.dataset.theme = resolvedTheme;
document.documentElement.dataset.themePreference = preference;
})();
</script>
<link rel="stylesheet" href="./site-utilities.css?v=1" />
<link rel="stylesheet" href="./site.css?v=3" />
</head>
<body class="min-h-screen overflow-x-hidden text-zinc-100">
<header class="absolute inset-x-0 top-0 z-20 flex h-[var(--header-height)] items-center justify-between bg-transparent px-5 sm:px-8 md:grid md:grid-cols-[1fr_auto_1fr] lg:px-12">
<a href="#top" class="button-press flex w-fit items-center gap-2.5 text-sm font-semibold tracking-[-0.03em] text-white sm:text-base" aria-label="CodexBar home" data-i18n-aria-label="nav.home">
<img src="./icon.png?v=2" alt="" class="h-7 w-7 rounded-[7px] sm:h-8 sm:w-8 sm:rounded-lg" />
<span>CodexBar</span>
</a>
<nav class="hidden items-center justify-center gap-3 md:flex" aria-label="Project links" data-i18n-aria-label="nav.projectLinks">
<a
href="https://github.com/steipete/CodexBar/blob/main/docs/providers.md"
class="button-press hidden text-[14px] text-zinc-400 hover:text-white sm:block"
data-i18n="nav.docs">docs</a>
<span class="hidden text-sm text-zinc-700 sm:block" aria-hidden="true" data-project-separator>/</span>
<a
href="https://github.com/steipete/CodexBar"
class="button-press group flex items-center justify-center gap-2.5 text-[14px] text-zinc-400 hover:text-white"
aria-label="CodexBar source on GitHub" data-i18n-aria-label="nav.sourceGitHub"
>
<svg class="h-5 w-5" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
<path d="M12 .8a11.4 11.4 0 0 0-3.6 22.2c.6.1.8-.3.8-.6v-2.2c-3.3.7-4-1.4-4-1.4-.5-1.4-1.3-1.8-1.3-1.8-1.1-.7.1-.7.1-.7 1.2.1 1.8 1.2 1.8 1.2 1.1 1.8 2.8 1.3 3.5 1 .1-.8.4-1.3.8-1.6-2.6-.3-5.4-1.3-5.4-5.7 0-1.3.5-2.3 1.2-3.1-.1-.3-.5-1.5.1-3.1 0 0 1-.3 3.1 1.2a10.8 10.8 0 0 1 5.7 0C16.9 4.7 18 5 18 5c.6 1.6.2 2.8.1 3.1.8.8 1.2 1.8 1.2 3.1 0 4.4-2.7 5.4-5.4 5.7.4.4.8 1.1.8 2.2v3.3c0 .3.2.7.8.6A11.4 11.4 0 0 0 12 .8Z" />
</svg>
<span class="hidden sm:inline" data-i18n-rich="nav.sourceStars">
source
</span>
</a>
</nav>
<nav class="flex items-center justify-end gap-2 sm:gap-3" aria-label="Display and download" data-i18n-aria-label="nav.displayDownload">
<button class="theme-option grid" id="theme-toggle" type="button" data-theme-value="system" aria-label="Theme: system. Switch to light" title="System theme">
<svg data-theme-icon="system" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
<rect width="20" height="14" x="2" y="3" rx="2" />
<line x1="8" x2="16" y1="21" y2="21" />
<line x1="12" x2="12" y1="17" y2="21" />
</svg>
<svg data-theme-icon="light" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
<circle cx="12" cy="12" r="4" />
<path d="M12 2v2" /><path d="M12 20v2" /><path d="m4.93 4.93 1.41 1.41" /><path d="m17.66 17.66 1.41 1.41" /><path d="M2 12h2" /><path d="M20 12h2" /><path d="m6.34 17.66-1.41 1.41" /><path d="m19.07 4.93-1.41 1.41" />
</svg>
<svg data-theme-icon="dark" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
<path d="M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401" />
</svg>
</button>
<div class="language-picker" id="language-picker">
<button
class="language-picker-trigger button-press"
id="language-picker-trigger"
type="button"
aria-haspopup="listbox"
aria-expanded="false"
aria-controls="language-picker-menu"
aria-label="Language" data-i18n-aria-label="nav.language"
>
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
<circle cx="12" cy="12" r="9" />
<path d="M3 12h18M12 3a15 15 0 0 1 0 18M12 3a15 15 0 0 0 0 18" />
</svg>
<span data-lang-short>EN</span>
</button>
<div class="language-picker-menu" id="language-picker-menu" hidden>
<div class="language-picker-menu-scroll" id="language-picker-list" role="listbox" aria-label="Language" data-i18n-aria-label="nav.language"></div>
</div>
</div>
<span class="header-divider hidden sm:block" aria-hidden="true"></span>
<a
href="https://github.com/steipete/CodexBar/releases/latest"
class="download-button button-press inline-flex h-9 items-center gap-2 rounded-full px-4 text-sm font-medium sm:h-10 sm:px-5"
>
<span class="grid h-4 w-4 place-items-center" aria-hidden="true">
<img src="./images/apple.svg" alt="" class="apple-icon" />
</span>
<span data-i18n="nav.download">download</span>
</a>
</nav>
</header>
<main id="top">
<section class="hero-section relative overflow-hidden">
<div class="mockup-stage" id="mockup-stage" aria-hidden="true">
<div class="mockup-glow" aria-hidden="true"></div>
<div class="mockup-wrap" id="mockup-wrap">
<img
src="./hero-mockup.svg"
alt="MacBook menu bar"
data-i18n-alt="mockup.macbookAlt"
class="block h-full w-full select-none object-contain"
draggable="false"
width="6111"
height="3239"
fetchpriority="high"
/>
</div>
<div class="mockup-hud-layer">
<div class="mockup-artboard">
<div class="mockup-hud-anchor">
<div class="system-menubar" aria-label="macOS menu bar status items" data-i18n-aria-label="mockup.menuBarAria">
<img class="sf-symbol sf-symbol--openclaw" src="./images/menubar/openclaw-menubar.svg" alt="" aria-hidden="true" />
<div class="menu-bar-mark" aria-label="CodexBar menu bar icon" data-i18n-aria-label="mockup.menuIconAria">
<span></span>
<span></span>
</div>
<img class="sf-symbol" src="./images/menubar/wifi.png" alt="" aria-hidden="true" style="filter: brightness(0) invert(86%) drop-shadow(0 0.08em 0.18em rgba(0, 0, 0, 0.58))" />
<img class="sf-symbol" src="./images/menubar/personalhotspot.png" alt="" aria-hidden="true" style="filter: brightness(0) invert(86%) drop-shadow(0 0.08em 0.18em rgba(0, 0, 0, 0.58))" />
<img class="sf-symbol" src="./images/menubar/person-circle.png" alt="" aria-hidden="true" style="filter: brightness(0) invert(86%) drop-shadow(0 0.08em 0.18em rgba(0, 0, 0, 0.58))" />
<span class="time" id="menu-time">Sun Jun 28&nbsp;&nbsp;9:41 AM</span>
</div>
<aside class="codex-popover" aria-label="Open CodexBar usage panel" data-i18n-aria-label="mockup.usagePanelAria">
<header class="popover-top">
<p><strong>Codex</strong><span data-i18n="mockup.updatedJustNow">Updated just now</span></p>
<p class="right"><strong>user@example.com</strong><span data-i18n="mockup.plus">Plus</span></p>
</header>
<section class="popover-section">
<h3 data-i18n="mockup.session">Session</h3>
<div class="usage-meter" style="--fill: 60%; --danger: 58%; --meter-delay: 420ms;"><i style="--tick: 20%;"></i><i style="--tick: 48%;"></i></div>
<p class="usage-row">
<span><strong data-i18n="mockup.left60">60% left</strong><strong data-i18n="mockup.reserve2">2% in reserve</strong></span>
<span class="right"><strong data-i18n="mockup.resets2h53m">Resets in 2h 53m</strong><strong data-i18n="mockup.lastsUntilReset">Lasts until reset</strong></span>
</p>
</section>
<section class="popover-section">
<h3 data-i18n="mockup.weekly">Weekly</h3>
<div class="usage-meter" style="--fill: 73%; --danger: 73%; --meter-delay: 520ms;"><i style="--tick: 20%;"></i><i style="--tick: 48%;"></i></div>
<p class="usage-row">
<span><strong data-i18n="mockup.left73">73% left</strong><strong data-i18n="mockup.onPace">On pace</strong></span>
<span class="right"><strong data-i18n="mockup.resets5d4h">Resets in 5d 4h</strong><strong data-i18n="mockup.runsOut4d21h">Runs out in 4d 21h</strong></span>
</p>
</section>
<section class="reset-credit">
<p><strong data-i18n="mockup.limitResetCredits">Limit Reset Credits</strong><span data-i18n="mockup.nextExpires28d2h">Next expires in 28d 2h</span></p>
<p><strong data-i18n="mockup.manualResetAvailable">1 reset available</strong></p>
</section>
<section class="number-grid" aria-label="Recent Codex usage" data-i18n-aria-label="mockup.recentUsageAria">
<p class="popover-number"><span data-i18n="mockup.today">Today</span><strong>$51.56</strong></p>
<p class="popover-number"><span data-i18n="mockup.last31DaysCost">Last 31 days Cost</span><strong>$5,251.23</strong></p>
<p class="popover-number"><span data-i18n="mockup.last31DaysTokens">Last 31 days tokens</span><strong>5.9B</strong></p>
<p class="popover-number"><span data-i18n="mockup.latestTokens">Latest tokens</span><strong>85M</strong></p>
</section>
<figure class="usage-chart" aria-label="31 day usage chart" data-i18n-aria-label="mockup.usageChartAria">
<i style="--h: 52%;"></i><i style="--h: 55%;"></i><i style="--h: 38%;"></i><i style="--h: 60%;"></i><i style="--h: 34%;"></i><i style="--h: 73%;"></i><i style="--h: 33%;"></i><i style="--h: 10%;"></i><i style="--h: 28%;"></i><i style="--h: 47%;"></i><i style="--h: 18%;"></i><i style="--h: 5%;"></i><i style="--h: 20%;"></i><i style="--h: 18%;"></i><i style="--h: 4%;"></i><i style="--h: 9%;"></i><i style="--h: 32%;"></i><i style="--h: 40%;"></i><i style="--h: 28%;"></i><i style="--h: 38%;"></i><i style="--h: 45%;"></i><i style="--h: 31%;"></i><i style="--h: 39%;"></i><i style="--h: 42%;"></i><i style="--h: 34%;"></i><i style="--h: 8%;"></i><i style="--h: 6%;"></i><i style="--h: 7%;"></i><i style="--h: 17%;"></i><i style="--h: 38%;"></i><i style="--h: 4%;"></i>
</figure>
<p class="popover-note"><strong data-i18n="mockup.topModel">Top model: Example-1</strong><br /><span data-i18n="mockup.estimatedLogs">Estimated from local Codex logs for the selected acco...</span></p>
<section class="popover-foot">
<strong data-i18n="mockup.credits">Credits</strong>
<div class="credit-meter"></div>
<p class="credit-row"><strong data-i18n="mockup.zeroLeft">0 left</strong><span>1K tokens</span></p>
<p class="buy-row">
<svg viewBox="0 0 16 16" fill="none" aria-hidden="true"><circle cx="8" cy="8" r="6.2" stroke="currentColor" stroke-width="1.8" /><path d="M8 5v6M5 8h6" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" /></svg>
<span data-i18n="mockup.buyCredits">Buy credits...</span>
</p>
</section>
</aside>
</div>
</div>
</div>
</div>
<div class="hero-content px-5 sm:px-8 lg:px-12">
<div class="section-inner">
<div class="hero-copy">
<div class="reveal flex items-center justify-center gap-2.5 text-[15px] tracking-[-0.025em] text-zinc-400 sm:justify-start sm:text-lg">
<span data-i18n="hero.badgeStart">AI usage limits</span>
<img src="./icon.png?v=2" alt="" class="h-6 w-6 rounded-md shadow-[0_0_1.5rem_rgba(14,165,233,0.24)]" />
<span data-i18n="hero.badgeEnd">for macOS</span>
</div>
<h1 class="reveal reveal-2 mt-5 text-[clamp(3rem,5.7vw,60px)] font-semibold leading-[0.98] tracking-[-0.06em] text-zinc-100">
<span class="hero-title-line" data-i18n="hero.prefix">Every AI coding limit,</span>
<span class="hero-title-line" data-i18n="hero.accent">in your menu bar.</span>
</h1>
<p class="reveal reveal-3 mt-6 max-w-[38rem] text-balance text-[clamp(1rem,1.25vw,1.28rem)] leading-[1.42] tracking-[-0.035em] text-zinc-400">
<span data-i18n="hero.descriptionShort">Track usage windows, credit balances, and reset countdowns across the AI tools you actually pay for.</span>
</p>
<div class="hero-cta-row reveal reveal-4 mt-8 sm:mt-10">
<a
href="https://github.com/steipete/CodexBar/releases/latest"
class="download-button hero-download button-press inline-flex h-11 items-center gap-2 rounded-full px-5 text-sm font-medium"
>
<span class="grid h-4 w-4 place-items-center" aria-hidden="true">
<img src="./images/apple.svg" alt="" class="apple-icon" />
</span>
<span data-i18n="hero.download">Download for macOS</span>
</a>
<button
id="brew-copy"
type="button"
class="button-press brew-pill inline-flex h-11 max-w-full items-center gap-3 rounded-full px-4 font-mono text-[13px] text-zinc-100 hover:bg-white/10"
aria-label="Copy Homebrew install command" data-i18n-aria-label="clipboard.copyBrew"
>
<span class="text-zinc-400" aria-hidden="true">$</span>
<span data-brew-label class="truncate text-zinc-100">brew install --cask steipete/tap/codexbar</span>
<span data-brew-icon class="grid h-5 w-5 shrink-0 place-items-center text-zinc-400" aria-hidden="true">
<svg data-icon="copy" class="h-3.5 w-3.5" viewBox="0 0 18 18" fill="none">
<rect x="6.25" y="3.25" width="8.5" height="8.5" rx="1.4" stroke="currentColor" stroke-width="1.5" />
<path d="M11.75 14.75H4.65c-.77 0-1.4-.63-1.4-1.4v-7.1" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" />
</svg>
<svg data-icon="check" class="h-3.5 w-3.5" viewBox="0 0 18 18" fill="none">
<path d="M4.5 9.25 7.5 12.25 13.5 6.25" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" />
</svg>
</span>
<span class="sr-only" data-brew-status aria-live="polite"></span>
</button>
</div>
<p class="reveal reveal-5 mt-5 text-sm tracking-[-0.02em] text-zinc-600">
<span data-i18n="hero.fineprintShort">Free &amp; open source · macOS 14+</span>
</p>
</div>
</div>
</div>
</section>
<section class="provider-section px-5 py-20 sm:px-8 lg:px-12 lg:py-28" data-provider-section>
<div class="section-inner">
<header class="relative z-10 grid gap-5 tablet:grid-cols-[1fr_0.86fr] tablet:items-center">
<h2 class="provider-reveal max-w-3xl text-balance text-[clamp(2.4rem,4.4vw,5rem)] font-semibold leading-[0.98] tracking-[-0.07em] text-zinc-100">
<span data-i18n-rich="providers.title">59 providers,{mobileBreak}one menu bar</span>
</h2>
<p class="provider-reveal max-w-2xl text-[clamp(1rem,1.35vw,1.28rem)] leading-[1.45] tracking-[-0.035em] text-zinc-400" style="--reveal-delay: 70ms">
<span data-i18n="providers.description">Popular providers become status items with their own usage windows, reset countdowns, charts, and provider menus.</span>
</p>
</header>
<ul class="relative z-10 mt-12 grid list-none gap-3 p-0 tablet:grid-cols-3 xl:grid-cols-5">
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/codex.md"><span class="provider-logo" data-icon="◎" style="--brand:#49A3B0;--icon:url('./logos/codex-dark.svg')"><img src="./logos/codex-dark.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>Codex</strong><span data-i18n="auth.oauth">OAuth</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/claude.md"><span class="provider-logo" data-icon="✳" style="--brand:#CC7C5E;--icon:url('./logos/claude.svg')"><img src="./logos/claude.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>Claude</strong><span data-i18n="auth.oauth">OAuth</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/cursor.md"><span class="provider-logo" data-icon="◆" style="--brand:#1A1A1A;--icon:url('./logos/cursor.svg')"><img src="./logos/cursor.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>Cursor</strong><span data-i18n="auth.cookies">Cookies</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/opencode.md"><span class="provider-logo" data-icon="OC" style="--brand:#3B82F6;--icon:url('./logos/opencode-dark.svg')"><img src="./logos/opencode-dark.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>OpenCode</strong><span data-i18n="auth.cookiesGo">Cookies + Go</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/alibaba-coding-plan.md"><span class="provider-logo" data-icon="a" style="--brand:#FF6A00;--icon:url('./logos/alibaba.svg')"><img src="./logos/alibaba.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>Alibaba</strong><span data-i18n="auth.cookies">Cookies</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/alibaba-token-plan.md"><span class="provider-logo" style="--brand:#FF6A00;--icon:url('./logos/alibaba.svg')"><img src="./logos/alibaba.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>Alibaba Token</strong><span data-i18n="auth.cookies">Cookies</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/gemini.md"><span class="provider-logo" data-icon="◇" style="--brand:#AB87EA;--icon:url('./logos/gemini.svg')"><img src="./logos/gemini.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>Gemini</strong><span data-i18n="auth.oauth">OAuth</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/antigravity.md"><span class="provider-logo" data-icon="A" style="--brand:#60BA7E;--icon:url('./logos/antigravity.svg')"><img src="./logos/antigravity.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>Antigravity</strong><span data-i18n="auth.local">Local</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/factory.md"><span class="provider-logo" data-icon="✺" style="--brand:#FF6B35;--icon:url('./logos/droid-dark.svg')"><img src="./logos/droid-dark.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>Droid</strong><span data-i18n="auth.cookies">Cookies</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/copilot.md"><span class="provider-logo" data-icon="⌘" style="--brand:#A855F7;--icon:url('./logos/copilot.svg')"><img src="./logos/copilot.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>Copilot</strong><span data-i18n="auth.deviceFlow">Device flow</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/devin.md"><span class="provider-logo" style="--brand:#0F172A;--icon:url('./logos/devin.svg')"><img src="./logos/devin.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>Devin</strong><span data-i18n="auth.bearerLocal">Bearer / Local</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/zai.md"><span class="provider-logo" data-icon="Z" style="--brand:#E85A6A;--icon:url('./logos/zai-dark.svg')"><img src="./logos/zai-dark.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>z.ai</strong><span data-i18n="auth.apiKey">API key</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/minimax.md"><span class="provider-logo" data-icon="≋" style="--brand:#FE6060;--icon:url('./logos/minimax.svg')"><img src="./logos/minimax.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>MiniMax</strong><span data-i18n="auth.apiKey">API key</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/kimi.md"><span class="provider-logo" data-icon="K" style="--brand:#FE603C;--icon:url('./logos/kimi.svg')"><img src="./logos/kimi.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>Kimi</strong><span data-i18n="auth.token">Token</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/kimi-k2.md"><span class="provider-logo" data-icon="K2" style="--brand:#4C00FF;--icon:url('./logos/kimi-k2.svg')"><img src="./logos/kimi-k2.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>Kimi K2</strong><span data-i18n="auth.legacyApi">Legacy API</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/kilo.md"><span class="provider-logo" data-icon="kg" style="--brand:#f8f676;--icon:url('./logos/kilo.svg')"><img src="./logos/kilo.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>Kilo</strong><span data-i18n="auth.apiKey">API key</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/kiro.md"><span class="provider-logo" data-icon="•" style="--brand:#FF9900;--icon:url('./logos/kiro-dark.svg')"><img src="./logos/kiro-dark.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>Kiro</strong><span data-i18n="auth.cli">CLI</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/vertexai.md"><span class="provider-logo" data-icon="VA" style="--brand:#4285F4;--icon:url('./logos/vertex-ai.svg')"><img src="./logos/vertex-ai.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>Vertex AI</strong><span data-i18n="auth.gcloud">gcloud</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/augment.md"><span class="provider-logo" data-icon="{ }" style="--brand:#6366F1;--icon:url('./logos/augment.svg')"><img src="./logos/augment.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>Augment</strong><span data-i18n="auth.cli">CLI</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/amp.md"><span class="provider-logo" data-icon="amp" style="--brand:#DC2626;--icon:url('./logos/amp.svg')"><img src="./logos/amp.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>Amp</strong><span data-i18n="auth.cookies">Cookies</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/ollama.md"><span class="provider-logo" data-icon="ll" style="--brand:#888888;--icon:url('./logos/ollama.svg')"><img src="./logos/ollama.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>Ollama</strong><span data-i18n="auth.apiKeyCookies">API key + Cookies</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/synthetic.md"><span class="provider-logo" data-icon="✽" style="--brand:#141414;--icon:url('./logos/synthetic-dark.svg')"><img src="./logos/synthetic-dark.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>Synthetic</strong><span data-i18n="auth.apiKey">API key</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/jetbrains.md"><span class="provider-logo" data-icon="JB" style="--brand:#FF3399;--icon:url('./logos/jetbrains-ai.svg')"><img src="./logos/jetbrains-ai.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>JetBrains AI</strong><span data-i18n="auth.local">Local</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/warp.md"><span class="provider-logo" data-icon="W" style="--brand:#7B68EE;--icon:url('./logos/warp.svg')"><img src="./logos/warp.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>Warp</strong><span data-i18n="auth.apiKey">API key</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/elevenlabs.md"><span class="provider-logo" style="--brand:#EAEAE6;--icon:url('./logos/elevenlabs.svg')"><img src="./logos/elevenlabs.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>ElevenLabs</strong><span data-i18n="auth.apiKey">API key</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/openrouter.md"><span class="provider-logo" data-icon="OR" style="--brand:#6467F2;--icon:url('./logos/openrouter.svg')"><img src="./logos/openrouter.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>OpenRouter</strong><span data-i18n="auth.apiKey">API key</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/litellm.md"><span class="provider-logo" style="--brand:#4C89F0;--icon:url('./logos/litellm.svg')"><img src="./logos/litellm.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>LiteLLM</strong><span data-i18n="auth.virtualKey">Virtual key</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/providers.md#fetch-strategies-current"><span class="provider-logo" data-icon="∞" style="--brand:#20B2AA;--icon:url('./logos/perplexity.svg')"><img src="./logos/perplexity.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>Perplexity</strong><span data-i18n="auth.cookies">Cookies</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/abacus.md"><span class="provider-logo" style="--brand:#38BDF8;--icon:url('./logos/abacus-ai-dark.svg')"><img src="./logos/abacus-ai-dark.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>Abacus AI</strong><span data-i18n="auth.cookies">Cookies</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/providers.md#fetch-strategies-current"><span class="provider-logo" style="--brand:#FF500F;--icon:url('./logos/mistral.svg')"><img src="./logos/mistral.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>Mistral</strong><span data-i18n="auth.cookies">Cookies</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/deepseek.md"><span class="provider-logo" style="--brand:#527DF0;--icon:url('./logos/deepseek.svg')"><img src="./logos/deepseek.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>DeepSeek</strong><span data-i18n="auth.apiKey">API key</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/t3chat.md"><span class="provider-logo" style="--brand:#2563EB;--icon:url('./logos/t3chat.svg')"><img src="./logos/t3chat.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>T3 Chat</strong><span data-i18n="auth.cookies">Cookies</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/codebuff.md"><span class="provider-logo" style="--brand:#44C800;--icon:url('./logos/codebuff-dark.svg')"><img src="./logos/codebuff-dark.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>Codebuff</strong><span data-i18n="auth.apiKey">API key</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/poe.md"><span class="provider-logo" style="--brand:#5D5CDE;--icon:url('./logos/poe.svg')"><img src="./logos/poe.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>Poe</strong><span data-i18n="auth.apiKey">API key</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/chutes.md"><span class="provider-logo" style="--brand:#3184FF;--icon:url('./logos/chutes.svg')"><img src="./logos/chutes.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>Chutes</strong><span data-i18n="auth.apiKey">API key</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/zed.md"><span class="provider-logo" style="--brand:#084EFF;--icon:url('./logos/zed.svg')"><img src="./logos/zed.svg" alt="" loading="lazy" onerror="this.remove()" /></span><p><strong>Zed</strong><span data-i18n="auth.local">Local</span></p></a></li>
<li class="provider-card"><a class="provider-card-link" href="https://github.com/steipete/CodexBar/blob/main/docs/provider.md"><span class="provider-logo"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 .83.18 2 2 0 0 0 .83-.18l8.58-3.9a1 1 0 0 0 0-1.831z"/><path d="M16 17h6"/><path d="M19 14v6"/><path d="M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 .825.178"/><path d="M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l2.116-.962"/></svg></span><p><strong data-i18n="providers.yourProvider">Your provider</strong><span class="provider-authoring"><span data-i18n="providers.authoringGuide">Authoring guide</span><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M7 7h10v10"/><path d="M7 17 17 7"/></svg></span></p></a></li>
</ul>
</div>
</section>
<section class="features-section px-5 py-20 sm:px-8 lg:px-12 lg:py-28" data-scroll-section>
<div class="section-inner">
<h2 class="features-heading provider-reveal text-balance" data-i18n="features.title">Limits, spend, and status</h2>
<div class="features-grid relative z-10">
<article class="feature-card provider-reveal" style="--reveal-delay: 80ms">
<div class="feature-card-copy">
<h3 data-i18n="features.resetsTitle">Resets you can plan around</h3>
<p data-i18n="features.resetsBody">Per-provider session, weekly, and monthly windows with countdowns to the next reset — no more guessing whether to start a long task.</p>
</div>
<div class="feature-card-visual" aria-hidden="true">
<img src="./features/feature-resets.webp" alt="" width="1620" height="1020" loading="lazy" />
<div class="feature-card-overlay is-usage-menu">
<div class="feature-usage-panel">
<header class="feature-usage-header">
<p><strong>Codex</strong><span data-i18n="mockup.updatedJustNow">Updated just now</span></p>
<p class="feature-usage-account"><strong>user@example.com</strong><span data-i18n="mockup.plus">Plus</span></p>
</header>
<section class="feature-usage-block">
<h4 class="feature-usage-title" data-i18n="mockup.session">Session</h4>
<div class="feature-usage-track" aria-hidden="true">
<div class="feature-usage-fill" style="--amount: 100%">
<i style="--flex: 89"></i>
<i class="is-reserve" style="--flex: 5"></i>
<i class="is-spent" style="--flex: 6"></i>
</div>
</div>
<div class="feature-usage-meta">
<div>
<p><strong data-i18n="mockup.left89">89% left</strong><span class="is-subtle" data-i18n="mockup.reserve5">5% in reserve</span></p>
</div>
<div>
<p><strong data-i18n="mockup.resets4h12m">Resets in 4h 12m</strong><span class="is-subtle" data-i18n="mockup.lastsUntilReset">Lasts until reset</span></p>
</div>
</div>
</section>
<section class="feature-usage-block">
<h4 class="feature-usage-title" data-i18n="mockup.weekly">Weekly</h4>
<div class="feature-usage-track" aria-hidden="true">
<div class="feature-usage-fill" style="--amount: 100%">
<i style="--flex: 98"></i>
<i class="is-spent" style="--flex: 2"></i>
</div>
</div>
<div class="feature-usage-meta">
<div>
<p><strong data-i18n="mockup.left98">98% left</strong></p>
</div>
<div>
<p><strong data-i18n="mockup.resets6d23h">Resets in 6d 23h</strong></p>
</div>
</div>
</section>
</div>
</div>
</div>
</article>
<article class="feature-card provider-reveal" style="--reveal-delay: 140ms">
<div class="feature-card-copy">
<h3 data-i18n="features.spendTitle">Credits, spend, and cost scans</h3>
<p data-i18n="features.spendBody">Credit balances and monthly spend where the provider exposes them, plus configurable local cost scans for Codex and Claude.</p>
</div>
<div class="feature-card-visual" aria-hidden="true">
<img src="./features/feature-credits.webp" alt="" width="1620" height="1020" loading="lazy" />
<div class="feature-card-overlay">
<div class="feature-cost-panel">
<div class="feature-credit-head">
<p><strong data-i18n="mockup.limitResetCredits">Limit Reset Credits</strong><span data-i18n="mockup.nextExpires27d21h">Next expires in 27d 21h</span></p>
<p><strong data-i18n="mockup.manualResetAvailable">1 reset available</strong></p>
</div>
<dl class="feature-cost-stats">
<div>
<dt data-i18n="mockup.today">Today</dt>
<dd>$86.62</dd>
</div>
<div>
<dt data-i18n="mockup.last31DaysCost">Last 31 days Cost</dt>
<dd>$5,286.29</dd>
</div>
<div>
<dt data-i18n="mockup.last31DaysTokens">Last 31 days tokens</dt>
<dd>5.9B</dd>
</div>
<div>
<dt data-i18n="mockup.latestTokens">Latest tokens</dt>
<dd>119M</dd>
</div>
</dl>
<div class="feature-cost-chart" aria-hidden="true">
<i style="--h: 72%"></i><i style="--h: 77%"></i><i style="--h: 53%"></i><i style="--h: 81%"></i><i style="--h: 46%"></i><i style="--h: 96%"></i><i style="--h: 47%"></i><i style="--h: 10%"></i><i style="--h: 29%"></i><i style="--h: 64%"></i><i style="--h: 21%"></i><i style="--h: 5%"></i><i style="--h: 23%"></i><i style="--h: 22%"></i><i style="--h: 4%"></i><i style="--h: 10%"></i><i style="--h: 37%"></i><i style="--h: 45%"></i><i style="--h: 33%"></i><i style="--h: 50%"></i><i style="--h: 58%"></i><i style="--h: 35%"></i><i style="--h: 48%"></i><i style="--h: 55%"></i><i style="--h: 40%"></i><i style="--h: 8%"></i><i style="--h: 7%"></i><i style="--h: 8%"></i><i style="--h: 20%"></i><i style="--h: 54%"></i><i style="--h: 22%"></i>
</div>
</div>
</div>
</div>
</article>
<article class="feature-card provider-reveal" style="--reveal-delay: 200ms">
<div class="feature-card-copy">
<h3 data-i18n="features.statusTitle">Status &amp; incidents</h3>
<p data-i18n="features.statusBody">Provider status polling surfaces incident badges in the menu and an indicator overlay on the bar icon.</p>
</div>
<div class="feature-card-visual" aria-hidden="true">
<img src="./features/feature-status.webp" alt="" width="1620" height="1020" loading="lazy" />
<div class="feature-card-overlay is-status-menu">
<div class="feature-status-panel">
<p class="feature-status-summary"><span data-i18n="mockup.partialDegradation">Partial degradation</span> <span data-i18n="mockup.twoIncidents">2 incidents</span></p>
<ul class="feature-status-list" aria-hidden="true">
<li class="is-critical">
<span class="feature-status-dot"></span>
<span class="feature-status-name">Codex API</span>
<span class="feature-status-label" data-i18n="mockup.majorOutage">Major outage</span>
</li>
<li class="is-minor">
<span class="feature-status-dot"></span>
<span class="feature-status-name">Chat Completions</span>
<span class="feature-status-label" data-i18n="mockup.degraded">Degraded</span>
</li>
<li>
<span class="feature-status-dot"></span>
<span class="feature-status-name">CLI</span>
<span class="feature-status-label" data-i18n="mockup.operational">Operational</span>
</li>
<li>
<span class="feature-status-dot"></span>
<span class="feature-status-name">Responses</span>
<span class="feature-status-label" data-i18n="mockup.operational">Operational</span>
</li>
</ul>
</div>
</div>
</div>
</article>
</div>
</div>
</section>
<section class="cli-section px-5 py-20 sm:px-8 lg:px-12 lg:py-28" data-scroll-section>
<div class="section-inner relative z-10">
<div class="split-layout">
<div class="split-visual-wrap provider-reveal" role="img" aria-label="CodexBar CLI output preview" data-i18n-aria-label="cli.outputPreviewAria">
<div class="cli-terminal">
<div class="cli-terminal-chrome">
<div class="cli-terminal-dots" aria-hidden="true">
<span></span><span></span><span></span>
</div>
<p class="cli-terminal-title">codexbar · terminal</p>
<div class="cli-terminal-chrome-spacer" aria-hidden="true"></div>
</div>
<div class="cli-terminal-body">
<section class="cli-provider-block">
<p class="cli-provider-label">== Codex (oauth) ==</p>
<div class="cli-row">
<span class="cli-row-label" data-i18n="mockup.session">Session</span>
<span class="cli-row-value" data-i18n="cli.left99">99% left</span>
<div class="cli-meter" aria-hidden="true"><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i></i></div>
<span class="cli-row-note" data-i18n="cli.resets5h">Resets in 5h</span>
</div>
<div class="cli-row">
<span class="cli-row-label" data-i18n="mockup.weekly">Weekly</span>
<span class="cli-row-value" data-i18n="cli.left100">100% left</span>
<div class="cli-meter" aria-hidden="true"><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i></div>
<span class="cli-row-note" data-i18n="cli.resets7d">Resets in 7d</span>
</div>
<div class="cli-row is-meta"><span class="cli-row-label" data-i18n="mockup.credits">Credits</span><span class="cli-row-value" data-i18n="mockup.zeroLeft">0 left</span></div>
<div class="cli-row is-meta"><span class="cli-row-label" data-i18n="mockup.limitResetCredits">Limit Reset Credits</span><span class="cli-row-value" data-i18n="cli.available1">1 available</span></div>
<div class="cli-row is-meta"><span class="cli-row-label" data-i18n="cli.nextResetCredit">Next reset credit</span><span class="cli-row-value" data-i18n="cli.expires27d22h">expires in 27d 22h</span></div>
<div class="cli-row is-meta"><span class="cli-row-label" data-i18n="cli.account">Account</span><span class="cli-row-value">user@example.com</span></div>
<div class="cli-row is-meta"><span class="cli-row-label" data-i18n="cli.plan">Plan</span><span class="cli-row-value">Plus</span></div>
</section>
<section class="cli-provider-block">
<p class="cli-provider-label">== elevenlabs ==</p>
<div class="cli-row">
<span class="cli-row-label" data-i18n="cli.total">Total</span>
<span class="cli-row-value" data-i18n="cli.left79">79% left</span>
<div class="cli-meter" aria-hidden="true"><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i></i><i></i><i></i></div>
<span class="cli-row-note" data-i18n="cli.resets23d18h">Resets in 23d 18h</span>
</div>
<div class="cli-row">
<span class="cli-row-label" data-i18n="cli.auto">Auto</span>
<span class="cli-row-value" data-i18n="cli.left74">74% left</span>
<div class="cli-meter" aria-hidden="true"><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i></i><i></i><i></i><i></i></div>
<span class="cli-row-note" data-i18n="cli.resets23d18h">Resets in 23d 18h</span>
</div>
<div class="cli-row">
<span class="cli-row-label">API</span>
<span class="cli-row-value" data-i18n="cli.left99">99% left</span>
<div class="cli-meter" aria-hidden="true"><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i class="is-filled"></i><i></i></div>
<span class="cli-row-note" data-i18n="cli.resets23d18h">Resets in 23d 18h</span>
</div>
<div class="cli-row is-meta"><span class="cli-row-label" data-i18n="cli.account">Account</span><span class="cli-row-value">user@example.com</span></div>
<div class="cli-row is-meta"><span class="cli-row-label" data-i18n="cli.plan">Plan</span><span class="cli-row-value">Elevenlabs Pro</span></div>
</section>
</div>
<div class="cli-terminal-foot">
<p><strong>&gt;</strong> codexbar<span class="cli-terminal-cursor" aria-hidden="true"></span></p>
</div>
</div>
</div>
<div class="split-copy">
<h2 class="split-copy-heading provider-reveal" style="--reveal-delay: 70ms">
<span class="section-title-line">CodexBar</span>
<span class="section-title-line" data-i18n="cli.titleLine2">on CLI</span>
</h2>
<p class="split-copy-lead provider-reveal" style="--reveal-delay: 110ms">
<span data-i18n-rich="cli.lead">A bundled {codexbar} binary with the same usage output as the menu bar — scripts, CI, and quick terminal checks.</span>
</p>
<p class="split-copy-note provider-reveal" style="--reveal-delay: 150ms">
<span data-i18n="cli.note">Standalone tarballs for macOS and Linux on every release.</span>
</p>
<p class="cli-footnote provider-reveal" style="--reveal-delay: 190ms">
<svg viewBox="0 0 24 24" fill="none" aria-hidden="true">
<path fill="currentColor" d="M12 2.5 4.5 6.5v5.8c0 4.55 3.08 8.02 7.5 9.2 4.42-1.18 7.5-4.65 7.5-9.2V6.5L12 2.5Z" opacity="0.22" />
<path d="M12 2.5 4.5 6.5v5.8c0 4.55 3.08 8.02 7.5 9.2 4.42-1.18 7.5-4.65 7.5-9.2V6.5L12 2.5Z" stroke="currentColor" stroke-width="1.6" stroke-linejoin="round" />
<path d="m9.25 11.75 1.9 1.9 3.6-3.6" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" />
</svg>
<span data-i18n="cli.privacy">CodexBar reuses existing provider sessions — no passwords stored on disk.</span>
</p>
</div>
</div>
</div>
</section>
<section class="widgets-section px-5 py-20 sm:px-8 lg:px-12 lg:py-28" data-scroll-section>
<div class="section-inner relative z-10">
<div class="split-layout split-layout--copy-left">
<div class="split-copy">
<h2 class="split-copy-heading provider-reveal">
<span class="section-title-line">CodexBar</span>
<span class="section-title-line" data-i18n="widgets.titleLine2">widgets</span>
</h2>
<p class="split-copy-lead provider-reveal" style="--reveal-delay: 70ms">
<span data-i18n="widgets.lead">WidgetKit widgets for supported providers — usage windows, reset countdowns, and spend where available. Drop them on your Home Screen and desktop.</span>
</p>
<p class="split-copy-note provider-reveal" style="--reveal-delay: 120ms">
<span data-i18n="widgets.note">Small, medium, and large sizes. Switch providers without leaving the widget.</span>
</p>
</div>
<div class="split-visual-wrap provider-reveal" style="--reveal-delay: 80ms">
<div class="mac-widget-sheet" role="img" aria-label="macOS widget gallery preview" data-i18n-aria-label="widgets.galleryAria">
<div class="mac-widget-sheet__body">
<aside class="mac-widget-sidebar" aria-label="Widget categories" data-i18n-aria-label="widgets.categoriesAria">
<div class="mac-widget-search">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
<circle cx="11" cy="11" r="7" />
<path d="m20 20-3.2-3.2" />
</svg>
<span>codexb</span>
</div>
<ul class="mac-widget-nav">
<li>
<span class="mac-widget-nav-icon" aria-hidden="true">
<svg viewBox="0 0 16 16" fill="currentColor" width="10" height="10">
<rect x="1" y="1" width="6" height="6" rx="1.2" />
<rect x="9" y="1" width="6" height="6" rx="1.2" />
<rect x="1" y="9" width="6" height="6" rx="1.2" />
<rect x="9" y="9" width="6" height="6" rx="1.2" />
</svg>
</span>
<span data-i18n="widgets.allWidgets">All Widgets</span>
</li>
<li class="is-active">
<span class="mac-widget-nav-icon is-app" aria-hidden="true">
<img src="./icon.png?v=2" alt="" loading="lazy" />
</span>
CodexBar
</li>
</ul>
</aside>
<div class="mac-widget-main">
<p class="mac-widget-main__title">CodexBar</p>
<div class="mac-widget-gallery-wrap">
<div class="mac-widget-gallery">
<div class="mac-widget-row">
<article class="widget-tile is-small">
<div class="widget-preview">
<img src="./widgets/03-codexbar-metric-compact.png" alt="" width="204" height="204" loading="lazy" />
</div>
<h4>CodexBar Metric</h4>
<p data-i18n="widgets.metricCaption">Compact widget for credits or cost.</p>
</article>
<article class="widget-tile is-medium">
<div class="widget-preview">
<img src="./widgets/01-codexbar-history-small.png" alt="" width="428" height="204" loading="lazy" />
</div>
<h4>CodexBar History</h4>
<p data-i18n="widgets.historyCaption">Usage history chart with recent totals.</p>
</article>
<article class="widget-tile is-large">
<div class="widget-preview">
<img src="./widgets/02-codexbar-history-large.png" alt="" width="388" height="370" loading="lazy" />
</div>
<h4>CodexBar History</h4>
<p data-i18n="widgets.historyCaption">Usage history chart with recent totals.</p>
</article>
</div>
<div class="mac-widget-row">
<article class="widget-tile is-small">
<div class="widget-preview">
<img src="./widgets/06-codexbar-usage-compact.png" alt="" width="204" height="204" loading="lazy" />
</div>
<h4>CodexBar Usage</h4>
<p data-i18n="widgets.usageCaption">Session and weekly usage with credits and costs.</p>
</article>
<article class="widget-tile is-medium">
<div class="widget-preview">
<img src="./widgets/07-codexbar-usage-wide.png" alt="" width="428" height="204" loading="lazy" />
</div>
<h4>CodexBar Usage</h4>
<p data-i18n="widgets.usageCaption">Session and weekly usage with credits and costs.</p>
</article>
<article class="widget-tile is-large">
<div class="widget-preview">
<img src="./widgets/08-codexbar-usage-large.png" alt="" width="388" height="388" loading="lazy" />
</div>
<h4>CodexBar Usage</h4>
<p data-i18n="widgets.usageCaption">Session and weekly usage with credits and costs.</p>
</article>
</div>
<div class="mac-widget-row">
<article class="widget-tile is-small">
<div class="widget-preview">
<img src="./widgets/09-codexbar-switcher-compact.png" alt="" width="204" height="204" loading="lazy" />
</div>
<h4>CodexBar Switcher</h4>
<p data-i18n="widgets.switcherCaption">Usage widget with a provider switcher.</p>
</article>
<article class="widget-tile is-medium">
<div class="widget-preview">
<img src="./widgets/10-codexbar-switcher-wide.png" alt="" width="428" height="204" loading="lazy" />
</div>
<h4>CodexBar Switcher</h4>
<p data-i18n="widgets.switcherCaption">Usage widget with a provider switcher.</p>
</article>
<article class="widget-tile is-large">
<div class="widget-preview">
<img src="./widgets/11-codexbar-switcher-large.png" alt="" width="388" height="388" loading="lazy" />
</div>
<h4>CodexBar Switcher</h4>
<p data-i18n="widgets.switcherCaption">Usage widget with a provider switcher.</p>
</article>
</div>
<div class="mac-widget-row">
<article class="widget-tile is-medium">
<div class="widget-preview">
<img src="./widgets/04-codexbar-burndown.png" alt="" width="427" height="203" loading="lazy" />
</div>
<h4>CodexBar Burn Down</h4>
<p data-i18n="widgets.burndownCaption">Remaining budget compared with an ideal steady burn rate.</p>
</article>
<article class="widget-tile is-medium">
<div class="widget-preview">
<img src="./widgets/05-codexbar-burndown-combined.png" alt="" width="427" height="203" loading="lazy" />
</div>
<h4>CodexBar Burn Down (Combined)</h4>
<p data-i18n="widgets.burndownCombinedCaption">Session and weekly burn-down charts in one tile.</p>
</article>
</div>
</div>
</div>
</div>
</div>
<div class="mac-widget-sheet__foot">
<p data-i18n="widgets.dragToDesktop">Drag a widget to the desktop…</p>
<span class="mac-widget-ok">OK</span>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="technical-section px-5 py-16 sm:px-8 lg:px-12 lg:py-20" data-scroll-section>
<div class="section-inner">
<p class="section-eyebrow provider-reveal" data-i18n="detail.more">More</p>
<div class="technical-grid relative z-10">
<article class="technical-block provider-reveal" style="--reveal-delay: 60ms">
<h3 data-i18n="detail.installTitle">Install &amp; updates</h3>
<p>
<span data-i18n-rich="detail.installBody">Universal app via {releases} with Sparkle auto-updates, or via {cask} (updates via {upgrade}).</span>
</p>
</article>
<article class="technical-block provider-reveal" style="--reveal-delay: 110ms">
<h3 data-i18n="detail.cliTitle">CLI</h3>
<p>
<span data-i18n-rich="detail.cliBody">A bundled {codexbar} binary plus standalone tarballs for macOS and Linux on each release. On Linux: {linuxCommand}.</span>
</p>
</article>
<article class="technical-block provider-reveal" style="--reveal-delay: 160ms">
<h3 data-i18n="detail.privacyTitle">Privacy</h3>
<p>
<span data-i18n-rich="detail.privacyBody">Reuses existing provider sessions — OAuth, device flow, API keys, browser cookies, local files — so no passwords are stored. Audit notes in {issue}.</span>
</p>
</article>
<article class="technical-block provider-reveal" style="--reveal-delay: 210ms">
<h3 data-i18n="detail.permissionsTitle">macOS permissions</h3>
<p>
<span data-i18n="detail.permissionsBody">Full Disk Access for Safari cookies, Keychain access for cookie decryption and OAuth flows, and Files &amp; Folders prompts when provider helpers read project directories.</span>
</p>
</article>
</div>
</div>
</section>
</main>
<footer class="site-footer px-5 sm:px-8 lg:px-12">
<span data-i18n="footer.builtBy">Built by</span>
<a href="https://github.com/steipete">Peter Steinberger</a>
<span aria-hidden="true"> · </span>
<a href="https://github.com/steipete/CodexBar/blob/main/CHANGELOG.md" data-i18n="footer.changelog">Changelog</a>
<span aria-hidden="true"> · </span>
<a href="https://github.com/steipete/CodexBar/blob/main/LICENSE">MIT</a>
<span aria-hidden="true"> · </span>
<a href="https://trimmy.app">trimmy.app</a>
</footer>
<script type="module" src="./site.js?v=4"></script>
</body>
</html>