turbollm 1.7.7 → 1.8.1

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 (129) hide show
  1. package/README.md +110 -9
  2. package/dist/{chunk-TPYU5ZAX.js → chunk-U4OPDHSX.js} +8 -1
  3. package/dist/cli.js +5394 -2417
  4. package/dist/{distiller-UROKYEBN.js → distiller-MRW6VEYO.js} +1 -1
  5. package/dist/webdist/assets/{AgentEditPage-y0cZcIxD.js → AgentEditPage-DRzR4iGs.js} +1 -1
  6. package/dist/webdist/assets/ChatScreen-cMenh5vH.js +65 -0
  7. package/dist/webdist/assets/CodeComposer-WSBYcLfh.js +1 -0
  8. package/dist/webdist/assets/CodeHomeScreen-DLYhNrPE.js +1 -0
  9. package/dist/webdist/assets/CodeSessionScreen-DiOU2TWi.js +4 -0
  10. package/dist/webdist/assets/CustomizeScreen-lEyan0c2.js +4 -0
  11. package/dist/webdist/assets/DeveloperScreen-BYWhhQGb.js +1 -0
  12. package/dist/webdist/assets/EnginesScreen-C5nINY73.js +7 -0
  13. package/dist/webdist/assets/FsBrowser-BCP84FiV.js +1 -0
  14. package/dist/webdist/assets/ModelLoadMenu-DGZLiX2S.js +2 -0
  15. package/dist/webdist/assets/{ModelsScreen-0yDp-U9Y.js → ModelsScreen-D-FCPIeG.js} +2 -2
  16. package/dist/webdist/assets/SettingsScreen-X5-09oZy.js +1 -0
  17. package/dist/webdist/assets/{SkillEditPage-C947cp0W.js → SkillEditPage-CgXB_6Nl.js} +1 -1
  18. package/dist/webdist/assets/{TokensScreen-ColA57XS.js → TokensScreen-NrRIm4cC.js} +1 -1
  19. package/dist/webdist/assets/{MessageBubble-T4P9BnnR.js → ToolApprovalBar-tOnZJ73i.js} +16 -15
  20. package/dist/webdist/assets/WorkspaceScreen-CpTRJunA.js +1 -0
  21. package/dist/webdist/assets/{agent-api-DgdsmygN.js → agent-api-CUKcfOzd.js} +1 -1
  22. package/dist/webdist/assets/arc-CvnQcBmG.js +1 -0
  23. package/dist/webdist/assets/architectureDiagram-3BPJPVTR-Pm9wMCDM.js +36 -0
  24. package/dist/webdist/assets/{arrow-left-CixSWWD6.js → arrow-left-OByItXF5.js} +1 -1
  25. package/dist/webdist/assets/badge-DJWQwk9P.js +1 -0
  26. package/dist/webdist/assets/{blockDiagram-GPEHLZMM-DePQ91-U.js → blockDiagram-GPEHLZMM-DzLgLYNm.js} +1 -1
  27. package/dist/webdist/assets/{bot-CLQbJ0hY.js → bot-BNdnf7ne.js} +1 -1
  28. package/dist/webdist/assets/{c4Diagram-AAUBKEIU-Nx7n4BaG.js → c4Diagram-AAUBKEIU-qsqnYbgY.js} +1 -1
  29. package/dist/webdist/assets/channel-D1GgHB0B.js +1 -0
  30. package/dist/webdist/assets/{chat-api-v2HtltwV.js → chat-api-BPIB2oYY.js} +3 -3
  31. package/dist/webdist/assets/chat-queries-C37A8E8t.js +1 -0
  32. package/dist/webdist/assets/check-Bv_bnX7C.js +1 -0
  33. package/dist/webdist/assets/{chevron-left-ZSwpcWK4.js → chevron-left-vAm2-1DH.js} +1 -1
  34. package/dist/webdist/assets/{chevron-right-BX4x_YDg.js → chevron-right-A1qanud_.js} +1 -1
  35. package/dist/webdist/assets/{chunk-2J33WTMH-Li-0bh7s.js → chunk-2J33WTMH-C2ZqERw1.js} +1 -1
  36. package/dist/webdist/assets/{chunk-4BX2VUAB-D3JCha2O.js → chunk-4BX2VUAB-C59qC9gw.js} +1 -1
  37. package/dist/webdist/assets/{chunk-55IACEB6-DtexA9w4.js → chunk-55IACEB6-Bj5dZNjh.js} +1 -1
  38. package/dist/webdist/assets/{chunk-727SXJPM--FzMnyZQ.js → chunk-727SXJPM-DDibr_98.js} +1 -1
  39. package/dist/webdist/assets/{chunk-AQP2D5EJ-DLjRb4q9.js → chunk-AQP2D5EJ-DR5l9iQa.js} +1 -1
  40. package/dist/webdist/assets/{chunk-FMBD7UC4--oSGiB90.js → chunk-FMBD7UC4-Br0rQBb-.js} +1 -1
  41. package/dist/webdist/assets/{chunk-ND2GUHAM-DHrBgMDK.js → chunk-ND2GUHAM-BLhxelYC.js} +1 -1
  42. package/dist/webdist/assets/{chunk-QZHKN3VN-Czsg5U3B.js → chunk-QZHKN3VN-C2hJC_sd.js} +1 -1
  43. package/dist/webdist/assets/circle-check-BFahLD_z.js +1 -0
  44. package/dist/webdist/assets/{circle-x-SeGmqGO2.js → circle-x-B34XrT4_.js} +1 -1
  45. package/dist/webdist/assets/classDiagram-4FO5ZUOK-BiLDame3.js +1 -0
  46. package/dist/webdist/assets/classDiagram-v2-Q7XG4LA2-BiLDame3.js +1 -0
  47. package/dist/webdist/assets/collapsible-CSr2FFbS.js +1 -0
  48. package/dist/webdist/assets/{common-BX2IDRWf.js → common-Cd9MCcBN.js} +1 -1
  49. package/dist/webdist/assets/copy-button-Ctl1GqEo.js +1 -0
  50. package/dist/webdist/assets/{cose-bilkent-S5V4N54A-BWS5BbS6.js → cose-bilkent-S5V4N54A-lgljnskt.js} +1 -1
  51. package/dist/webdist/assets/{dagre-BM42HDAG-BPo4IktH.js → dagre-BM42HDAG-CieWJzRR.js} +1 -1
  52. package/dist/webdist/assets/{diagram-2AECGRRQ-bBunxDsg.js → diagram-2AECGRRQ-CbASwXb9.js} +1 -1
  53. package/dist/webdist/assets/{diagram-5GNKFQAL-moM1dOLS.js → diagram-5GNKFQAL-dH7h3v4f.js} +1 -1
  54. package/dist/webdist/assets/{diagram-KO2AKTUF-BwfV8JvH.js → diagram-KO2AKTUF-CshsiuQd.js} +1 -1
  55. package/dist/webdist/assets/{diagram-LMA3HP47-orftYm_u.js → diagram-LMA3HP47-ZjRHTqGM.js} +1 -1
  56. package/dist/webdist/assets/{diagram-OG6HWLK6-D3M14loM.js → diagram-OG6HWLK6-BiqwWdGR.js} +1 -1
  57. package/dist/webdist/assets/dialog-CmUNO7nv.js +1 -0
  58. package/dist/webdist/assets/{erDiagram-TEJ5UH35-CE0GXqcn.js → erDiagram-TEJ5UH35-57UMKMnk.js} +1 -1
  59. package/dist/webdist/assets/external-link-BYRaM4A8.js +1 -0
  60. package/dist/webdist/assets/{flowDiagram-I6XJVG4X-BPewPsNy.js → flowDiagram-I6XJVG4X-yjW2Ak0W.js} +1 -1
  61. package/dist/webdist/assets/{ganttDiagram-6RSMTGT7-D5yG5kD1.js → ganttDiagram-6RSMTGT7-XCpB83hN.js} +1 -1
  62. package/dist/webdist/assets/git-branch-Dch9ecuo.js +1 -0
  63. package/dist/webdist/assets/{gitGraphDiagram-PVQCEYII-Cj6zpryV.js → gitGraphDiagram-PVQCEYII-CR2LNCc5.js} +1 -1
  64. package/dist/webdist/assets/{index-DCrpX6kY.js → index-Cl9fRADn.js} +17 -17
  65. package/dist/webdist/assets/index-D3nTAqcF.css +1 -0
  66. package/dist/webdist/assets/index-DNrwllG_.js +10 -0
  67. package/dist/webdist/assets/{infoDiagram-5YYISTIA-NDkQABZh.js → infoDiagram-5YYISTIA-BcOPgHgK.js} +1 -1
  68. package/dist/webdist/assets/{ishikawaDiagram-YF4QCWOH-BOB3l-Kg.js → ishikawaDiagram-YF4QCWOH-C4eg0Z0x.js} +1 -1
  69. package/dist/webdist/assets/{journeyDiagram-JHISSGLW-DVEE4D7Z.js → journeyDiagram-JHISSGLW-DZYiwT4f.js} +1 -1
  70. package/dist/webdist/assets/{kanban-definition-UN3LZRKU-CNPvv9C-.js → kanban-definition-UN3LZRKU-pOnJphWm.js} +5 -5
  71. package/dist/webdist/assets/layers-cWfyYdPT.js +1 -0
  72. package/dist/webdist/assets/{linear-D7zDjIPx.js → linear-VlBvT_0X.js} +1 -1
  73. package/dist/webdist/assets/{mermaid.core-CFRc9zhD.js → mermaid.core-BI2Q_Wx8.js} +5 -5
  74. package/dist/webdist/assets/{mindmap-definition-RKZ34NQL-DZbmKw3G.js → mindmap-definition-RKZ34NQL-BC5CLMVT.js} +2 -2
  75. package/dist/webdist/assets/pencil-CLmcV9uS.js +1 -0
  76. package/dist/webdist/assets/{personas-BoG0K2t1.js → personas-CqrWwpby.js} +20 -13
  77. package/dist/webdist/assets/{pieDiagram-4H26LBE5-CSeor3k5.js → pieDiagram-4H26LBE5-DAknqfMh.js} +1 -1
  78. package/dist/webdist/assets/plus-CvK7zibA.js +1 -0
  79. package/dist/webdist/assets/{quadrantDiagram-W4KKPZXB-C4wIuoO1.js → quadrantDiagram-W4KKPZXB-9LBpUvz1.js} +1 -1
  80. package/dist/webdist/assets/{radix-krE_SGZJ.js → radix-C-sz7VcM.js} +8 -8
  81. package/dist/webdist/assets/refresh-cw-BMXeVLNx.js +1 -0
  82. package/dist/webdist/assets/{requirementDiagram-4Y6WPE33-DhUQacPK.js → requirementDiagram-4Y6WPE33-CIg6A5rC.js} +1 -1
  83. package/dist/webdist/assets/{rotate-ccw-DCFomh67.js → rotate-ccw-B_2DOZJc.js} +1 -1
  84. package/dist/webdist/assets/{sankeyDiagram-5OEKKPKP-FRUJ6EB_.js → sankeyDiagram-5OEKKPKP-BX3yi4pm.js} +1 -1
  85. package/dist/webdist/assets/{sequenceDiagram-3UESZ5HK-CdCLaBm7.js → sequenceDiagram-3UESZ5HK-Do0XLaou.js} +1 -1
  86. package/dist/webdist/assets/skeleton-BN6_VQVb.js +1 -0
  87. package/dist/webdist/assets/sliders-horizontal-BO-2FJXO.js +1 -0
  88. package/dist/webdist/assets/{star-biRsiE3m.js → star-gNSRckrW.js} +1 -1
  89. package/dist/webdist/assets/{stateDiagram-AJRCARHV-v5tGLSi5.js → stateDiagram-AJRCARHV-644YDLF8.js} +1 -1
  90. package/dist/webdist/assets/stateDiagram-v2-BHNVJYJU-CqPYkk1X.js +1 -0
  91. package/dist/webdist/assets/{switch-BlL-WRhK.js → switch-B_Lxu9_l.js} +1 -1
  92. package/dist/webdist/assets/terminal-coo1NYsn.js +1 -0
  93. package/dist/webdist/assets/{timeline-definition-PNZ67QCA-HpDjURD-.js → timeline-definition-PNZ67QCA-C4ocqXD4.js} +3 -3
  94. package/dist/webdist/assets/tool-explain-B8rnv8bW.js +1 -0
  95. package/dist/webdist/assets/{trash-2-B0HcfuWA.js → trash-2-CaTm58vg.js} +1 -1
  96. package/dist/webdist/assets/useIsDesktop--92FD_Wr.js +1 -0
  97. package/dist/webdist/assets/{vendor-BE0HADM8.js → vendor-BFom-Mq6.js} +1 -1
  98. package/dist/webdist/assets/{vennDiagram-CIIHVFJN-BcjzVaAC.js → vennDiagram-CIIHVFJN-D1j0WATg.js} +5 -5
  99. package/dist/webdist/assets/{wardley-L42UT6IY-DAXczRny.js → wardley-L42UT6IY-CVMZBlcB.js} +1 -1
  100. package/dist/webdist/assets/{wardleyDiagram-YWT4CUSO-BHpd_gyW.js → wardleyDiagram-YWT4CUSO-BXbaN4Ls.js} +1 -1
  101. package/dist/webdist/assets/wrench-cQ16tDks.js +1 -0
  102. package/dist/webdist/assets/{xychartDiagram-2RQKCTM6-C9tyViUt.js → xychartDiagram-2RQKCTM6-DWd8i6R6.js} +1 -1
  103. package/dist/webdist/index.html +4 -4
  104. package/package.json +8 -2
  105. package/dist/webdist/assets/ChatScreen-N8xJshxm.js +0 -65
  106. package/dist/webdist/assets/CustomizeScreen-8x5UpMgo.js +0 -4
  107. package/dist/webdist/assets/DeveloperScreen-Bq2FNjtI.js +0 -1
  108. package/dist/webdist/assets/EnginesScreen-BUUYSiw6.js +0 -7
  109. package/dist/webdist/assets/FsBrowser-BQd7_SH6.js +0 -1
  110. package/dist/webdist/assets/SettingsScreen-BsEt3HT4.js +0 -1
  111. package/dist/webdist/assets/WorkspaceScreen-B88cgpDr.js +0 -1
  112. package/dist/webdist/assets/arc-CAcqzHUt.js +0 -1
  113. package/dist/webdist/assets/architectureDiagram-3BPJPVTR-uesx4C2M.js +0 -36
  114. package/dist/webdist/assets/badge-Bu2_JlLl.js +0 -1
  115. package/dist/webdist/assets/channel-Bl7LnSBM.js +0 -1
  116. package/dist/webdist/assets/check-DWNXHB4-.js +0 -1
  117. package/dist/webdist/assets/classDiagram-4FO5ZUOK-DPKa7mmC.js +0 -1
  118. package/dist/webdist/assets/classDiagram-v2-Q7XG4LA2-DPKa7mmC.js +0 -1
  119. package/dist/webdist/assets/collapsible-BxchjxT5.js +0 -1
  120. package/dist/webdist/assets/dialog-dmjvLZWp.js +0 -1
  121. package/dist/webdist/assets/folder-input-C_YBaI_4.js +0 -1
  122. package/dist/webdist/assets/index-61gQc5Xl.js +0 -10
  123. package/dist/webdist/assets/index-BAK-ZQCj.css +0 -1
  124. package/dist/webdist/assets/pencil-DLTfIEAv.js +0 -1
  125. package/dist/webdist/assets/refresh-cw-8N7t89ea.js +0 -1
  126. package/dist/webdist/assets/skeleton-DgTrr_PQ.js +0 -1
  127. package/dist/webdist/assets/stateDiagram-v2-BHNVJYJU-v4thUmx4.js +0 -1
  128. package/dist/webdist/assets/useIsDesktop-BedxotK0.js +0 -1
  129. package/dist/webdist/assets/wrench-B2_HvSp0.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
 
