Download Loach
Blog

Built in public.

Releases, decisions and the work behind Loach, newest first.

Loach v1.6.0 adds a Library, sizes your sources to the context window, previews HTML and feels at home on macOS

The largest update Loach has had, roughly twice the size of any release before it. Most of it is one idea: letting your models work with your own material. The new Library keeps your notes, documents and web pages in one place, attaches them to any chat or Space, and sends the model only as much as fits its context window.

Download v1.6.0 or open Settings → Updates and hit Check for updates.

The Library

A new page in the sidebar for everything you hand your models: texts you write or paste in the app (Markdown works), files up to 20 MB each (text and code, PDFs, Word documents and images), and web links, fetched once and kept as a dated snapshot that Refresh brings up to date. Group items into datasets, like "Thesis research", and a whole set attaches in one click. A dataset only groups items, so one item can sit in as many as you like.

To use something in a chat, click the + next to the message box and choose From Library, or type # and a few letters. Sources are linked, not copied: fix a typo in a Library text and every chat and Space using it sees the new version on its next message. It works the other way too. A reply worth keeping goes to the Library from its … menu, and so do the files attached to your messages. More about the Library

Sources sized to the context window

Small sources still go to the model in full, in the system prompt, where they stay the same from turn to turn, so a local model's prompt cache keeps them and the next reply starts fast. Once they outgrow half the window, Loach switches to excerpts: for each message it finds the passages most relevant to it (and to your previous question, so a short follow-up still finds its subject) and sends only those. That's Auto, the default. The Sources chip next to the message box also offers Full text and Excerpts.

Every reply that drew on sources says how, like "Read 3 sources in full" or "Used 6 excerpts from 3 sources", and expanding it shows the exact excerpts the model saw, so you can tell whether a wrong answer came from the model or from what it was given. Search works by keyword out of the box, with accents folded so gesla finds gęślą. For search by meaning, add an embedding model in Settings → Library: Download & use pulls a small one into Ollama in one click and keeps everything local. Your OpenAI-compatible endpoint works too, but then the text of your sources, and of each message that searches them, goes to it.

HTML preview

Ask a model for a landing page or a small widget and you can see it without saving a file first. HTML code blocks get a Preview button, and the code canvas a Code / Preview switch, for code blocks and .html attachments alike. The page renders offline in a sandbox on an origin of its own: it can't reach Loach, your chats or your files, and nothing it links to on the web loads. Scripts are off when it first opens, and Run scripts turns them on for that page alone. See the Developer UI

At home on macOS

On a Mac, Loach now uses the native traffic-light buttons, shows the fish in the menu bar instead of a solid square, takes Cmd alone for its shortcuts, and comes back when you click its Dock icon. Closing the window hides Loach rather than quitting it, the way most Mac apps work, and locks it too if you've set an app lock.

Read moreShow less

Spaces use the Library too

A Space's Sources tab takes Library items and whole datasets next to the files you upload to it, shows how much of the context window they take, and has a switch on each one to pause it without removing it. The new Settings tab gathers the Space's default model, memory auto-save, source mode and image scaling. Spaces made before 1.6 keep sending their sources in full until you switch them to Auto, so nothing changes under your feet.

Image scaling

A full-size phone photo costs thousands of tokens, and many local vision models read it worse, not better. Images are now scaled down before they're sent, to 1024 px on the longest side by default, while the original stays in your chat. Choose Scale down (to a pixel cap or a percentage) or Original in Settings → Features, or for Library images in Settings → Library, and override either per Space or per chat. Working with screenshots full of small text? The per-chat setting is the one to reach for.

Ten more slash commands

