A small, native API client for macOS.
Nib is about 3.2 MB on disk and sits at roughly 30 MB of memory with a collection open. It's written in Swift against AppKit and SwiftUI, it has no third-party dependencies, and there's no account to create and nothing phoning home.
For a sense of scale, Postman 12.22.3 for Apple silicon is 353 MB installed, and 213 MB of that is the copy of Chromium it carries around. Both figures were measured rather than looked up; there's a note at the bottom about how.
- Send requests. Any method, query and path parameters, headers, and six kinds of body including multipart uploads.
- Import from Postman. A collection, an environment file, or an entire data-dump zip.
- Requests as files. One JSON file per request, in a folder you choose, so you can diff and commit them.
- Environments. Point
{{baseUrl}}at localhost or staging without editing the request. Secrets go to the Keychain. - cURL in both directions. Paste a command from your browser's devtools, or copy one back out.
- Response detail. Highlighted JSON, headers, cookies, the redirect chain, and timings from real URLSession metrics.
- Keyboard shortcuts for everything, and all of them appear in the menus so they're findable.
brew trust --tap jasp-nerd/nib
brew install --cask jasp-nerd/nib/nibThe first line is not optional. Homebrew 6 refuses to load a third-party tap until you say you trust it, and without it the second line fails rather than installing anything.
That's the whole thing after that. The tap clears the quarantine flag while it installs, so Nib opens normally afterwards, and it does the same on every update.
Without Homebrew, download Nib.zip from the releases page and drag Nib into Applications. macOS will block it the first time you open it, because Nib is signed but not notarized by Apple. Two ways past that, whichever you prefer:
- Run
xattr -dr com.apple.quarantine /Applications/Nib.apponce in Terminal, or - Try to open Nib, then go to System Settings → Privacy & Security, where macOS offers an "Open Anyway" button for the app it just blocked.
Notarizing would remove that step for everyone, and it costs $99 a year. It'll happen if the project earns it.
Nib doesn't ask for any system permissions. There's no Accessibility prompt, no Input Monitoring, no Screen Recording, because it doesn't need any of them.
Type a URL and press ⌘↩.
After that, ⌘O opens a folder as a collection, ⌘K jumps to any request in it, ⌘E edits environments and ⌘T opens a new tab. docs/keyboard.md has the full list.
A collection is just a folder:
~/Work/acme-api/
├── collection.json
├── environments/Staging.env.json
└── Users/
├── folder.json
├── Create user.req.json
└── Create user.req.body.json
Rename a file in Finder and it renames in the app. Edit a request body in vim and Nib picks up the change. Request bodies live in their own files rather than being escaped into a JSON string, which is the difference between a diff you can read and a single line of "raw": "{\n \"a\"…".
Response history, cookies and window state don't go in that folder. They live in Application Support, because none of it belongs in your repository.
Drop a Postman export anywhere on the window. Collection formats v2.1 and v2.0 both work, as do environment files and the zip that "Export Data" produces.
Nib doesn't run scripts. Rather than dropping them, it keeps pre-request scripts, tests, OAuth 2.0 configuration and proxy settings in a preserved block in your files, round-trips them untouched, and lists the affected requests after an import so you know what didn't come across.
Scripts might happen eventually. An account won't.
You'll need macOS 26 and Xcode 26.
make doctor # tells you what your toolchain can and can't do
make check # boundary checks, formatting, lint, 318 tests, size gate
make release # produces a signed .app in dist/The repository has no .xcodeproj in it. make gen generates one from project.yml using XcodeGen. Checking a project file in makes merge conflicts unreviewable and hides build settings from code review, which is where a size or signing regression would slip past.
Important
Please open an issue before a pull request. Nib is deliberately small, and there's a list of things that aren't going in.
That list lives in CONTRIBUTING.md along with the rest. Briefly: no new dependencies, no polling timers, and the last box on the pull request template asks you to explain what your change does and why in a paragraph. If that's hard to write, the change probably isn't ready.
AGPL-3.0, in LICENSE. Contributions come in under the CLA, which exists so the licence can still be changed later if it ever needs to be. What it can't do is take your contribution private.
