A lightweight, cross-platform desktop API testing tool built with Electron and React. Test REST APIs, GraphQL, WebSocket, and Server-Sent Events with a modern, intuitive interface.
- HTTP/REST: Full support for all HTTP methods (GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS)
- GraphQL: Dedicated GraphQL query editor with variables support
- WebSocket: Real-time WebSocket connection testing with message history
- Server-Sent Events (SSE): Monitor SSE streams with automatic event tracking
- Bearer Token: Simple token-based authentication
- Basic Auth: Username/password authentication with Base64 encoding
- API Key: Flexible API key injection (header or query parameter)
- OAuth 2.0: Manual OAuth token entry support
- URL Builder: Smart URL editor with query parameter management
- Headers Editor: Key-value pair editor for custom headers
- Body Formats: Support for JSON, form-data, URL-encoded, and raw text
- Pre-Request Scripts: JavaScript execution before sending requests
- Test Scripts: Post-request assertions and validations
- Environment Variables: Template variable substitution with
{{variable}}syntax
- Formatted Views: Pretty-print JSON, XML, and HTML responses
- Raw View: Toggle between formatted and raw response data
- Response Headers: View all response headers with copy functionality
- Cookies: Display Set-Cookie headers in dedicated cookies tab
- Performance Metrics: Track response time and payload size
- Status Visualization: HTTP status codes with descriptions
- Collections: Organize requests into collections and folders
- Request History: Automatic history tracking (last 50 requests)
- Save & Recall: Save requests for quick access and reuse
- Import/Export: Import Postman collections (v2.1 format) and export data
- Search & Filter: Find requests in history and collections
- Multiple Environments: Define variables for different stages (dev, staging, prod)
- Global Variables: Shared variables across all requests
- Variable Substitution: Automatic replacement in URLs, headers, body, and GraphQL variables
- Quick Switching: Toggle between environments with one click
- Dark/Light Theme: System-aware theme with manual override
- Keyboard Shortcuts:
Ctrl/Cmd + Enter: Send requestCtrl/Cmd + Shift + B: Add to bulk queueCtrl/Cmd + S: Save request to collection
- Bulk Runner: Queue and execute multiple requests sequentially
- Console Logs: Debug panel for request/response logging
- Cookie Jar: Automatic cookie storage and management per domain
- Node.js 18 or higher
- npm or yarn package manager
# Clone the repository
git clone https://github.com/jomardyan/APIPO-Simple-API-tester.git
cd APIPO-Simple-API-tester
# Install dependencies
npm install
# Start development server with hot reload
npm run devThe application will open automatically with Vite dev server running on port 5173.
npm run build # Bundle renderer + main/preload processes
npm run package # Create platform-specific installerInstallers are created using electron-builder:
- Windows:
.exeinstaller - macOS:
.dmgdisk image - Linux:
.AppImageor.debpackages
You can produce an MSIX package suitable for Microsoft Store (Partner Center) submission.
- Add
msixas a target inelectron-builder.json(already configured in this project). - To build an MSIX locally (unsigned or signed with a
.pfx):
# Build bundles and MSIX (x64 + arm64)
npm run build:msix
# or via the helper task
.\tasks.ps1 build-msix- To sign locally, export a code-signing
.pfxand set environment variables:
$env:CSC_LINK = "C:\path\to\your.pfx"
$env:CSC_KEY_PASSWORD = "pfx-password"- You can use the included PowerShell helper tasks to create a local dev cert and export it:
.\tasks.ps1 create-cert
.\tasks.ps1 export-pfx- Test locally by enabling Developer Mode (Settings β For developers) and installing the MSIX with:
Add-AppxPackage -Path .\release\YourApp.msix-
Run the Windows App Certification Kit (WACK) before uploading to Partner Center.
-
In Partner Center, either upload a signed package or upload unsigned and let Microsoft sign it during submission; ensure the
publisheridentity inelectron-builder.jsonmatches exactly the Partner Center publisher string.
If you'd like, I can set your real Partner Center publisher name in electron-builder.json and add a folder with store assets (icons, screenshots) ready for upload.
npm test # Run unit tests with Node.js test runner
npm run test:watch # Run tests in watch mode
npm run test:coverage # Generate coverage report- Enter URL:
https://jsonplaceholder.typicode.com/posts/1 - Select method:
GET - Add headers (optional):
Accept: application/json - Click Send or press
Ctrl/Cmd + Enter - View formatted JSON response in the response viewer
- Open Environment Manager (top bar)
- Create environment: "Production"
- Add variable:
API_URL = https://api.example.com - In request URL, use:
{{API_URL}}/users - Variables are automatically substituted when sending request
- Select protocol: GraphQL
- Enter endpoint:
https://graphql.example.com - Write query in the GraphQL editor:
query GetUser($id: ID!) { user(id: $id) { name email } }
- Add variables in the variables panel:
{ "id": "123" } - Send request and view response
- Select protocol: WebSocket
- Enter WebSocket URL:
wss://echo.websocket.org - Click Connect
- Send messages in the message input
- View real-time messages in the events panel
- Build and test a request
- Click Save or press
Ctrl/Cmd + S - Choose collection and optionally create a folder
- Saved requests appear in the sidebar
- Click any saved request to load it
- Open Settings panel
- Click Import
- Select Postman collection JSON file (v2.1 format)
- Collection and requests are imported automatically
- Frontend: React 19 with hooks and Zustand state management
- Desktop Framework: Electron 39 (Chromium + Node.js)
- Build Tools: Vite (renderer) + esbuild (main/preload)
- HTTP Client: Axios with cookie jar support
- Styling: CSS with CSS variables for theming
- Code Editor: react-simple-code-editor with Prism.js syntax highlighting
src/
βββ main/ # Electron main process (app lifecycle, IPC)
βββ renderer/ # React UI (components, state, utilities)
βββ preload/ # Secure IPC bridge
βββ shared/ # Constants and types shared across processes
- Storage: Zustand with localStorage persistence
- Cookie Jar: Automatic cookie storage per hostname
- History: Last 50 requests stored locally
- Collections: Unlimited collections with folders and requests
- System: Follow OS theme preference (default)
- Light: Light mode with high contrast
- Dark: Dark mode optimized for low-light environments
- Timeout: Configure request timeout (default: 15 seconds, max: 5 minutes)
- Credentials: Enable/disable sending cookies with requests
- SSL/TLS: Certificate configuration for client certificates (planned)
Contributions are welcome! This is an MVP implementation. See Quick-API-Client-Desktop.md for the complete feature roadmap.
- Drag-and-drop collection organization
- OpenAPI/Swagger import
- Enhanced syntax highlighting
- Response comparison view
- Test automation runner
- Plugin system
MIT License - see LICENSE for details
Built with modern web technologies and inspired by tools like Postman and Insomnia, reimagined as a lightweight, privacy-focused desktop application.