Giting.
낮의 Giting

홈 · LLM 라우터 · 무료 요금제 · OpenAI 호환 · 셀프호스트 · TypeScript · MIT

freellmapi 대표 이미지 여러 회사의 무료 요금제를 하나의 `/v1` 주소 뒤에 모으는 셀프호스트 라우터. 쓰는 쪽은 OpenAI SDK 처럼 부르면 되고, 라우터가 키·한도·실패를 대신 관리한다. Anthropic·Gemini·Ollama 형식 주소도 같이 열어 둬서 코딩 에이전트에 그대로 물린다
분석 리포트실측 정보사이트적용점원문 README

뭔가

AI 회사들은 대부분 무료 요금제를 준다. 한 달에 몇백만 토큰, 하루에 몇천 번. 하나만 보면 장난감이다. README 는 이것들을 전부 합치면 한 달에 약 74억 토큰이 된다고 계산한다.

문제는 합치는 일이다. 회사마다 SDK 가 다르고, 한도가 다르고, 실패하는 방식이 다르다. FreeLLMAPI 는 이것을 OpenAI 호환 주소 하나(/v1)로 접는다. 쓰는 쪽은 평소처럼 부르고, 어느 회사의 어느 모델로 갈지는 라우터가 정한다.

라우터가 하는 일

요청이 오면 우선순위가 가장 높은 모델부터 본다. 살아 있는 키가 있는지, 분당·일일 한도가 남았는지. 둘 다 되면 키를 풀어 그 회사로 보낸다. 429(한도 초과)나 5xx 가 오면 그 모델을 잠시 쉬게 하고 다음 모델로 넘긴다.

한도 장부(services/ratelimit.ts)는 메모리에서 세고 SQLite 에 적는다. 그래서 하루가 늦어질수록 좋은 모델부터 한도에 걸리고, 결과물 품질이 내려간다. UTC 자정에 다시 올라간다. README 가 이걸 숨기지 않고 적어 둔 점은 좋다.

키와 목록, 믿을 만한가

공급사 키는 AES-256-GCM 으로 암호화해 둔다. 운영 모드에서는 암호화 키를 환경 변수로 직접 줘야 서버가 뜬다. 예전에는 개발 모드에서 키를 DB 안에 같이 넣어 두다가, DB 를 복사하면 키도 따라가는 문제가 있어 파일로 뺐다는 주석이 남아 있다.

모델 목록은 freellmapi.co 에서 받아 온다. 받은 바이트는 고정된 Ed25519 공개키로 검증한 뒤에만 적용한다. 무료 설치가 이때 보내는 것은 마지막으로 적용한 버전 하나뿐이고, CATALOG_SYNC_DISABLED 로 아예 끌 수 있다. 요청 기록·분석 화면은 전부 로컬 DB 에서 그린다.

요청이 어디로 가는가

무료 요금제를 쌓는다는 건 내 프롬프트가 여러 회사로 흩어진다는 뜻이다. 공급사 연결 코드 30개 중에는 대형 회사 말고 작은 중계 서비스(Electron Hub·Api.Airforce 등)도 있다. 키 없이 자동으로 붙는 곳은 AI Horde 하나인데, 자원봉사자들의 GPU 로 도는 네트워크다. 민감한 글을 다룬다면 어느 공급사를 켤지 직접 고르는 게 맞다.

실측

항목값
기준 커밋ffef850 (2026-10-07)
파일 · 줄1,130 · 270,960
TypeScript663파일 136,255줄 · TSX 110파일 21,113줄
테스트 · CI383파일 · 4개
커밋 · 90일850 · 484
기여자 · 태그95 · 56
이슈 응답25건 중 13건, 중앙값 11.9시간

약관 (저자가 직접 정리한 표)

저자는 회사별 약관이 개인용 프록시를 어떻게 보는지 직접 검토해 표로 남겼다(2026-05). 요약하면 Groq·Cerebras·Mistral·OpenRouter 는 괜찮을 것, Google·NVIDIA·GitHub Models·Z.ai 는 조심, Cohere 는 피하라. 지키라는 규칙은 넷이다. 회사당 계정 하나, 되팔지 않기, 주소를 다른 사람과 나누지 않기, 무료 요금제를 유료 운영 백엔드처럼 두들기지 않기. 법률 자문이 아니라는 단서도 붙어 있다.