/stop, /find, /import, /label, /folder, /tone, /set, /unload, /theme and /lock join the palette. /label green colours the chat, /folder Work files it (and makes the folder if there isn't one), /set temperature 0.2 changes a parameter, and /unload frees the Ollama model from memory. The palette also completes model, Space, snippet and persona names, and a bare /model opens the model picker.

Also in this release

  • Drafts stay with their chat. Unsent text and attached files belong to the chat (or Space page) you wrote them in, so switching chats no longer carries a half-written message along.
  • One Loach at a time. Launching Loach while it's running brings the open window forward, out of the tray too, instead of starting a second copy.
  • Search covers the Library. Ctrl/Cmd+K finds Library items and datasets, and in:library narrows it down.
  • Every model on your endpoint. The model picker lists every model an OpenAI-compatible endpoint offers.

Fixes

  • OpenAI reasoning models work. Newer GPT models that refuse max_tokens or a custom temperature are retried with the fields they accept.
  • Steadier app lock. The lock screen at launch no longer reads the system keychain, so there's no keychain prompt before you've typed anything. Failed unlock attempts survive a restart, and locking closes open dialogs and ends a Private Chat.
  • Private Chat stays private. It no longer offers built-in tools or Ollama cloud models, and it tells you when Ollama runs on another machine.
  • Safer workspace edits. Changes to git hook folders and bare repositories always ask first, paths using Windows short names (IMPORT~1.MD) are refused, and an edited file keeps its Windows permissions.
  • Sturdier MCP. A long tool call that reports progress is no longer cut off after 30 seconds, a hung server restarts on the next call, and tokens in a server's arguments or URL are left out of backups.
  • Keyboards and text files. Shortcuts work on Cyrillic and Greek layouts, Ctrl/Cmd+/ works where / needs Shift, and UTF-16 and Windows-1250/1252 text files open correctly as attachments.
  • Closer counts. The context bar includes a Space's instructions and sources and estimates Chinese, Japanese and Korean text properly, and the count tool treats an emoji or accented letter as one character.
  • The Models editor asks before saving over an existing tag, the base model included. Many smaller fixes and hardening throughout, plus dependency updates including Tauri 2.12.

Good to know

Backups made by 1.6.0 include the Library, so Loach 1.5 and older won't restore them. 1.6.0 still restores backups from older versions.

Full changelog in GitHub Releases

Loach v1.5.0 works in your folders, follows LOACHFILE.md, remembers across chats and runs local MCP servers

Loach can now work on real files. Give a chat a folder and the model reads, searches and edits your project, but nothing changes until you've seen the change. Memory reaches beyond Spaces, and MCP servers can run as local programs, with every tool call approved first.

Download v1.5.0 or open Settings → Updates and hit Check for updates.

Work in a folder

Click the + next to the message box, choose Add directory, and the model can list, find, read, search and edit the files in it. It stays sandboxed to that folder and has no shell. Before anything is written, edited, moved or deleted, Loach shows you the change itself (the new contents, a line-by-line diff, from → to, or a deletion warning) and asks, unless you've allowed that tool for the chat. Line endings and non-UTF-8 encodings are kept as they were.

The tools run inside Loach, but what they read becomes part of the conversation: with a cloud provider, file contents are sent to it like any other message. Private Chat never gets a folder. More about project folders

Project instructions in LOACHFILE.md

Put a LOACHFILE.md at the root of a chat's folder and it's added to every turn: how to run the tests, what not to touch, house style. It's read fresh each time, so an edit applies on your next message, and your own instructions still win when the two disagree. There's a sample to start from.

Global memories, and memory that keeps up

Turn on Global memories in Settings → Features (or in setup's Pick your defaults step) and Loach notes lasting facts about you from chats outside a Space, then brings them into every chat, Spaces included. It's off by default, and Private Chat never reads or writes memory.

Space and global memory now update a fact that changed, or drop one that no longer holds, instead of stacking up contradictions. Every change shows an Undo, and the memory editor adds search, shows when each fact was saved and links back to the chat it came from.

Local MCP servers, with approvals

Settings → MCP can now run servers as local programs (npx, uvx, node or a full path) as well as over HTTP. A native dialog shows exactly what will run and asks before any local program starts. Environment variables, which often hold keys, are left out of backups.

Every MCP tool call now pauses the reply and shows the server, the tool and its arguments. Choose Allow once, Always allow for that tool, or Deny. This is on by default, so servers you already had will start asking too. Switch Ask before each tool call off on a server you trust.

Read moreShow less

Fixes

  • Compacted chats keep their summary. In a Space with its own instructions, compacting a chat used to lose the summary, and a compacted chat with no instructions of its own stopped following your global Custom instructions. Both are fixed.
  • Private Chat stays private. A file dropped onto Private Chat no longer lands in the regular chat behind it, and keyboard focus stays put. Private Chat also sends the settings its panel shows instead of leaving the unchanged ones to Ollama's defaults.
  • /remember respects the memory switch. It no longer saves a fact in a Space whose memory is turned off.
  • Customize Hugging Face models. Models pulled as hf.co/user/repo:tag can now be saved as new models from the Models editor.
  • Clearer errors. Running out of memory while loading a model now says so and suggests a smaller context or model. An API key withheld over plain http:// is explained instead of looking like a wrong key.

Full changelog in GitHub Releases

Loach v1.4.1: six fixes on top of 1.4

A day after v1.4.0, a small patch for the rough edges people hit first.

  • Readable context menus. Context menus got their backgrounds back.
  • Reply stats stay put. The token count and speed under a finished reply no longer vanish when it stops streaming, only to reappear after a restart.
  • A model suggestion you can actually download. When nothing in the catalog fits your free disk space, setup points at the smallest option instead of headlining the largest one with its Pull button disabled.
  • No stale OpenAI models. Removing your API key now clears the model list, rather than leaving entries in the pickers that could only fail at send time.
  • In-chat find agrees with itself. Highlights match the result counter exactly, so Next and Previous reach every one.
  • Focus finds its way back. Pressing Ctrl/Cmd+K while the search palette is already open no longer strands focus when you close it; it returns to the composer.

Loach v1.4.0 knows your hardware, searches inside messages, renders LaTeX and locks itself

The biggest quality pass since 1.2. Setup now recommends a model your hardware can actually run, search finally looks inside transcripts, math renders properly, and the app can lock itself when you walk away.

Download v1.4.0 or open Settings → Updates and hit Check for updates.

Onboarding that knows your hardware

First-run setup used to size its model suggestion against system RAM, which is the wrong number for anyone with a discrete GPU. It now reads your card's VRAM (or falls back to RAM when there isn't one), leads with a single recommendation that runs comfortably, and labels every catalog entry with an honest verdict: Runs well, Runs OK, Runs slowly, or Too big for this machine. The download runs in a strip you can leave working while you finish the rest of the wizard.

There's also a new Tools step. It opens on a Recommended preset with All OFF / Recommended / All ON buttons and a switch per tool, so the built-in toolkit is no longer something you discover by accident in Settings. Anything that reaches the network stays off until you turn it on.

Search inside messages

Ctrl/Cmd+K now looks inside message content, not just chat titles. Scope it with the picker or by typing an in: filter — in:chats, in:messages, in:spaces, in:snippets. Message hits keep a reserved block of their own so a common word in a hundred titles can't crowd them out, and picking one jumps straight to that turn.

LaTeX math in replies

$$…$$, $…$, \(…\), \[…\] and ```math fences all typeset with KaTeX, with no setting to hunt for. $ still works as a currency sign, so "it costs $5 and $10" stays prose. KaTeX ships inside the app and is only read from disk the first time a reply contains math, so nothing is fetched over the network.

Auto-lock

Once an app lock is configured, Settings → Security can lock Loach after 1, 5, 15 or 30 minutes without input, or the moment the window is minimized. Both are opt-in, and Ctrl/Cmd+Shift+L locks immediately from anywhere in the app. Privacy and security in Loach

Read moreShow less

Also in this release

  • Storage breakdown. Settings → Data now shows what your chats, attachments and Spaces actually weigh on disk.
  • Undo an archive. Archiving a chat offers an inline Undo, and a quiet Archived row appears in the sidebar whenever archived chats exist, so nothing looks gone for good.
  • In-app updates for .deb and .rpm. Linux package installs now update in place like the AppImage does. Installs from v1.2.3 or earlier still need one manual download before in-app updates take over.

Fixes

  • Correct arithmetic. The calculator tool moved to a new engine that groups expressions the way every other language does and reads scientific notation like 6.022e23.
  • Math no longer disturbs code. Formula detection leaves code blocks, currency and half-typed TeX alone.
  • Legible in Light theme. Contrast failures across toasts, onboarding, code blocks and links are fixed.
  • Reachable by keyboard. Every control has an accessible name and a visible focus ring.
  • Timezone-aware date differences, chat parameters that no longer go stale, no leaked streams on cancel, and a model picker that opens in front of the onboarding wizard instead of behind it.
  • Dependency updates throughout, including a security fix for the PDF reader.

Full changelog in GitHub Releases

Get your chats in order: Loach v1.3.0 with folders, colour labels, pinned responses and message sharing

This release is about finding things again. Folders and labels tame a long sidebar, pins bookmark the answers worth keeping, and sharing gets a message out of Loach without uploading anything.

Download v1.3.0 or update directly from the app in Settings → Updates.

Chat folders

Drag one chat in the sidebar onto another, give the folder a name, and both are filed together in a new Folders section between Pinned and the date groups. Drop chats in and out, rename or delete the folder. Deleting a folder never deletes chats; they simply move back to the main list.

Colour labels

Tag any chat Red, Amber, Green, Blue, Purple or Pink from its Label menu. The dot follows the chat everywhere it's listed: sidebar, Space view and chat menus.

Pinned responses

Pin any reply from its … menu and it lands in a Pinned bar under the chat header. Click a chip to jump straight back to that answer. Pins are stored with the chat, so they survive restarts and travel in exports.

Share a message

Copy any message as text or as a rendered chat-bubble image, save the image as a PNG, or open a pre-filled post on Facebook, X, Reddit or LinkedIn. Loach uploads nothing: sharing hands text to your browser or leaves an image on your clipboard.

Read moreShow less

Start Ollama from Loach

When the daemon isn't answering, the model picker offers a Start Ollama button. Settings → Providers can also start it automatically at launch. Both are opt-in, and only for an Ollama running on this computer.

Auto-check for updates

Switch it on in Settings → Updates and Loach checks once per launch, showing an Update available dialog with the new version's notes. Nothing downloads until you choose Update now.

Fixes

  • No more duplicate sends. Hitting send twice in quick succession can no longer dispatch the same message twice, and compaction no longer hangs partway through.
  • Fresher model and Space data. Switching endpoints or editing a Space no longer leaves stale entries behind, and per-chat parameters merge correctly instead of clobbering your defaults.
  • Steadier upgrades. Interrupted database migrations no longer leave the app unable to start, and MCP servers stop needlessly reconnecting.
  • Assorted stability, security and accessibility hardening throughout the app.

Full changelog in GitHub Releases

Five maintenance releases: faster startup, Linux package updates and a big accessibility pass

Between June and July we shipped v1.2.1 through v1.2.5. No headline features, just the kind of fixes you notice by their absence.

Faster across the board

v1.2.4 made Loach cold-start quicker, begin replies sooner, and stream long answers more smoothly even in big sessions with large transcripts. Under the hood: lazier startup and hydration, cached model and MCP catalogs, windowed transcript rendering, chunked markdown while streaming, a pooled database reader, and a leaner release build.

In-app updates for Linux packages

Debian and RPM installs now update from within Loach the way the AppImage already did. Loach downloads the signed package, elevates to install it, and keeps your package database consistent. Updating to a build with this support needs one manual download; after that, updates are in-app.

A big accessibility pass

In v1.2.5 the chat list became fully keyboard-operable, with a clear focus ring and Enter or Space to open a chat. Loach now honors your system "reduce motion" setting, moves focus straight into the composer when Private Chat opens, tells screen readers when a reply starts and finishes, announces errors right away, and labels the PIN and password fields on the lock screen. Status colours now meet WCAG AA contrast, so warnings and the context meter no longer wash out on the light theme.

Read moreShow less

Smaller changes, release by release

  • v1.2.1 — Persona chips read clearly on the light theme, small click targets grew, failed actions surface an error toast instead of failing silently, and the in-app keyboard reference lists the full set of shortcuts.
  • v1.2.2 — MCP server URLs on localhost or a private LAN address are accepted, so a self-hosted server connects instead of being rejected. Only link-local cloud-metadata addresses stay blocked. gemma4:12b joined the onboarding catalog.
  • v1.2.3 — Stopping a reply the instant it starts, or queueing chats back-to-back, no longer freezes the bubble or lets a cancelled stream bleed into the next one. Math conversion skips code blocks. A missing or unresponsive system keyring no longer hangs startup. An API key that fails verification no longer enables Continue in onboarding. Duplicate error toasts collapse into one, and very large code blocks skip highlighting instead of stalling the window.
  • v1.2.4 — The Ollama keep-alive setting now persists, Code Canvas's Open in VS Code works on macOS when Loach was launched from Finder, and the tokens/sec readout is more accurate.
  • v1.2.5 — No more double scrollbar in the sidebar, Snippets and Spaces show a loading state and a Retry button instead of flashing empty, and a slow model listing can no longer overwrite a newer one.

Read the notes for each release on GitHub

The power user's update: Loach v1.2.0 with built-in tools, slash commands, snippet variables and context management

v1.2.0 is the release where Loach stops being just a chat window. Models can call local tools, the composer grows a command palette, snippets become templates, and long chats get a context meter with one-click compaction.

Download v1.2.0 or update directly from the app in Settings → Updates.

Slash commands

Type / at the start of the composer to open a command palette and run chat actions without leaving the keyboard: /fork, /regenerate, /compact, /private, /copy, /export, /stats, plus /model, /persona, /snippet, /instructions, /remember, /fetch, /list, /settings and more. Arrow keys to move, Tab to complete, Enter to run. Destructive commands ask first, and anything that isn't a recognised command is sent as an ordinary message.

Built-in tools

A set of local utilities the model can call mid-answer, each with its own toggle in Settings → Tools: calculate, datetime, count, hash, uuid, base64, json, unit convert, text diff, sort and IP math. A pdf tool turns a model's structured spec into a real PDF that lands in the chat as a previewable, savable attachment. They run entirely on your machine, so they work inside Private Chat too. See the full toolkit

Context usage bar and compaction

A slim bar above the composer shows how full the model's context window is, with a popover breaking it down into system prompt, history and attachments. Compact context summarises older turns into the system prompt to free space. The original messages stay in the transcript for scrollback behind a compaction divider.

Fork chats

Branch any conversation into a new copy from the header, a message's … menu (which forks up to that point), or /fork. The fork keeps the same model and Space and carries a "Forked from …" badge that jumps back to the source.

Read moreShow less

Custom snippet variables

Parameterise snippets with {{PLACEHOLDER}} variables. Define reusable static globals once in the Snippets library, or leave placeholders to prompt you for values when you run the snippet; answers are remembered per snippet. Our Prompt Gallery is built around this.

More in this release

  • Tool-call blocks. When the model calls tools, the calls collapse into a single "Called N tools" header above the answer. Expand it to see each call's name, arguments and result.
  • Code canvas upgrades. The canvas is now resizable, updates live while a reply is still streaming, and gains an Open in VS Code button.
  • Smarter import / export. Export can write a summarised version instead of the verbatim transcript, and imported context can be hidden from the transcript while still being sent to the model.
  • Web-fetch chips. The URLs Loach fetched for a turn appear as small chips on the reply.

Fixes and hardening

  • Web-fetch SSRF screening tightened: IPv6 gaps are closed and redirects are re-screened on every hop.
  • Images from MCP tools are surfaced as inline attachments instead of being dropped.
  • Importing context keeps system turns and no longer mistakes Markdown headings for role markers.
  • Smaller polish: a stale password hint, the Thinking toggle reflecting the wrong state, out-of-date PDF-preview wording, and inconsistent archive-label casing.

Full changelog in GitHub Releases

Loach swims to macOS with the newest v1.1.1 release

Loach v1.1.1 is out with native macOS support and security improvements.

Download v1.1.1 or just hit Check for updates in Settings.

macOS support

Loach now ships a native Apple Silicon build. Grab the .dmg from the Releases page for a fresh install; existing installs get .app.tar.gz through the built-in updater. Intel Macs are not supported.

Heads-up on first launch: the build is ad-hoc signed, not Apple-notarized, so Gatekeeper will refuse to open it. Right-click → Open, or run xattr -cr /Applications/Loach.app. Full install steps are in the installation guide.

Also in this release

  • Web-fetch hardening. The web-fetch tool is now rate-limited and rejects private, loopback, link-local, and other non-routable addresses to prevent SSRF.
  • Surface hardening. Tighter input validation on exported chats, additional bounds checks across IPC commands, and MCP server error messages are sanitized before being surfaced as notices.

Loach v1.1.0 is out with private chats, attachment previews and regenerate response buttons

Our app received a quality-of-life upgrade, especially around privacy and how you handle the stuff you send into a chat.

Download v1.1.0 or update directly from the app in Settings → Updates.

Private Chats

There's a new ghost icon in the title bar. Click it and you're in Private Chat - a dark, ephemeral space where nothing is saved to disk and nothing leaves your device. Everything is wiped the moment you close the chat, MCP and web fetch tools are blocked, and only local Ollama models are available in this mode. It's for the conversations you don't want hanging around in your sidebar.

Regenerate responses

Don't love the answer you just got? The last response from the LLM now has a Regenerate button. It drops the reply, re-sends your turn, and streams a fresh one in place.

Attachment previews

Loach can now preview images, render PDF files, open text and code in Canvas or show a file-info card for everything else - with Save button wherever it makes sense.

Read moreShow less

Test connections

Settings → Providers now has one-click probes for Ollama and any OpenAI-compatible endpoint. It tells you the daemon version, model count, or a readable error so you can verify a base URL + key without having to open a chat and watch it fail. There's also a presets dropdown that fills in the right endpoint for OpenAI, llama.cpp, LM Studio, vLLM, and LiteLLM.

More Tones

We added Direct (replacing Concise), Playful, Skeptical, and Socratic. The Settings page got a "What each tone does" drawer so you can browse them without guessing.

Other minor changes

  • Low VRAM is now a per-chat toggle in the Simple parameters view, including in Private Chat.
  • A Features tab in Settings collects Thinking, Temporal awareness, and Low VRAM in one place.
  • Space chat rows got the same right-click menu as the main sidebar.
  • An archive Remove all for nuking every archived chat in one go.
  • If a message fails to send, your composer draft is restored instead of vanishing.
  • Code Canvas line numbers line up again, PDF previews no longer clip, and the tray icon shows up on first launch.

Full changelog in GitHub Releases

Notes on previous minor releases

In previous Loach v1.0.1 and v1.0.2 releases we focused on improving MCP, performance (faster launch and first response) and security. Some minor bugs were fixed and copy / paste messages reworked for better usability.

Loach v1.0.0 is here!

After many iterations, late-night refactors and a steady stream of feedback from people who clearly cared about the details, Loach - a privacy-first, native AI desktop workspace for local and remote LLMs - finally reached v1.0.0, the first release we feel good about calling stable.

Release v1.0.0 Documentation is live at docs.loach.dev.

This release marks the point where the core experience is ready for everyday use. The streaming is smooth, cancellation actually cancels, MCP tools behave the way they should, CVEs are cleared. None of that sounds glamorous, and that's kind of the point - the boring stuff finally works the way it should.

Alongside the release, the documentation site is now live at docs.loach.dev — guides, configuration reference, and everything you need to get up and running in one place.

There's so much more we want to build. But today, just for a moment, we're going to enjoy this.