Downloads

Get Moonladder v1.0.0

Download Moonladder and browse release notes for every version.

Current release
Stable · License required
Released 2026-10-09

v1.0.0

  • Sync workspaces through a self-hosted server, with field-by-field conflict resolution
  • Pre-request and post-response JavaScript scripts on requests and collections
  • HTTP and SOCKS proxy support in a rebuilt settings dialog
  • Request history, saved responses, and headers inherited from collections
  • A new code editor for JSON, XML and HTML bodies that stays fast on multi-megabyte payloads

Large saved responses stay fast

Saved response bodies are only loaded when you open one, so switching workspaces, renaming and saving stay quick even with many megabytes of saved responses. Large bodies are prepared in the background while the tab shows a spinner, and JSON in the response viewer is highlighted as you scroll instead of all at once.

Stability and polish fixes

Fixed input colors in the light theme, Escape closing the dialog behind an open dropdown as well as the dropdown, the Authorization tab showing stale values after switching between a collection and a request, and duplicated collections losing their documentation. Header names are trimmed and blank rows are skipped when sending. A tab is now marked modified when an edit replaces text with text of the same length. On macOS the app renders at the correct scale on Retina displays and bundles the libraries it needs.

Pre-request and post-response scripts

Requests and collections can each have a pre-request and a post-response JavaScript script, edited on a new Scripts tab. Collection scripts run for every request inside them, outermost collection first. Scripts can change the outgoing request, read the response, set and unset environment variables, and compute hashes and HMACs. A pm compatibility layer keeps scripts imported from Postman and Insomnia working. Changes a script makes to a request apply to that send only and are never saved. Scripts run in the background so a slow one never freezes the window, and each run is limited to 5 seconds and 64 MB of memory. Errors show in a banner in the response area, and console output goes to the app log.

Proxy support

Settings > Proxy sends your requests through an HTTP, HTTPS, SOCKS4, SOCKS4a, SOCKS5 or SOCKS5h proxy, with optional credentials and a list of hosts to bypass. You can also use the system's proxy environment variables (the default) or connect directly. Copy as cURL includes the matching proxy options. Sync traffic does not go through this proxy.

Rebuilt settings dialog

Settings open with Ctrl+, and are laid out in a single aligned column that scrolls. New options cover line numbers, auto-closing brackets, wrapping long lines, restoring tabs on launch, and the maximum number of redirects to follow. Numeric fields show their allowed range and warn while a value is outside it.

Compressed responses and redirect loops

Adding an Accept-Encoding header now also decodes the compressed reply instead of showing it as binary, and new requests ask for gzip, deflate and br by default. Follow Redirects used to have no limit, so a redirect loop ran until the request timed out. It now stops at the configured maximum.

User-Agent from the running version

The User-Agent header is added when a request is sent, using the version you are running, instead of being saved into each request. It appears as a locked first row in the headers table that you can switch off per request, or override by adding your own User-Agent row.

Tab bar scrolling

The tab bar scrolls with a plain mouse wheel, and when tabs overflow, a button jumps back to the first one.

Copy the whole response

A copy button beside the response tabs puts the entire body, or all of the headers, on the clipboard in one click. Copies of any size now work on Linux, and on Windows text outside the system code page no longer pastes as question marks.

Choose how a response body is displayed

The response body's format is now a dropdown offering Raw, JSON, XML and SSE whatever the Content-Type says, so a JSON body served as text/plain can still be pretty-printed. XML responses can be prettified for the first time. The response headers table sizes its name column to the longest header.

New code editor for request bodies

JSON, XML and HTML request bodies use a new editor built for large payloads. Typing into a multi-megabyte body stays smooth, and undo no longer copies the whole document at every step. It closes brackets, quotes and XML/HTML tags for you, types over closing characters, keeps indentation on Enter, and handles right-to-left text correctly.

Column headers on every table

Query parameter, header, form body and path parameter tables now show column headers, and every editable table always has an empty row ready to type into.

Ctrl+K to search

Ctrl+K focuses the search field of the sidebar tab you are on, in both Collections and History.

Select environments from the sidebar

Each environment in the sidebar has a check mark that selects or clears it as the active environment, and the environment dropdown gained a Create Environment button.

URL and query parameter fixes

Editing query parameters no longer drops the URL's #fragment, delimiters inside a parameter value are kept, and URLs imported as plain strings keep their query parameters. Path parameters with non-Latin names are recognized, and invisible characters are no longer counted as part of a name.

Saved responses

Save a response under a name on the request that produced it. Saved responses appear under their request in the sidebar, open in their own tabs, sync with the workspace, and import from and export to Postman as examples.

Request history

A new History tab in the sidebar lists every request sent in the workspace, newest first, along with its outcome. Any entry can be reopened as a new tab. History stays on your machine and is never synced, and {{variables}} are stored unresolved so environment secrets are not written to it.

Headers inherited from collections

Collections can define headers that every request inside them sends, the same way authorization is inherited. A request's own header with the same name takes precedence. Both the request and collection editors list inherited headers in a read-only table naming the collection they come from.

Reveal masked passwords and tokens

Password and token fields have an eye button to check what you typed. The field is masked again as soon as you move to another request or collection.

Unreachable hosts fail fast

Connecting to a host that never answers now gives up after 5 seconds instead of curl's default of 5 minutes. Your request timeout still applies to the request as a whole.

Documentation preview wraps text

Long paragraphs in the Markdown preview wrap to the width of the pane, and code blocks scroll sideways instead of running off the edge.

Upgrading from a version older than v0.5.0

