v1.22.0 · stable
Litr · The Browser

A small browser
that lets go of what you're not using.

Litr is a native web browser for macOS, written in Rust. GPUI — the framework Zed is drawn with — draws the tabs and the toolbar; the system's own WebKit renders the pages. Tabs run down a sidebar you can hide, only the ones you are using stay in memory, and the rest come back exactly where you left them. Ads and trackers are blocked before they are fetched. About 4 MB, no accounts, and Litr itself sends nothing about you or your browsing.

Free, every feature, no licence. macOS 13 or later on Apple silicon, signed with a Developer ID and notarized by Apple, so it opens without warnings.

litr Norse myth: the dwarf Thor kicked into Balder's funeral pyre — small, and quickly in the fire.

+
Pinned
M Mail
D Docs — WebKit
N News ⏱
R Recipes
F Forum thread
2 unloaded · 0 MB
☰‹›↻
docs.rs/gpui
ad blocked before it was fetched

Vertical tabs · a pinned tab · two unloaded · a glass rim in the page's colour

Download · v1.22.0

Download for macOS

One disk image. Open it, drag Litr to Applications. The build is signed with a Developer ID and notarized by Apple, so Gatekeeper lets it through without a warning — and the checksum is beside it so you can check what you got. After that, Litr keeps itself up to date.

macOS · Apple Silicon

DMG

litr-1.22.0-arm64.dmg

4.1 MB

sha256 070a18382f04767b65db3b4e13be05024bdf16ad198f5cc455785bc2e3b1a66d

Apple silicon, macOS 13 or later. That is what Litr is built and tested on, so no Intel build is offered. On macOS 14 and later background pages are fully suspended; on 13 they are only throttled.

S.01 — What it does

Only what you use
stays in memory.

Every loaded tab is a web view, and web views are heavy. Litr keeps as few as it can: a restored tab has none until you show it, at most three stay loaded, and a background tab you have not touched for five minutes is let go. Coming back costs a reload, not your place — the scroll position and the back/forward history are kept. On top of that Litr stays under a memory limit, 1 GB by default, and shows what every tab costs. At rest Litr uses about 75–85 MB.

Vertical tabs in a sidebar you can hide

Tabs run down the side with the site's initial on its own colour. Drag to reorder, middle-click to close, ⌘1–⌘9 to jump. ⌘S hides the sidebar and gives the page the full width. Links that open a new window open as a tab beside the one they came from, and sign-in pop-ups keep working because the page that opened them can still reach them.

Pinned tabs

Mail, a dashboard, whatever you always keep open: pin it with ⇧⌘P or drag it onto the Pinned section. Closing a pinned tab does not remove it — it is unloaded and goes back to the address it was pinned with. Pinned tabs are restored at launch even when tab restore is off. Since 1.9.0 pinned tabs can go in folders: make one with + Folder next to Pinned, drag tabs in, fold it away, rename it with a double-click. Deleting a folder keeps its tabs.

Tabs that unload and come back

Three tabs stay loaded (one to six in settings), the least recently used go first, and a background tab is unloaded after five minutes (one minute to an hour, or never). When macOS reports memory pressure, every background tab goes at once. Over the memory limit (1 GB by default) the heaviest background tab goes first, and tabs playing sound or in a call are never unloaded. An unloaded tab keeps its address, title, colour, zoom, back/forward history and scroll position, and a small picture of it shows while it reloads, so switching still feels instant; unsaved form input can be lost, and the docs say so. Since 1.8.0, under the memory meter, how many tabs are asleep and about how much memory that freed.

Ads and trackers blocked by default