쓸까, 참고할까

개인 실험이라면 써 볼 만하다. 만듦새가 좋고, 끄고 고를 수 있는 손잡이가 다 있다. 사람들이 쓰는 제품의 백엔드라면 쓰지 않는다. README 스스로 그렇게 말하고, 회사들이 한도를 바꾸는 날 서비스가 같이 흔들린다.

가져올 것은 설계다. 한도 장부와 쉬는 시간으로 다음 모델로 넘기는 라우터, 서명으로 검증하는 목록 피드는 유료 API 를 여럿 쓸 때도 그대로 쓸모 있다.

실측 정보

무엇
여러 회사의 무료 요금제를 하나의 `/v1` 주소 뒤에 모으는 셀프호스트 라우터. 쓰는 쪽은 OpenAI SDK 처럼 부르면 되고, 라우터가 키·한도·실패를 대신 관리한다. Anthropic·Gemini·Ollama 형식 주소도 같이 열어 둬서 코딩 에이전트에 그대로 물린다
라우팅
요청마다 우선순위가 가장 높은 모델 중 ① 살아 있는 키가 있고 ② 분당·일일 요청·토큰 한도가 모두 남은 것을 고른다. 429·5xx 가 나면 그 모델을 잠시 쉬게 하고 다음 모델로 넘긴다. 한도 장부는 메모리 카운터를 SQLite 에 기록하는 방식(`services/ratelimit.ts`)
키 보관
공급사 키는 AES-256-GCM 으로 암호화해 SQLite 에 둔다. 운영 모드에서는 `ENCRYPTION_KEY` 를 직접 줘야 뜨고, 개발 모드에서만 키 파일을 DB 옆에 0600 권한으로 만든다(예전엔 DB 안에 같이 두던 것을 고친 흔적이 주석에 남아 있다). 키 교체 스크립트도 있다
모델 목록 갱신
freellmapi.co 의 목록 피드를 받아 새 모델·한도 변경을 반영한다. 받은 바이트를 고정된 Ed25519 공개키로 검증한 뒤에만 적용한다. 무료 설치는 월간 스냅숏(새 모델이 30일 늦게 온다), 유료 라이선스는 실시간. `CATALOG_SYNC_DISABLED` 로 끌 수 있고, 무료 설치가 보내는 것은 마지막 적용 버전(`since`) 하나뿐이다
공급사
README 기준 34곳 635개 무료 모델 주소, 연결 코드는 `server/src/providers/` 30개 파일(대부분 OpenAI 호환 공용 어댑터 위에 얹었다). 대형 회사 외에 작은 중계 서비스(Electron Hub·Api.Airforce 등)도 들어 있다. 키 없이 자동으로 붙는 곳은 AI Horde 하나(자원봉사 GPU 네트워크)
규모 / 실측
1,130파일 · 270,960 LOC. TypeScript 663파일 136,255줄 + TSX 110파일 21,113줄. 구성은 server·client·cli·shared 네 워크스페이스와 데스크톱 앱. ✅ 테스트 파일 383개, ✅ CI 워크플로 4개
활발 / 유지
첫 커밋 2026-04-21(약 6개월). 커밋 850 중 90일에 484, 기여자 95명, ✅ 태그 56개(최신 v0.13.6, 10/7). 별 31,421 · 포크 4,398. 열린 이슈 35, 표본 25건 중 응답 13건(중앙값 11.9시간)
돈 버는 구조
코드는 MIT 로 전부 공개다. 돈은 '실시간 모델 목록'에서 번다(연 $19). 무료 설치도 같은 서명 목록을 받지만 한 달 늦게 받는다. README 기준 지금 무료판은 303개 모델이 뒤처져 있다. 기능을 막지는 않고 도착만 늦춘다

사이트 실측

