A lightweight, fast, and native API client built with Rust and Tauri. Geni provides a modern alternative to Postman with full offline support and native performance.
- Release: v0.1.10 is the current stable desktop release.
- Platform: Windows, macOS, and Linux builds are supported.
- Update Flow: In-app update check and one-click install are available via the updater.
- Import: OpenAPI/Swagger specs can be imported alongside Postman collections.
- Sync: Optional cloud sync is available (API Server, Supabase, Google Drive).
- Development: Active development with roadmap items tracked in FUTURE_FEATURES.md.
- 🚀 HTTP Requests: Send GET, POST, PUT, DELETE, PATCH, HEAD, and OPTIONS requests
- 📝 Request Configuration: Custom headers and request body (JSON, form-data, raw text, URL-encoded)
- 👀 Response Viewer: View response status, headers, and pretty-printed body with JSON syntax highlighting
- 📚 Request History: Automatically save request history locally with SQLite
- 📁 Collections: Simple collection management with folders and saved requests
- 🌍 Environment Variables: Support for environment variables (e.g.,
{{base_url}},{{token}}) - 💾 Offline Support: Full offline functionality with local data storage
- ⚡ Native Performance: Built with Rust for maximum speed and efficiency
- 📦 OpenAPI Import: Import OpenAPI/Swagger specs and generate requests
- 🔄 Cloud Sync: Optional sync via API Server, Supabase, or Google Drive
- ⬆️ In-App Updates: One-click update download and install
- Backend: Rust with Tauri framework
reqwestfor HTTP requestsserdeandserde_jsonfor JSON parsingsqlxwith SQLite for local data storagesyntectfor response syntax highlighting
- Frontend: React + TypeScript + TailwindCSS
- Modern UI similar to Postman
- Sidebar for collections and environment management
- Tab support for multiple request sessions
- Responsive design
- Rust: Install from rustup.rs
- Node.js: Install from nodejs.org (v16 or later)
- Bun: Install from bun.sh (or use npm/yarn)
Download the latest release for your platform from the Releases page.
If you encounter a "geni is damaged and can't be opened" error on macOS:
- Open Terminal
- Run the following command:
xattr -cr /Applications/geni.app
- Try opening Geni again
Why does this happen? The app is not notarized by Apple because we currently don't have an Apple Developer account ($99/year). This command removes the quarantine attribute that macOS adds to downloaded apps. The app is safe to use - you can verify the source code in this repository.
Simply run the installer or executable. No additional steps required.
-
Clone the repository
git clone https://github.com/sutantodadang/Geni.git cd geni -
Install dependencies
bun install
-
Run in development mode
bun run tauri dev
-
Build for production
bun run tauri build
Geni/
├── src-tauri/ # Rust backend (Tauri commands)
│ ├── src/
│ │ ├── main.rs # Main entry point
│ │ ├── lib.rs # Library setup
│ │ ├── db/ # Database operations
│ │ ├── models/ # Data models
│ │ ├── http/ # HTTP client
│ │ └── commands/ # Tauri commands
│ └── Cargo.toml # Rust dependencies
├── src/ # React frontend
│ ├── components/ # React components
│ ├── store/ # Zustand state management
│ └── App.tsx # Main app component
├── package.json # Node.js dependencies
└── tailwind.config.js # TailwindCSS configuration
- Create a new request: Click the "New Request" button or use
Cmd+N - Set the method: Choose from GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS
- Enter the URL: Type your API endpoint URL
- Add headers (optional): Click "Add Header" to add custom headers
- Set request body (optional): Choose from JSON, Raw, Form Data, or URL Encoded
- Send the request: Click the "Send" button or use
Cmd+Enter
- Create a collection: Click the "+" icon next to Collections in the sidebar
- Save requests: Use the "Save" button in any request tab
- Organize requests: Drag and drop requests into collections
- Import/Export: Right-click on collections for import/export options
- Create an environment: Click the "+" icon next to the Environment dropdown
- Define variables: Add key-value pairs (e.g.,
base_url=https://api.example.com) - Use variables: Reference them in URLs, headers, or body using
{{variable_name}} - Switch environments: Select different environments from the dropdown
Cmd+N/Ctrl+N: New request tabCmd+W/Ctrl+W: Close current tabCmd+T/Ctrl+T: New collectionCmd+Enter/Ctrl+Enter: Send requestCmd+S/Ctrl+S: Save request
The Rust backend is located in src-tauri/. Key components:
- Database: SQLite with
sqlxfor request history, collections, and environments - HTTP Client:
reqwestfor making HTTP requests with full feature support - Commands: Tauri commands that expose Rust functionality to the frontend
The React frontend is in src/. Key technologies:
- State Management: Zustand for lightweight state management
- Styling: TailwindCSS for utility-first styling
- Icons: Lucide React for consistent iconography
- TypeScript: Full type safety throughout the application
- Backend: Add new Tauri commands in
src-tauri/src/commands/ - Frontend: Update the store in
src/store/and add UI components - Database: Modify schemas in
src-tauri/src/db/mod.rs
The following commands are exposed from Rust to the frontend:
send_request(payload)- Send HTTP requestformat_json(content)- Format JSON stringvalidate_url(url)- Validate URL format
create_collection(payload)- Create new collectionget_collections()- Get all collectionsdelete_collection(id)- Delete collectionexport_collection(id)- Export collectionimport_collection(data)- Import collection
save_request(payload)- Save request to collectionget_requests(collection_id?)- Get requests from collectiondelete_request(id)- Delete saved request
create_environment(payload)- Create new environmentget_environments()- Get all environmentsset_active_environment(id?)- Set active environmentget_active_environment()- Get current active environment
get_request_history(limit?)- Get request historyclear_request_history()- Clear all history
We welcome contributions! Please see our Contributing Guide for details.
- Fork the repository
- Create a feature branch:
git checkout -b feature-name - Make your changes
- Run tests:
cargo test(backend) andbun test(frontend) - Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.
- Tauri - For the amazing Rust + Web framework
- Postman - For inspiration on API client UX
- Insomnia - For additional API client inspiration
- Thunder Client - For VS Code integration ideas
- GraphQL support
- WebSocket testing
- Request scripting (Pre/Post request scripts)
- Team collaboration features
- Plugin system
- API documentation generation
- Mock server functionality
- Performance testing tools
- CLI interface
- 📧 Email: support@geni-api.com
- 💬 Discord: Join our community
- 🐛 Issues: GitHub Issues
- 📖 Documentation: docs.geni-api.com
Made with ❤️ by the Geni team