LumaBrowser 2.0 is released under the GNU AGPL, with the source and every installer on GitHub. Under the hood it is a new codebase: every part of the app was rewritten, and every code file has a matching developer doc. On top of that, the chat learned slash commands and @ mentions, and the new Hub puts your tasks, calendars and open conversations on the Dashboard.
The full source of LumaBrowser is now public. The open source page explains the licensing in more detail.
You may use LumaBrowser, study it, change it and redistribute it. If you distribute a modified version, or run one for other people over a network, you publish your changes under the same license.
Running the official, unmodified builds, at home or inside a company, on any number of machines, needs no extra license. The same goes for writing extensions you release under the AGPL.
Organizations that want to keep their modifications or extensions private, or combine LumaBrowser with proprietary software, can get a commercial license from Lumabyte, LLC.
The code lives at github.com/amurgola/LumaBrowser, and every installer is attached to its GitHub release.
Bug reports and pull requests are open to everyone. Contributors sign a contributor license agreement once, by commenting on their first pull request.
The repository has a Documentation/ folder with one doc per code file, at the same path, covering what it does, its public methods and why it exists. An index lists them all in one line each, so a coding agent can find the right file without reading the whole codebase.
The message box now has a small command popup. Move through it with Up and Down, pick with Enter, Tab or a click, and close it with Escape. It shows up to eight rows.
Type / at the start of a message. /summarize and /explain fill in a prompt and attach the page you were on; /translate starts a translation prompt.
/tab opens a tab picker so you can ask about any open tab, /dashboard attaches your Dashboard widgets as text, /attach adds a file, /model opens model and chat options, and /new starts a new chat.
Type @ at the start of any word to get the same popup, listing open tabs with the most recent first, matched by title or host. Picking one reads the page and attaches it as a chip. The tab you were just on is also offered as a one-click suggestion.
Attaches what every widget on your Dashboard shows right now, as a chip. Mention it again to refresh it.
@docs (or @lumabrowser-documentation) adds a pill that lets this chat search the app's own documentation. With tools on, the model gets a search tool and cites the page it used; with tools off, matching passages are added to the prompt. The pill is saved with the conversation.
The popup ends with an option to attach text, code, a PDF or an image, so you do not need to reach for the paperclip.
The Hub is a new extension that adds three widgets to the Dashboard and reads from the accounts you are already signed into. The Hub page covers setup.
Lanes with drag and drop, a quick add that can create the task in ClickUp, and filter chips per source.
Today and Week views, a colour per calendar, and a marker for the current time.
Open threads from Slack, Teams, Gmail, Outlook, Messages, ClickUp, Proton and Discord, each with a priority and a summary. Review, snooze, mark done, open the source, or turn a thread into a task.
Google and Microsoft 365 calendars load from a tab you stay signed into. You can also use your own OAuth app, or add ICS feeds, including Proton Calendar through its share link.
Connect with an API token, choose each list's scope (Assigned to me, Mine + unassigned, or All tasks), and map ClickUp statuses to board columns.
Notifications caught from any tab feed the queue. n8n or other automations can push items and enrich them through /api/hub with a bearer token.
Watches the signed-in tabs the Hub depends on and alerts you when one of them signs out, so a quiet queue does not hide a lost connection.
Agents can read the Hub through MCP tools such as hub_overview. Tools that change anything go through the usual approval prompt.
The Dashboard's 12-column grid of live modules, with its Live and Edit modes and scheduled tasks, can now hold widgets that extensions provide, next to the modules you pin from chat. The Hub's three widgets are the first.
The optional local API now serves the OpenAI Responses API at /v1/responses, translated onto your local model, so the Codex CLI can use it. Connecting Codex from LumaBrowser writes wire_api = "responses".
Each speech-to-text and text-to-speech model shows its license where you choose it.
The extension editor now runs isolated and sandboxed with no Node access, and can only read and write files inside the one extension it opened.
The CDP and WebDriver automation servers check the Host and Origin of each request. Only the machine that borrowed a GPU can renew or release that lease. A web search never retries an address it refused as private by opening it in a browser tab.
Read this before upgrading a machine that other people or scripts depend on.
1.x was proprietary software. 2.0 is under the GNU AGPL v3.0 or later. Nothing changes for running official builds. If you modify LumaBrowser and share or host the result, the AGPL applies, or you can ask Lumabyte, LLC about a commercial license.
The Pro and Enterprise license keys are gone, and nothing is switched off when the app cannot reach lumabyte.com. The anonymous check-in that remains only runs with your consent; Settings shows whether it is on and why.
Installers are attached to each GitHub release. GitHub replaces spaces in file names with dots, so the Windows installer is LumaBrowser.Setup.2.0.0.exe rather than LumaBrowser Setup 2.0.0.exe. Update any script that fetches installers by name.
The update feed at lumabyte.com/install now serves the GitHub release files, so an installed copy finds and installs 2.0 the same way it found 1.x updates.
2.0 installs as the same app over a 1.x install, but every part of it was rewritten. If you depend on a machine's chats, settings or downloaded models, back up its LumaBrowser data folder before upgrading.
Current Codex CLI releases refuse a config with wire_api = "chat". A Codex connection made by an older build shows as disconnected; reconnecting it rewrites the provider in place.
The notes below are the release notes for the 1.7 to 1.10 releases, built on the previous codebase. They are kept as they were published.
Local models are good at tool use only when the plumbing does not get in their way. Most of 1.7's chat work is plumbing.
Models that speak a native tool-call format (the Qwen family first) now use it instead of a text fence, with the fence kept for models that do not. Mixed and malformed call shapes are normalised, illegal JSON escapes recovered, and a call is no longer lost to a single backslash or a nested code block.
Long conversations are summarised against a cache-warm prefix instead of being cut off, so the model keeps the thread without reprocessing everything. One owner for the context budget, measured per-request fixed cost, and history budgeted against the usable window rather than the whole one.
The agent loop can issue several tool calls in one turn. A second state-changing call in the same batch is deferred, and the default pool size is set from benchmark evidence rather than optimism.
Before a tool changes anything on disk or on the web, the chat asks once. Tool cards now show the call separately from the model's prose, and required arguments are enforced at dispatch on both transports.
The most recent assistant reply can be edited inline, with save and cancel, so a nearly-right answer does not need a whole regeneration.
Thinking models get a per-conversation effort control, and the agent loop gets a tool loop's reasoning budget instead of a chat reply's. A provider-confirmed context overflow is recovered once instead of ending the run.
Code Mode refuses to edit a file the agent has not read in the current context, and a stale-write guard rejects an edit against a version that has changed underneath it. Files are identified by content, not by their stat.
Workspace search runs on the packaged ripgrep with a directory walk as fallback, and discloses which directories it skipped.
Describe a game and get a playable one, with sprites and backdrops generated by the image server (pixel-art native sizes, nearest-neighbour upscaling, a batch asset tool that plays nicely with hotswap). A headless runner reports runtime errors and phantom API calls before you see them.
Games can call the model at runtime through a small bridge, keep persistent data stores, and relay a multiplayer room. Design guidelines for core loops, difficulty pacing, and genre recipes ship with the mode.
What the agent read on the web is previewable from the chat, so you can see the page it used rather than trust the summary.
The Anthropic provider handles max_tokens and reasoning for adaptive-thinking models, so an Opus-class model no longer loops silently under a token cap.
Every one of these is a knob on the advanced page. Easy Setup uses them for you.
ik_llama (1.7.7) as a data-only add-on on the Thireus prebuilt feed, ISA-matched to your CPU, with its native quant patterns. NInfer (1.7.6) as an add-on runtime with add-on model support, measured at roughly twice llama.cpp's Q6 speculative decode on our rig.
A CUDA 12 build of stable-diffusion.cpp with our patch stack on top of upstream. Reference images for an edit are prepared in a fraction of the time: a three-image Qwen-Image 2.1 edit went from 38 to 12 seconds on an RTX 5090, with pixel-identical output. Selectable next to upstream in the image runtime list.
Edit prompts are worded the way the model was trained (numbered image tags, an instruction, one keep clause), the Viggle turbo LoRA runs on its published sigma nodes, supporting references are sized to half a megapixel, and taking a speed LoRA off a model restores its own step count.
A CUDA 12 build of llama.cpp with our patch stack on top of upstream: faster mmap load (about 3x on the weight phase) and the multi-GPU fixes below. Selectable next to upstream in the runtime list.
A plain two-GPU split now fills the fastest card first instead of splitting evenly. On a 5090 + 3090 at 128k context that is the difference between 45.8 and 64.9 tokens per second, because the KV no longer spills into WDDM shared memory.
Chat and image models can be locked into RAM so a large mmap'd model does not page out between requests. The planner chooses no-mmap versus mmap per launch shape, preflight is cached, and eviction overlaps the launch (5.6 s to 0.1 s on a relaunch). Fixed for packaged builds in 1.7.8 and 1.7.9.
Model-free n-gram speculation with a draft cap (measured +26 percent on edit-heavy turns for Qwen 3.8 Flash-Next), plus detection of MTP-grafted quants. The launch planner also auto-tunes for memory fit and predicts parallel slots.
A behavioural integration test for the model you launched: tool calling, editing, and long-context tasks, scored with the context and GPUs the run actually used. Sits beside the fit test in the Setup tab and runs from the command line for A/B diffs that include wall time.
Multi-card VRAM claims are weighted and carry a resident flag, the text encoder for image models is placed on CPU or GPU by a decision rather than a hard-coded flag, and the health poll dropped from 1000 ms to 200 ms so servers report ready sooner.
LoRA files are inspected for their base model before attaching. Catalog additions include Chroma1-HD, FLUX.2 klein 4B, Sprite Shaper XL, and pixel-art and seamless-texture LoRAs for game assets.
Model references moved to Qwen 3.8 (1.7.3) with per-family defaults: the text-fence tool protocol by default, edit_artifact kept off the native tools array, and size-weighted tool-history eviction.
These change behaviour you may be relying on. Read this section before upgrading a machine that other people or scripts depend on.
It shipped behind a flag, default off, and was then turned on for models that support it. If you parse the model's raw output for a text fence, expect native tool_calls on those models instead. Inactive tool groups are stubbed natively.
The one-shot approval prompt applies to chat, sub-agents, and scheduled runs. Unattended runs need the tool pre-approved in the chat's tool settings or they will wait.
An edit against a file the agent has not read, or against a stale version, is rejected with a reason. Scripts that drove edits through the agent without a preceding read will need one.
Parallel tool calls exist but the default pool size is one, set from gambit evidence. Raise it per model family if your model handles it.
The bytecode packer was not unpacking the native module and worker scripts those features need. Fixed in 1.7.9; if you are on an earlier 1.7 build and pinning silently did nothing, update.
Family sampler defaults changed again (penalty handling), so generated text will not match previous runs byte for byte.
These ship in 1.7 but have not finished hardening. They are listed so you know they exist and what their limits are.
The automatic image runtime install does not work on Linux in 1.7.9: the installer cannot unpack the archive it downloads, and on NVIDIA it picks a CUDA build that has no Linux version. Chat is unaffected. The image guide has a manual workaround; the fix is in progress.
Builds and plays real games with generated assets, verified end to end on Qwen 3.8. A mid or large chat model matters a lot here; small models produce small games.
Both install and run. Neither has the years of edge-case coverage upstream llama.cpp has; bench them with the gambit before making one your default.
Speech in and out using local models, Windows and Linux only; there is no whisper binary release for macOS yet.
Present but not exercised widely. Windows requires WSL2, macOS is not supported, and the model wants about 34 GB of VRAM on a single card.
Off by default. The transport carries no authentication and no encryption; use it only between machines you own on a network you control.
1.7.9 inline edit of the last reply; bytecode unpack fix for RAM pinning and TTS; version bump script.
1.7.8 LumaByte llama.cpp CUDA 12 build in the catalog; memory-fit auto-tuning; 200 ms health poll; dynamic RAM pinning; LoRA inspector; n-gram speculation; sprite and backdrop model selection; CLIP placement decision; VRAM coordinator weighted claims; AI probe for games; pixel-art native sizes; fill-order layer split.
1.7.7 ik_llama runtime.
1.7.6 NInfer runtime with add-on models.
1.7.5 persistent data stores for AI-driven games.
1.7.4 adaptive thinking on Anthropic; game design guidelines; sandboxed batch asset generation; headless game runner; Chroma1-HD, FLUX.2 klein, Sprite Shaper XL.
1.7.3 Qwen 3.8 as the reference family; multiplayer room relay; game asset generation.
1.7.1 chat compaction; parallel tool calls; read-before-edit and stale-write guard; native tool calling; one-shot approval; packaged ripgrep search; context budget owner.
1.7.0 compatibility gambit; reasoning effort control; web usage preview.
LumaBrowser is free to download, runs local models with no account and no API key, and its source is on GitHub. Read the API reference if you want to drive it from your own code, or the open source page for how the license works.