주소
freellmapi.co
응답 · 첫 화면
200 · 1.3초 (데스크톱)
요청 · 전송량
29개 · 236KB
깨진 요청 · 콘솔 오류
1개 · 0개
폰(390px)
가로 넘침 없음
디자인
밝은 화면 · Geist

홈페이지를 실제 크롬으로 띄워 첫 화면까지만 쟀습니다(2026-10-16 · 데스크톱 1440px · 폰 390px). 로그인 · 입력 같은 동작은 하지 않았고, 사이트 상태는 리포 품질과 따로 봅니다. 색 칸은 바탕 · 면 · 글자 · 흐린 글자 · 강조 · 선, 점선은 「못 잼」.

적용점

  • 이럴 때 유용개인 프로젝트·학습·프로토타입에서 모델 비용 없이 많이 돌려 보고 싶을 때. 여러 회사 키를 한 번 넣어 두면 SDK·한도·실패 처리를 하나의 주소로 끝낸다. 코딩 에이전트나 가벼운 자동화를 무료 모델로 물려 보는 실험에 맞다.
  • 이럴 땐 주의README 스스로 운영용이 아니라고 적었다. 최상위 모델은 없고, 응답 속도는 들쭉날쭉하고, 하루가 늦어질수록 좋은 모델이 한도에 걸려 품질이 떨어진다. 약관도 쓰는 사람이 진다. 저자의 회사별 검토(2026-05)에서도 Cohere 는 피하라, Google·NVIDIA·GitHub Models 는 조심하라고 나온다. 요청이 작은 중계 서비스나 자원봉사 GPU(AI Horde)로 갈 수 있으니 민감한 글은 공급사를 골라 쓴다.
  • 먼저 볼 것Docker Compose 로 띄우면 기본이 127.0.0.1 에만 열린다. 반대로 `npm run dev` 로 띄우면 기본 주소가 모든 네트워크(`::`)라 같은 공유기 기기에서 닿는다(/v1 은 통합 키로 막혀 있다). 키는 쓸 공급사만 넣고, 공급사별 약관 표(`docs/en/architecture/00-high-level-index.md`)를 먼저 읽는다.
◈ 참고용

판정은 참고용이다. 만듦새는 좋다. 테스트 383개와 CI 4개가 있고, 태그를 꾸준히 찍고, 이슈에 하루 안에 답한다. 키를 암호화하고, 받아 온 모델 목록을 서명으로 검증하고, 끄는 스위치까지 둔 것도 성실하다. 오픈소스에 유료 목록을 얹은 수익 구조도 기능을 막지 않고 도착만 늦추는 방식이라 깔끔하다. 그런데도 도입 후보로 올리지 않는 이유는 이 도구가 서 있는 땅 때문이다. 무료 요금제는 시제품을 만들라고 주는 것이지 서비스를 받치라고 주는 것이 아니고, README 도 그렇게 말한다. 회사들은 한도와 약관을 예고 없이 바꾸고, 그 위험은 고스란히 쓰는 사람이 진다. 그래서 개인 실험에는 써 볼 만하지만, 사람들이 쓰는 제품의 백엔드로는 권하지 않는다. 가져올 것은 코드보다 설계다. 한도 장부와 쉬는 시간(cooldown)으로 다음 모델로 넘기는 라우터, 서명된 목록 피드는 유료 API 를 여럿 쓰는 경우에도 그대로 쓸모가 있다.

원문 README

아래는 tashfeenahmed/freellmapi 저장소의 README 원문입니다(GitHub 렌더, 수집 시점 기준). 저작권은 원 프로젝트에 있으며 원 저장소의 라이선스를 따릅니다. GitHub에서 보기

README 전문 펼치기

FreeLLMAPI

7.4 billion tokens per month. 34 free LLM providers. 635 free model endpoints. One OpenAI-compatible endpoint.

Aggregate free tiers from dozens of providers, plus custom OpenAI-compatible chat, embedding, image, and audio endpoints, behind a single /v1 API. Keys are stored encrypted. A router picks the best available model for each request, falls over to the next provider when one is rate-limited, and tracks per-key usage so you stay under every free-tier cap.

CI GitHub stars License: MIT PRs Welcome Docker image Ask DeepWiki

