turbollm 1.8.0 → 1.8.2

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.
Files changed (117) hide show
  1. package/README.md +81 -9
  2. package/dist/cli.js +10142 -8853
  3. package/dist/webdist/assets/{AgentEditPage-D88hpQjX.js → AgentEditPage-DrcwQcJE.js} +1 -1
  4. package/dist/webdist/assets/{ChatScreen-DuFszp3m.js → ChatScreen-BkpwUk-O.js} +15 -15
  5. package/dist/webdist/assets/CodeComposer-DG4lgSoA.js +1 -0
  6. package/dist/webdist/assets/CodeHomeScreen-Cqv5c0nM.js +1 -0
  7. package/dist/webdist/assets/CodeSessionScreen-aQesvCPO.js +4 -0
  8. package/dist/webdist/assets/{CustomizeScreen-CLgcLY96.js → CustomizeScreen-DRrw2hs7.js} +3 -3
  9. package/dist/webdist/assets/{DeveloperScreen-CDRUPDNH.js → DeveloperScreen-pTaZZ6r5.js} +1 -1
  10. package/dist/webdist/assets/EnginesScreen-BvZtUKd0.js +7 -0
  11. package/dist/webdist/assets/{FsBrowser-jN8FOadG.js → FsBrowser-D0rDep29.js} +1 -1
  12. package/dist/webdist/assets/ModelLoadMenu-K1Qolm9B.js +2 -0
  13. package/dist/webdist/assets/{ModelsScreen-C6F8L2lP.js → ModelsScreen-HfLjpGmf.js} +2 -2
  14. package/dist/webdist/assets/SettingsScreen-z-UuH8MI.js +1 -0
  15. package/dist/webdist/assets/{SkillEditPage-Dlwmzyj5.js → SkillEditPage-W3ofhEQn.js} +1 -1
  16. package/dist/webdist/assets/{TokensScreen-CBevGp-z.js → TokensScreen-dLb-UDmL.js} +1 -1
  17. package/dist/webdist/assets/{ToolApprovalBar-DnXllBoo.js → ToolApprovalBar-BGRW2hFN.js} +15 -15
  18. package/dist/webdist/assets/WorkspaceScreen-C5R7gzUi.js +1 -0
  19. package/dist/webdist/assets/{agent-api-O8wWVGcr.js → agent-api-C48x10WZ.js} +1 -1
  20. package/dist/webdist/assets/{arc-CQVQV0bp.js → arc-B6W63qO_.js} +1 -1
  21. package/dist/webdist/assets/{architectureDiagram-3BPJPVTR-H-Mb9chI.js → architectureDiagram-3BPJPVTR-BNxjHCm7.js} +1 -1
  22. package/dist/webdist/assets/{arrow-left-DueDI4Uy.js → arrow-left-DmGW0W4g.js} +1 -1
  23. package/dist/webdist/assets/{badge-9Ks3OTiY.js → badge-IsOHcYvf.js} +1 -1
  24. package/dist/webdist/assets/{blockDiagram-GPEHLZMM-BuB5_KcP.js → blockDiagram-GPEHLZMM-DrPlDIMe.js} +1 -1
  25. package/dist/webdist/assets/{bot-C1XfUPJ6.js → bot-DAa4xIIF.js} +1 -1
  26. package/dist/webdist/assets/{c4Diagram-AAUBKEIU-D6j10p1Y.js → c4Diagram-AAUBKEIU-BKtn6SbN.js} +1 -1
  27. package/dist/webdist/assets/channel-CDs60xNM.js +1 -0
  28. package/dist/webdist/assets/{chat-api-BUhr1L49.js → chat-api-CtbwBsSY.js} +1 -1
  29. package/dist/webdist/assets/chat-queries-BANbggZ1.js +1 -0
  30. package/dist/webdist/assets/check-DeJoIInG.js +1 -0
  31. package/dist/webdist/assets/{chevron-left-DCWiYX-E.js → chevron-left-DScqk7lr.js} +1 -1
  32. package/dist/webdist/assets/{chevron-right-pdRyf_Eq.js → chevron-right-DNc_yz-y.js} +1 -1
  33. package/dist/webdist/assets/{chunk-2J33WTMH-CWiMU4wH.js → chunk-2J33WTMH-B97vCEvd.js} +1 -1
  34. package/dist/webdist/assets/{chunk-4BX2VUAB-C-oMxSW6.js → chunk-4BX2VUAB-B5mAgaq1.js} +1 -1
  35. package/dist/webdist/assets/{chunk-55IACEB6-BCRoeq5k.js → chunk-55IACEB6-CCZRTh0d.js} +1 -1
  36. package/dist/webdist/assets/{chunk-727SXJPM-BbHqxFbG.js → chunk-727SXJPM-tZT9XNMs.js} +1 -1
  37. package/dist/webdist/assets/{chunk-AQP2D5EJ-ButGmr8P.js → chunk-AQP2D5EJ-CfIdLt8G.js} +1 -1
  38. package/dist/webdist/assets/{chunk-FMBD7UC4-DKI8m0TV.js → chunk-FMBD7UC4-BRdScA0W.js} +1 -1
  39. package/dist/webdist/assets/{chunk-ND2GUHAM-Bs3XC7R7.js → chunk-ND2GUHAM-BedHAIQl.js} +1 -1
  40. package/dist/webdist/assets/{chunk-QZHKN3VN-BNfpdzfY.js → chunk-QZHKN3VN-ByAw17Nt.js} +1 -1
  41. package/dist/webdist/assets/{circle-check-Bkj-plFS.js → circle-check-BNIKoJDg.js} +1 -1
  42. package/dist/webdist/assets/{circle-x-C8OFx7JZ.js → circle-x-DfIf4ChY.js} +1 -1
  43. package/dist/webdist/assets/classDiagram-4FO5ZUOK-BLIfDCvc.js +1 -0
  44. package/dist/webdist/assets/classDiagram-v2-Q7XG4LA2-BLIfDCvc.js +1 -0
  45. package/dist/webdist/assets/collapsible-CSr2FFbS.js +1 -0
  46. package/dist/webdist/assets/{common-BZRA66BA.js → common-BwXsHduN.js} +1 -1
  47. package/dist/webdist/assets/{copy-button-BveaGT4h.js → copy-button-BcFHHH9b.js} +1 -1
  48. package/dist/webdist/assets/{cose-bilkent-S5V4N54A-DhZrfcwd.js → cose-bilkent-S5V4N54A--x5WjVCv.js} +1 -1
  49. package/dist/webdist/assets/{dagre-BM42HDAG-w59rkdsA.js → dagre-BM42HDAG-DWQy_ulr.js} +1 -1
  50. package/dist/webdist/assets/{diagram-2AECGRRQ-BdTCCJ0W.js → diagram-2AECGRRQ-DQo4yJeJ.js} +1 -1
  51. package/dist/webdist/assets/{diagram-5GNKFQAL-ZZDkePvS.js → diagram-5GNKFQAL-DwbynoQ2.js} +1 -1
  52. package/dist/webdist/assets/{diagram-KO2AKTUF-CFG-oPSH.js → diagram-KO2AKTUF-CjKV0fFm.js} +1 -1
  53. package/dist/webdist/assets/{diagram-LMA3HP47-D1xIF2PG.js → diagram-LMA3HP47-CXfjg5Fe.js} +1 -1
  54. package/dist/webdist/assets/{diagram-OG6HWLK6-33OyN5UI.js → diagram-OG6HWLK6-CKEjI4NC.js} +1 -1
  55. package/dist/webdist/assets/{dialog-lSZ58YOX.js → dialog-uY3tk3E9.js} +1 -1
  56. package/dist/webdist/assets/{erDiagram-TEJ5UH35-CmVhoR3c.js → erDiagram-TEJ5UH35-D43kYg84.js} +1 -1
  57. package/dist/webdist/assets/{external-link-BMN-irzE.js → external-link-jnEQCJGd.js} +1 -1
  58. package/dist/webdist/assets/{flowDiagram-I6XJVG4X-WMlzGSnn.js → flowDiagram-I6XJVG4X-qGS0J-De.js} +1 -1
  59. package/dist/webdist/assets/{ganttDiagram-6RSMTGT7-BJLo3ueL.js → ganttDiagram-6RSMTGT7-3Ud_YPtk.js} +1 -1
  60. package/dist/webdist/assets/{git-branch-B4Zerf_C.js → git-branch-BZW2_OwW.js} +1 -1
  61. package/dist/webdist/assets/{gitGraphDiagram-PVQCEYII-BMDKDbc6.js → gitGraphDiagram-PVQCEYII-BhOiYdR2.js} +1 -1
  62. package/dist/webdist/assets/{index-18g2acqe.js → index-Cl9fRADn.js} +1 -1
  63. package/dist/webdist/assets/index-DffknE3S.css +1 -0
  64. package/dist/webdist/assets/{index-BT3X9hod.js → index-rezSzJo3.js} +4 -4
  65. package/dist/webdist/assets/{infoDiagram-5YYISTIA-DsBmPCqk.js → infoDiagram-5YYISTIA-D2Yo845I.js} +1 -1
  66. package/dist/webdist/assets/{ishikawaDiagram-YF4QCWOH-DIRruXw4.js → ishikawaDiagram-YF4QCWOH-BoTTMzTX.js} +1 -1
  67. package/dist/webdist/assets/{journeyDiagram-JHISSGLW-CbEMG5w1.js → journeyDiagram-JHISSGLW-B30FNQqG.js} +1 -1
  68. package/dist/webdist/assets/{kanban-definition-UN3LZRKU-BUQ978A5.js → kanban-definition-UN3LZRKU-DwuHMcyp.js} +1 -1
  69. package/dist/webdist/assets/{layers-DDa_JhQb.js → layers-BbMBWfEB.js} +1 -1
  70. package/dist/webdist/assets/{linear-C1OpvMyX.js → linear-BI-xSqy2.js} +1 -1
  71. package/dist/webdist/assets/{mermaid.core-C5mzu5db.js → mermaid.core-DjBtB3Ob.js} +4 -4
  72. package/dist/webdist/assets/{mindmap-definition-RKZ34NQL-C8VgTDps.js → mindmap-definition-RKZ34NQL-P0Blz3ba.js} +1 -1
  73. package/dist/webdist/assets/{pencil-DLZvuPKt.js → pencil-pd4qdmIY.js} +1 -1
  74. package/dist/webdist/assets/{personas-mlw8yQfu.js → personas-DGNsw4JH.js} +42 -20
  75. package/dist/webdist/assets/{pieDiagram-4H26LBE5-CtIMFL5O.js → pieDiagram-4H26LBE5-D_RWWNYB.js} +1 -1
  76. package/dist/webdist/assets/{plus-HphyEDmN.js → plus-Co-23h9C.js} +1 -1
  77. package/dist/webdist/assets/{quadrantDiagram-W4KKPZXB-DIqeifSf.js → quadrantDiagram-W4KKPZXB-0UW-qXoo.js} +1 -1
  78. package/dist/webdist/assets/{radix-B85O-RTd.js → radix-C-sz7VcM.js} +8 -8
  79. package/dist/webdist/assets/{refresh-cw-y2Z1FMEB.js → refresh-cw-DBHReAx0.js} +1 -1
  80. package/dist/webdist/assets/{requirementDiagram-4Y6WPE33-BPdTK6aB.js → requirementDiagram-4Y6WPE33-DQPViUOU.js} +1 -1
  81. package/dist/webdist/assets/{rotate-ccw-CwgndVE1.js → rotate-ccw-L6hm18l-.js} +1 -1
  82. package/dist/webdist/assets/{sankeyDiagram-5OEKKPKP-B1Gi97qT.js → sankeyDiagram-5OEKKPKP-CoFKXFxN.js} +1 -1
  83. package/dist/webdist/assets/{sequenceDiagram-3UESZ5HK-SYx7VZVE.js → sequenceDiagram-3UESZ5HK-CTKbZzaz.js} +1 -1
  84. package/dist/webdist/assets/skeleton-CTqhU4nE.js +1 -0
  85. package/dist/webdist/assets/{sliders-horizontal-5GgMjS2o.js → sliders-horizontal-CqA4xQwh.js} +1 -1
  86. package/dist/webdist/assets/{star-CS1ent0J.js → star-C4xvUEne.js} +1 -1
  87. package/dist/webdist/assets/{stateDiagram-AJRCARHV-B9cLtTOo.js → stateDiagram-AJRCARHV-Bbgyioxb.js} +1 -1
  88. package/dist/webdist/assets/stateDiagram-v2-BHNVJYJU-DBMc27o_.js +1 -0
  89. package/dist/webdist/assets/{switch-6Yli7CDA.js → switch-vVu6UIJB.js} +1 -1
  90. package/dist/webdist/assets/{terminal-ClfB9HZ7.js → terminal-BqY0B6tG.js} +1 -1
  91. package/dist/webdist/assets/{timeline-definition-PNZ67QCA-B1F891lb.js → timeline-definition-PNZ67QCA-CNuDMLf0.js} +1 -1
  92. package/dist/webdist/assets/{trash-2-BT9psXif.js → trash-2-CI-4vgjV.js} +1 -1
  93. package/dist/webdist/assets/useIsDesktop-B-UPxY57.js +1 -0
  94. package/dist/webdist/assets/{vennDiagram-CIIHVFJN-BDuJrthf.js → vennDiagram-CIIHVFJN-5KfL6f8c.js} +1 -1
  95. package/dist/webdist/assets/{wardley-L42UT6IY-CZKN4Z4o.js → wardley-L42UT6IY-KSQpq69w.js} +1 -1
  96. package/dist/webdist/assets/{wardleyDiagram-YWT4CUSO-DxNYqbgl.js → wardleyDiagram-YWT4CUSO-CRDC9-52.js} +1 -1
  97. package/dist/webdist/assets/{wrench-B3syOd6q.js → wrench-B6O2XFxJ.js} +1 -1
  98. package/dist/webdist/assets/{xychartDiagram-2RQKCTM6-D3MXmGWF.js → xychartDiagram-2RQKCTM6-CFJUnPty.js} +1 -1
  99. package/dist/webdist/index.html +3 -3
  100. package/package.json +1 -1
  101. package/dist/webdist/assets/CodeComposer-y9wKcBjz.js +0 -1
  102. package/dist/webdist/assets/CodeHomeScreen-CtAhXuz1.js +0 -1
  103. package/dist/webdist/assets/CodeSessionScreen-QWTJn0xc.js +0 -4
  104. package/dist/webdist/assets/EnginesScreen-Cgn0suwB.js +0 -7
  105. package/dist/webdist/assets/ModelLoadMenu-L976cVK2.js +0 -2
  106. package/dist/webdist/assets/SettingsScreen-Bbxo0o6Z.js +0 -1
  107. package/dist/webdist/assets/WorkspaceScreen-DW8fhHyQ.js +0 -1
  108. package/dist/webdist/assets/channel-DL1wlWc3.js +0 -1
  109. package/dist/webdist/assets/chat-queries-C3B2yhFj.js +0 -1
  110. package/dist/webdist/assets/check-DpwlZ09-.js +0 -1
  111. package/dist/webdist/assets/classDiagram-4FO5ZUOK-BqB0gU2U.js +0 -1
  112. package/dist/webdist/assets/classDiagram-v2-Q7XG4LA2-BqB0gU2U.js +0 -1
  113. package/dist/webdist/assets/collapsible-BP6hWVJl.js +0 -1
  114. package/dist/webdist/assets/index-DLgbKhrx.css +0 -1
  115. package/dist/webdist/assets/skeleton-BsVUTiYp.js +0 -1
  116. package/dist/webdist/assets/stateDiagram-v2-BHNVJYJU-B74HcsOd.js +0 -1
  117. package/dist/webdist/assets/useIsDesktop-Cfo6Oh8W.js +0 -1