If you are coming from a release older than v0.5.0 and still have a collections.json file, install v0.5.0 first and launch it once. It converts your data to the current storage format. That conversion has been removed from this release, so upgrading straight to v1.0.0 would leave the old file untouched and start you with an empty workspace. Anyone already on v0.5.0 can upgrade directly.

Workspace sync with a self-hosted server

Add a server instance from the selector in the top bar and your workspaces sync across machines and teammates. Access is granted per workspace by the administrator. Instances can be renamed or removed from the selector, and the Local entry never syncs, so on-device work is unchanged. Sync requires a connection: the client tells you when it is offline, keeps retrying, and asks before you quit with changes the server has not accepted yet. The server is a single binary backed by Postgres, and can also be run with Docker Compose.

Conflicts are resolved field by field

When two people change the same request, collection or environment, Moonladder detects it instead of silently overwriting. You get a merge dialog showing your value against the server's for each field, and choose per field which to keep.

Documentation syncs with your collections and requests

The Markdown documentation added in v0.5.0 travels with a synced workspace, and shows up in the sidebar without opening the request first.

Create a collection while saving

Saving a request with Ctrl+S when you have no collections lets you name a new one right in the save dialog, and a New Collection link is there when you already have some.

Reopen closed tabs

Ctrl+Shift+T reopens the most recently closed tab, unsaved edits included, like a browser. The app remembers the last 16 closed tabs by default, which you can change in Settings.

Earlier releases

v0.5.0

Alpha · Preview
2026-08-22
  • A ground-up rewrite: new custom engine with event-driven rendering and far lower CPU usage
  • Themes, cookies, and SQLite-backed storage
  • Keyboard navigation, a shortcuts dialog, and interface translations
  • JSON highlighting and inline validation, SSE responses, and Markdown documentation

A brand-new foundation: custom engine rewrite

Moonladder's interface was rewritten from scratch on a custom immediate-mode engine written in Odin, replacing the previous Qt/QML front end. Rendering is now event-driven so idle CPU usage drops dramatically, and text handling is much stronger with proper RTL/bidi selection plus a bundled Arabic font. Every existing feature was rebuilt on this foundation.

Keyboard navigation everywhere

Tab and Shift+Tab step through widgets in reading order and the arrow keys move focus spatially to the nearest widget, marked by a visible focus indicator. Landing on a text field makes it immediately typeable, so most of the app can be driven without touching the mouse.

Shortcuts reference dialog

Press Ctrl+/ to open a dialog listing every registered keyboard shortcut, each chord rendered as keycap chips with a description. Chords that behave differently per context list every context on its own line.

Inline JSON validation errors

The JSON body editor now underlines the first lexical or structural error with a red squiggle; hovering shows the message with line and column. Env-var placeholders like {{name}} in value positions are treated as valid since they are substituted before sending.

Server-Sent Events (SSE)

Responses with a text/event-stream content type are now recognized and streamed into the response viewer instead of being treated as ordinary payloads.

JSON syntax highlighting

Request bodies and response bodies now get full JSON syntax highlighting in the editors and the response viewer.

Clearer network error messages

Connection failures now surface detailed error messages from the underlying HTTP library, and all non-OK response codes are handled gracefully instead of failing silently.

Markdown documentation for collections and requests

Collections and requests gained description fields whose Markdown content renders inside the app, making it easy to document endpoints and usage notes right where you work.

Cookie support

Cookies received from responses persist in a per-workspace cookie jar and are sent back automatically. A cookie manager lets you inspect and remove stored cookies at any time.

Option to skip SSL/TLS verification

Requests can now disable certificate verification, useful when testing against self-signed certificates or local development proxies.

Session persistence with crash recovery

Open tabs are saved on exit and restored on launch. If the application crashes, the previous session is recovered on the next start so no work is lost.

Interface translations

The app is now localization-ready, shipping with a complete German translation to start.

New keyboard shortcuts system

Ctrl+Enter sends the current request from the URL field or body editor, Ctrl+L focuses and selects the URL field, Ctrl+Shift+I formats JSON and XML request bodies, and Ctrl+N creates a new collection or environment. All shortcuts now route through a central shortcut system.

Much more efficient response viewer

Very large responses load into a dedicated virtualized viewer that keeps scrolling smooth, CPU and memory usage low

Theme selector

Ten themes are available from a dropdown, moving beyond the single dark look. Editor settings for tab width and spaces-versus-tabs are configurable too.

SQLite-backed storage

Local data moved from JSON files to an SQLite database, with lazy loading of request contents so startup and sidebar browsing stay fast even with large collections.

Live environment variable highlighting hover

Hovering {{variable}} references shows its resolved value.

Authorization polish: override warnings and masked secrets

Headers and query parameters overridden by the authorization tab show a warning icon so conflicts are visible. Basic Auth passwords and Bearer token fields are masked while typing.

Copy requests as cURL

Generate a curl command for any request in a dialog with selectable text and a one-click copy button.

MRU tab switcher

Ctrl+Tab and Ctrl+Shift+Tab cycle recently used tabs in a centered overlay, with robust dismissal so the switcher never gets stuck.

About dialog

Clicking the logo opens an about dialog with license and third-party attribution information.

10.1 MB

sha256: 9b484007cde081f2080728742dd18b01ddd8aee8319ba1d879bb1bf8e8de5067

2.11 MB

sha256: 3e077bbf5c45f63a01b61e05b3cfee60eb4bef11b1b9761cdc0f780912ce1741

2.16 MB

sha256: e676a5129b3a30ba477e67ec559c06b61968581ccdc4023504559e82045d3509

3.21 MB

sha256: 2968d9d53064a3deccf689ca644c78af6757aba75b600503baa1c578d5fb4202

Download Moonladder | Moonladder