Legal
UnionTerminal runs on your machine. By default, your terminal output, commands, file paths, and clipboard stay local — we do not collect them. To understand how Union is used, the app collects anonymous usage — a count of installs plus which features get used, with no commands, paths, or content of any kind. We count installs; we never track people or see your content. It’s a single switch (on by default, easy to turn off, and disabled automatically by DO_NOT_TRACK). An off-by-default product-research profile that’s anonymous and deletable, voluntary in-app feedback, automatic update checks, and website analytics are also described below.
We count installs; we never track people or see your content. So we can answer basic questions like “how many people actually use Union?” and “which features matter?” without tracking anyone, the app sends a small activation ping to www.unionterminal.app/api/activation — at most once per day. It contains only a random install identifier (a UUID generated and stored locally on your machine), your operating system, and the app version — plus, the first time it runs after an in-app update, the previous version number so we can count upgrades. It carries no events, commands, file paths, clipboard, or terminal output of any kind.
On the server we count these into aggregates using privacy-preserving HyperLogLog structures (total unique installs, active days, which versions are in use, and how many installs upgrade) — we do not retain the individual identifiers, map an identifier to a version, or build any profile. Requests may be rate-limited using a short-lived hash of your IP address; we do not store raw IPs.
The install ping and the feature counts below are controlled by a single switch, on by default but entirely optional. You can turn it off anytime under Settings → Privacy & data → “Anonymous usage”. It is also automatically disabled if you set the DO_NOT_TRACK=1 environment variable (the Console Do Not Track convention).
While Anonymous usage is on (above), the app also sends coarse feature counts to www.unionterminal.app/api/telemetry. This includes a random install identifier (UUID, stored locally and sent only while Anonymous usage is on), app version, platform, and coarse tallies — never the text you type, files you open, or commands you run.
Counts may include: app opens, when you turn sharing on (one-time counter), when you upgrade to a new app version (version numbers only), new terminals, file previews, layout changes, Ask-about-selection usage, feedback-sent (counter only — not your message), and an optional one-question product survey if shown. We may also send a coarse band for how many terminals you typically run (1, 2–4, or 5+). Aggregates use privacy-preserving counting (HyperLogLog for weekly active installs).
Requests may be rate-limited using a short-lived hash of your IP address; we do not store raw IPs in Redis. You can turn Anonymous usage off anytime in Settings.
This is a separate, off-by-default choice — distinct from the aggregate options above. If you turn on Help shape the product in Settings → Privacy & data, we link your usage to your random install identifier so we can build an anonymous per-install profile. Unlike the aggregate tiers, this profile does retain a small amount of information keyed to that identifier so we can answer questions like “which versions do people stay on?” and “do people who don’t upgrade also skip new features?” — to guide what we build.
What the profile may contain: your app version history and upgrade events (version numbers + timestamps), counts of which features you use (e.g. how many terminals, file previews — never the content), your survey answer, and a scrubbed copy of any free text you choose to send via the survey or feedback. It never contains your name, your reply email, commands, file contents, clipboard, or terminal output.
Safeguards: the identifier is random and anonymous (no name, email, or IP); free text is scrubbed of emails, links, file paths, IP addresses, and long tokens before it leaves your machine, and again on our server; dashboard breakdowns apply k-anonymity (small groups are hidden); and per-install records expire after about 18 months. You stay in control: turn it off anytime, reset your anonymous ID (which unlinks past data), or delete your data outright — both under Settings → Privacy & data. Setting DO_NOT_TRACK=1 also disables it.
When you send feedback from the sidebar, we transmit your message, an optional reply email, app version, platform, theme, and optional category (bug/idea/workflow/other) to our server so we can respond. Feedback is delivered by email to our team. If — and only if — you have turned on Help shape the product (above), we additionally keep a scrubbed copy of the message text (without your reply email) linked to your anonymous install ID, so it can inform aggregate word clouds of what people want.
When UnionTerminal is running, it periodically checks for software updates by contacting GitHub's release servers (api.github.com). This is a standard HTTPS request that may expose your IP address to GitHub. This behavior is governed by GitHub's Privacy Statement. You cannot disable update checks in the current version.
The UnionTerminal website (www.unionterminal.app) uses Vercel Analytics to count page visits. We also keep a first-party page-view count: on each page load the site sends the page's route (e.g. /manifesto) to www.unionterminal.app/api/site-pageview so we can see which pages are popular. This is an aggregate counter per page — no cookies, no visitor identifier, and unknown paths are bucketed as “other.” It honors your browser's Do-Not-Track setting. When you click a download button, the site may send a small request to our server to record aggregate download statistics (platform only). We store running totals in Redis — not your name, email, or raw IP address.
On your first download click from the site, we set a first-party cookie (ut_sdl, HttpOnly, one year) so repeat clicks from the same browser are not counted again as a new distinct downloader. In-app software updates download directly from GitHub and do not use this cookie or endpoint. Beacons may be blocked by privacy tools; counts may be lower than actual site interest.
UnionTerminal is not directed at children under 13. We do not knowingly collect any information from children.
We may update this Privacy Policy as the product evolves. Material changes will be noted in the app's release notes. Continued use of UnionTerminal after a change constitutes acceptance of the updated policy.
Questions about this policy? Reach us at iamtherobot.io.