package/README.md CHANGED
@@ -12,6 +12,7 @@
12
12
  </p>
13
13
 
14
14
  <p align="center">
15
+ <a href="https://turbollm.dev"><img src="https://img.shields.io/badge/turbollm.dev-docs%20·%20models%20·%20guides-e2552e" alt="turbollm.dev" /></a>
15
16
  <a href="https://www.npmjs.com/package/turbollm"><img src="https://img.shields.io/npm/v/turbollm.svg?color=e2552e" alt="npm version" /></a>
16
17
  <a href="https://www.npmjs.com/package/turbollm"><img src="https://img.shields.io/npm/dm/turbollm.svg?color=e2552e" alt="npm downloads" /></a>
17
18
  <img src="https://img.shields.io/badge/node-%E2%89%A522-3c873a.svg" alt="node >= 22" />
@@ -22,6 +23,11 @@
22
23
  <a href="https://discord.gg/v6kRbV7nC"><img src="https://img.shields.io/badge/Discord-join%20chat-5865F2?logo=discord&logoColor=white" alt="Discord" /></a>
23
24
  </p>
24
25
 
26
+ <p align="center">
27
+ <sub><strong>Source-available</strong> under <a href="#license">FSL-1.1</a> — free for personal and
28
+ internal business use; every release converts to <strong>Apache-2.0</strong> two years after it ships.</sub>
29
+ </p>
30
+
25
31
  <!-- Brand: shipped app icon web/public/brand/turbollm-icon-512.jpeg · high-res masters web/brand-assets/ (unshipped) · in-app mark web/src/components/Logo.tsx · favicon web/public/favicon.svg -->