EasyList and EasyPrivacy, about 117,000 rules, built into the app and compiled into WebKit's content blocker — so an ad request is never made, rather than made and hidden. Litr never downloads filter lists and tells no one what it blocked — a shield in the address bar tells you: the trackers stopped on the page, and a week's worth across every tab. If a site breaks, allow its ads in Settings for This Site, or turn Block ads off everywhere with one switch. Since 1.22.0 tracking is taken out of links: following a link to another site, Litr first takes out the parameters that only track where you came from (utm_source and the other utm_ ones, fbclid, gclid, msclkid, mc_eid, igshid, YouTube's and Spotify's si and more), so they never leave your Mac. With ad blocking on, and not on sites where you allowed ads; the privacy report counts the links cleaned, and says what was taken out of the link to the page you're on.

YouTube ads too

YouTube serves ads from the same servers as its videos, so blocking by address does not work there. On YouTube, and on YouTube players embedded elsewhere, a small script removes ad data before the player sees it, hides ad slots and the "ad blockers are not allowed" dialog, and mutes and skips any ad that still starts. YouTube changes often; when it does, the fix comes in a Litr release.

A frameless window with a glass edge

No title bar. The sidebar, toolbar and a thin rim around the page are translucent glass over whatever is behind the window, tinted with each site's theme colour, and the chrome's text turns dark or light to stay readable. Focus mode (⇧⌘F) hides everything but the page and its rim. Prefer solid chrome? Glass edge is one switch.

Favorites and your pull requests

Drag the sites you open all day up above the pinned tabs and they become tiles with their icons, up to twelve per room in rows of four. With the GitHub CLI signed in, a Pull Requests folder lists your open pull requests and the reviews asked of you, with a tick or a cross for their checks — Litr asks through gh and never holds a GitHub token.

Split view and peek

⌘\ puts two tabs side by side, with a divider to drag. ⌥-click a link to peek at it over the page without opening a tab; ⌘↵ keeps it, Esc puts it away. ⇧⌘T brings back the last 25 closed tabs, history and scroll position included, and any tab can be renamed, handy for pinned ones. Since 1.19.0 text you typed is put back: when a page loads again before what you typed into it was sent (a reload, an error, a crash, a tab closed and reopened with ⇧⌘T), a strip offers it back, and Put Back puts it in its box, Copy copies it. Kept in memory only, for an hour, never for forget tabs, never a single-line field such as a password, and not offered when the text is on the new page (a comment that was posted).

Highlights, and pages found by what they said

⇧⌘E highlights text and takes a note; the highlight is there when you come back, even if the page changed a little. Litr keeps the text of pages you read, on your Mac, so ⌘K finds a page by a sentence you remember, and the assistant can answer from what you have read and say where it read it. Forget tabs, sign-in pages and local sites are left out. Since 1.16.0 Ask About Pages I've Read finds pages by what they mean, not only by their words: macOS's on-device language model compares the question with each page's opening, and the two searches are put together. A question in another language is also asked in English when macOS has the translation installed, so English pages are found by a Norwegian question. Since 1.16.1 a page with no words the language model knows (only numbers, say) no longer counts as a match, and an English match counts as much as a match in the question's own language.

Now Playing and picture in picture

When another tab plays, the sidebar shows what, with play, pause and 15-second skips, so you never hunt for the tab making noise. ⌥⌘P plays or pauses from anywhere, ⌃⌘P pops a video out, and a playing video goes into picture in picture by itself when you switch tabs. Click ♪ to mute a tab. Since 1.10.0 Google Meet, Teams, Whereby and Zoom in the browser work: camera, microphone and screen sharing. A strip asks the first time a site wants the camera or microphone, and the answer is kept in the site's settings. Litr never turns on the camera or microphone by itself. Since 1.11.0 New Call starts a Google Meet or Jitsi Meet call from the File menu or ⌘K, or opens FaceTime to make a FaceTime link, and from a call you can invite people: copy the link, send it with the share menu, or add the call to Calendar, which sends the invitations. Works for Meet, Jitsi, Whereby, Zoom and Teams calls.

Focus sessions

For 25, 50 or 90 minutes, YouTube, Reddit and whatever else you choose stay closed. Their tabs are put away (music keeps playing), a clock sits in the sidebar, and an honest "Open for 5 Minutes" is there when you need one. At the end, a count of what you held off.

