Over the last period I’ve been working on Luminara, a full-featured HTTP client built directly on top of native fetch. the idea wasn’t to create “yet another wrapper,” but to build a complete request lifecycle around fetch - something that’s usually spread across multiple small libraries.
Npm
👉 https://www.npmjs.com/package/luminara
Live sandbox and documentation
👉 https://luminara.website
The project is open-source
👉 https://github.com/miller-28/luminara
Why I built it
In most real-world applications, a simple fetch() isn’t enough.
You eventually need:
- Retries
- Backoff strategies
- Timeout control
- Request cancellation
- Deduplication
- Debouncing
- Rate limiting
- Interceptors
- Logging
- Metrics / stats
- Error classification
- Consistent behavior in browser + Node
Developers usually assemble this from several packages, custom utilities, or ad-hoc logic scattered across codebases.
Luminara tries to bring the entire lifecycle into one place without adding dependencies, and without hiding fetch.
Looking for Feedback
I’d love to hear from other developers who have built or maintained HTTP layers:
- Is the API intuitive?
- Any design mistakes or surprising decisions?
- Features you’d expect but don’t see?
- Anything you'd simplify or reorganize?
- Open to critique / architectural / naming / ergonomics, anything.
Top comments (0)