Release notes · Version 2.0 · current build 2.0.0

LumaBrowser 2.0 is open source, and rebuilt from the ground up.

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.

Download LumaBrowser 2.0 Source on GitHub
Windows · macOS · Linux · changes to know about · 1.x release notes

Open source under the AGPL

The full source of LumaBrowser is now public. The open source page explains the licensing in more detail.

GNU AGPL v3.0 or later

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.

Using it needs nothing

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.

A commercial license when you need privacy

Organizations that want to keep their modifications or extensions private, or combine LumaBrowser with proprietary software, can get a commercial license from Lumabyte, LLC.

Source and installers on GitHub

The code lives at github.com/amurgola/LumaBrowser, and every installer is attached to its GitHub release.

Contributions welcome

Bug reports and pull requests are open to everyone. Contributors sign a contributor license agreement once, by commenting on their first pull request.

Developer docs for every code file

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.

Chat: slash commands and @ mentions

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.

Slash commands

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.

@ an open tab

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.

@dashboard

Attaches what every widget on your Dashboard shows right now, as a chip. Mention it again to refresh it.

@docs: ask about LumaBrowser itself

@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.

Attach a file from the popup

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: tasks, calendars and conversations in one place

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.

Task board

Lanes with drag and drop, a quick add that can create the task in ClickUp, and filter chips per source.

Agenda

Today and Week views, a colour per calendar, and a marker for the current time.

Conversation queue

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.

Calendars without API keys

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.

ClickUp tasks

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 and automations

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.

Connections panel

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.

hub_* tools for agents

Agents can read the Hub through MCP tools such as hub_overview. Tools that change anything go through the usual approval prompt.

Also in 2.0

Extension widgets on the Dashboard

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.

Responses API for Codex

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".

Licenses in the voice picker

Each speech-to-text and text-to-speech model shows its license where you choose it.

Sandboxed extension editor

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.

Security fixes

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.

Changes worth knowing about

Read this before upgrading a machine that other people or scripts depend on.

The license changed from proprietary to the AGPL

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.

No paid tiers, no check-in requirement

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.

Downloads come from GitHub Releases

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 in-app updater keeps working

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.

It is a new codebase

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.

Codex connects over the Responses API

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.

Earlier: the 1.x series

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.

A chat agent that holds up over a long session

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.

Native tool calling

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.

Chat compaction

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.

Parallel tool calls, with a brake

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.

One-shot approval

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.

Edit the last reply

The most recent assistant reply can be edited inline, with save and cancel, so a nearly-right answer does not need a whole regeneration.

Reasoning effort per conversation

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.

Building things: safer edits, playable games

Read before edit

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.

Packaged search

Workspace search runs on the packaged ripgrep with a directory walk as fallback, and discloses which directories it skipped.

Game mode with generated assets

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.

AI-driven games and persistence

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.

Web usage preview

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.

Adaptive thinking on Anthropic

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.

Models and hardware

Every one of these is a knob on the advanced page. Easy Setup uses them for you.

Two new runtimes

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.

LumaByte stable-diffusion.cpp build

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.

Qwen-Image 2.1 edits, tuned

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.

LumaByte llama.cpp build

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.

Fill-order layer split

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.

Dynamic RAM pinning

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.

N-gram speculation and MTP

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.

The compatibility gambit

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.

VRAM coordinator and CLIP placement

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 inspector and new image models

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.

Qwen 3.8 as the reference family

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.

Changes worth knowing about

These change behaviour you may be relying on. Read this section before upgrading a machine that other people or scripts depend on.

Native tool calling is on for the Qwen family

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.

A tool that changes state asks first

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.

Code Mode will refuse a blind edit

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.

Default tool-call pool is 1

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.

Packaged builds: RAM pinning and TTS were dead in 1.7.7 and 1.7.8

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.

Local model output will differ on identical inputs

Family sampler defaults changed again (penalty handling), so generated text will not match previous runs byte for byte.

Early access in this release

These ship in 1.7 but have not finished hardening. They are listed so you know they exist and what their limits are.

Experimental

Linux image generation

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.

Game mode

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.

NInfer and ik_llama runtimes

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.

Voice conversation mode

Speech in and out using local models, Windows and Linux only; there is no whisper binary release for macOS yet.

Music generation

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.

Borrowing GPUs from another machine

Off by default. The transport carries no authentication and no encryption; use it only between machines you own on a network you control.

The 1.7 series

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.

Run it on your own machine, read every line of it

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.