See the truth about your APIs
An open-source API client that verifies what AI generates.
Local-first. Git-friendly. No account required. Ever.
Demo: HTTP client interface, network history panel, and timing waterfall visualization
Installation • Why runi? • Features • Quick Start • Project Status • Contributing
Pre-alpha. runi is under active development. The vision is solidifying, the foundations are being laid. Expect rough edges — and rapid evolution. Star the repo to follow along the learning journey.
This repo started as an experiment and will continue to push boundaries. It may not be for you. If you think handcrafted code is gold, you should travel back in time to a time when people had to punch cards to write code.
Feedback always welcome! Join the run if you wish, fork and PR.
You're using AI to write API integration code. So is everyone else — 84% of developers now use AI tools, with 89% using generative AI in their workflow.
But here's what nobody talks about: 46% of developers don't trust the accuracy of AI output — up from 31% last year. The biggest frustration? 66% cite "solutions that are almost right, but not quite."
The tools generating code are getting better. The tools verifying that code? They don't exist.
Meanwhile, your HTTP client wants you to create an account, sync to their cloud, and hope your credentials don't leak. When you refuse, half the features disappear.
runi is different.
Statistics above: Stack Overflow 2025 Developer Survey (AI usage, trust, frustrations); Postman State of API 2025 (generative AI in workflow); APIContext API Drift White Paper (spec mismatch).
| What You're Used To | What runi Does |
|---|---|
| Create account to use | No account. Ever. |
| Data synced to cloud | Local-first. Your data stays yours. |
| Collections in proprietary format | YAML files. Git-friendly. Diff them. |
| AI generates code, you hope it works | AI generates code, runi verifies it against your spec |
| Spec changes break things silently | Drift detection catches it before production |
| "What changed?" = archaeology | Temporal awareness shows spec evolution |
Everything you expect, nothing you don't:
- Full REST control — methods, headers, body, params, auth
- Response viewer with syntax highlighting & timing
- Network history panel — see all requests with filtering and search
- Timing waterfall visualization — DNS, Connect, TLS, Wait, Download breakdown
- Environment variables with
{{substitution}} - Collections as YAML — version control your API workflows
- Import from Postman, Bruno, Insomnia, OpenAPI
- Export to cURL, JavaScript, Python
# Your collections are just files
# .runi/collections/stripe.yaml
name: Stripe API
requests:
- name: List Customers
method: GET
url: '{{base_url}}/v1/customers'
headers:
Authorization: 'Bearer {{stripe_key}}'This is why you'll stay:
75% of production APIs don't match their published specs. runi catches this before you ship.
- Bind requests to your OpenAPI spec
- Real-time validation as you work
- Yellow badge = your request doesn't match the spec anymore
- One-click: "Show me what changed"
When 46% of developers don't trust AI output, you need a second opinion. runi is that opinion.
- Paste AI-generated code → runi validates against bound spec
- Catches hallucinated endpoints before you waste an hour debugging
- Flags deprecated fields the AI didn't know about
- Purple (
#a855f7) until verified. Green (#22c55e) when safe.
Signal System: runi uses consistent visual signals to communicate intelligence. Green = verified/safe, Amber = drift detected, Red = breaking change, Purple = AI-generated (suspect until verified), Blue = suggestion available. See CLAUDE.md for the complete signal reference.
- See how your API evolved over time
- Diff between spec versions
- "When did this field become required?"
Stripe:Customer↔YourAPI:User— see the relationship- Cross-API mapping for complex integrations
- Finally understand how systems connect
APIs as territory, not lists:
- Endpoints as visual nodes
- Drag, arrange, zoom, pan
- See data flow between requests
- Non-technical teammates can finally understand the integration
git clone https://github.com/paulbreuler/runi.git
cd runi
just install
just buildRequirements: Rust 1.80+, Node.js 20+, pnpm, just (task runner)
Note: All commands use
justfor consistency between local development and CI. Seejustfilefor the complete command list.
# 1. Start development server
just dev
# 2. Send your first request
# Just paste a URL and hit Enter
# 3. Import your OpenAPI spec
# File → Import Spec → Select your openapi.yaml
# 4. Bind a request to the spec
# Right-click request → Bind to Spec → Select operation
# 5. Watch drift detection work
# Change your spec. See the yellow badge appear.The Adoption Ladder: runi reveals features progressively as you use it. Start with the HTTP client and network history, discover drift detection when you import a spec, then AI verification, semantic links, and temporal awareness.
| Component | Technology |
|---|---|
| Runtime | Tauri v2.9.x |
| Backend | Rust 1.80+ |
| Frontend | React 19 + TypeScript 5.9 |
| Build | Vite 7.x |
| Styling | Tailwind CSS 4.x |
| Animation | Motion 12.x |
| Routing | React Router 7.x |
| State | Zustand |
| Icons | Lucide |
| Storage | YAML/JSON files (no database) |
| AI (local) | Ollama (optional) |
| AI (cloud) | Anthropic Claude API (optional) |
Bundle size: <50MB
Startup time: <3 seconds
Telemetry: None. Zero. We don't even have the infrastructure to collect it.
Rung 1 (HTTP client) is in place: request/response, network history, timing waterfall, metrics, and signal UI. Next we harden that and move to spec + collections, then drift, then AI verification.
- HTTP client core
- Network history panel with filtering
- Timing waterfall visualization
- Metrics and signal system UI
- Code display unification (ResponseViewer → CodeSnippet)
- Any remaining Rung 1 cleanup
- Collections as YAML
- OpenAPI spec import and spec-aware UI
- Spec binding and drift detection
- Response validation
- AI verification against bound specs
- MCP control surface
- Temporal awareness (spec version history)
- Semantic links between specs
- Import/export (Postman, Bruno, Insomnia)
- Spatial canvas view
- Collaborative features (local-first sync)
- Plugin system
Import functionality is coming soon. Planned commands:
# From Postman
runi import postman ./your-collection.json
# From Bruno
runi import bruno ./your-bruno-folder
# From OpenAPI spec
runi import openapi ./openapi.yamlYour existing workflows should just work. If they don't, open an issue.
Verification beats generation.
While everyone builds tools to write more code, we're building the tool that lets you trust it.
- Local-first: Your data never leaves your machine unless you explicitly share it
- Git-friendly: Collections are YAML. Diff them. Review them. Version them.
- Spec-bound: The OpenAPI spec is the source of truth. Everything validates against it.
- No account required: We don't want your email. We don't want your data. We want you to be productive.
- Progressive disclosure: Features reveal based on user behavior, not menus
- MCP-powered: Support for MCP 2025-11-25 spec (async ops, elicitation)
The brand philosophy: "Collapse uncertainty into truth"
We welcome contributions! See CONTRIBUTING.md for guidelines.
# Development setup
git clone https://github.com/paulbreuler/runi.git
cd runi
just install # First-time setup
just dev # Start development server
just ci # Run full CI pipeline (before pushing)
just pre-commit # Fast checks (before committing)Essential Commands:
just install- Install all dependenciesjust dev- Start development serverjust ci- Full CI pipeline (format, lint, typecheck, test, E2E)just pre-commit- Fast checks before committingjust fmt- Fix formattingjust test- Run all testsjust generate-types- Generate TypeScript types from Rust (ts-rs)
See justfile for the complete command list.
Look for issues labeled good first issue.
- Discord — Chat with the team and community
- Twitter/X — Updates and announcements
- Blog — Deep dives and tutorials
MIT — See LICENSE for terms.
Named after Kiki runi — a German Shepherd who sniffs out what's hidden and guards the perimeter.
Built by BaseState in Fargo, North Dakota.
"Collapse uncertainty into truth"
If runi helps you, consider giving it a star ⭐