Easy on the battery

A tab that works hard shows its CPU use in the sidebar, and one that keeps eating energy in the background gets a strip offering to unload it. On battery or in Low Power Mode, Litr unloads background tabs sooner and keeps fewer loaded. And since 1.6.2 it wakes far less when nothing happens: the focus clock and the Now Playing strip tick only while there is something to show, and the check on local servers slows when no developer tab is loaded — at rest, about half the CPU it used before.

Command palette and the whole keyboard

⌘K opens a palette over the page: switch to an open tab, run any command with its shortcut beside it, open an address or search, or pick a page from your history. Or ask in plain words — "close all YouTube tabs", "move the GPUI tabs to a new room" — and the on-device model turns it into Litr's own actions, shown before anything happens. Every command is in the menu bar with a shortcut, so the mouse is optional. The palette is its own small window that exists only while it is open. Since 1.8.0 Copy as Markdown (⇧⌘C) copies the selection with its headings, emphasis, links, lists, code and tables, and since 1.11.3 it keeps links, code and bold inside table cells, and a few rows of a table become a Markdown table too. And since 1.15.0 Copy Text from Image or Video (⌥⇧⌘C): point at a slide in a talk, a screenshot or a diagram and copy the text in it, read on your Mac by macOS's text recognition. Code keeps its indentation. Since 1.16.1 it is about twice as fast on ordinary pictures: they're read once, and only code is read a second time.

Rooms, one per project

A room is a set of tabs for one client or project: admin, staging, docs, the issue tracker. ⌥⌘1–9 switches the whole set, and the room you leave is unloaded, so only one room uses memory. A room can open its web apps as you enter it. When tabs pile up, Tidy Tabs suggests groups that belong together — sorted by topic on your Mac — to move into a room of their own, and finds tabs open twice. Since 1.9.0 a room can keep its cookies and sign-ins apart from the others, so your work Google account lives in one room and your own in another (Rooms → Edit Room… → Sign-ins), on macOS 14 or later.

An assistant that stays on your Mac

⌥⌘A opens a pane beside the page: summarize it, ask it a question, or translate it. It runs on Apple's on-device model and translation, so neither the page nor your question is sent anywhere, and it costs nothing. It needs macOS 26 or later with Apple Intelligence; the model is small, and the pane says it can be wrong. Since 1.21.0 Synthesize Room writes one note from the pages open in the room, what you highlighted in them and your notes on it, on your Mac by Apple's model, with each point citing its pages by number; Copy gives it as Markdown with the pages as links. In the assistant, the command palette and the View menu.

Reader mode that frees memory

⇧⌘R, or Aa in the toolbar on an article, turns it into plain, comfortable reading, light or dark with the system. It drops the original page with its scripts and ads, so a news article that took 130 MB takes about 60. Press it again to go back to the page, where you left it. Until 1.7.3 the article's own code could still run in it; since 1.7.3 reader mode runs no scripts: an article's own code, event handlers and javascript: links stay off, whatever the page put in it. Since 1.13.0 bookmarking an article, or highlighting in it, keeps a reader copy on your Mac: when the page can't be opened (offline, the site down, the article gone), the error page offers Read Saved Copy, also in the View menu and the command palette. Save copies of articles in Settings turns it off and deletes the copies; a copy goes when its page has no bookmark or highlight left, and forget tabs never save one. Since 1.18.0 an article you bookmarked or highlighted that has changed since says so in reader mode, and Show Changes marks the new paragraphs, puts back the ones taken out, struck through, and shows in an edited paragraph which words went and came; small changes alone, like an "Updated 10:32" line, aren't worth telling you about. A footnote link in reader mode no longer makes Litr forget the page was in reader mode. Since 1.17.0 Listen to Article (⌥⌘L) reads the article aloud in one of your Mac's own voices, chosen by the language it hears in the text, and switches to reader mode first. The paragraph being read is shaded and the word being spoken marked, and the page scrolls along; it keeps reading in another tab, with pause and a paragraph back or on in the sidebar's Now Playing strip. Nothing leaves your Mac.