@@ -236,6 +274,35 @@ the detail:
236
274
  in chat (name, preferences, hardware) using your own loaded model, and carries them into future
237
275
  new conversations. Nothing leaves your device; the full fact list is reviewable and deletable
238
276
  from Settings → Memory, and turning the toggle off stops new chats from seeing it immediately.
277
+ - **Thinking-budget control** — a graduated slider, not just on/off: cap reasoning to a specific
278
+ token count, disable it entirely, or leave it unlimited. Works in Chat and Code alike.
279
+
280
+ </details>
281
+
282
+ <details>
283
+ <summary><strong>🧑‍💻 Code — a local coding agent, in a real project directory</strong></summary>
284
+ <em>(experimental, off by default — Settings → Experimental)</em>
285
+
286
+ <br/>
287
+
288
+ Workspace → Code hands a task to an agent running on the same model you already have loaded —
289
+ point it at a repo folder, describe what you want, and it reads, edits, and runs commands to get
290
+ there. Entirely local; nothing leaves your machine.
291
+
292
+ - **Real repo access** — plans and edits end-to-end (or asks before mutating, or plan-only,
293
+ depending on mode), with an optional isolated git worktree so your actual checkout stays
294
+ untouched, and a real diff summary of what changed.
295
+ - **Persistent sessions** — archive/filter past runs, revert to any earlier message (with
296
+ optional real file-edit reversal), attach files as context, and a "Coding activity" dashboard
297
+ (sessions, tasks shipped, files touched, diff shipped, streaks) built from real history, not
298
+ mock data.
299
+ - **Real LSP integration** for TypeScript/JavaScript and Python — detects the language, installs
300
+ the language server if needed, and uses it for edits.
301
+ - **The same tools Chat gets from Customize** — any connected MCP server, plus the sandboxed
302
+ `run_code` tool — are available to Code too, alongside honest skill invocation and
303
+ `AGENTS.md`/`agents.md` support.
304
+ - **Independent access control** — gated behind its own API key on non-host devices, separate
305
+ from Chat's gate, and hidden entirely until you opt in from Settings → Experimental.
239
306
 
