Noodle
Choose it when API requests belong beside your code, with readable YAML shared across the terminal UI, CLI, CI, and coding agents.
Noodle is not trying to win every feature column. It is built for API work that belongs beside your code, from terminal exploration to CI and coding agents.
Each tool is strong for a different reason. Noodle's distinction is architectural: the repository is the workspace.
| Capability | Noodle | Posting | Yaak | Bruno |
|---|---|---|---|---|
| Best at | Repo-native terminal API workflow + automation/agents | Focused interactive terminal HTTP workflow | Modern local desktop client with broad protocols | Full API testing and automation platform |
| Requests are true files | ✅ Yes, core architecture | ✅ Yes | ◐ Optional synchronized representation | ✅ Yes |
| Terminal-first | ✅ Yes | ✅ Yes | ❌ No | ❌ No |
| Protocol breadth | ◐ HTTP today | ◐ HTTP today | ✅ Very high | ✅ Very high |
| Auth and networking | ✅ Very high | ◐ Basic | ✅ Very high | ✅ Very high |
| Scripting and testing today | ✅ Async scripts + assertions + scripted tests | ◐ Good scripting, tests planned | ◐ Chaining/templates, no arbitrary scripting | ✅ Most complete |
| Headless and CI automation | ✅ Yes | ❔ No documented runner | ✅ Yes | ✅ Very mature |
| AI-agent workflow | ✅ Skill + files + CLI | ◐ Files; no dedicated integration | ✅ Skill + CLI + MCP | ◐ In-app BYOK AI + general CLI |
| Main differentiator | The repository is the workspace | HTTP client inside the terminal | Local-first GUI without Postman weight | Git-native testing powerhouse |
All four products work offline. Their storage and interaction models are very different.
| Capability | Noodle | Posting | Yaak | Bruno |
|---|---|---|---|---|
| Primary experience | Terminal TUI + non-interactive CLI | Terminal TUI | Desktop GUI + CLI | Desktop GUI + CLI |
| Core philosophy | Repository-first; requests live beside code | Terminal-first HTTP client | Local-first desktop API client | Git-friendly offline API development and testing |
| Canonical request storage | ✅ One readable .yml file per request | ✅ .posting.yaml files | ◐ Local app database; optional YAML sync | ✅ File-native .bru or OpenCollection .yml |
| Git-friendly | ✅ Native consequence of file model | ✅ Native consequence of file model | ✅ YAML sync + built-in Git actions | ✅ File-native + built-in Git UI |
| Git workflow | Use your existing Git tooling | Use your existing Git tooling | Built-in Git UI: branch, commit, diff, and more | Built-in Git UI; advanced operations may be paid |
| Works offline | ✅ | ✅ | ✅ | ✅ Offline-only |
| Usable without a cloud account | ✅ | ✅ | ✅ For normal use | ✅ |
| License and pricing | Apache-2.0 · free OSS | Apache-2.0 · free OSS | MIT source; commercial prebuilt license for work | MIT core + paid Pro/Ultimate tiers |
Noodle and Posting deliberately focus on HTTP today. Yaak and Bruno cover more protocol types.
| Capability | Noodle | Posting | Yaak | Bruno |
|---|---|---|---|---|
| HTTP / REST | ✅ | ✅ | ✅ | ✅ |
| GraphQL, first-class | 🧭 Planned | ❌ | ✅ | ✅ |
| gRPC | 🧭 Planned | ❌ | ✅ reflection/proto | ✅ |
| WebSocket | 🧭 Planned | 🧭 Planned | ✅ | ✅ |
| Server-Sent Events | 🧭 Planned | 🧭 Planned | ✅ | ✅ Supported, not a separate top-level type |
| Variables and environments | ✅ | ✅ | ✅ | ✅ |
| Folder inheritance | ✅ Headers + auth + scripts + tests | ❌ No folder inheritance | ✅ Workspace/folder/request | ✅ |
| Generated body data and timestamps | ✅ $random / $time templates + completion | ◐ Via Python scripts | ✅ Template functions + Faker | ✅ Dynamic variables |
| JSON body editor | ✅ Tree-sitter, validation, folding, completion | ✅ Syntax highlighting | ✅ | ✅ |
| Multipart and file upload | ✅ | 🧭 Richer uploads planned | ✅ | ✅ |
| Client code generation | ✅ Multiple languages and libraries | ◐ cURL export | ✅ Code snippets | ✅ |
| Response filtering | ✅ JSONPath | ◐ Via external pager | ✅ JSONPath and rich tools | ✅ Query/filtering |
| Persistent response history | ✅ Per-request timeline | ❔ Not documented | ✅ | ✅ |
| Network and redirect debugging | ✅ Detailed trace | ◐ Basic trace/status | ✅ Timeline/debugging | ✅ DevTools network tools |
| Response visualization | ✅ Searchable JSON/XML trees and tables | ◐ Via external JSON pagers | ✅ Formatted views + search/filtering | ✅ Editor + Preview views |
| Custom response renderers | 🧭 Planned | ❌ | ❌ No arbitrary renderer | ✅ bru.visualize() / Handlebars |
Noodle supports authentication, secrets, TLS, proxy, and cookie handling.
| Capability | Noodle | Posting | Yaak | Bruno |
|---|---|---|---|---|
| Basic | ✅ | ◐ Programmatic, not a rich Auth UI | ✅ | ✅ |
| Bearer | ✅ | ✅ | ✅ | ✅ |
| API key auth | ✅ Header/query | ◐ Manual header or Python | ✅ | ✅ |
| OAuth 1.0 | ✅ | ❌ | ✅ | ✅ |
| OAuth 2.0 | ✅ | 🧭 Planned | ✅ | ✅ |
| AWS SigV4 | ✅ | ❌ No native support | ✅ | ✅ |
| NTLM | ✅ NTLMv2 | ❌ No native support | ✅ | ✅ |
| JWT auth generation | 🧭 Planned | ❌ | ✅ | ◐ Scripting/auth workflows |
| Persistent cookie jar | ✅ Per collection | ◐ Response cookies; editor planned | ✅ Automatic jar + editor | ✅ |
| Custom CA | ✅ | ✅ | ✅ | ✅ |
| mTLS and client certificates | ✅ | ✅ Cert path | ✅ | ✅ |
| Proxy | ✅ System/direct/custom + bypass | ❔ Dedicated configuration not documented | ✅ System/custom/none + SOCKS5 | ✅ System/manual/PAC |
| Secure secret storage | ✅ OS credential vault | ❔ No secure vault documented | ✅ Encrypted secrets + keychain/1Password | ✅ Secret manager + external vaults |
Noodle includes TUI script editors with completion, diagnostics, formatting, and Console logs for inline or external JavaScript, inherited scripts and tests, async request chaining, and CSV/JSON runs in the CLI and TUI Runner. Bruno offers a broader testing platform; parallel execution remains on Noodle's roadmap.
| Capability | Noodle | Posting | Yaak | Bruno |
|---|---|---|---|---|
| Pre-request scripts | ✅ Bounded async JS; inline or .js files | ✅ Python | 🧭 Arbitrary scripts under consideration | ✅ JavaScript |
| Post-response scripts | ✅ Bounded async JS; inline or .js files | ✅ Python | 🧭 Arbitrary scripts under consideration | ✅ JavaScript |
| Extract response into variables | ✅ Captures + post-script writes | ✅ Via Python | ✅ Request chaining | ✅ |
| Request chaining | ✅ Captures + async saved/direct requests | ◐ Python/session variables | ✅ Declarative response() | ✅ Extensive |
| Assertions and tests | ✅ Declarative + async JS + JSON Schema | 🧭 Test framework planned | ❌ No current framework | ✅ Chai/JS assertions |
| Run one request headlessly | ✅ | ❔ No documented runner | ✅ | ✅ |
| Run folder/collection headlessly | ✅ Selective folders or full collection | ❔ No documented runner | ✅ Workspace/folder | ✅ |
| Parallel and batch execution | ◐ Batch + Runner; parallel planned | ❌ | ✅ CLI --parallel | ✅ Runner |
| Dedicated runner/results UI | ✅ Transient collection Runner | ❌ | ❌ No runner UI; bulk runs via CLI | ✅ |
| Data-driven CSV/JSON runs | ✅ CLI + TUI Runner | ❌ | 🧭 Under consideration | ◐ CSV/JSON; free CLI, paid desktop |
| CI-friendly structured output | ✅ JSON | ❔ No documented CI runner | ✅ CLI | ✅ CLI + JUnit/reports |
| Docker runner | ❌ No official image | ❌ | ❔ No official image found | ✅ Official CLI images |
| GitHub Action | ❌ No dedicated action | ❌ | ❔ No dedicated action found | ✅ Official action |
Noodle combines broad import support with readable native YAML and useful export paths.
| Capability | Noodle | Posting | Yaak | Bruno |
|---|---|---|---|---|
| cURL import | ✅ | ◐ Experimental | ✅ | ✅ |
| OpenAPI 3 import | ✅ | ◐ Experimental | ✅ 3.0/3.1 | ✅ |
| Swagger 2 import | ✅ | ❔ Not documented | ✅ | ✅ |
| Postman import | ✅ | ◐ Experimental | ✅ | ✅ |
| Insomnia import | ✅ | ❌ | ✅ | ✅ |
| OpenAPI export | ✅ | ❌ | 🧭 Backlog | ✅ |
| Postman export | ✅ | ❌ | ❌ | ✅ |
| Portable native format | ✅ Plain YAML | ✅ Plain YAML | ✅ Yaak JSON; optional sync YAML | ✅ .bru + OpenCollection YAML |
| Native format definition | YAML schema and documentation | Posting YAML format | Yaak-specific sync format | OpenCollection specification |
Noodle's file model, CLI, and managed skill make agent workflows a first-class part of the product rather than an export path.
| Capability | Noodle | Posting | Yaak | Bruno |
|---|---|---|---|---|
| Requests naturally editable by agents | ✅ Plain YAML source of truth | ✅ Plain YAML | ◐ CLI/database or sync YAML | ✅ Files |
| Dedicated agent CLI workflow | ✅ | ❌ | ✅ | ◐ General CLI |
| Agent Skill | ✅ noodle-use | ❌ | ✅ | ❔ No equivalent found |
| Claude/Codex/Cursor/OpenCode | ✅ | ❌ No dedicated integration | ✅ | ◐ General tooling |
| MCP server | ❌ | ❌ | ✅ Plugin | ❔ No official equivalent found |
| Built-in AI assistant | External-agent workflow by design | No built-in assistant | No built-in assistant | BYOK AI |
| Plugin system | ❌ | ❌ Python scripting instead | ✅ Substantial plugin system | ◐ Apps + scripting |
The right choice depends on where you work, which protocols you need, and how much testing automation you expect today.
Choose it when API requests belong beside your code, with readable YAML shared across the terminal UI, CLI, CI, and coding agents.
Choose it when you want a terminal HTTP client that works with your Python libraries, preferred editor, external pagers, and custom themes.
Choose it when you prefer a local desktop interface, need multiple protocols, and want dynamic requests through template functions and declarative chaining.
Choose it when your workflow centers on API test suites, JavaScript scripting, assertions, and repeatable collection runs across desktop and CI.
See each product's official documentation for feature and pricing details.
Plain YAML is the source of truth. The same collection works from the TUI, CLI, CI, and coding-agent workflow.
curl -LsSf https://noodlerest.dev/install.sh | sh