A lightweight macOS workbench for raw HTTP replay.
Raw request in, precise replay out. No project setup, no heavyweight collections, no hidden mutation.
Most HTTP tools are built around managed request collections. That is useful for long-lived API work, but it slows down security testing, incident debugging, and one-off reproduction work where the source of truth is already a raw request copied from a proxy, terminal, log, ticket, or report.
RawSend is deliberately smaller:
- Raw-first: edit the request exactly where you pasted it.
- Local-first: configuration, history, logs, and prompts stay on your machine.
- Evidence-preserving: sensitive fields can be struck and skipped without disappearing from the reproduction.
The result is a focused loop: paste a request, strike what should not be sent, replay it, search the response, compare HTTP/HTTPS, inspect redirects, and keep the whole exchange reproducible.
- Paste a complete raw HTTP request.
- Edit headers, URL parameters, and body in place.
- Strike authentication or sensitive fields instead of deleting them.
- Send over HTTP, HTTPS, or both.
- Search, highlight, preview, and compare responses.
- Reopen the full request/response pair from local history.
- In-place raw editing: operate directly on the original HTTP text. Headers and URL parameters do not move into a separate form that can drift from the raw request.
- Paste-a-cURL import: paste a
curlcommand into the request editor and it is converted to a ready-to-send raw request automatically, with the HTTP/HTTPS toggle set from the URL scheme. Wide flag coverage —-X,-H,-d/--data*,--data-urlencode,--json,-F/--form(multipart),-u,--oauth2-bearer,-b,-A,-e,-r,-G,-I,--compressed,--url— plus multi-line\/^continuations and$'...'quoting from DevTools, Postman, and Insomnia. - Sensitive-field strikeout: manually strike headers and query parameters, or strike by configurable keywords. Struck fields stay visible but are skipped when sending and exporting cURL.
- Full-text search without UI stalls: request and response search use FindFaster, with highlighted matches, next/previous navigation, and line/column positions.
- Response readability: status line, headers, JSON, and HTML are highlighted in the raw response view. HTML responses can also be opened in a built-in preview.
- Focused metadata display: important request headers are aggregated case-insensitively from a configurable list, so routing, trace, and request metadata are visible without cluttering the editor.
- HTTP/HTTPS diffing: replay the same raw request over both schemes and compare the results.
- Redirects under control: redirects are not followed by default. When a
3xxresponse appears, RawSend exposes an explicit follow action near the send controls. - History with responses: local history stores the request and the response pair, so a reproduced case can be reopened without resending.
- Local Codex integration: optional local
codexCLI support can identify risky request/response fields and apply structured actions such as striking auth-related inputs. - Multilingual UI: English by default, with Simplified Chinese and Spanish available in Settings.
RawSend is not a proxy, a team API workspace, or a replacement for browser DevTools. It is intentionally optimized for a narrow task: replaying and inspecting complete HTTP messages quickly, locally, and with minimal ceremony.
Runtime configuration is stored under:
~/Library/Application Support/RawSend/
Logs are stored under:
~/Library/Logs/RawSend/
Slow search, rendering, diff, and formatting operations over 200ms are written to:
~/Library/Logs/RawSend/performance.jsonl
Send failures write copyable diagnostic records to:
~/Library/Logs/RawSend/send-errors.jsonl
RawSend ships only generic product defaults. Organization-specific default headers, routing metadata, or User-Agent values belong in local configuration, not in the repository.
Download the latest package from GitHub Releases.
Apple Silicon:
sudo installer -pkg RawSend-1.1.0-macos-arm64.pkg -target /Intel Mac:
sudo installer -pkg RawSend-1.1.0-macos-x86_64.pkg -target /The app is installed to:
/Applications/RawSend.app
The release packages may be unsigned if no Developer ID certificate is available. If macOS blocks the package or app, remove quarantine explicitly:
sudo xattr -d com.apple.quarantine RawSend-1.1.0-macos-arm64.pkg
sudo installer -pkg RawSend-1.1.0-macos-arm64.pkg -target /
sudo xattr -dr com.apple.quarantine /Applications/RawSend.appYou can also Control-click the package or app in Finder and choose Open.
Requirements:
- macOS 14 or newer
- Xcode Command Line Tools
- Swift 5.9 or newer
Common checks:
swift build
make check
make codex-checkBuild and install locally:
make installBuild arm64 and x86_64 installer packages:
make releasePackages are written to:
.build/packages/
For Developer ID signing:
make release \
CODESIGN_IDENTITY="Developer ID Application: Your Name (TEAMID)" \
PKG_SIGN_IDENTITY="Developer ID Installer: Your Name (TEAMID)"Without those identities, RawSend uses ad-hoc app signing and unsigned installer packages.
RawSend can call the local codex CLI for structured analysis. It searches PATH, /opt/homebrew/bin, and /usr/local/bin. You can override the binary path with:
export RAWSEND_CODEX_PATH=/path/to/codexRun the local end-to-end check:
make codex-checkThe Settings page only asks for your user prompt. RawSend owns the system prompt and expects structured output for risk lines, suggested keywords, and executable strike actions.
RawSend 1.1 provides a versioned external plugin protocol:
- Python and other process plugins use Content-Length framed JSON-RPC.
- Go, Rust, C, and C++ can use the process protocol.
- Trusted native plugins can use the stable C ABI and a macOS dylib; native Go plugins use
-buildmode=c-shared. - Plugins can inspect the actual sent request, enumerate Query/Form/JSON fields, declare request variants, analyze raw responses, and publish exact annotations and structured findings.
Plugins are discovered only from:
~/Library/Application Support/RawSend/Plugins/
/Library/Application Support/RawSend/Plugins/
The public application bundle never embeds or loads plugins from inside the .app. See PluginSDK for the package manifest, Python/Go SDKs, and C ABI. A native dylib shares RawSend's process and should only be used for trusted, signed plugins; process plugins are the recommended default.
RawSend is local-first. Configuration, history, diagnostics, and performance logs are stored on your Mac. Codex behavior depends on your local Codex CLI configuration. Struck headers and URL parameters remain visible for auditability, but RawSend omits them from actual sends and cURL export.
RawSend is released under the MIT License.