Forget tabs and automatic sign-out

⇧⌘N opens a violet forget tab: no history, no saved session, no cookies from your other tabs, and whatever sites store is deleted when it closes. For sites you stay signed in to, a schedule can sign you out — delete the site's cookies and data — once you have been away from it for 15 minutes, say, or every day at five.

Your coding agent can look for itself

Turn on Agents and add Litr to Claude Code, Codex or Cursor: the agent reads your local site's page, console, network calls, errors and a screenshot, and reloads it after a change, instead of you describing what broke. It only sees pages served from your Mac and only reads; your mail, your bank, cookies and passwords are never within reach, and the sidebar shows when an agent is looking. Since 1.8.0 page_changes lets a coding agent ask what changed on the page since it last looked, the lines added and removed and the new errors, instead of reading the whole page again after every edit. Since 1.12.0 page_audit says what's wrong on the page that a screenshot won't say: elements wider than the window, text cut off, broken and oversized images, fields and buttons without a name, low contrast, duplicate ids. Agents don't see the headers a page set on its calls or what it sent, since they can hold passwords and tokens.

Tabs that know your dev server

Tabs on localhost and .test sites show their port, a red dot when the server stops answering, and reload by themselves when it is back. Point one at the project folder — Litr finds it from the process serving the port — and saving a file reloads the page. A red count shows script errors and files that failed to load, with file and line a click away; the project opens in your terminal or editor, and Copy as cURL hands you the request with its cookies. JSON responses show as a tree that folds. ⌥⌘R shows the page at phone, tablet and desktop widths side by side, scrolling and navigating together. Since 1.8.0 web servers running from a project folder on this Mac (Vite, cargo run, php artisan serve …) are listed first in ⌘K, with their folder and program, before you type a port. Since 1.12.0 Developer Tab… lists the calls the page makes with fetch and XMLHttpRequest, newest first, with method, status and time, failed calls and errors in colour, and Copy as cURL sends any of them again from a terminal with its method, headers, body or form, and the page's cookies if they went with it. Since 1.16.1 the calls kept for it can't be read by the page's own scripts any more: Litr reads them with a key made for each launch, since their headers can hold tokens.

Your default browser, with link rules

Make Litr the default and links from Mail, Slack and everything else open in it. Link rules send a site's links somewhere particular: Jira links to the Jira web app, a client's links to their room, your bank to a forget tab. A rule covers a site and its subdomains, and the most specific one wins.

Passwords, saved and filled in