26
32
 
27
33
  ```bash
@@ -31,6 +37,12 @@ npx turbollm
31
37
  That one command starts a local daemon, opens a browser UI, and serves your models over an
32
38
  API any tool can talk to. TurboLLM is the **performance & bleeding-edge layer for local
33
39
  LLMs** — built for people who today hand-compile forks and hunt forums for the right flags.
40
+ The speed is measured, not promised: **74.7 vs 61 t/s on the *same* official llama.cpp as
41
+ LM Studio — and 2.2× on forks it can't load** ([the numbers](#speed-turbollm-vs-lm-studio)).
42
+
43
+ <p align="center">
44
+ <strong>📖 Full docs · what runs on your GPU · model picks → <a href="https://turbollm.dev">turbollm.dev</a></strong>
45
+ </p>
34
46
 
35
47
  <p align="center">
36
48
  <img src="https://raw.githubusercontent.com/mohitsoni48/TurboLLM/main/assets/how-it-works.svg?v=2" width="860" alt="How TurboLLM works: clients -> one lightweight daemon -> any engine on your GPU" />
@@ -41,6 +53,7 @@ LLMs** — built for people who today hand-compile forks and hunt forums for the
41
53
  ## Contents
42
54
 
43
55
  - [Why TurboLLM](#why-turbollm)
56
+ - [Who this is for — and who it isn't](#who-this-is-for--and-who-it-isnt)
44
57
  - [Speed: TurboLLM vs LM Studio](#speed-turbollm-vs-lm-studio)
45
58
  - [Features](#features)
46
59
  - [Quick start](#quick-start)
@@ -79,7 +92,7 @@ TurboLLM does the opposite:
79
92
  a **VRAM-fit verdict before you load** — no more flag guessing.
80
93
  - **📊 Real tokens/sec, never faked.** Speed in the model list is *measured on your machine*
81
94
  from actual generation — live while you chat, and remembered per model.
82
- - **🪶 Lightweight.** A ~2 MB npm package on Node — **no Electron, no bundled Chromium, no
95
+ - **🪶 Lightweight.** A ~7 MB npm package on Node — **no Electron, no bundled Chromium, no
83
96
  Python**. It downloads only the engine your GPU actually needs (Vulkan ≈ 38 MB).
84
97
  - **🔌 Drop-in APIs.** OpenAI **and** Anthropic-compatible — so Claude Code and every existing
85
98
  tool work unchanged.
@@ -90,6 +103,27 @@ TurboLLM does the opposite:
90
103
 
91
104
  ---
92
105
 
106
+ ## Who this is for — and who it isn't
107
+
108
+ **It's for you if:**
109
+
110
+ - you're tired of hand-tuning `-ngl` / KV / offload flags for every model and never trusting
111
+ the speed number;
112
+ - you want community forks (low-bit KV cache, NextN speculative decoding, new quant formats)
113
+ on day 0 — without compiling anything;
114
+ - you're pointing agents or **Claude Code** at a local model and want that to be one command;
115
+ - you already have folders of GGUFs from LM Studio / Ollama and refuse to re-download them.
116
+
117
+ **It's probably not for you if:**
118
+
119
+ - you want a zero-terminal, one-click desktop installer — TurboLLM currently needs
120
+ [Node ≥22](#requirements) and one terminal command (a packaged installer is planned);
121
+ - you're happy with a single blessed runtime and stock settings — LM Studio and Ollama
122
+ already serve that well;
123
+ - you need training or fine-tuning — TurboLLM is inference only.
124
+
125
+ ---
126
+
93
127
  ## Speed: TurboLLM vs LM Studio
94
128
 
95
129
  Same GPU (RTX 5070 Ti 16 GB), same model, same 200K context — measured generation speed.
@@ -134,8 +168,9 @@ the detail:
134
168
  <br/>
135
169
 
136
170
  - **Use the folders you already have.** Point TurboLLM at any directory of GGUFs — your
137
- existing LM Studio / Ollama / manual downloads — **no re-downloading.** It parses GGUF
138
- metadata (arch, params, quant, context, vision) for every file.
171
+ existing LM Studio folders or manual downloads — **no re-downloading.** It parses GGUF
172
+ metadata (arch, params, quant, context, vision) for every file. (Models pulled by
173
+ `ollama pull` live in Ollama's own blob store, which TurboLLM doesn't read.)
139
174
  - **Browse & download from Hugging Face**, in-app: a live, sortable list (trending / downloads
140
175
  / likes / recently updated / newest) alongside a permanent detail pane — pick a quant, read
141
176
  the **rendered model card**, and download with **resume + SHA-256 verification**. Each model
@@ -183,6 +218,9 @@ the detail:
183
218
  overwrites another engine's tuning for the same model.
184
219
  - **Configurable VRAM headroom** (Settings → Models & loading → Advanced, 300 MB–2 GB, default
185
220
  1 GB) — tell auto-tune how much VRAM to keep free for other GPU workloads instead of a fixed margin.
221
+ Drag it to 0 to opt into an experimental **MoE "VRAM-spill" search** — auto-tune keeps pushing more
222
+ experts onto the GPU past the safe margin as long as both generation and prompt-processing speed
223
+ keep improving.
186
224
 
187
225
  </details>
188
226
 
@@ -345,7 +383,7 @@ connected); **Remove** undoes it.
345
383
 
346
384
  <br/>
347
385
 
348
- - A **~2 MB npm package** on Node — no Electron, no bundled Chromium, no Python.
386
+ - A **~7 MB npm package** on Node — no Electron, no bundled Chromium, no Python.
349
387
  - **Offline-first** — no account, no backend, no internet, no telemetry.
350
388
  - **Windows · macOS · Linux**, with a CPU fallback when there's no GPU.
351
389
 
@@ -501,7 +539,22 @@ Use `--config <file>` to point at an alternate config (its directory becomes the
501
539
 
502
540
  ## Requirements
503
541
 
504
- - **Node.js 22.13.0 or newer** — enforced at startup with a clear message. <https://nodejs.org>
542
+ - **Node.js 22.13.0 or newer** — enforced at startup with a clear message.
543
+
544
+ <details>
545
+ <summary><strong>Don't have Node?</strong> One command installs it.</summary>
546
+
547
+ <br/>
548
+
549
+ - **Windows:** `winget install OpenJS.NodeJS.LTS` (or download from <https://nodejs.org>)
550
+ - **macOS:** `brew install node` (or download from <https://nodejs.org>)
551
+ - **Linux:** use your distro's package manager or <https://nodejs.org> — make sure it's
552
+ v22+ (`node --version`)
553
+
554
+ Then open a **new terminal** (Windows needs one for `PATH` to refresh) and run `npx turbollm`.
555
+
556
+ </details>
557
+
505
558
  - **Windows, macOS, or Linux.**
506
559
  - A GPU is recommended but **not required** — a CPU build is provisioned as a fallback.
507
560
  - On Windows, the first time the auto-downloaded `llama-server` runs, SmartScreen/Defender may
@@ -534,7 +587,7 @@ Marks reflect mid-2026; verify the moving rows against each tool's current docs.
534
587
  | Speculative decoding (draft / MTP) | ✅ | ✅ | ◐ env flag | ❌ |
535
588
  | Web UI from any LAN device | ✅ | ❌ | ❌ | ✅ |
536
589
  | **Lightweight** (no Electron / no Python) | ✅ npm | ❌ Electron | ✅ Go | ❌ Python |
537
- | Offline-first · **no telemetry** | ✅ | ◐ analytics on by default | ✅ | ✅ |
590
+ | Offline-first · **no telemetry** | ✅ verifiable (source-available) | ◐ closed app not verifiable | ✅ | ✅ |
538
591
 
539
592
  LM Studio and Ollama both added Anthropic `/v1/messages` endpoints in 2026, so the API rows are
540
593
  now parity — Claude Code works against any of them. TurboLLM's durable edges are **any engine
@@ -582,14 +635,33 @@ shadcn/ui frontend. One TypeScript codebase, shipped as an npm package.
582
635
  ## Community
583
636
 
584
637
  Questions, ideas, and show-and-tell — join the [Discord](https://discord.gg/v6kRbV7nC).
638
+ Want to contribute? See [CONTRIBUTING.md](https://github.com/mohitsoni48/TurboLLM/blob/main/CONTRIBUTING.md).
639
+
640
+ If TurboLLM saved you flag-hunting time, a ⭐ on the repo helps others find it.
585
641
 
586
642
  ---
587
643
 
588
644
  ## License
589
645
 
590
646
  Source-available under the **Functional Source License 1.1 (Apache-2.0 future grant)** — SPDX
591
- **`FSL-1.1-ALv2`**. Free for personal use, internal business use, education, and research; the
592
- only restriction is shipping a competing product. Each release converts to Apache-2.0 two
593
- years after it's published. Full text: [LICENSE.md](https://github.com/mohitsoni48/TurboLLM/blob/main/turbollm/LICENSE.md).
647
+ **`FSL-1.1-ALv2`**. Full text: [LICENSE.md](https://github.com/mohitsoni48/TurboLLM/blob/main/turbollm/LICENSE.md).
648
+
649
+ **License FAQ** (plain-language summary the license text is what's binding):
650
+
651
+ - **Can I use it for free?** Yes. Personal use, internal business use, education, research,
652
+ and self-hosting — including commercially, inside your company — are all free. The license
653
+ permits *any* use except the one below.
654
+ - **What's the one restriction?** You can't take TurboLLM and ship it (or its functionality)
655
+ as a **competing commercial product or service**. That's the entire boundary.
656
+ - **Can I fork it or redistribute it?** Yes — modify, fork, and redistribute freely for any
657
+ permitted purpose; keep the license text and copyright notices with it.
658
+ - **When does it become fully open source?** The license includes an **irrevocable** grant:
659
+ each release converts to **Apache-2.0 exactly two years** after that release is published.
660
+ The first public release shipped June 2026, so it converts in June 2028 — and every release
661
+ after it follows on its own two-year clock.
662
+ - **Why not MIT/Apache from day one?** TurboLLM is built by a solo maintainer; FSL prevents a
663
+ large vendor from re-skinning it as their own product while it's young, and the future grant
664
+ guarantees the full open-source outcome anyway. (Sentry created the FSL; GitButler, PowerSync,
665
+ and Codecov ship under it too.)
594
666
 
595
667
  <p align="center"><sub>Built for people who refuse to wait for the mainstream to bless the fast path. ⚡</sub></p>