RecipeUI – Type-Safe Postman Alternative for API Testing
RecipeUI is an open-source API client that uses TypeScript to statically type and autocomplete HTTP requests, catching errors before runtime.
TL;DR
TL;DR: RecipeUI is an open-source Postman alternative that uses TypeScript to enforce types on API request parameters at compile time, eliminating the guess-and-check loop of traditional API clients.
Source and Accuracy Notes
- Product: https://recipeui.com (non-GitHub product URL)
- GitHub: github.com/RecipeUI/RecipeUI (1,336 stars, TypeScript, MIT license)
- HN Discussion: Show HN: Open-source Postman alternative with type safety (275 points)
- Demo: YouTube demo video showing TypeScript autocompletion in action
What Is RecipeUI?
RecipeUI reimagines API testing by applying the same discipline that statically typed languages bring to code — to HTTP requests. Most API clients (Postman, Insomnia, Bruno) are dynamically typed: you fill in parameters, fire the request, and only discover you’ve sent the wrong type when the response fails. RecipeUI flips this model.
You define the schema first. Before sending anything, you specify which parameters are required, what types they accept (string, integer, boolean), and what the response structure should look like. TypeScript’s compiler then enforces these constraints as you build the request — autocomplete guides you, and wrong types fail at edit time rather than at runtime.
The analogy the founders use is compelling: it’s like writing in a statically typed language versus a dynamically typed one. The upfront investment in defining types pays dividends when you share the collection with teammates or revisit it months later.
Setup Workflow
RecipeUI runs as a cross-platform web app and a lightweight desktop client (under 20 MB). The desktop app is built on Tauri, which gives it a small footprint compared to Electron alternatives.
Step 1: Try the Web Version
No installation required — visit recipeui.com and start defining an API collection. The web app handles most workflows without needing a desktop install.
Step 2: Install the Desktop App
For local-first usage with native performance:
# macOS – download the latest .dmg from GitHub releases
curl -L https://github.com/RecipeUI/RecipeUI/releases/latest/download/recipeui-macos.dmg \
-o /tmp/recipeui.dmg && open /tmp/recipeui.dmg
# Linux – AppImage or .deb from releases
curl -L https://github.com/RecipeUI/RecipeUI/releases/latest/download/recipeui-linux.AppImage \
-o /tmp/recipeui.AppImage && chmod +x /tmp/recipeui.AppImage
Step 3: Define Your First Type-Safe Collection
// Create a new collection and add a request schema
import { defineCollection, defineRequest } from '@recipeui/core';
const usersCollection = defineCollection({
name: 'Users API',
baseUrl: 'https://api.example.com/v1',
requests: [
defineRequest({
method: 'GET',
path: '/users/:id',
params: {
schema: {
id: { type: 'integer', required: true, description: 'User ID' }
}
},
response: {
schema: {
id: { type: 'integer' },
name: { type: 'string' },
email: { type: 'string' }
}
}
})
]
});
Step 4: Share Collections
Collections are JSON files that anyone can import. Because the types are explicit, importing a shared collection immediately gives you full autocomplete — no documentation reading required.
Deeper Analysis
The Type-First Design Decision
The core insight behind RecipeUI is that API client errors are usually type errors in disguise. Sending "true" instead of true, using the wrong parameter name, or passing a string where an integer is expected are all mistakes that a type system would catch instantly. RecipeUI makes this explicit.
The trade-off is real: there’s more upfront work defining the schema. But for APIs you call repeatedly — or share across a team — this investment pays off quickly. Debugging shifts from runtime failures to compile-time feedback.
Architecture
The desktop app is built on Tauri (Rust backend), Next.js (frontend), and Supabase (backend services). The Rust core keeps the binary small — under 20 MB — compared to Electron-based tools that routinely exceed 200 MB.
The TypeScript SDK (@recipeui/core) can be used independently of the GUI, meaning you can validate requests programmatically in tests or scripts.
Comparison to Alternatives
| Feature | RecipeUI | Postman | Insomnia | Bruno | |---|---|---|---|---| | Type safety | ✅ Native TypeScript | ❌ None | ❌ None | ❌ None | | Open source | ✅ MIT | ❌ Closed | ✅ (core) | ✅ | | Desktop binary size | under 20 MB | ~200 MB | ~150 MB | ~100 MB | | Collection format | JSON/TypeScript | JSON | OpenAPI | BRN | | Self-hosted | ✅ | ❌ | ✅ | ✅ |
GitHub Activity
The repo has 1,336 stars with regular commits. The project actively maintains both the core library and the GUI app. Language breakdown is primarily TypeScript with Rust components for the Tauri shell.
Practical Evaluation Checklist
- [ ] Define a request schema with mixed parameter types
- [ ] Verify TypeScript autocomplete fires for each parameter
- [ ] Confirm a type mismatch produces a compile error, not a runtime one
- [ ] Import a shared collection and verify types carry over
- [ ] Test the desktop app’s startup time vs Postman
- [ ] Export a collection as JSON and re-import to verify format compatibility
- [ ] Use the web app without installing anything
Security Notes
- Collections can contain secrets (API keys, bearer tokens). Treat collection files like
.envfiles — never commit them to version control. - RecipeUI stores data locally by default. If using the cloud sync features via Supabase, review the data residency and encryption settings.
- The
@recipeui/corelibrary is small and auditable — useful if you want to embed request validation in your own CI pipeline.
FAQ
Q: Does RecipeUI support OpenAPI specs?
A: Yes. You can import an existing OpenAPI 3.x specification and RecipeUI will generate typed request schemas from it. This gives you a migration path from Postman without losing your existing API definitions.
Q: Can I use this without knowing TypeScript?
A: The GUI-only workflow works without writing any TypeScript code. You define schemas through the UI. The type-first benefits compound when you use the SDK or share collections, but the core app is accessible to non-TS users.
Q: How does it handle authentication?
A: RecipeUI supports Bearer tokens, API keys (header and query), and OAuth 2.0 flows. Auth configurations are typed and validated at the collection level.
Q: Is the data stored locally or in the cloud?
A: By default, everything stays local. Cloud sync via Supabase is optional and opt-in. You control where your API keys and request history live.
Q: How does it compare to Postman for CI/CD use?
A: RecipeUI’s TypeScript-first approach makes it more suitable for programmatic, test-driven API validation. Postman has a more mature CI/CD integration story. RecipeUI’s SDK can be used in test suites directly.
Conclusion
RecipeUI solves a real pain point in API development: the silent type errors that only surface at runtime. By bringing TypeScript’s type discipline to HTTP requests, it shifts error discovery from “response came back wrong” to “autocomplete flagged it immediately.”
Its small desktop footprint (under 20 MB), open-source license, and type-safe foundation make it worth trying if you spend significant time working with APIs — especially in teams where request schemas are shared and reused. The upfront schema definition is genuine work, but for frequently-called APIs, it pays back quickly in reduced debugging time and clearer documentation.
Try the web version at recipeui.com or install the desktop app from the GitHub releases page.