Wavelength — an independent iPhone and iPad client for Doppler

I’ve been a Doppler customer for a while, and the one thing I kept running into
was checking a value from my phone (or tablet). There’s no official mobile app, and the
dashboard is built for a mouse — on a touchscreen it turns into pinch-zooming a
dense table and switching tabs whenever two things need comparing. So I built
the handful of things I do daily as one-tap actions, and it’s now on the App
Store as Wavelength.

What it does:

  • Browse projects, environments and configs, reveal and copy secret values
  • Compare two configs side by side and copy a value across without leaving the
    screen — split view on iPad
  • Export several projects into a single encrypted file (a standard age file
    with a passphrase, so age -d opens it anywhere)
  • Show, in a branch config, whether each secret is inherited, overridden or
    local — with promote-to-root and restore-inheritance as single actions

How it’s built, since this is a secrets forum and the question is fair:

  • No backend of mine. The device calls api.doppler.com/v3 directly.
  • No secret values written to the device. They’re fetched when a screen needs
    them and held in memory only.
  • The only thing persisted is the token, in the iOS Keychain with
    WHEN_UNLOCKED_THIS_DEVICE_ONLY — not in iCloud, not in device backups.
  • Face ID on launch and on every return from the background.
  • No analytics or tracking SDKs.
  • It reads what the provided token is allowed to do and hides actions it can’t
    perform, so a read-only service account token gives a coherent read-only app.

That last one is the setup I’d actually recommend to anyone trying it: a service
account token scoped to the projects you want on your phone, read-only. It’s a
pattern I think is underused and it makes “secrets on a phone” a much smaller
question.

One thing I ran into building it, in case it’s useful to someone else here:
setting a branch secret’s value to null through the API doesn’t restore
inheritance the way I expected — the key ends up suppressed in that config
rather than tracking root again. Converge is what actually undoes an override.
Took me a while to work out, so it’s now a single button in the app.

Free to browse and read; editing, the config comparison and the encrypted export
are a one-time unlock, no subscription. Not affiliated with Doppler — just a
customer who wanted this to exist.

Happy to hear what’s missing, and if anything about how I’ve used the Doppler
name is a problem, tell me and I’ll change it.