A terminal UI for browsing and interacting with OpenAPI v3.0/v3.1 specifications.
- 3-panel layout — endpoint list, endpoint detail, and request/response panels
- Multiple input sources — local files (YAML/JSON), direct spec URLs, or Swagger UI URLs (auto-detected)
- Interactive launcher — run with no arguments for a guided server selection / URL entry
- Vim-style navigation —
hjkl, collapsible tag groups,/filter mode, fullscreen toggle - Schema drill-down — recursive
$refresolution with interactive navigation - Built-in HTTP client — send requests directly from the TUI with server selection
- Authentication — Bearer token, API key (header/query), and Basic Auth with config persistence
- Config persistence — save server + auth credentials, auto-restore on next launch
- OpenAPI v3.0 & v3.1 — validated with
@scalar/openapi-parser
# Try it instantly — no install required
npx superapi-tui https://petstore3.swagger.io/api/v3/openapi.json
# Or with Bun
bunx superapi-tui ./petstore.yaml
# Swagger UI URLs are auto-detected
npx superapi-tui https://petstore.swagger.io/npm install -g superapi-tui
superapi-tui <file-or-url>| Source | Example |
|---|---|
| Local file | superapi-tui ./openapi.yaml |
| Direct URL | superapi-tui https://api.example.com/openapi.json |
| Swagger UI | superapi-tui https://petstore.swagger.io/ |
YAML, JSON, and .yml files are all supported. Swagger UI pages are auto-detected — the spec URL is extracted automatically.
Run with no arguments to get an interactive launcher:
superapi-tuiThe launcher lets you pick from previously saved servers or enter a new URL manually.
| Key | Action |
|---|---|
Tab / Shift+Tab |
Switch panel focus |
j / k or Up / Down |
Navigate list items |
h / l or Left / Right |
Collapse/expand, navigate schemas |
g / G |
Jump to top / bottom |
Enter |
Select / expand |
/ |
Filter endpoints |
f |
Toggle fullscreen on focused panel |
? |
Show help overlay |
q / Ctrl+C |
Quit |
| Key | Action |
|---|---|
s |
Send request |
e |
Edit request body |
S |
Switch server |
a |
Toggle auth configuration |
W |
Save server + auth to config |
1 / 2 / 3 |
Switch response tabs (Pretty / Raw / Headers) |
Three methods, configurable per-session:
- Bearer Token —
Authorization: Bearer <token> - API Key — header or query parameter (configurable name + value)
- Basic Auth —
Authorization: Basic <base64>
Press a in the request panel to cycle auth types and enter credentials. Auth is global across all endpoints.
Press W to save the current server + auth to your config file. On next launch, credentials auto-restore when the server URL matches.
Config is stored at ~/.superapi-tui.toml (with JSON fallback at ~/.superapi-tui.json).
Saved servers and auth credentials are managed automatically via the W keybinding. The config file is created with 0600 permissions for credential safety.
+───────────────+──────────────────+──────────────────+
│ ENDPOINT LIST │ ENDPOINT DETAIL │ REQUEST/RESPONSE │
│ Tag groups │ Params, schemas │ Builder + viewer │
│ Collapsible │ $ref drill-down │ Pretty/Raw/Headers│
│ Filterable │ Request body │ Auth & server sel │
+───────────────+──────────────────+──────────────────+
Development
- Bun (v1.0+)
| Command | Description |
|---|---|
bun install |
Install dependencies |
bun run dev |
Run in development mode |
bun run build |
Build for distribution |
bun test |
Run tests |
bun run typecheck |
Type check with tsc --noEmit |
bun run lint |
Lint source files |
bun run lint:fix |
Lint and auto-fix |
bun run format |
Format with Prettier |
bun run format:check |
Check formatting |
- Runtime: Bun
- TUI Framework: Ink 6 + React 19
- Language: TypeScript
- Spec Parsing: @scalar/openapi-parser
Contributing
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch (
git checkout -b feat/my-feature) - Make your changes with tests
- Run
bun test && bun run typecheck && bun run lintbefore committing - Open a pull request against
master
Inspired by openapi-tui by @zaghaghi.