A lightweight, local-first curl command builder and executor. Organize your API requests by service, tag them with labels, bookmark the important ones, and execute them — all from a clean terminal-inspired UI.
- Service-based organization — group your curl commands under named services (e.g. "Auth API", "Payment Gateway", "User Service")
- Build curl commands visually — pick method, set URL, headers (key-value pairs), and body; the curl command is generated live
- Execute locally — run curl natively on your machine via the Express backend, no CORS issues
- Verbose mode (
-v) — toggle on/off; shows full TLS handshake, request/response headers in the output - History with dedup — saving a request with the same method + URL replaces the old entry instead of creating duplicates
- Bookmarks — star important requests to pin them to the top of history
- Labels — tag requests with optional labels (e.g. "Get all users", "Create order"); add, edit, or remove labels anytime
- Filter by label — quickly find requests in history using the search filter
- Edit commands inline — modify any saved curl command directly in history
- Copy to clipboard — one-click copy for any generated or saved command
- Persistent storage — data saved as a plain JSON file on disk (
data/services.json); delete it anytime to reset - Export / Import — backup your data as JSON or restore from a previous export
- Configurable ports — customize both frontend and API server ports via environment variables
- Node.js (v18+)
- npm
git clone https://github.com/gitankit7/curlite.git
cd cURLite
npm install
# Start both frontend + backend
npm startOpen http://localhost:2401 in your browser.
Configure ports using environment variables:
# Method 1: Use specific port variables
DEV_PORT=3000 API_PORT=3001 npm start
# Method 2: Use legacy PORT variable (API will be PORT + 1)
PORT=3000 npm start # frontend: 3000, API: 3001
# Method 3: Create .env file from .env.example
cp .env.example .env
# Edit .env with your preferred ports
npm startDefault ports:
- Frontend (Vite):
2401 - API Server (Express):
2402
Environment variables:
DEV_PORT— Frontend development server portAPI_PORT— API server portPORT— Legacy mode: sets frontend port, API becomes PORT + 1
Run cURLite in the background with error-only logging: Need some permissions first :)
chmod +x scripts/background.sh
# Start in background (recommended for daily use)
npm run start:bg
# Check status
npm run status:bg
# View error logs
npm run logs:bg
# Stop background process
npm run stop:bgManual background options:
# Background with error logging
npm start > /dev/null 2> curlite-errors.log &
echo $! > curlite.pid
# Check if running
kill -0 $(cat curlite.pid) && echo "Running" || echo "Stopped"
# Stop
kill $(cat curlite.pid) && rm curlite.pidFrontend only? Run
npm run devif you just want the builder without curl execution.
┌─────────────────────────────────────────────────┐
│ >_ cURLite │
│ Select or create a service │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 🔵 │ │ 🟢 │ │ 🟠 │ │
│ │ Auth API │ │ Users │ │ Payments │ │
│ │ 5 reqs │ │ 3 reqs │ │ 8 reqs │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ [ + ] │
└─────────────────────────────────────────────────┘
curlite/
├── .gitignore
├── index.html # Entry HTML
├── package.json
├── vite.config.js # Vite dev server (proxies /api → Express)
├── data/ # Auto-created, gitignored
│ └── services.json # Your saved data
├── server/
│ └── index.js # Express backend — curl execution + data API
└── src/
├── main.jsx # React entry point
├── App.jsx # Root component, state management
├── storage.js # Storage layer (disk + localStorage fallback)
├── curl.js # Curl command generation + clipboard helpers
├── components.jsx # Shared UI components (MethodBadge, TabBtn)
├── ServiceListScreen.jsx # Service grid / home screen
└── BuilderScreen.jsx # Builder, history, response viewer
| Command | Description |
|---|---|
npm start |
Start frontend (2401) + backend (2402) |
npm run start:bg |
Start in background with error logging |
npm run stop:bg |
Stop background process |
npm run status:bg |
Check background process status |
npm run logs:bg |
View background error logs |
npm run dev |
Start Vite dev server only (port 2401) |
npm run server |
Start Express API only (port 2402) |
npm run build |
Production build to dist/ |
npm run preview |
Preview production build |
PORT=3000 npm start |
Run with custom ports (frontend: 3000, API: 3001) |
All data is persisted as a plain JSON file at:
data/services.json
This file and folder are auto-created on first use and gitignored by default. To reset everything, just delete the data/ folder.
The frontend also mirrors data to localStorage as a fast fallback, so running frontend-only (npm run dev) still works without the backend.
From the browser console:
// Download a backup
(await import('/src/storage.js')).default.exportJSON()
// Import from file
(await import('/src/storage.js')).default.importJSON(file)The Express backend at localhost:2402 (or your configured API_PORT) exposes:
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/execute |
Execute a curl command natively |
| GET | /api/data |
Read all services |
| PUT | /api/data |
Save all services |
| GET | /api/health |
Health check |
{
"method": "GET",
"url": "https://api.example.com/users",
"headers": { "Authorization": "Bearer token123" },
"body": "{\"name\": \"test\"}",
"verbose": true
}- Frontend — React 18, Vite 5
- Backend — Express 4, Node.js
child_processfor native curl execution - Styling — Inline CSS, IBM Plex Mono + Space Grotesk fonts
- Storage — JSON file on disk + localStorage fallback
- No database, no Docker, no config files — just
npm installand go
- Fork the repo
- Create your branch (
git checkout -b feature/my-feature) - Commit your changes (
git commit -m 'Add my feature') - Push to the branch (
git push origin feature/my-feature) - Open a Pull Request
MIT — do whatever you want with it.
Built with ☕ and a lot of curling.