freellmapi.co · browse the full catalog: 474 model families, 635 free endpoints

English · 简体中文

Download for macOS Download for Windows Self-host with Docker Get it on Google Play Download on the App Store

FreeLLMAPI dashboard — Models page with the monthly token budget

Your router updates its own model catalog from a signed feed: new free models, quota changes, and compatibility fixes land without a git pull. Free installs get the monthly snapshot, so a model reaches them 30 days after it joins the live feed; premium routers get it the same day. Go live at freellmapi.co ($19/yr, cancel anytime).


Contents

Guides: Install & deploy · API reference · Clients & coding agents · Prompt compression · Architecture & internals · Documentation index · Contributor guide

Why this exists

Every serious AI lab now offers a free tier, a few million tokens a month, a few thousand requests a day. On its own each tier is a toy. Stacked together, they add up to roughly 7.4 billion tokens per month of working inference capacity, across 474 model families / 635 provider endpoints from small-and-fast to reasonably capable.

The problem is that stacking them by hand is painful: thirty-four different SDKs, thirty-four different rate limits, thirty-four places a request can fail. FreeLLMAPI collapses that into one OpenAI-compatible endpoint. Point any OpenAI client library at your local server, and it routes transparently across whichever providers you've added keys for.

And the free-tier landscape shifts weekly: providers launch models, retire them, and change quotas without notice. FreeLLMAPI tracks all of that for you. The router pulls a signed model catalog from freellmapi.co on its own, so your install keeps up without a git pull. See Premium (live catalog) for how fast it keeps up.

The free tier, stacked — ~7.4B tokens of free inference per month across 34 providers

Supported providers

Google
Google
Groq
Groq
Cerebras
Cerebras
OpenCode Zen
OpenCode Zen
Mistral
Mistral
OpenRouter
OpenRouter
Cloudflare
Cloudflare
Cohere
Cohere
Z.ai (Zhipu)
Z.ai (Zhipu)
NVIDIA
NVIDIA
HuggingFace
HuggingFace
ModelScope
Qwen3 · DeepSeek V4 · GLM-5 (needs Aliyun cn binding)

… and 22 more free providers

Plus a custom provider — point chat, embedding, image, or audio models at any OpenAI-compatible endpoint (llama.cpp, LM Studio, vLLM, a local Ollama, or a remote gateway) from the Keys page.

The full, always-current list lives at freellmapi.co/models with per-model rate limits, context windows, and free-token budgets.

Compatible CLIs & coding agents

Claude Code
Claude Code
Codex CLI
Codex CLI
Gemini CLI
Gemini CLI
Cursor
Cursor
Cline
Cline
Roo Code
Roo Code
OpenCode
OpenCode
Aider
Aider

… plus Continue, Goose, Qwen Code, Kilo Code, Crush, Zed, JetBrains AI, DeepSeek Harness, MiMo Code, AtomCode, OpenClaw, Hermes Agent, Pi, Reasonix and any OpenAI-compatible, Anthropic, Gemini or Ollama client

Most agents configure themselves with one command that reads your live catalog, backs up the existing config and merges into it:

npx freellmapi setup-claude --url http://localhost:3001 --api-key <unified-key>

All supported agents and their setup commands → · Per-tool recipes, MCP server and URL tokens →

How it compares

Feature comparison against OpenRouter, LiteLLM, and Portkey

Based on public documentation, July 2026 — corrections welcome.

Features

