Open-source speed test browser extension. Measures download, upload, ping, jitter, and packet loss from your toolbar — powered by Cloudflare's edge network.
- Full speed test — download, upload, ping, jitter, packet loss
- Use-case readiness — labels for Calls, Streaming, Gaming, Uploads
- Connection quality badge — live rating on the extension icon
- PDF health report — export a full network report as PDF
- Test history — last 7 displayed, 200 stored locally
- Cloudflare edge — serverless backend at 300+ PoPs worldwide
- Self-hostable server — Express.js fallback for LAN or self-hosting
- Settings page — configure custom server URL
- Animated UI — progress steps, speed bars, smooth transitions
- No tracking, no accounts — everything stays in your browser
git clone https://github.com/ajithakdev/meterx-server.git
cd meterx-server
npm install
npm run buildLoad the extension:
- Go to
chrome://extensions(oredge://extensions) - Enable "Developer mode"
- Click "Load unpacked" and select
packages/extension/dist/
Run the server locally (optional):
npm startmeterx-server/
packages/
extension/ # Browser extension (TypeScript, Manifest V3, esbuild)
src/
background.ts # Service worker — test orchestration
popup.ts # Popup UI, history, PDF export
static/ # HTML, CSS, manifest, icons
build.mjs # esbuild bundler
worker/ # Cloudflare Worker — primary backend (serverless)
src/index.ts # Edge handler — download, upload, ping, health
wrangler.toml # Wrangler config
server/ # Express.js server — self-host fallback
src/
app.ts # Express app (routes, middleware)
server.ts # Entry point
app.test.ts # Vitest + supertest (8 tests)
Browser Extension --> Cloudflare Worker (default, 300+ PoPs)
--> Express Server (self-host / LAN fallback)
Both the worker and self-host server expose the same API:
| Endpoint | Method | Purpose |
|---|---|---|
/ping |
GET/HEAD | Latency measurement |
/test-file/:size |
GET | Download test (1, 5, 10, 25 MB) |
/upload |
POST | Upload drain |
/health |
GET | Health check (includes edge location on worker) |
All endpoints are rate-limited. CORS restricted to browser extensions and configured origins.
npm install # Install all workspace deps
npm run build # Build all packages
npm start # Run self-host server
npm test # Run all tests
cd packages/worker && npx wrangler dev # Run worker locally
npm run lint # ESLintSee CONTRIBUTING.md for the full guide.
- Extension: TypeScript, Manifest V3, esbuild
- Worker: Cloudflare Workers, TypeScript, Wrangler
- Server: TypeScript, Express.js 5, esbuild
- Testing: Vitest, supertest
- CI: GitHub Actions
MeterX collects zero personal data. All results are stored locally in your browser. Network requests go only to the configured test server. See privacy-policy.md.
AGPL-3.0 — see TRADEMARK.md for brand usage policy.
Ajith Kumar K (@ajithakdev)
- GitHub: github.com/ajithakdev
- Email: ajithkumarks2579@gmail.com