Elyra
Elyra The coding agent eTerm The terminal that knows where each command ends Huskarl AI colleagues on your own Mac Starf An activity monitor for Apple silicon that never invents a number etrans An SSH and SFTP client for macOS Elyra VM Virtual machines for macOS, Linux and Windows on your Mac Litr A small, native web browser for macOS Notr A notebook for macOS e The native code editor Elyra Grove Native local development environment Askr The real server for Laravel & PHP Elyra Framework Rust + Svelte 5 framework for desktop apps Elyra Conductor Local project conductor Refr Local-first PDF workspace for macOS Elyra Workspace A desktop workspace for coding agents Elyra SQL Server MySQL-compatible SQL server in Rust Elyra Félagi Agents as teammates on one board Elyra SQL Client Native desktop SQL workbench Elyra SQL Anywhere Replication-ready SQL engine Elyra Sjá SEO & GEO workspace for macOS Elyra DataGrid Server-driven data grid for Laravel
Release notes
Changelog
Elyra
Developer tabs

Developer tabs

Pages served from your own Mac get extra help. A tab on localhost, 127.0.0.1, or a host ending in .test, .local or .localhost is a developer tab, with no setup needed.

Server status

  • The port shows next to the tab in the sidebar, for example :3000.
  • Litr checks every two seconds whether the server answers. When it doesn't, the tab shows a red ●.
  • When the server comes back (you restarted it, or it finished rebuilding), Litr reloads the page, so you see what it serves now.

Only tabs that are loaded are checked.

Reloading when files change

Litr can watch the project's folder and reload the page whenever you save a file.

  1. Open the tab and choose Tabs → Developer Tab… (⌥⌘D).

  2. Litr finds the project folder itself when it can:

    • it looks up the process serving the port (npm run dev, cargo run, php artisan serve, python3 -m http.server, …) and uses the folder it runs in,
    • for a .test, .local or .localhost host (Valet, Herd), it looks for a folder of that name in ~/Code, ~/Sites, ~/Herd, ~/Projects, ~/Developer and similar places.

    If it can't, click Choose… and pick the folder. Detect tries again.

  3. Set Reload when files change to On.

Changes in dependencies, build output and caches are ignored, so they can't cause endless reloads: .git, node_modules, vendor, target, storage, dist, build, .next, .nuxt, .svelte-kit, .turbo, .cache, bootstrap/cache, public/build, tmp and .idea, as well as hidden files (except .env), editor swap files and logs. Several saves in quick succession cause one reload.

Leave it off for tools that already update the page themselves, such as Vite's hot module replacement.

The settings are remembered per site (scheme, host and port).

Errors

A developer tab counts what goes wrong on its page: script errors, files that didn't load (a script, stylesheet or image that gave a 404), and promise rejections nothing handled. The count shows in red next to the tab in the sidebar, for example ⚠3. Click it to open Developer Tab…, which lists them, newest first, with the file and line where there is one. Clear starts over; loading or reloading the page does too.

Litr listens from its own isolated script world, so it doesn't touch the page's scripts or its console. console.error messages aren't counted; Web Inspector has those and the full details.

Only pages served from this Mac are counted. Other sites get nothing extra.

Network

Developer Tab… also lists the calls the page makes to its API with fetch and XMLHttpRequest, newest first: method, status, address and time. Litr's own site's calls show by path; calls to other servers in full. Statuses from 400 show in orange, from 500 and failed calls in red. The list updates while the panel is open. Clear empties it; loading or reloading the page does too.

Each call has Copy as cURL, which copies a curl command that sends it again: its method, the headers the page set, what it sent (text, JSON or a form's fields), and the page's cookies if they went with it. Paste it in a terminal to see the raw answer, try the call with other values, or share it with a teammate. A file in a form is sent as @name, so put the file beside the command first. Litr keeps the first 16 KB of what each call sent; the list says when some of it is missing (more than that, or not text).

Litr watches from a page's load on, so reload pages that were open before. It keeps the newest 500 calls per page, only in the page itself, and only on pages served from this Mac.

Opening the project

With the project folder known, Developer Tab… has buttons to open it in your terminal and your code editor, named after the apps: for example Open in iTerm and Open in Zed. They are also in the Tabs menu and the command palette as Open Project in Terminal and Open Project in Editor.

Litr uses the first app it finds in Applications:

  • Terminal: eterm, iTerm, Ghostty, WezTerm, Warp, then macOS's Terminal (eterm 0.9.2 or later opens the folder in a new tab)
  • Editor: Zed, Cursor, Visual Studio Code, Windsurf, Sublime Text, Nova, PhpStorm, WebStorm, RustRover

Copy as cURL

Tabs → Copy as cURL (or the command palette) copies a curl command that asks for the page as the tab does: its address, Litr's user agent, and the cookies the tab would send (a forget tab's own cookies, in a forget tab). Paste it in a terminal to see the raw response, or to share a request with a teammate.

It works on any web page, not only developer tabs. The cookies can sign you in, so treat the command like a password: Litr says how many cookies it holds, or which header signs it in (Authorization, a token or a key). Only the page itself is copied this way; the calls it makes afterwards are in the network list on developer tabs.

Agents

Coding agents such as Claude Code and Codex can look at developer tabs themselves: the page, console, network, errors, an audit of common layout and accessibility faults, and a screenshot. See Agents (MCP).

JSON

A page that is JSON (an API response, a .json file) shows as a tree instead of one long line, on any site. See Browsing.