Feature overview

  • Every OpenAI-style surface — /v1/chat/completions, /v1/responses (what Codex CLI needs), /v1/completions (editor ghost-text autocomplete), /v1/images/generations, /v1/videos/generations, /v1/audio/speech, /v1/audio/transcriptions, /v1/embeddings, and /v1/models — streaming and non-streaming, from the official SDKs or any OpenAI-compatible client. API reference →
  • Anthropic Messages API — /v1/messages speaks Anthropic's wire format over the same router, so Claude Code and the official Anthropic SDKs run against your free pool. Details →
  • Native Gemini + Ollama surfaces — Gemini CLI can use /v1beta (generateContent, streaming, token counting, models), while opt-in Ollama emulation serves NDJSON chat/generate, tags, metadata, and embeddings for Zed, JetBrains, and other local-model clients.
  • Fusion (multi-model synthesis) — request the virtual fusion model and the router fans your prompt out to a panel of diverse free models in parallel, then a judge model synthesizes one answer from the drafts. Details →
  • Image, video & speech generation — /v1/images/generations, /v1/videos/generations, and /v1/audio/speech route across the providers that serve media models; images and speech also accept custom OpenAI-compatible media endpoints. Video jobs are normalized across synchronous and queued providers and return a completed MP4.
  • Tool calling & structured outputs — OpenAI-style tools round-trip across providers (plain-text tool calls are rescued into real tool_calls), plus response_format, seed, logprobs, penalties, and the rest of the sampling params passed through per provider.
  • Smart routing, six strategies — live per-model speed/capability/reliability scores rank your chain; automatic fallover retries the next model on 429/5xx with cooldowns and key rotation. Routing in detail →
  • Unified models & profiles — the same model on several providers collapses into one entry with strict in-group failover; named fallback-chain profiles (a coding chain, a vision chain) switch from the dashboard or per request via auto:<profile>, and custom chains can be renamed in place from the chain manager.
  • Per-key rate tracking — RPM/RPD/TPM/TPD counters per (platform, model, key) that learn providers' reported ceilings, so routing always stays under every cap.
  • Self-updating model catalog — the router syncs a signed catalog from freellmapi.co twice a day: new models, quota changes, and provider quirk fixes land automatically. Free installs track the monthly snapshot, which each model joins 30 days after it lands in the live feed; premium routers get it same-day. Premium →
  • Sticky sessions & context handoff — conversations stay on one model for 30 minutes; an optional compact handoff note keeps the thread coherent when a mid-chat switch does happen. Details →
  • Prompt compression (opt-in) — a shared, fail-open request pipeline can deduplicate prompts, filter tool output, compact repeated JSON, and trim stale context before cache lookup and routing. Details →
  • Encrypted keys, one token out — provider keys are AES-256-GCM encrypted in SQLite and decrypted in-memory per request; your apps only ever see a single unified freellmapi-… bearer token.
  • Admin dashboard & analytics — React UI to manage keys, reorder the chain, run a playground, and read p50/p95/TTFT analytics over 24h–90d windows; login-gated, dark/light themes, 60 languages.
  • ChatGPT-ready MCP server & interactive docs — ChatGPT and other MCP clients can call FreeLLMAPI inference, list usable models, inspect provider health/usage/cache/routing metadata, and manage the routing strategy over /mcp; a dependency-free OpenAPI viewer lives at /v1/docs. ChatGPT and coding agents →
  • Ops niceties — opt-in response cache, encrypted DB backups, periodic key health checks, bulk key import/export, declarative startup config. Install & deploy →
  • Runs anywhere Node 20+ runs — Windows, macOS, Linux servers, or a small ARM SBC (Raspberry Pi included). ~40 MB RSS at idle behind PM2 / systemd / whatever supervisor you prefer.

The scope is deliberately narrow — see what's not supported yet.

Quick start

One-liner (Docker required — sets up ~/freellmapi, generates an encryption key, pulls the image, and starts the container):

curl -fsSL https://freellmapi.co/install.sh | bash

Prefer to read before you pipe to bash? The script is here. Re-running it is safe: your .env (and encryption key) is preserved and the container updates to :latest.

Open http://localhost:3001, add your provider keys on the Keys page, reorder the Fallback Chain to taste, and grab your unified API key from the Keys page header. That unified key is what you point your OpenAI SDK at.

On Windows, the easiest path is the desktop .exe installer from Releases (below). On Android, see the experimental Termux guide.

Everything else — Docker Compose, local development, declarative startup config, production builds, LAN access, and backups — is in docs/en/install/01-install.md.

Desktop app

A native menu-bar app lives in desktop/: the entire router + dashboard running locally from your tray, with a glass popover showing live request stats.

FreeLLMAPI desktop app