240
307
  </details>
241
308
 
@@ -316,7 +383,7 @@ connected); **Remove** undoes it.
316
383
 
317
384
  <br/>
318
385
 
319
- - 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.
320
387
  - **Offline-first** — no account, no backend, no internet, no telemetry.
321
388
  - **Windows · macOS · Linux**, with a CPU fallback when there's no GPU.
322
389
 
@@ -472,7 +539,22 @@ Use `--config <file>` to point at an alternate config (its directory becomes the
472
539
 
473
540
  ## Requirements
474
541
 
475
- - **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
+
476
558
  - **Windows, macOS, or Linux.**
477
559
  - A GPU is recommended but **not required** — a CPU build is provisioned as a fallback.
478
560
  - On Windows, the first time the auto-downloaded `llama-server` runs, SmartScreen/Defender may
@@ -505,7 +587,7 @@ Marks reflect mid-2026; verify the moving rows against each tool's current docs.
505
587
  | Speculative decoding (draft / MTP) | ✅ | ✅ | ◐ env flag | ❌ |
506
588
  | Web UI from any LAN device | ✅ | ❌ | ❌ | ✅ |
507
589
  | **Lightweight** (no Electron / no Python) | ✅ npm | ❌ Electron | ✅ Go | ❌ Python |
508
- | Offline-first · **no telemetry** | ✅ | ◐ analytics on by default | ✅ | ✅ |
590
+ | Offline-first · **no telemetry** | ✅ verifiable (source-available) | ◐ closed app — not verifiable | ✅ | ✅ |
509
591
 
510
592
  LM Studio and Ollama both added Anthropic `/v1/messages` endpoints in 2026, so the API rows are
511
593
  now parity — Claude Code works against any of them. TurboLLM's durable edges are **any engine
@@ -553,14 +635,33 @@ shadcn/ui frontend. One TypeScript codebase, shipped as an npm package.
553
635
  ## Community
554
636
 
555
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.
556
641
 
557
642
  ---
558
643
 
559
644
  ## License
560
645
 
561
646
  Source-available under the **Functional Source License 1.1 (Apache-2.0 future grant)** — SPDX
562
- **`FSL-1.1-ALv2`**. Free for personal use, internal business use, education, and research; the
563
- only restriction is shipping a competing product. Each release converts to Apache-2.0 two
564
- 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.)
565
666
 