Sign in and Litr offers to save the password, two-step sign-ins like Google's included; next time, click your account and it is filled in. It never fills in by itself, and only on the site the password belongs to. Since 1.7.1 the offer appears only on a real sign-in page, not on a field for picking a person or an e-mail address, and Not Now keeps it away on that site until you restart Litr. Passwords live in your Mac's keychain, and showing one asks for Touch ID. Since 1.20.0 filling in a password or one-time code asks for Touch ID (or your Mac's password) first, as showing and copying one already did, so no one else at your Mac can sign in as you; turn it off in Settings under Confirm it's you before filling in. Confirming lasts five minutes or until the screen locks, the Mac sleeps or another user switches in, and deleting a password or removing one-time codes asks too. Since 1.14.0 Litr makes the six-digit codes for two-step sign-in, as an authenticator app does, and offers to fill one in on a site's code page after the password: in one field or a row of one-digit boxes, and only when you click. Set Up One-Time Codes from QR Code reads the QR code a site shows for authenticator apps; Add Code… in the Passwords list takes the setup key instead. The keys are kept in your keychain with the passwords.

Bring everything over

Import bookmarks, history and passwords from Chrome, Arc, Dia, Brave, Edge, Vivaldi, Opera, Safari and Firefox — and Arc's spaces become rooms with their pinned tabs. Litr reads the other browser's files on your Mac; nothing is uploaded, and importing twice adds nothing twice. Bookmarks live in a searchable library: ⌘D to add, ⌘K to find.

Web apps with their own logins

File → Create Web App turns the current site into an app in ~/Applications, with its own Dock icon made from the site's icon, its own window without browser chrome, and its own cookies, logins, history and settings — signed in to one account in Litr and another in the app. Litr keeps the web apps it made up to date.

Scheduled tabs

Unload a heavy dashboard in an hour, or bring your mail up every morning at eight. ⌥⌘S schedules the current tab once or daily. A daily schedule missed while the Mac slept still runs up to an hour late, and is skipped after that — so opening the lid does not fire a morning's worth of old schedules at once.

History, find in page, downloads

Searchable history (⌘Y), grouped by site, where every word must match. Find in page (⌘F) as you type. Zoom remembered per site, and settings for a site: allow its ads, stop video that plays by itself, or darken a site with no dark mode. Downloads to ~/Downloads with progress in the sidebar and macOS's quarantine flag kept, so Gatekeeper still checks a downloaded app before it opens.

Updates that check before they swap

Once a day Litr asks elyracode.com for one small file naming the newest version. Install downloads it and checks it matches its published SHA-256, is signed with Litr's Developer ID and is the version the feed named — then moves the old app aside, not over, and puts it back if the swap fails. Nothing restarts until you choose Relaunch.

No telemetry, no accounts

No analytics, no crash reporting, no sync, no sign-in. The only request Litr makes on its own behalf is that daily update check, which carries nothing about you or your browsing — and it can be turned off. Tabs, history and settings live in one SQLite file on your Mac, and since 1.6.1 Litr copies it once a day and before an update changes it, keeping the newest five beside it. If a bookmark, your tabs or a setting cannot be written, a red strip says so, with Show Backups, instead of carrying on as if all was well.

S.02 — Worth knowing

The engine is Apple's.
Everything around it is small.

01

About 4 MB, because the engine ships with macOS

Litr does not bundle a rendering engine. Pages are drawn by the WebKit that is already on every Mac and updated with it; Litr is the single Rust binary around it — GPUI drawing the chrome with Metal, the system SQLite holding your tabs and history. About a megabyte of it is the ad-blocking rules.

02

Blocking makes pages lighter, not slower

WebKit compiles the rules into bytecode every page process reads straight from disk, so blocking costs little memory. Compiling 117,000 rules takes a few seconds and a lot of memory once, so Litr does it in a short-lived helper that exits when it is done. Pages opened in those first seconds load unblocked and reload when the rules are ready — the docs say so rather than hope you miss it.

03

Litr is the dwarf in Balder's pyre

At Balder's funeral, as Thor hallowed the pyre with his hammer, a dwarf called Litr ran in front of his feet, and Thor kicked him into the fire. Small, underfoot, and gone in a flash seemed a fair description of a browser that tries to stay out of the way — hence the flame on the icon.

S.03 — Price & privacy

Free.
No licence, no account, no reminder.

Litr costs nothing and asks for nothing: there is no licence key, no checkout, no sign-in and no sheet asking whether it has been useful. Every feature on this page is in the download.

Developed by Wirelabs AS in Norway. The About panel (Litr → About Litr) shows the version you are running, this page, and the update status.

Sends
Nothing of its own, beyond one daily request for latest.json that carries nothing about you. Turn it off in settings and Litr asks nothing at all.
Stores
On your Mac, and nowhere else: tabs, history, saved copies of articles, schedules and settings in one SQLite file; cookies and site data in WebKit's own folders.
Installs
Only what it has checked: the published checksum, Litr's Developer ID signature and the version. A download that fails any of them is not installed, and the About panel says why.
Colophon — Get the browser

Keep every tab.
Carry only three.

Download Litr, open the tabs you always have open, and watch the ones you are not using let go of their memory — and come back where you left them.

Litr · v1.22.0 Built in Norway · MMXXVI