Download from Releases — the macOS .dmg and the Windows .exe installer are attached to every release. No account or password to set up: the only credential you need is the unified API key from the tray popover. Build-from-source steps and where your data lives: docs/en/install/01-install.md#desktop-app.

For macOS 12 Monterey or later, choose arm64 (Apple Silicon) or x64 (Intel). Both Mac builds also include a ZIP download.

Works with OpenAI-compatible clients

Anything that can target an OpenAI-compatible base URL works: set it to http://localhost:3001/v1 with the unified key from the dashboard. Every generator supports --dry-run; npx freellmapi launch (Claude Code) and launch-codex (Codex) keep credentials out of config files entirely. The router also doubles as an MCP server your agents can introspect mid-session.

ChatGPT connects to the same local router through a private Secure MCP Tunnel. The ask_freellmapi MCP tool routes a ChatGPT-requested task through /v1/chat/completions and returns the answer with served-model, fallback, cache, execution, and token metadata. Base URL and bearer authentication live in the tunnel-client configuration; the default model is set with MCP_INFERENCE_DEFAULT_MODEL (auto when unset). No key belongs in Git or in the MCP URL. ChatGPT setup →

Provider keys can be managed from the terminal too, with a dashboard session token (FREELLMAPI_DASHBOARD_TOKEN or --token): npx freellmapi keys add|list|remove|test <platform>, where keys test re-checks stored keys. See cli/README.md.

FreeLLMAPI is local-first and single-user by design. Your provider keys stay in your SQLite database, encrypted at rest, and requests go from your machine to the upstream providers you enabled.

Languages

The dashboard ships in 60 languages (the desktop tray menu in 6). The UI auto-detects your browser/system language on first load and you can switch any time from ⋯ → Settings; the choice is remembered. Right-to-left languages (العربية, עברית, فارسی, اردو) flip the whole layout automatically, and only the active language's dictionary is loaded — the rest never touch your bandwidth.

United States China Spain France Brazil Italy India Saudi Arabia Bangladesh Russia Pakistan Indonesia Germany Japan Kenya Türkiye Vietnam South Korea Iran Thailand Poland Ukraine Myanmar Romania Netherlands Malaysia Philippines Nigeria Ethiopia Uzbekistan Azerbaijan Sri Lanka Nepal Cambodia Greece Czechia Hungary Sweden Israel Denmark Finland Norway Slovakia Bulgaria Croatia Serbia Lithuania Taiwan Portugal Georgia

The full list of locales lives in client/src/i18n/locale-config.ts.

The original six locales are human-reviewed; the newer ones are machine- translated and improve as native speakers send corrections — a one-string PR is a great first contribution.

Translations live in client/src/i18n/locales/ as flat JSON files. To fix a string, edit the value in the locale's JSON file. To add a language, copy en.json, translate the values, and register the locale in client/src/i18n/locale-config.ts (and desktop/src/i18n.ts for the tray strings); npm test checks every locale for key/placeholder parity — PRs welcome.

Premium (live catalog)

The router keeps its model catalog fresh on its own: it pulls a signed catalog from freellmapi.co twice a day and applies new models, quota changes, and provider quirk fixes to your local DB. Your own enable/disable choices and custom providers are never touched, and every download is verified against a pinned Ed25519 key before it is applied.

The catalog currently tracks 34 providers, 474 model families, 635 free provider/model endpoints (584 chat, 41 embeddings, 7 transcription, 3 video), and roughly 7.4 billion tokens per month of listed free-tier capacity. Browse the full set at freellmapi.co/models.

Free installs pull the same signed catalog, but from the monthly snapshot: a model joins it 30 days after it lands in the live feed, so the free build currently sits about 303 models behind. Nothing expires and nothing is crippled — it just arrives later.

Premium keeps that signed catalog live on every router you run. When a provider launches a strong free model, quietly tightens a quota, or breaks a wire format, live-feed routers receive the update the same day we ship it.

