Skip to content
hush
Open source · MIT · self-hosted

Hear from your users.
Without watching them.

In-app feedback and anonymous usage tracking for mobile apps. One small container, Postgres, a one-file SDK and a dashboard. No account, no IP address, nothing to ask consent for.

Built for our own apps and running in production there. Shared as-is.

The hush dashboard: an app's active installs per day, sessions, a paywall funnel, retention and versions
hush.example.com/dashboard

How it works

Three steps, about five minutes

  1. 1

    Run it

    Run docker compose with the example in the repo: one container and a Postgres beside it, on your own server.

  2. 2

    Wire the SDK

    Copy one file into your Expo or React Native app, give it the server's URL and a write key, and call init().

  3. 3

    Read and answer

    The dashboard shows installs, sessions, retention and your own events, and the feedback inbox where you reply.

What you get

The two things a small app needs to hear

Feedback, as a conversation

Users write from inside the app: a problem, an idea, or kind words. You answer on the dashboard (and by email, if they left one); they read it in the app and can reply.

Anonymous by design

A random install id is the only identifier. No IP address is stored anywhere, and nothing personal is collected, so there is no consent banner.

The numbers that matter

Installs, sessions, retention, versions, a paywall funnel, and your own events with props, each app with one highlight metric of its choosing.

Revenue next to usage

Optionally, RevenueCat's own figures on the same page, pulled by your server with a read-only key.

Yours to run

One container and Postgres on your own server. Your users' data never passes through anyone else.

One-file SDK

Queues offline, batches, survives being killed or backgrounded, and never throws into your app. If the server is down, the app behaves exactly as without it.

Privacy, plainly

What hush stores, and what it never does

Stored

  • A random install id the app creates; deleting the app deletes it
  • App version, OS, device model and the phone's language
  • The events and props your app sends (what the app did, not who did it)
  • Feedback messages, and an email address only if a user typed one
  • Country, only if you enable it behind a trusted proxy

Never

  • IP addresses, in the database or anywhere else
  • Accounts, names, or advertising identifiers
  • Fingerprints or cross-app tracking
  • Raw events past the retention window (180 days by default)
  • Your users' data on any server but yours

FAQ

Questions, answered

The only identifier is a random install id the app creates for itself. No IP address is stored, no account exists, and no advertising id is read. An email address exists only when a user types one into feedback so you can answer them.

Yes. It is MIT licensed: run it on your own server, commercially too. It is built for small apps like ours: one instance, in-memory rate limits, Postgres.

No, on purpose. Your users' data stays on your server; we never see it. The live demo shows exactly what you get.

Expo and React Native, as one TypeScript file you copy in. The API is plain HTTP and JSON, so any client can talk to it; the README documents every endpoint.

A container using under 100 MB of memory and a small Postgres database: the smallest VPS or a corner of a server you already have.

Five minutes from clone to your first event

Free, MIT licensed, and small enough to read in an afternoon.

Get it on GitHub