A modern, high-performance desktop API client built with Electron, React, and TypeScript. Flamingo provides a powerful interface for crafting HTTP requests, managing environments and collections, and syncing your data across devices — all with end-to-end encryption.
---- HTTP Request Builder — Full-featured editor for GET, POST, PUT, PATCH, DELETE, HEAD, and OPTIONS requests with support for headers, query parameters, body (JSON, form-data, text), and authentication (Basic Auth, Bearer Token, API Key)
- Monaco Editor Integration — Code-grade editing for request/response bodies with syntax highlighting, autocompletion, and theming
- Environment Variables — Define reusable variables across environments (development, staging, production) with dynamic resolution in requests
- Collections — Organize requests into folders for project-level grouping and reuse
- Request History — Automatic saving of recent requests with search and filtering
- Multi-Tab Interface — Work on multiple requests simultaneously with resizable panels
- Sync Across Devices — Cloud sync with end-to-end encryption (AES-256-GCM) via the Flamingo Sync Server
- Theme Support — Light, dark, and system-following themes
- Keyboard Shortcuts — Power-user shortcuts for every action
- Auto-Save — Never lose your work with automatic state persistence
- Responsive Layout — Resizable panes, collapsible sidebar, and tab management
| Layer | Technology |
|---|---|
| Desktop Shell | Electron 32 |
| UI Framework | React 18 |
| Build Tool | Vite 5 |
| Language | TypeScript 5 |
| Styling | TailwindCSS 3 |
| Components | Radix UI (20+ primitives) |
| State Management | Zustand 5 |
| Editor | Monaco Editor (VS Code engine) |
| Animations | Framer Motion 11 |
| Icons | Lucide React |
| HTTP Client | Fetch API |
| Encryption | Web Crypto API (AES-256-GCM) |
client/
├── electron/ # Electron main process
│ ├── main.js # App window, IPC handlers
│ └── preload.js # Context bridge (secure IPC)
├── src/
│ ├── components/ # React components
│ │ ├── layout/ # App shell (TitleBar, Sidebar, Panels)
│ │ ├── request/ # Request builder (URL, headers, body, auth)
│ │ ├── response/ # Response viewer (body, headers, status)
│ │ ├── sidebar/ # Sidebar panels (SyncPanel, SettingsModal)
│ │ └── ui/ # Primitives (Button, Input, Dialog, etc.)
│ ├── hooks/ # Custom React hooks
│ ├── lib/
│ │ ├── sync/ # Sync client (crypto, store, provider)
│ │ └── supabase/ # Supabase client configs
│ ├── main/ # App entry point
│ ├── modules/ # Feature modules
│ ├── stores/ # Zustand stores
│ │ ├── history-store.ts
│ │ ├── environment-store.ts
│ │ ├── collection-store.ts
│ │ ├── settings-store.ts
│ │ ├── tab-store.ts
│ │ ├── theme-store.ts
│ │ └── ui-store.ts
│ └── styles/ # Global CSS, Tailwind layers
└── # Build & config files
Flamingo uses Zustand with the persist middleware for all application state. Each domain has its own store:
| Store | Purpose | Persisted |
|---|---|---|
history-store |
Request history entries | Yes |
environment-store |
Environment variables | Yes |
collection-store |
Request collections | Yes |
settings-store |
App preferences (font size, timeout, etc.) | Yes |
tab-store |
Open tabs and active tab | Yes |
theme-store |
Theme preference | Yes |
ui-store |
UI state (modal open, panel width) | No |
Flamingo integrates with the Flamingo Sync Server for cross-device data synchronization:
- End-to-End Encryption — All data is encrypted with AES-256-GCM before leaving the client
- Master Key — A random 256-bit key is generated per user, stored raw (base64) on the server
- Automatic Setup — On first connection, the master key is generated, uploaded, and cached locally
- Multi-Device — Subsequent devices fetch the shared master key from the server
- Selective Sync — Users choose which data types to sync (history, environments, collections, settings)
- Token Auth — Device-authorization flow with temporary tokens and browser-based claim
- Node.js >= 18
- npm >= 9
cd client
npm installRun the Vite dev server and Electron concurrently:
npm run dev # Vite dev server only (http://localhost:5173)
npm run electron:dev # Vite + Electron (hot reload)npm run build # TypeScript check + Vite production build
npm run electron:build # Build + package for current platform
npm run electron:mac # Build + package for macOS (DMG + ZIP)
npm run electron:win # Build + package for Windows (NSIS)
npm run electron:linux # Build + package for Linux (AppImage, deb, rpm)macOS note: Building for macOS requires Xcode, an Apple Developer account, and proper code signing certificates. For notarization, see the macOS Build & Notarization guide in the documentation site.
npm run lint # TypeScript type-check (no emit)| Script | Description |
|---|---|
npm run dev |
Start Vite dev server (port 5173) |
npm run build |
TypeScript check + Vite production build |
npm run electron:dev |
Run Vite + Electron concurrently with hot reload |
npm run electron:build |
Build and package for current platform |
npm run electron:mac |
Build and package for macOS (DMG + ZIP) |
npm run electron:win |
Build and package for Windows (NSIS) |
npm run electron:linux |
Build and package for Linux (AppImage, deb, rpm) |
npm run electron:all |
Build and package for Windows + Linux |
npm run preview |
Preview Vite production build |
npm run lint |
TypeScript type-check (tsc --noEmit) |
- React plugin with Fast Refresh
- Path alias
@/→./src/ - Monaco Editor worker bundling
- Dev server on port 5173
- Target: ES2020
- Module: ESNext with bundler resolution
- JSX: react-jsx
- Strict mode enabled
- Path alias
@/*→./src/*
- Main process creates BrowserWindow
- IPC handlers for native dialogs and
openExternal - Preload script exposes secure API via contextBridge
| Package | Purpose |
|---|---|
@monaco-editor/react |
Code editor component |
@radix-ui/* |
Accessible UI primitives (20 packages) |
@tanstack/react-query |
Async state management |
framer-motion |
Declarative animations |
lucide-react |
Icon library |
monaco-editor |
VS Code editor engine |
react-resizable-panels |
Split-pane layout |
zustand |
Lightweight state management |
tailwind-merge |
Conditional class merging |
| Package | Purpose |
|---|---|
electron |
Desktop shell |
electron-builder |
App packaging & distribution |
vite |
Build tool & dev server |
typescript |
Type checking |
tailwindcss |
Utility-first CSS |
| Shortcut | Action |
|---|---|
Ctrl+Enter |
Send request |
Ctrl+N |
New tab |
Ctrl+W |
Close tab |
Ctrl+Shift+T |
Reopen closed tab |
Ctrl+, |
Open settings |
MIT License — see LICENSE
Copyright (c) 2024 Javier Fernández (Jallox/Jayox)