Go live at freellmapi.co →

  • $19/year or $49 once, lifetime. Stripe checkout; cancel anytime, self-serve.
  • One fla_ key covers every router you run: desktop, homelab, Raspberry Pi.
  • Activate in the dashboard under Premium; cancel or manage billing self-serve at freellmapi.co/manage.
  • The router itself stays MIT-licensed and fully free, forever. Premium is only the live feed, and it's what funds the daily model testing and catalog maintenance that keeps the catalog working.

The catalog server never sees your prompts, completions, or provider keys — the router stays fully self-hosted either way.

Using the API

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:3001/v1",
    api_key="freellmapi-your-unified-key",
)

resp = client.chat.completions.create(
    model="auto",  # let the router pick; or "auto:fast", "auto:smart", a profile, or a model id
    messages=[{"role": "user", "content": "Summarise the fall of Rome in one sentence."}],
)
print(resp.choices[0].message.content)
print("Routed via:", resp.headers.get("x-routed-via"))

Streaming, the auto:* routing strategies, tool calling, vision input, Gemini Google Search grounding, embeddings, and the Anthropic Messages surface — with curl and Python examples for each — are all in docs/en/api/01-rest-api.md. Every response carries an X-Routed-Via: <platform>/<model> header so you can see which provider actually served it.

Screenshots

Models

Pick a routing strategy and watch the monthly token budget fill across the whole provider fleet. Every model shows live reliability, speed, and intelligence scores — the order below is how requests route right now.

Models page

Keys

Manage provider credentials and grab the unified API key your apps connect with. Each key shows a status dot and when it was last health-checked.

Keys page

Playground

Send a chat completion through the router and see which provider served it, with the model ID and latency printed right on the message. Attach files by button, drag-and-drop, or paste: images (PNG/JPEG/WebP/GIF) are downscaled in the browser and sent as image content parts to a vision-capable model, and text files (TXT/MD/CSV/JSON/LOG) are inlined into the prompt as fenced blocks.

Playground page

Analytics

Request volume, success rate, tokens in and out, average latency, and per-provider breakdowns over 24h / 7d / 30d / 90d windows.

Analytics page

How it works

One request in, the best free model out — the fallback chain with live scores, cooldowns, and quota tracking

One request in, the best free model out: the router picks the highest-priority model with a healthy key that's under all its rate limits, decrypts the key in memory, and calls the provider — on a 429/5xx it cools that key down and retries the next model in your chain. The component walkthrough, routing internals, and operational details live in docs/en/architecture/00-high-level-index.md.

FAQ

Do I need a password? Not for the desktop app — the dashboard signs itself in with a hidden local account, so there is nothing to set up and nothing to forget. Open it from the tray icon → Open Dashboard. Server installs (Docker, one-liner, npm run dev) do have an email + password account.

I forgot the password on a server install. Click Forgot password? on the login page. There is no email to send a link to, so the one-time code is printed to the server log — read it with docker compose logs -f freellmapi (or in the terminal running the server, or in the desktop log file), then enter it on the reset form. The code lasts 15 minutes.

Where are the logs? In the container log for Docker, in the terminal for a source run, and in <data dir>/logs/freeapi.log for the desktop app — reachable from the tray menu's Open Logs Folder.

How do I uninstall? Remove the app (Trash on macOS, Settings → Apps on Windows, docker compose down -v for Docker), then delete the data directory: %APPDATA%\FreeLLMAPI\, ~/Library/Application Support/FreeLLMAPI/, or ~/.config/FreeLLMAPI/. Uninstalling never touches that folder on its own.

Longer answers, per install method: docs/en/install/01-install.md#faq-passwords-logs-uninstall.

Limitations

Stacking free tiers has real trade-offs: no frontier models, variable latency, no SLA — and the effective intelligence of the endpoint dips late in the day as top models hit their daily caps, then resets at UTC midnight. Read the honest list in docs/en/architecture/00-high-level-index.md#limitations before building anything real on this.

Contributing

