"You're just as sane as I am."
Luna Lovegood does not see the world the way everyone else does. She notices what others dismiss, believes in things considered impractical, and is unbothered by the noise of consensus. She carries a radish earring to a school dance and considers it entirely reasonable.
The API clients everyone uses have grown into something else: accounts, cloud sync, team plans, telemetry, onboarding flows, update nags. Somewhere along the way, the tool that was supposed to get out of your way became the thing in your way.
Luna is named after her. Not after the satellite — though the logo is, in fact, the satellite. We thought the crescent moon suited her better than a headshot.
It is a desktop application that opens instantly, asks for nothing, and does exactly what you need: send a request, read the response. That's all.
HTTP — GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS. JSON, plain text, or form-encoded body. The JSON body auto-formats on blur and quietly fixes the curly quotes your editor sometimes pastes in.
WebSocket — connect to a WS endpoint, watch the message stream with timestamps and direction, send messages. The input behaves like a terminal prompt: ↑ and ↓ navigate your message history.
SSE — Server-Sent Events with proper field parsing: data, event, id. Useful for streaming APIs that send events over a long-lived HTTP connection.
Tabs — multiple requests open at once. Tabs — their URLs, headers, bodies, and responses — are saved to disk and restored on next launch. Active connections are not.
cURL export — every request can be copied as a curl command, with the correct headers and body already filled in.
The networking runs in Rust via reqwest and tokio-tungstenite, which means no CORS constraints, no browser certificate warnings on local dev servers, and no proxy tricks.
| Shortcut | Action |
|---|---|
⌘ T |
New tab |
⌘ W |
Close tab |
⌘ L |
Focus URL bar |
⌘ Enter |
Send · Cancel · Disconnect |
⌘ [ / ⌘ ] |
Previous / next tab |
⌘ 1 – 9 |
Jump to tab by index |
↑ / ↓ in WS input |
Navigate message history |
Prerequisites: Rust · Node.js · pnpm
pnpm install
pnpm tauri dev # development, with hot reload
pnpm tauri build # production buildBundles land in src-tauri/target/release/bundle/.
Distributed builds are not yet signed or notarized. macOS Gatekeeper will block the app on first launch.
Workaround (for now):
xattr -d com.apple.quarantine /Applications/Luna.appOr: right-click → Open → Open anyway.
To set up proper signing, you need an Apple Developer account and the following secrets configured in GitHub → Settings → Secrets → Actions:
| Secret | How to get it |
|---|---|
APPLE_CERTIFICATE |
Export "Developer ID Application" cert from Keychain as .p12, then base64 -i cert.p12 |
APPLE_CERTIFICATE_PASSWORD |
The password you set when exporting the .p12 |
APPLE_SIGNING_IDENTITY |
Developer ID Application: Your Name (TEAMID) |
APPLE_ID |
Your Apple ID email |
APPLE_PASSWORD |
App-specific password from appleid.apple.com |
APPLE_TEAM_ID |
Your 10-character Team ID |
The release workflow already has the env vars wired — adding the secrets is enough. Tauri skips signing silently if they are absent, so builds continue to work without them.
MIT — see LICENSE.
Avelor