566
667
  <p align="center"><sub>Built for people who refuse to wait for the mainstream to bless the fast path. ⚡</sub></p>
@@ -7,11 +7,17 @@ import { join } from "path";
7
7
  // src/engines/compat.ts
8
8
  function engineAcceptsFormat(engineKind, format) {
9
9
  if (engineKind === "mlx") return format === "mlx";
10
+ if (engineKind === "rapid-mlx") return format === "mlx";
10
11
  if (engineKind === "vllm") return format === "mlx";
11
12
  return format === "gguf";
12
13
  }
14
+ function engineRejectsAudioModel(engineKind) {
15
+ return engineKind === "rapid-mlx";
16
+ }
13
17
  var ENGINE_MODEL_ALIAS = "default_model";
18
+ var RAPID_MLX_MODEL_ALIAS = "default";
14
19
  function engineModelAlias(engineKind) {
20
+ if (engineKind === "rapid-mlx") return RAPID_MLX_MODEL_ALIAS;
15
21
  return engineKind === "mlx" || engineKind === "vllm" || engineKind === "sglang" ? ENGINE_MODEL_ALIAS : null;
16
22
  }
17
23
  var VENDOR_DISPLAY = {
@@ -86,7 +92,7 @@ Write ONE reusable skill as raw JSON \u2014 no markdown fences.` }
86
92
  ],
87
93
  temperature: 0.3,
88
94
  max_tokens: 800,
89
- reasoning_budget: 0,
95
+ thinking_budget_tokens: 0,
90
96
  chat_template_kwargs: { enable_thinking: false },
91
97
  response_format: { type: "json_object" },
92
98
  stream: false
@@ -168,6 +174,7 @@ ${f.content}`);
168
174
 
169
175
  export {
170
176
  engineAcceptsFormat,
177
+ engineRejectsAudioModel,
171
178
  engineModelAlias,
172
179
  evaluateVariant,
173
180
  distillFromConversation,