Contributors very welcome! See CONTRIBUTING.md for the dev loop, PR expectations, and the policy on AI/LLM-assisted contributions (short version: welcome, same quality bar as any other PR). Good first PRs:

  • Add a provider — copy server/src/providers/openai-compat.ts as a template, wire it into server/src/providers/index.ts, seed its models in server/src/db/index.ts, add a test in server/src/__tests__/providers/.
  • Add an endpoint — moderations and other OpenAI-compatible surfaces. The provider base class can grow new methods; adapters declare which they support.
  • Improve the router — cost-aware routing (cheapest-healthy-fastest tradeoffs), better latency-weighted priority, regional pinning.
  • Dashboard polish — charts on the Analytics page, key rotation UX, batch import of keys from .env.
  • Docs — more examples, client library snippets for Go/Rust/etc., a deployment recipe for Docker or Fly.

npm install && npm run dev gets you the server on :3001 and the dashboard on :5173, both with HMR. For a repeatable setup, use ./scripts/dev-bootstrap.sh on Bash or .\scripts\dev-bootstrap.ps1 on PowerShell; each preserves an existing .env. PRs should include a test, keep the existing suite green (npm test), and match the .editorconfig / tsconfig defaults already in the repo. Database migration workflow and the full contributor loop are in CONTRIBUTING.md.

Contributors

@moaaz12-web @lukasulc @VinhPhamAI @deadc @zhangyu1324 @kentpan @stephenzwj @chongjiazhen @vjsai @long2ice @sadesguy @hodlmybeer69-bit @phoenixikkifullstack @jtbrennan-git @praveenkumarpranjal @nordbyte @mybropro @danscMax @jhash @JammyJames1234 @coffcoe @Sumit4codes @meliani @thedavidweng @bharvey42 @yuvrxj-afk @Tushar49 @nicyoong @Aldo-f @Tazrif-Raim @m1nuzz @suantea @OhOkThisIsFine @LoneRifle @ita333 @barbotkonv @Naster17 @StealthTensor @EmranAhmed @itsfuad @RobinHoodO @hmm183 @duemilionidieuro-bot @cagedbird043 @jasnoorgill @Joey9024 @AskingConical @ProAlit @hjhhoni @immanuelsavio @Slyker @wells1013 @evgkrsk @aaronjmars @Robs87 @dashitongzhi @QingJ01 @3215 @saifulaiub123 @PietFourie @mhmdkrmabd @DemeulemeesterxMaxime @HoodBlah @SeanPedersen @andersmmg @chirag127 @allababbot @johan-droid @redenfire @itzpingcat @kairwang01 @gongjurenzhangwei @jsonring @1029734570 @86TheCactus @AmiroKD @ecryptomillionaire-dev @4riful @fix2015 @iisyw @xsfhacg @noobix @nandukmelath @NirvanaCh7 @Mohamed3nan @Arman-Espiar @MetaMysteries8 @lujun880726 @qq97693453 @emv33 @ousamabenyounes @yfdyh000 @s-uryansh @arsalanyavari @RoboMWM @gaurang-py @ddy4633 @UrbsKali @hb-0 @xyblue135 @Icesenator @ZER0-auto @tashdroid @Patrickleondev @hiiamwaffledev @w0fv1 @oppih @n3dhir @ksp2000 @quabynahdavis @qinghuanandejiangshi @qatcod @CooperSheroy @shahidbeig-a11y @Kaban15 @efcunha @sukaimi @rome-xi @bsi-bcp @rodion-gudz @bjornmage @kenanlabs @xzyj50609 @Ahmedtahoon2 @Inference1 @yzhkali @levonk @tripstar6000 @alkank @Yi-111-a

Disclaimer

This project is for personal experimentation and learning, not production. Free tiers exist so developers can prototype against them; they aren't a stable, supported inference substrate and shouldn't be treated as one. If you build something real on top of FreeLLMAPI, swap in a paid API before you ship. Your relationship with each upstream provider is governed by the terms you accepted when you created your account — those terms still apply when the traffic is proxied through this project, and you're responsible for complying with them.

How each provider's ToS views a personal, single-user proxy — reviewed provider by provider in May 2026 — is in docs/en/architecture/00-high-level-index.md#terms-of-service-review.

License

MIT

의견

판정에 대한 반론, 도입 경험, 정정 제보를 환영합니다. GitHub 계정으로 참여합니다.

이것도 재봤습니다

전체 리포트 →