Releases: vava-nessa/free-coding-models
Release list
v0.5.81
Added
- 3 new free recurring providers (total 22 providers, ~207 models)
- Pollinations AI — 10 models
gen.pollinations.ai/v1:laguna,minimax-m2.7,qwen-coder,deepseek,kimi-code,openai,gemma-4-31b,gpt-oss,qwen3.7-flash,nemotron-3.5-lightning— free via daily Pollen grants (Quest 3.25) ,⚠️ experimental integration not yet confirmed stable (Pollen system may change,MISS= 402 when balance 0,HITcache may still 200) - SiliconFlow — 3 models
api.siliconflow.cn/v1:THUDM/GLM-Z1-9B-0414,Qwen/Qwen3-8B,deepseek-ai/DeepSeek-R1-Distill-Qwen-7B— 3 models @ $0 forever, 1000 RPM, phone SMS required, verified 2026-08-24 via pricing page - Requesty — 12 models
router.requesty.ai/v1:nvidia/nemotron-3-ultra-550b-a55b,poolside/laguna-xs.2,nvidia/nemotron-3-super,poolside/laguna-m.1,google/gemma-4-31b-it,nvidia/nemotron-3-nano-omni,nvidia/nemotron-3-nano,nvidia/nemotron-3.5-lightning-30b-a3b,mistral/leanstral-1-5,novita/ling-3.0-tiny,nvidia/content-safety,nvidia/muse-glimmer-30b— 200 req/day free no card, 4x OpenRouter, verified live viaGET /v1/models676 models 12 zero-price
- Pollinations AI — 10 models
- Provider metadata for the 3 new providers:
ENV_VAR_NAMES(POLLINATIONS_API_KEY,SILICONFLOW_API_KEY,REQUESTY_API_KEY),PROVIDER_METADATAlabels/couleurs/signupHint/rateLimits with detailed Pollen explanation,PROVIDER_CAPABILITIESdaily reset,PROVIDER_AUTH_ENDPOINTSfixes - Theme colors for
pollinations(pink) andrequesty(blue) in both dark/light palettes - Pollen help in Settings overlay and README/website: explains Pollen ≈ $1, daily Quest grants via tier/quests, 0 Pollen = 402, HIT vs MISS, wallet
enter.pollinations.ai, grants at midnight UTC, experimental note
Changed
- README : removed hard-coded total counts everywhere (super chiant a maintenir) —
~207 models across 22 providers->a large catalog of free coding models from 20+ providers, badgesmodels-207->models-large catalogproviders-22->providers-20+,~222video caption ->many,Parallel pings all ~207->all models,~207 cataloged->the cataloged; provider table updated to 22 rows with real per-provider counts and new Pollinations/SiliconFlow/Requesty rows, added Pollen explainer block after table (with experimental warning) and SiliconFlow/Requesty verified note; removed GitHub Models from active table (retired 2026-07-30) - Website docs :
website/src/content/docs/introduction.mdxandquick-start.mdxandcore/providers.mdxanddocs/development.mdandroutes/index.tsxhero222+->Many— same generic wording, no hard totals - Pollinations experimental flag : README and
website/src/content/docs/core/providers.mdxmark Pollinations⚠️ experimentaland notenot yet confirmed stable
Fixed
- SiliconFlow baseURL :
api.siliconflow.com->api.siliconflow.cninsrc/core/opencode.js(2 sites) andsrc/core/kilo.jsandsrc/core/provider-key-tester.jssiliconflowendpoint nowhttps://api.siliconflow.cn/v1/models - Provider key tester :
pollinationsandrequestyset tonull(their/v1/modelsare public without auth, so auth-only probe would always 200 and give false ok, now it falls back to ping which correctly shows 402 when balance 0) - Sync :
sync-website-sources.shrun ->website/src/_fcm-sources/sources.jsupdated to 22 providers
Verified
pnpm test813 pass 0 failnode -e import('./sources.js')22 providers 207 models 0 dups- Live probes 2026-08-24: Pollinations
sk_GCaY...andsk_0dSR...both402on MISS with0.0000balance (HIT still 200 via fallback), Quest wallet3.25not yet linked to keys (Budget ∞ but still 0), Requesty 12 zero-price confirmed, SiliconFlow pricing page verified
v0.5.80
Changed
- Catalog cleanup via @Muhammad95959 (PR #161). Removed/updated models that are no longer in live provider APIs:
- NVIDIA NIM: removed
z-ai/glm-5.2,mistralai/mistral-medium-3.5-128b(no longer inintegrate.api.nvidia.com/v1/models); kept Mistral via direct LP. - Cerebras: removed
zai-glm-4.7(shutdown 2026-08-17). - OpenRouter: removed
openai/gpt-oss-20b:free(only paid remains). - Codestral: removed
codestral-2501,codestral-2405(onlycodestral-2508/latestremain). - ZAI: removed
zai/glm-5v-turbo,zai/glm-4.7-flashx,zai/glm-4.6v(now paid-only). - OpenCode Zen: removed
deepseek-v4-flash-free,laguna-s-2.1-free(dropped from free-tier docs). - Ollama Cloud: removed
minimax-m2.5,gemini-3-flash-preview,kimi-k2.5; fixed IDsdeepseek-v4-flash/proandmistral-large-3/qwen3.5to new tags.
- NVIDIA NIM: removed
Fixed
- Test for NVIDIA probe list updated to reflect new catalog head (
moonshotai/kimi-k2.6etc.) sopnpm teststays green.
Tests
- 813/813 passing. Thanks @Muhammad95959 for the live catalog verification!
v0.5.79
Fixed
-
Fast-coding pool malformed tool_calls hang (fixes #124). Some providers returned
finish_reason: tool_callswithout atool_callsarray, causing pi and other OpenAI clients to wait forever. Router now normalizes such responses tofinish_reason: stopinsrc/core/router-daemon.js(normalizeToolCallsResponse) before forwarding, making the response spec-compliant even when upstream is quirky. Thanks @stgreenb. -
Docker mandatory update EACCES crash (fixes #109). Inside Docker the app lives at
/appand runs as non-rootfcm, sonpm i -galways hit EACCES on/usr/local/lib/node_modulesand showed "Mandatory update failed" then exited. AddedisRunningInDocker()insrc/core/updater.js(checks/.dockerenvand/appprefix) to skip mandatory startup updates in containers; rebuild the image to update. Thanks @karneaud.
Changed
- Closed older user feature requests with concise responses: #51 Nix module (PR welcome), #30 oh-my-opencode (wrapper externe, pas de duplication), #27 Claude Code integration (now via router
fcm). Only vava's own issues (75, 21, 18) remain open.
Tests
- 813/813 passing. Router now re-stringifies normalized JSON only when needed.
v0.5.78
Fixed
-
Router forwards
prompt_cache_keyto NVIDIA -> HTTP 400 (fixes #160). Clients using OpenAI JS SDK (pi agent) setprompt_cache_keyto session UUID for prompt caching; NVIDIA rejects it withUnsupported parameter(s): prompt_cache_key. Addedprompt_cache_keytoSTRIP_PARAMSinsrc/core/schema-normalizer.jsand addednvidia: normalizeNvidia(strip + orphan tool drop) toPROVIDER_NORMALIZERSsonormalizeRequestBody(body, 'nvidia')now strips the hint before forwarding. Verified with direct replay againstintegrate.api.nvidia.comandpnpm test813/813. Thanks @pelvity. -
Config
pingIntervalnot respected at startup (fixes #155). TUI always started in speed mode (2s) ignoringsettings.pingIntervaland--ping-interval. Nowsrc/tui/tui-state.jscreateTuiState()derivesinitialIntervalfromconfig.settings.pingInterval(already merged from CLI insrc/tui/app.js:283) and maps to mode viaintervalToPingMode(30000 -> slow, 10000 -> normal, 4000 -> forced, <=3000 -> speed). SetspingModeSourcetoconfigvsstartupand only setsspeedModeUntilwhen initial mode is speed. Users with 30s interval no longer burn quota on startup burst. Thanks @BetterToAutomateTheWorld. -
jcode configuration option for CLI and web (fixes #145). CLI Z cycle already had
jcodebut launch hung (stdin left in raw mode, REPL appeared frozen) and web had no jcode option at all.- CLI hang:
src/tui/key-handler.jslaunchSelectedModelnow callsstopUi({ resetRawMode: true })(wasstopUi()with raw mode still enabled) andsrc/core/tool-launchers.jsspawnCommanddefensively resetsstdin.setRawMode(false)before handing TTY to child. - Web: Added
jcodetoINSTALL_TARGET_MODESinsrc/core/endpoint-installer.js(now 15 targets,jcodeafterpito matchTOOL_MODE_ORDERorder) with env-based installer (~/.fcm-jcode-env), mirrored inweb/src/utils/m3.jsINSTALL_ENDPOINT_TOOL_MODES, and fixedweb/src/hooks/useToolMode.jscycle bug (TOOL_MODE_ORDER->INSTALL_ENDPOINT_TOOL_MODES). Web/api/tool-modenow acceptsjcodewithout 422 and dropdown/cycle shows it. Thanks @plahakps.
- CLI hang:
Changed
src/core/schema-normalizer.jsJSDoc now exportsnormalizeNvidiaand clarifies per-provider normalization.web/src/utils/m3.jsandsrc/core/endpoint-installer.jstool order now matches CLI'sTOOL_MODE_ORDER(opencode -> pi -> jcode -> opencode-desktop ...).
Tests
- 813/813 passing. Updated
test/test.jsendpoint install target expectation to includejcode.
v0.5.77
Fixed
- Release 0.5.76 failed to build and never reached npm — the
deps: major-updatesmerge in 0.5.76 bumped@tanstack/react-table8.21.3->9.1.2andchalk5.6.2->6.0.0. Table v9 changed its exports (useReactTable/getCoreRowModelno longer at the top level, newuseTable+tableFeaturesAPI), soweb/src/components/dashboard/ModelTable.jsx:17threwMISSING_EXPORTandvite buildfailed in CI. Reverted both deps to their last working majors (8.21.3and5.6.2), restoredweb/src/components/dashboard/ModelTable.jsx:17to the v8 API (useReactTable,createColumnHelper), and setpackage.json:85enginesback to>=18.0.0withpnpm-lock.yamlsynced. The major bump is kept on hold until a proper v9 migration (useTable+tableFeaturesoruseLegacyTable) is done and manually tested.pnpm testis813/813andpnpm build:webnow succeeds again. - Test
engines requires node >= 18was flipped to>=22— revertedtest/test.js:2376to expect18to match the reverted engines.
Changed
- No new features — this is a pure build-fix release so the Proxmox + router tracking from 0.5.76 (which was merged but never published) can finally ship as 0.5.77.
Tests
- 813/813 passing,
vite buildgreen.
v0.5.75
Fixed
- Contributors table now lists the two latest contributors —
README.md:883previously showed 10 avatars ending atfan92rus. Added@Muhammad95959(--config-dirflag, PR #158) and@FaintFlower(Star History mirror, PR #159) with their avatars and a dedicated footer line each, and updatedcolspanfrom 10 to 12.AGENTS.md:104contributor list also updated so future automation picks them up.
Docs
- No code changes — pure documentation sync so the published npm README and GitHub README correctly credit recent PR authors.
v0.5.74
Added
--config-dir <dir>flag for XDG and custom config locations — you can now point free-coding-models at any directory for its state files viafree-coding-models --config-dir ~/.config/free-coding-models(or any path) or viaFCM_CONFIG_DIR(useful for Docker). When set,config.json,backups/andcache.jsonall live together in the chosen directory instead of scattering~/.free-coding-models.json+~/.free-coding-models.cache.json+~/.free-coding-models.backups. The flag is parsed before any module loads sosrc/core/config.js,src/core/cache.jsandsrc/core/security.jsall respect it,docker-entrypoint.shandsrc/tui/cli-help.jsare updated, and 12 new tests covergetConfigDir(),CONFIG_PATHand cache relocation. With the follow-up fix,~and~/are now correctly expanded to your homedir (previouslyresolve()would treat~as a literal folder) andsaveConfig()/saveCache()auto-create the target directory on first run so an empty XDG folder no longer throwsENOENT. Thanks @Muhammad95959 for the feature (PR #158).- Dependabot auto-merge workflow — new
.github/workflows/dependabot-auto-merge.ymlthat squash-merges thepatch-and-minorgroup automatically when required checks (audit,lockfile-lint,Vercel,semgrep) are green. Major updates stay manual for human review. This keeps weekly dependency churn low while preserving safety for breaking changes.
Fixed
- Star History chart in README was showing a "GitHub restricted access" placeholder — GitHub restricted stargazer data and
api.star-history.com/chartnow returns an SVG withx-chart-status: restrictedand a message instead of the real graph. The README now points to the working mirrorstar-history.dera.page/svgand linkstar-history.dera.page/#..., verified to return a real 200 SVG. Fixes the broken image at the bottom of the README. Thanks @FaintFlower (PR #159). - First-run crash when
--config-dirpoints to a fresh directory — previouslysaveConfigwrote to${CONFIG_PATH}.tmp-...and thenrenamewithout ensuring the parent dir exists, which threwENOENTon a non-existent XDG path. BothsaveConfig(viadirname(CONFIG_PATH)) andsaveCache(viadirname(cachePath)) nowmkdir -pwith0o700before writing. - Tilde not expanded for
--config-dir/FCM_CONFIG_DIR—resolve("~/...")would create a literal~/folder undercwd. AddedexpandTilde()that maps~and~/tohomedir()beforeresolve(), in bothsrc/core/config.jsand the pre-import handling inbin/free-coding-models.js. - Test
MODELS flat array matches sources countnow accounts for deprecated models —sources.jsfilters models withdeprecatedAfter < today(e.g.cerebras/zai-glm-4.7deprecated 2026-08-17) when buildingMODELS, but the test counted all models. The test now mirrors the same filter so the suite is green (813/813).
Changed
- Dependencies (deps #152, patch-and-minor group, 6 updates) —
@tabler/icons-react3.45.0 -> 3.46.0,kandown0.34.3 -> 0.50.0,@tanstack/react-virtual3.14.8 -> 3.14.9,@vitejs/plugin-react6.0.4 -> 6.0.5,vite8.1.5 -> 8.2.1,vite-plus0.2.6 -> 0.2.9. All checks (audit, lockfile-lint, Vercel, semgrep, notify-discord) passed. Major group (chalk5.6.2 -> 6.0.0 which requires Node 22, plus@tanstack/react-table8 -> 9) is left for manual review and not auto-merged.
Tests
- 813 tests passing (up from 812 after fixing the deprecated-model count and adding 12 new tests for
--config-dir/ cache relocation).
v0.5.73
Fixed
- Web dashboard (Docker/daemon) now updates model stats live — the dashboard loaded the initial model table but latency, status, verdict, and health cells stayed frozen forever. The daemon broadcast a lightweight
probeevent after each ping, but the web frontend (web/src/hooks/useSocket.js) only listens for fullmodelsevents — so results were computed and stored but never pushed to the browser.recordProbeResultnow schedules a debounced full-state broadcast (max once per 250ms window during probe bursts), matching the payload shape the frontend already consumes. (Fixes GitHub issue #147)
Tests
- 800/800 tests passing, including a new regression test that opens the SSE stream, records a probe result, and asserts an
event: modelspayload arrives containing the probed model.
v0.5.72
Fixed
- HTTP 529 (Service overloaded) now triggers failover — when an upstream provider returns 529, the router previously passed the error straight to the client instead of failing over to the next model in the priority chain. Clients like OpenCode saw
unknown [retrying attempt #3]because every retry hit the same overloaded upstream. 529 is now part of the retryable status set ([429, 500, 502, 503, 529]) so it cascades to the next model, matching the behavior of 429/500/502/503 in both the streaming and non-streaming code paths. (Fixes GitHub issue #148)
Tests
- 799/799 tests passing, including two new regression tests covering 529 failover for non-streaming and streaming requests (priority-1 model returns 529 → request succeeds via priority-2 model).
v0.5.71
Fixed
- Goose launch wrote a hardcoded 128k context limit — when launching a model into Goose with
--goose(or via the TUI Enter flow), the generated~/.config/goose/custom_providers/fcm-<provider>.jsonalways setcontext_limit: 128000, ignoring the model's real context window. Models with larger contexts (e.g. MiniMax M3, 1M) were silently capped at 128k, and free-tier models with smaller limits (e.g. Cerebras 64-65k) were advertised above what the API actually allows. The launcher now uses the sameparseContextWindow(model.ctx)logic as the Install Endpoints flow, so the context limit always matches the catalog value. (Fixes GitHub issue #153) - Stale Cerebras context references in docs — README.md, packages/fcm-pi/README.md, and the Pi integration docs claimed Cerebras free tier has an "~8k total token limit". Per the official Cerebras Inference docs the free tier now caps context at ~64-65k (paid tier gets 131k). Docs updated to match.
Changed
parseContextWindowis now exported fromsrc/core/endpoint-installer.jsso the Goose launcher (src/core/tool-launchers.js) and the Install Endpoints flow share the same single source of truth for context parsing.
Tests
- 797/797 tests passing, including a new regression assertion that a 1M-context model launched into Goose produces
context_limit: 1000000in the generated provider file.