Skip to content

Repository files navigation

Luna — HTTP · WebSocket · SSE


"You're just as sane as I am."


On the name

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.


What it does

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.


Keyboard shortcuts

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

Building from source

Prerequisites: Rust · Node.js · pnpm

pnpm install
pnpm tauri dev      # development, with hot reload
pnpm tauri build    # production build

Bundles land in src-tauri/target/release/bundle/.


macOS code signing

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.app

Or: 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.


License

MIT — see LICENSE.


Avelor

Releases

Contributors

Languages