free-coding-models 0.3.34 → 0.3.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,36 @@
1
1
  # Changelog
2
2
  ---
3
3
 
4
+ ## [0.3.36] - 2026-04-07
5
+
6
+ ### Added
7
+ - **Settings Page** — Full API key management: add, edit, delete, reveal (masked with last 4 chars), and copy keys from the browser.
8
+ - **Provider Toggle Switches** — Enable/disable providers with smooth toggle switches directly from Settings.
9
+ - **Sidebar Navigation** — Collapsible sidebar with Dashboard, Settings, and Analytics views.
10
+ - **Analytics View** — Provider health overview with % bars, Top 10 fastest models leaderboard, and tier distribution chart.
11
+ - **Toast Notification System** — Beautiful slide-in notifications for save/delete/copy/error feedback.
12
+ - **Export Modal** — Export filtered model data as JSON, CSV, or copy summary to clipboard.
13
+ - **Provider Search** — Search/filter providers in the Settings page.
14
+ - **Expand/Collapse All** — Bulk expand or collapse all provider cards in Settings.
15
+
16
+ ### Changed
17
+ - Upgraded web dashboard from V1 (read-only) to V2 (full management console).
18
+ - Improved sidebar hover-expand behavior with smooth label reveal.
19
+
20
+ ### Fixed
21
+ - **P1**: Serialized ping rounds using recursive `setTimeout` instead of `setInterval` to prevent overlapping concurrent mutations when providers are slow.
22
+ - **P2**: Disabled providers are now skipped during ping rounds, honoring the Settings toggle.
23
+ - **P2**: `saveConfig` failures are now caught and returned as errors to the client instead of silently reporting success.
24
+
25
+ ## [0.3.35] - 2026-04-07
26
+
27
+ ### Added
28
+ - **Web Dashboard / GUI Mode** — Launch a premium graphical interface using \`--web\` or \`--gui\` flag.
29
+ - **Glassmorphism Design** — Real-time ping visualization, 🥇🥈🥉 medals, live stability scores, and sparklines.
30
+ - **Background SSE Streaming** — The built-in Node.js server streams live data to the browser with zero dependencies.
31
+ - **Quick Search & Filters** — Sort by any column, filter by tiers, or use the real-time search box (Ctrl+K).
32
+ - **Detail Panel** — Slide-out side panel showing P95 latency, jitter (σ), and historical trends.
33
+
4
34
  ## [0.3.34] - 2026-04-06
5
35
 
6
36
  ### Added
package/README.md CHANGED
@@ -2,19 +2,19 @@
2
2
  <img src="https://img.shields.io/npm/v/free-coding-models?color=76b900&label=npm&logo=npm" alt="npm version">
3
3
  <img src="https://img.shields.io/node/v/free-coding-models?color=76b900&logo=node.js" alt="node version">
4
4
  <img src="https://img.shields.io/npm/l/free-coding-models?color=76b900" alt="license">
5
- <img src="https://img.shields.io/badge/models-230-76b900?logo=nvidia" alt="models count">
6
- <img src="https://img.shields.io/badge/providers-24-blue" alt="providers count">
5
+ <img src="https://img.shields.io/badge/models-238-76b900?logo=nvidia" alt="models count">
6
+ <img src="https://img.shields.io/badge/providers-25-blue" alt="providers count">
7
+ <br>
8
+ <img src="https://img.shields.io/badge/dependencies-1-76b900?logo=npm" alt="1 dependency">
9
+ <img src="https://img.shields.io/badge/provenance-sigstore-blueviolet?logo=signstore" alt="npm provenance">
10
+ <img src="https://img.shields.io/badge/supply_chain-verified-brightgreen" alt="supply chain verified">
7
11
  </p>
8
12
 
9
13
  <h1 align="center">free-coding-models</h1>
10
14
 
11
- <p align="center">
12
- 🐦 Follow me on <a href="https://x.com/vavanessadev"><strong>X (@vavanessadev)</strong></a> 💖
13
- </p>
14
-
15
15
  <p align="center">
16
16
  <strong>Find the fastest free coding model in seconds</strong><br>
17
- <sub>Ping 230 models across 24 AI Free providers in real-time </sub><br><sub> Install Free API endpoints to your favorite AI coding tool: <br>📦 OpenCode, 🦞 OpenClaw, 💘 Crush, 🪿 Goose, 🛠 Aider, 🐉 Qwen Code, 🤲 OpenHands, ⚡ Amp, π Pi, 🦘 Rovo or ♊ Gemini in one keystroke</sub>
17
+ <sub>Ping 238 models across 25 AI Free providers in real-time </sub><br><sub> Install Free API endpoints to your favorite AI coding tool: <br>📦 OpenCode, 🦞 OpenClaw, 💘 Crush, 🪿 Goose, 🛠 Aider, 🐉 Qwen Code, 🤲 OpenHands, ⚡ Amp, π Pi, 🦘 Rovo or ♊ Gemini in one keystroke</sub>
18
18
  </p>
19
19
 
20
20
 
@@ -31,12 +31,17 @@ create a free account on one of the [providers](#-list-of-free-ai-providers)
31
31
  </p>
32
32
 
33
33
  <p align="center">
34
- <a href="#-why-this-tool">Why</a> •
35
- <a href="#-quick-start">Quick Start</a> •
36
- <a href="#-list-of-free-ai-providers">Providers</a> •
37
- <a href="#-usage">Usage</a> •
38
- <a href="#-tui-keys">TUI Keys</a> •
39
- <a href="#-contributing">Contributing</a>
34
+ <a href="#-why-this-tool">💡 Why</a> •
35
+ <a href="#-quick-start">⚡ Quick Start</a> •
36
+ <a href="#-list-of-free-ai-providers">🟢 Providers</a> •
37
+ <a href="#-usage">🚀 Usage</a> •
38
+ <a href="#-tui-keys">⌨️ TUI Keys</a> •
39
+ <a href="#-features">✨ Features</a>
40
+ <a href="#-contributing">📋 Contributing</a> •
41
+ <a href="#️-model-licensing--commercial-use">⚖️ Licensing</a> •
42
+ <a href="#️-security--trust">🛡️ Security</a> •
43
+ <a href="#-support">📧 Support</a> •
44
+ <a href="#-license">📄 License</a>
40
45
  </p>
41
46
 
42
47
  <p align="center">
@@ -51,7 +56,7 @@ create a free account on one of the [providers](#-list-of-free-ai-providers)
51
56
 
52
57
  ## 💡 Why this tool?
53
58
 
54
- There are **230+ free coding models** scattered across 24 providers. Which one is fastest right now? Which one is actually stable versus just lucky on the last ping?
59
+ There are **238+ free coding models** scattered across 25 providers. Which one is fastest right now? Which one is actually stable versus just lucky on the last ping?
55
60
 
56
61
  This CLI pings them all in parallel, shows live latency, and calculates a **live Stability Score (0-100)**. Average latency alone is misleading if a model randomly spikes to 6 seconds; the stability score measures true reliability by combining **p95 latency** (30%), **jitter/variance** (30%), **spike rate** (20%), and **uptime** (20%).
57
62
 
@@ -65,7 +70,7 @@ It then writes the model you pick directly into your coding tool's config — so
65
70
 
66
71
  Create a free account on one provider below to get started:
67
72
 
68
- **230 coding models** across 24 providers, ranked by [SWE-bench Verified](https://www.swebench.com).
73
+ **238 coding models** across 25 providers, ranked by [SWE-bench Verified](https://www.swebench.com).
69
74
 
70
75
  | Provider | Models | Tier range | Free tier | Env var |
71
76
  |----------|--------|-----------|-----------|--------|
@@ -86,6 +91,7 @@ Create a free account on one provider below to get started:
86
91
  | [SiliconFlow](https://cloud.siliconflow.cn/account/ak) | 6 | S+ → A | Free models: usually 100 RPM, varies by model | `SILICONFLOW_API_KEY` |
87
92
  | [Cerebras](https://cloud.cerebras.ai) | 4 | S+ → B | Generous free tier (developer tier 10× higher limits) | `CEREBRAS_API_KEY` |
88
93
  | [Perplexity API](https://www.perplexity.ai/settings/api) | 4 | A+ → B | Tiered limits by spend (default ~50 RPM) | `PERPLEXITY_API_KEY` |
94
+ | [OVHcloud AI Endpoints](https://endpoints.ai.cloud.ovh.net) | 8 | S → B | Free sandbox: 2 req/min/IP (no key). 400 RPM with key | `OVH_AI_ENDPOINTS_ACCESS_TOKEN` |
89
95
  | [Chutes AI](https://chutes.ai) | 4 | S → A | Free (community GPU-powered, no credit card) | `CHUTES_API_KEY` |
90
96
  | [DeepInfra](https://deepinfra.com/login) | 4 | A- → B+ | 200 concurrent requests (default) | `DEEPINFRA_API_KEY` |
91
97
  | [Fireworks AI](https://fireworks.ai) | 4 | S → B+ | $1 credits – 10 req/min without payment | `FIREWORKS_API_KEY` |
@@ -284,7 +290,7 @@ When a tool mode is active (via `Z`), models incompatible with that tool are hig
284
290
 
285
291
  ## ✨ Features
286
292
 
287
- - **Parallel pings** — all 230 models tested simultaneously via native `fetch`
293
+ - **Parallel pings** — all 238 models tested simultaneously via native `fetch`
288
294
  - **Adaptive monitoring** — 2s burst for 60s → 10s normal → 30s idle
289
295
  - **Stability score** — composite 0–100 (p95 latency, jitter, spike rate, uptime)
290
296
  - **Smart ranking** — top 3 highlighted 🥇🥈🥉
@@ -322,7 +328,7 @@ We welcome contributions — issues, PRs, new provider integrations.
322
328
 
323
329
  ## ⚖️ Model Licensing & Commercial Use
324
330
 
325
- **Short answer:** All 230 models allow **commercial use of generated output (including code)**. You own what the models generate for you.
331
+ **Short answer:** All 238 models allow **commercial use of generated output (including code)**. You own what the models generate for you.
326
332
 
327
333
  ### Output Ownership
328
334
 
@@ -354,6 +360,40 @@ For every model in this tool, **you own the generated output** — code, text, o
354
360
 
355
361
  ---
356
362
 
363
+ ## 🛡️ Security & Trust
364
+
365
+ ### Supply Chain
366
+
367
+ | Signal | Status |
368
+ |--------|--------|
369
+ | **npm Provenance** | ✅ Published with Sigstore-signed provenance |
370
+ | **SBOM** | ✅ Software Bill of Materials attached to every GitHub Release |
371
+ | **Dependencies** | ✅ 1 runtime dependency (`chalk`) |
372
+ | **Lockfile** | ✅ `pnpm-lock.yaml` committed and tracked |
373
+ | **Security Policy** | ✅ [`SECURITY.md`](SECURITY.md) |
374
+ | **Code Owners** | ✅ [`CODEOWNERS`](CODEOWNERS) — all changes require maintainer review |
375
+ | **Dependabot** | ✅ Weekly automated dependency + GitHub Actions updates |
376
+ | **Audit CI** | ✅ `npm audit` runs on every push/PR + weekly scheduled scan |
377
+ | **License** | ✅ MIT |
378
+
379
+ ### What This Tool Does
380
+
381
+ - Pings public API endpoints to measure latency and check availability
382
+ - Reads your API keys from `.env` files (only if you configure them)
383
+ - Opens configuration files for editing (with your permission)
384
+ - Reports anonymous usage data (no personal information — see footer)
385
+
386
+ ### What This Tool Does NOT Do
387
+
388
+ - ❌ Does **not** send your API keys, code, or personal data to any third party
389
+ - ❌ Does **not** install or execute arbitrary code beyond `chalk` (the only dependency)
390
+ - ❌ Does **not** modify any files outside its own config directory
391
+ - ❌ Does **not** require `sudo`, root, or elevated permissions
392
+
393
+ > To report a vulnerability, see [`SECURITY.md`](SECURITY.md).
394
+
395
+ ---
396
+
357
397
  ## 📧 Support
358
398
 
359
399
  [GitHub Issues](https://github.com/vava-nessa/free-coding-models/issues) · [Discord](https://discord.gg/ZTNFHvvCkU)
@@ -46,6 +46,14 @@ async function main() {
46
46
  process.exit(1);
47
47
  }
48
48
 
49
+ // 📖 --web mode: launch the web dashboard instead of the TUI
50
+ if (cliArgs.webMode) {
51
+ const { startWebServer } = await import('../web/server.js')
52
+ const port = parseInt(process.env.FCM_PORT || '3333', 10)
53
+ await startWebServer(port)
54
+ return
55
+ }
56
+
49
57
  // 📖 Load JSON config
50
58
  const config = loadConfig();
51
59
  ensureTelemetryConfig(config);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "free-coding-models",
3
- "version": "0.3.34",
3
+ "version": "0.3.36",
4
4
  "description": "Find the fastest coding LLM models in seconds — ping free models from multiple providers, pick the best one for OpenCode, Cursor, or any AI coding assistant.",
5
5
  "keywords": [
6
6
  "nvidia",
@@ -41,6 +41,7 @@
41
41
  "files": [
42
42
  "bin/",
43
43
  "src/",
44
+ "web/",
44
45
  "sources.js",
45
46
  "patch-openclaw.js",
46
47
  "patch-openclaw-models.js",
@@ -55,7 +56,7 @@
55
56
  "test:fcm:mock": "node scripts/testfcm-runner.mjs --tool crush --tool-bin-dir test/fixtures/mock-bin"
56
57
  },
57
58
  "dependencies": {
58
- "chalk": "^5.4.1"
59
+ "chalk": "^5.6.2"
59
60
  },
60
61
  "engines": {
61
62
  "node": ">=18.0.0"
package/sources.js CHANGED
@@ -422,6 +422,21 @@ export const chutes = [
422
422
  ['Qwen/Qwen2.5-Coder-32B-Instruct', 'Qwen2.5 Coder 32B', 'A', '46.0%', '32k'],
423
423
  ]
424
424
 
425
+ // 📖 OVHcloud AI Endpoints - https://endpoints.ai.cloud.ovh.net
426
+ // 📖 OpenAI-compatible API with European data sovereignty (GDPR)
427
+ // 📖 Free sandbox: 2 req/min per IP per model (no API key needed), 400 RPM with API key
428
+ // 📖 Env var: OVH_AI_ENDPOINTS_ACCESS_TOKEN
429
+ export const ovhcloud = [
430
+ ['Qwen3-Coder-30B-A3B-Instruct', 'Qwen3 Coder 30B MoE', 'A+', '55.0%', '256k'],
431
+ ['gpt-oss-120b', 'GPT OSS 120B', 'S', '60.0%', '131k'],
432
+ ['gpt-oss-20b', 'GPT OSS 20B', 'A', '42.0%', '131k'],
433
+ ['Meta-Llama-3_3-70B-Instruct', 'Llama 3.3 70B', 'A-', '39.5%', '131k'],
434
+ ['Qwen3-32B', 'Qwen3 32B', 'A+', '50.0%', '32k'],
435
+ ['DeepSeek-R1-Distill-Llama-70B', 'R1 Distill 70B', 'A-', '40.0%', '131k'],
436
+ ['Mistral-Small-3.2-24B-Instruct-2506', 'Mistral Small 3.2', 'B+', '34.0%', '131k'],
437
+ ['Llama-3.1-8B-Instruct', 'Llama 3.1 8B', 'B', '28.8%', '131k'],
438
+ ]
439
+
425
440
  // 📖 Rovo Dev CLI source - https://www.atlassian.com/rovo
426
441
  // 📖 CLI tool only - no API endpoint - requires 'acli rovodev run'
427
442
  // 📖 Install: https://support.atlassian.com/rovo/docs/install-and-run-rovo-dev-cli-on-your-device/
@@ -596,6 +611,11 @@ export const sources = {
596
611
  url: 'https://chutes.ai/v1/chat/completions',
597
612
  models: chutes,
598
613
  },
614
+ ovhcloud: {
615
+ name: 'OVHcloud AI 🆕',
616
+ url: 'https://oai.endpoints.kepler.ai.cloud.ovh.net/v1/chat/completions',
617
+ models: ovhcloud,
618
+ },
599
619
  }
600
620
 
601
621
  // 📖 Flatten all models from all sources — each entry includes providerKey as 6th element
@@ -60,6 +60,7 @@ export const ENV_VAR_NAMES = {
60
60
  zai: 'ZAI_API_KEY',
61
61
  gemini: 'GEMINI_API_KEY',
62
62
  chutes: 'CHUTES_API_KEY',
63
+ ovhcloud: 'OVH_AI_ENDPOINTS_ACCESS_TOKEN',
63
64
  }
64
65
 
65
66
  // 📖 OPENCODE_MODEL_MAP: sparse table of model IDs that differ between sources.js and OpenCode's
@@ -257,4 +258,11 @@ export const PROVIDER_METADATA = {
257
258
  signupHint: 'Sign up and generate an API key',
258
259
  rateLimits: 'Free (community GPU-powered), no hard cap',
259
260
  },
261
+ ovhcloud: {
262
+ label: 'OVHcloud AI 🆕',
263
+ color: chalk.rgb(100, 149, 205),
264
+ signupUrl: 'https://endpoints.ai.cloud.ovh.net',
265
+ signupHint: 'Manager → Public Cloud → AI Endpoints → API keys (optional: sandbox works without key)',
266
+ rateLimits: 'Free sandbox: 2 req/min per IP per model (no key). With API key: 400 RPM',
267
+ },
260
268
  }
@@ -882,12 +882,6 @@ export function renderTable(results, pendingPings, frame, cursor = null, sortCol
882
882
  ? chalk.rgb(255, 182, 193)(`Last release: ${lastReleaseDate}`)
883
883
  : ''
884
884
 
885
- const xSupportBg = chalk.bgRgb(140, 0, 80).rgb(255, 255, 255).bold('🐦 Follow me on X: ') +
886
- '\x1b]8;;https://x.com/vavanessadev\x1b\\' +
887
- chalk.bgRgb(140, 0, 80).rgb(255, 200, 50).bold('@vavanessadev') +
888
- '\x1b]8;;\x1b\\' +
889
- chalk.bgRgb(140, 0, 80).rgb(255, 255, 255).bold(' to check my other projects! 💖')
890
-
891
885
  lines.push(
892
886
  ' ' + themeColors.hotkey('N') + themeColors.dim(' Changelog') +
893
887
  (filterBadge
@@ -895,8 +889,7 @@ export function renderTable(results, pendingPings, frame, cursor = null, sortCol
895
889
  : '') +
896
890
  themeColors.dim(' • ') +
897
891
  themeColors.dim('Ctrl+C Exit') +
898
- (releaseLabel ? themeColors.dim(' • ') + releaseLabel : '') +
899
- themeColors.dim(' • ') + xSupportBg
892
+ (releaseLabel ? themeColors.dim(' • ') + releaseLabel : '')
900
893
  )
901
894
 
902
895
  // 📖 Discord link at the very bottom of the TUI
package/src/utils.js CHANGED
@@ -461,6 +461,9 @@ export function parseArgs(argv) {
461
461
  const helpMode = flags.includes('--help') || flags.includes('-h')
462
462
  const premiumMode = flags.includes('--premium')
463
463
 
464
+ // 📖 --web / --gui — launch the web dashboard instead of the TUI
465
+ const webMode = flags.includes('--web') || flags.includes('--gui')
466
+
464
467
  // New boolean flags
465
468
  const sortDesc = flags.includes('--desc')
466
469
  const sortAscFlag = flags.includes('--asc')
@@ -505,6 +508,7 @@ export function parseArgs(argv) {
505
508
  hideUnconfigured,
506
509
  showUnconfigured,
507
510
  premiumMode,
511
+ webMode,
508
512
  // 📖 Profile system removed - API keys now persist permanently across all sessions
509
513
  recommendMode,
510
514
  }