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 +30 -0
- package/README.md +57 -17
- package/bin/free-coding-models.js +8 -0
- package/package.json +3 -2
- package/sources.js +20 -0
- package/src/provider-metadata.js +8 -0
- package/src/render-table.js +1 -8
- package/src/utils.js +4 -0
- package/web/app.js +900 -0
- package/web/index.html +318 -0
- package/web/server.js +317 -0
- package/web/styles.css +963 -0
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-
|
|
6
|
-
<img src="https://img.shields.io/badge/providers-
|
|
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
|
|
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"
|
|
35
|
-
<a href="#-quick-start"
|
|
36
|
-
<a href="#-list-of-free-ai-providers"
|
|
37
|
-
<a href="#-usage"
|
|
38
|
-
<a href="#-tui-keys"
|
|
39
|
-
<a href="#-
|
|
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 **
|
|
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
|
-
**
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
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
|
package/src/provider-metadata.js
CHANGED
|
@@ -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
|
}
|
package/src/render-table.js
CHANGED
|
@@ -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
|
}
|