Skip to content

Releases: vava-nessa/free-coding-models

v0.5.81

Choose a tag to compare

@github-actions github-actions released this 24 Aug 11:27

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, HIT cache 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 via GET /v1/models 676 models 12 zero-price
  • Provider metadata for the 3 new providers: ENV_VAR_NAMES (POLLINATIONS_API_KEY, SILICONFLOW_API_KEY, REQUESTY_API_KEY), PROVIDER_METADATA labels/couleurs/signupHint/rateLimits with detailed Pollen explanation, PROVIDER_CAPABILITIES daily reset, PROVIDER_AUTH_ENDPOINTS fixes
  • Theme colors for pollinations (pink) and requesty (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, badges models-207 -> models-large catalog providers-22 -> providers-20+, ~222 video 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.mdx and quick-start.mdx and core/providers.mdx and docs/development.md and routes/index.tsx hero 222+ -> Many — same generic wording, no hard totals
  • Pollinations experimental flag : README and website/src/content/docs/core/providers.mdx mark Pollinations ⚠️ experimental and note not yet confirmed stable

Fixed

  • SiliconFlow baseURL : api.siliconflow.com -> api.siliconflow.cn in src/core/opencode.js (2 sites) and src/core/kilo.js and src/core/provider-key-tester.js siliconflow endpoint now https://api.siliconflow.cn/v1/models
  • Provider key tester : pollinations and requesty set to null (their /v1/models are 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.sh run -> website/src/_fcm-sources/sources.js updated to 22 providers

Verified

  • pnpm test 813 pass 0 fail
  • node -e import('./sources.js') 22 providers 207 models 0 dups
  • Live probes 2026-08-24: Pollinations sk_GCaY... and sk_0dSR... both 402 on MISS with 0.0000 balance (HIT still 200 via fallback), Quest wallet 3.25 not yet linked to keys (Budget ∞ but still 0), Requesty 12 zero-price confirmed, SiliconFlow pricing page verified

v0.5.80

Choose a tag to compare

@github-actions github-actions released this 23 Aug 18:12

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 in integrate.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 (only codestral-2508/latest remain).
    • 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 IDs deepseek-v4-flash/pro and mistral-large-3/qwen3.5 to new tags.

Fixed

  • Test for NVIDIA probe list updated to reflect new catalog head (moonshotai/kimi-k2.6 etc.) so pnpm test stays green.

Tests

  • 813/813 passing. Thanks @Muhammad95959 for the live catalog verification!

v0.5.79

Choose a tag to compare

@github-actions github-actions released this 23 Aug 13:27

Fixed

  • Fast-coding pool malformed tool_calls hang (fixes #124). Some providers returned finish_reason: tool_calls without a tool_calls array, causing pi and other OpenAI clients to wait forever. Router now normalizes such responses to finish_reason: stop in src/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 /app and runs as non-root fcm, so npm i -g always hit EACCES on /usr/local/lib/node_modules and showed "Mandatory update failed" then exited. Added isRunningInDocker() in src/core/updater.js (checks /.dockerenv and /app prefix) 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

Choose a tag to compare

@github-actions github-actions released this 23 Aug 09:52

Fixed

  • Router forwards prompt_cache_key to NVIDIA -> HTTP 400 (fixes #160). Clients using OpenAI JS SDK (pi agent) set prompt_cache_key to session UUID for prompt caching; NVIDIA rejects it with Unsupported parameter(s): prompt_cache_key. Added prompt_cache_key to STRIP_PARAMS in src/core/schema-normalizer.js and added nvidia: normalizeNvidia (strip + orphan tool drop) to PROVIDER_NORMALIZERS so normalizeRequestBody(body, 'nvidia') now strips the hint before forwarding. Verified with direct replay against integrate.api.nvidia.com and pnpm test 813/813. Thanks @pelvity.

  • Config pingInterval not respected at startup (fixes #155). TUI always started in speed mode (2s) ignoring settings.pingInterval and --ping-interval. Now src/tui/tui-state.js createTuiState() derives initialInterval from config.settings.pingInterval (already merged from CLI in src/tui/app.js:283) and maps to mode via intervalToPingMode (30000 -> slow, 10000 -> normal, 4000 -> forced, <=3000 -> speed). Sets pingModeSource to config vs startup and only sets speedModeUntil when 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 jcode but launch hung (stdin left in raw mode, REPL appeared frozen) and web had no jcode option at all.

    • CLI hang: src/tui/key-handler.js launchSelectedModel now calls stopUi({ resetRawMode: true }) (was stopUi() with raw mode still enabled) and src/core/tool-launchers.js spawnCommand defensively resets stdin.setRawMode(false) before handing TTY to child.
    • Web: Added jcode to INSTALL_TARGET_MODES in src/core/endpoint-installer.js (now 15 targets, jcode after pi to match TOOL_MODE_ORDER order) with env-based installer (~/.fcm-jcode-env), mirrored in web/src/utils/m3.js INSTALL_ENDPOINT_TOOL_MODES, and fixed web/src/hooks/useToolMode.js cycle bug (TOOL_MODE_ORDER -> INSTALL_ENDPOINT_TOOL_MODES). Web /api/tool-mode now accepts jcode without 422 and dropdown/cycle shows it. Thanks @plahakps.

Changed

  • src/core/schema-normalizer.js JSDoc now exports normalizeNvidia and clarifies per-provider normalization.
  • web/src/utils/m3.js and src/core/endpoint-installer.js tool order now matches CLI's TOOL_MODE_ORDER (opencode -> pi -> jcode -> opencode-desktop ...).

Tests

  • 813/813 passing. Updated test/test.js endpoint install target expectation to include jcode.

v0.5.77

Choose a tag to compare

@github-actions github-actions released this 22 Aug 22:10

Fixed

  • Release 0.5.76 failed to build and never reached npm — the deps: major-updates merge in 0.5.76 bumped @tanstack/react-table 8.21.3 -> 9.1.2 and chalk 5.6.2 -> 6.0.0. Table v9 changed its exports (useReactTable / getCoreRowModel no longer at the top level, new useTable + tableFeatures API), so web/src/components/dashboard/ModelTable.jsx:17 threw MISSING_EXPORT and vite build failed in CI. Reverted both deps to their last working majors (8.21.3 and 5.6.2), restored web/src/components/dashboard/ModelTable.jsx:17 to the v8 API (useReactTable, createColumnHelper), and set package.json:85 engines back to >=18.0.0 with pnpm-lock.yaml synced. The major bump is kept on hold until a proper v9 migration (useTable + tableFeatures or useLegacyTable) is done and manually tested. pnpm test is 813/813 and pnpm build:web now succeeds again.
  • Test engines requires node >= 18 was flipped to >=22 — reverted test/test.js:2376 to expect 18 to 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 build green.

v0.5.75

Choose a tag to compare

@github-actions github-actions released this 22 Aug 21:47

Fixed

  • Contributors table now lists the two latest contributorsREADME.md:883 previously showed 10 avatars ending at fan92rus. Added @Muhammad95959 (--config-dir flag, PR #158) and @FaintFlower (Star History mirror, PR #159) with their avatars and a dedicated footer line each, and updated colspan from 10 to 12. AGENTS.md:104 contributor 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

Choose a tag to compare

@github-actions github-actions released this 22 Aug 21:36

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 via free-coding-models --config-dir ~/.config/free-coding-models (or any path) or via FCM_CONFIG_DIR (useful for Docker). When set, config.json, backups/ and cache.json all 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 so src/core/config.js, src/core/cache.js and src/core/security.js all respect it, docker-entrypoint.sh and src/tui/cli-help.js are updated, and 12 new tests cover getConfigDir(), CONFIG_PATH and cache relocation. With the follow-up fix, ~ and ~/ are now correctly expanded to your homedir (previously resolve() would treat ~ as a literal folder) and saveConfig() / saveCache() auto-create the target directory on first run so an empty XDG folder no longer throws ENOENT. Thanks @Muhammad95959 for the feature (PR #158).
  • Dependabot auto-merge workflow — new .github/workflows/dependabot-auto-merge.yml that squash-merges the patch-and-minor group 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/chart now returns an SVG with x-chart-status: restricted and a message instead of the real graph. The README now points to the working mirror star-history.dera.page/svg and link star-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-dir points to a fresh directory — previously saveConfig wrote to ${CONFIG_PATH}.tmp-... and then rename without ensuring the parent dir exists, which threw ENOENT on a non-existent XDG path. Both saveConfig (via dirname(CONFIG_PATH)) and saveCache (via dirname(cachePath)) now mkdir -p with 0o700 before writing.
  • Tilde not expanded for --config-dir / FCM_CONFIG_DIRresolve("~/...") would create a literal ~/ folder under cwd. Added expandTilde() that maps ~ and ~/ to homedir() before resolve(), in both src/core/config.js and the pre-import handling in bin/free-coding-models.js.
  • Test MODELS flat array matches sources count now accounts for deprecated modelssources.js filters models with deprecatedAfter < today (e.g. cerebras/zai-glm-4.7 deprecated 2026-08-17) when building MODELS, 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-react 3.45.0 -> 3.46.0, kandown 0.34.3 -> 0.50.0, @tanstack/react-virtual 3.14.8 -> 3.14.9, @vitejs/plugin-react 6.0.4 -> 6.0.5, vite 8.1.5 -> 8.2.1, vite-plus 0.2.6 -> 0.2.9. All checks (audit, lockfile-lint, Vercel, semgrep, notify-discord) passed. Major group (chalk 5.6.2 -> 6.0.0 which requires Node 22, plus @tanstack/react-table 8 -> 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

Choose a tag to compare

@github-actions github-actions released this 15 Aug 11:05

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 probe event after each ping, but the web frontend (web/src/hooks/useSocket.js) only listens for full models events — so results were computed and stored but never pushed to the browser. recordProbeResult now 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: models payload arrives containing the probed model.

v0.5.72

Choose a tag to compare

@github-actions github-actions released this 15 Aug 10:19

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

Choose a tag to compare

@github-actions github-actions released this 15 Aug 10:01

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>.json always set context_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 same parseContextWindow(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

  • parseContextWindow is now exported from src/core/endpoint-installer.js so 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: 1000000 in the generated provider file.