Header BackgroundHeader BackgroundHeader BackgroundHeader BackgroundSebastian

How the Project Started

I spend a lot of time in API clients. Bruno has become my daily driver—it’s fast, local-first, and the collections live in plain files next to the code. But there is one recurring friction point: OAuth.

Every provider wants its own configuration. Google needs an auth URL, Microsoft a tenant, Logto a machine-to-machine app, and each one demands its own client ID and secret. Switching between them means juggling environment variables, copying tokens around, and re-authenticating far more often than I’d like.

The Real Annoyance

The problem isn’t that OAuth is hard—it’s that the ceremony is repeated in every tool. My API client needs to know where the token comes from, which scopes to request, and how to refresh it. That knowledge is scattered everywhere, and it changes whenever a provider changes.

What I actually want is simple: let me pick the provider when I need it, not when I configure the tool.

A Local Bridge

That idea became AuthDeck: a small local daemon that sits between an API client and any number of identity providers. The client talks to one endpoint. AuthDeck figures out the rest—resolving, caching, and refreshing tokens, then injecting the right Authorization header when requests are forwarded.

The motivation is deliberately narrow: flexible token selection for Bruno and other OAuth-based tools, without touching those tools at all.


The best developer tools don’t ask you to change your workflow—they slot into it. AuthDeck exists because the provider should be a runtime decision, not a configuration burden baked into every client.

AI Insights: Runtime Over Configuration
Source Code: MPL-2.0 · Content: CC BY-SA 4.0 · Credits & AI Disclosure