Privacy Policy
Last updated: October 6, 2026
MXterm Pro is a desktop app for Mac and Windows, sold directly on mxterm.net, with a free companion app for iPhone, iPad and Android. This policy explains what the app and mxterm.net collect, what they never collect, and how to turn reporting off.
What we store
When you buy MXterm Pro we store your email, the name you enter at checkout, your order (including the amount you paid, any tax and discount, and the country of your billing address) and the license key we issue. When you activate a license, we store the activation: a machine fingerprint (explained below), your computer's hostname, the app version and platform, the country the request came from and a hash of its IP address. If app usage reporting is on, we also keep one record per install, described under App usage reporting. If usage reporting is on, the activation also stores a hash of that install ID, so we can match a paid license to that install's usage numbers.
What the app never sends
MXterm Pro never sends us or Google your terminal output, the commands you run, file contents, file paths, SSH hostnames or usernames, or anything on your screen. The app reads your clipboard only when you paste, and only on your Mac: what you paste goes where you paste it, which may be a terminal connected to a server, and nothing from the clipboard is included in anything the app reports. Voice dictation, optional and on macOS only: when you use the microphone button, your audio goes from the microphone to the macOS speech recogniser and nowhere else; it does not go to mxterm.net or to other panes. If the language is installed on your Mac, nothing leaves the Mac; otherwise Apple's speech service may process it. MXterm stores and logs no audio and no transcript.
App usage reporting
Official MXterm Pro builds report anonymous usage, and this is on by default. Turn it off in Settings → Privacy → Share anonymous usage data, or by setting DO_NOT_TRACK or MXTERM_TELEMETRY_DISABLED in the environment; switching it off takes effect straight away, and switching it back on resumes reporting without restarting the app. Four kinds of report are sent. To Google Analytics: one app_open event at launch, and nothing else for the rest of that run, with a random client ID, a session ID taken from the launch time, the app version and the operating system; Google infers a country from the IP address. To mxterm.net, at most once a day when the app starts: the app version, Free or Pro, the macOS version, the processor type, the platform (macOS or Windows), whether the last run crashed, how many times the app was opened since the last report, how often each upgrade prompt was shown and clicked, and a random install ID. To mxterm.net, in that same daily request from version 1.1.12: usage counts and ranges, which features you use and how often, never what you do with them. To mxterm.net, when one of fifteen specific failures happens, such as an SSH connection or a file transfer failing: the failure type and a short reason code, never the error message. The random IDs are not derived from your hardware, license or email, and we store the country each report came from rather than its IP address. Every report is checked just before it is sent and dropped instead of sent if it contains anything that looks like a home folder path, an SSH key, a license key, a password, a token or a secret. Builds you compile yourself send none of this. Settings → Privacy also has a Diagnostic file for support section: its Save file button writes a file on your Mac that you read and choose whether to email us, and nothing in it is uploaded. Every field is listed in the telemetry documentation.
Other connections the app makes
The connections below are not usage reporting, so the usage switch above does not affect them. Those you can turn off have their own switch, named in each entry; the update check, the Free limits check and the license checks have no switch. Update checks: shortly after launch and every four hours, the app asks mxterm.net whether a newer version exists, sending its current version, your operating system and interface language. This happens in every build. When usage reporting is off, a check can still leave one anonymous record on our server: the app version, the country, whether an update was available and whether the app is Free or Pro, with no IP address and no install ID. Each update check is also counted by app version and country, with no identifier, to show how many copies are running. License activation: when you enter a license key, the app sends the key, the machine fingerprint, your computer's hostname, the app version and the platform. If usage reporting is on, activating a license (with a key or through your MXterm account) also sends the app's random install ID (the one in the daily check-in), so we can match a paid license to that install's usage numbers. If usage reporting is off, no install ID is sent. License re-check: at launch (at most once an hour) and then about once a day while you are online, the app sends mxterm.net the license key, the machine fingerprint and the app version to ask whether this machine is still licensed. If you activated through your MXterm account instead of a key, it sends the machine fingerprint, the machine name, the platform and the app version with your account session. A check that fails or finds you offline changes nothing; only a clear answer that the license or seat is gone, given twice in a row, removes Pro from the app. The server keeps each machine's last-seen time and app version, not a history of checks. Free limits: shortly after launch and every four hours, the app asks mxterm.net for the current Free plan limits. The request carries no install ID and no data about you, only what any request reveals, such as your IP address. MXterm account and My Devices, only when you sign in: see the next section. An experimental network feature for invited testers, only when you switch it on: see the section after that. Claude plan limits, off by default: if you turn on Plan limits in Settings → Token Meter, the app reads Claude Code's saved sign-in from your Keychain through the macOS security tool (macOS does not normally show a prompt for it) and uses it to fetch your usage limits from api.anthropic.com, at most once every five minutes. Live Codex limits, off by default: if you turn it on in the same place, the app reads Codex's sign-in from ~/.codex/auth.json and sends it only to chatgpt.com to read your current limits, at most once every five minutes, without ever changing or refreshing it. Account provider balances, off until you add a key: if you paste an API key for DeepSeek, Moonshot, Kimi, MiniMax, OpenRouter or Z.ai in Settings → Token Meter, the key is kept in the macOS Keychain and sent only to that provider, api.deepseek.com, api.moonshot.ai or api.moonshot.cn, api.kimi.com, api.minimax.io or api.minimaxi.com, openrouter.ai, api.z.ai or open.bigmodel.cn, to read your balance or quota, at most once every five minutes per provider; nothing else is sent with it, and none of it reaches us. For Kimi alone, if no key is saved and the Kimi Code CLI is signed in on this Mac, the app reads that CLI's token and device id from ~/.kimi-code and sends them to api.kimi.com in the same way. Otherwise the Token Meter reads Claude Code and Codex token counts, and the plan percentages Codex writes into its own session files, from files on your Mac and sends nothing. Feedback: From MXterm Pro 1.1.57 on Mac (1.1.58 on Windows and Linux), Settings → Feedback sends what you write to mxterm.net when you press Send: your name, email and message, the kind (idea, improvement or bug), the app version, your operating system and the app language, and the diagnostic file only if you tick it. From MXterm Pro 1.1.74, Settings → Privacy → Send to MXterm opens this form as a bug report with the diagnostic file already ticked; nothing is sent until you press Send. mxterm.net stores the message and our email provider processes it to deliver it to the team; a diagnostic file is kept for 90 days. You can send up to 3 per hour. If sending fails, the app offers to open your mail app. Older versions open your mail app with a message to the support address already started, and nothing is sent until you press Send there. Outbound notifications (Telegram, Slack): off by default. If you turn them on in Settings → Notifications and connect a bot of your own, an agent running in a pane can send a message, and images or videos it picks from that pane's folder, to your own account on the service you chose (Telegram, through api.telegram.org, or Slack, through slack.com, using your own bot). That content leaves your computer for that service; it does not pass through mxterm.net. The service you chose stores it under its own policy, and on Slack the administrators of that workspace can read it. The bot token is kept in your system keychain, is not written to logs and is never sent to mxterm.net. The log on your computer records only the time, the pane, the number of messages, the kind and size of each file and the result, never the content. Remote access, off until you use it: The host server does not run until you press Start Server in Settings → Remote Access & Devices, unless you turn on Start the host server when MXterm opens, which is off by default. It then listens on port 6868 (or the next free port up to 6877) on your Tailscale address if there is one, plus your private network addresses if you turned on Allow devices on my local network, and otherwise on this Mac only. Never on a public address. On a private network the traffic is not encrypted. Paired devices can reach only the panes you share. You share a pane as view only or with control, for a time you choose or until you stop it, and a device can type only in a pane shared with control. A new device pairs with a six-character code or with an access password you turn on, which is kept only as a hash in the system credential store and is sent to a Tailscale address, to the local proxy of a peer on that experimental network or, if you allow local network access, to a local-network address, where it is not encrypted. While the server runs and a pane is shared, MXterm Pro keeps the computer from going to sleep on its own (built for macOS and Windows; the Windows side is unverified) unless you turn that off. If you add a host under Machines, the app connects to that host's address with a token kept in the macOS Keychain. Terminal content never goes through mxterm.net. If you use My Devices, mxterm.net only handles the device list and presence described under MXterm account and My Devices. Phone notifications, on unless you turn them off: for a new install, and any install that never saved a choice, they start once you sign in to your MXterm account; an install that already saved a choice keeps it, and the switch is under Settings → Phone & devices → More options (“Notify my phone when an agent needs me or finishes”); Settings → Privacy lists what is sent. Each notification shows the agent, the folder name and the name of the tab or pane, and travels through mxterm.net and Apple's push service. When it is on, your Mac reports two kinds of event to mxterm.net, an agent that needs you and an agent that finished, sending only the event, the agent, the folder and the names of the pane and its tab (never terminal text, prompts, commands or paths), plus whether it waits on a question or a permission request (never their text), how long the agent worked, an id for this computer, an id for the pane, an id for the pending question when it is a plain question (never a permission prompt), and the time. It also sends one short line with the question an agent asks (a plain question only, never a permission request): at most 120 characters, with links, file paths, email addresses and keys removed on your Mac, and a line that mentions a password, token or secret is not sent at all. This line is on by default once phone notifications are on, and you can turn it off in Settings → Remote Access & Devices → Advanced, next to the phone-notification switch (“Include a short summary in phone notifications”). These names and that line pass through MXterm's server and Apple to reach your lock screen. While you are using this Mac (no keyboard or mouse input in the last 2 minutes counts as away), it sends nothing unless you turn on a second switch, described in the Settings docs. It reads that idle time on your Mac only and never sends it. The phone app registers with mxterm.net when you turn on notifications in it. mxterm.net keeps only the phone's device token, its environment (sandbox or production), language, device name, app version, your notification choices and timestamps. It keeps no event content: the agent, folder, pane and tab names and the summary line exist only in memory while the request runs and inside the Apple push message. The message is sent through Apple's push service. Tailscale guide video, only if you press Play: if you press Play in the Tailscale guide in Settings, the video loads from YouTube (youtube-nocookie.com); if you do not press Play, the app makes no connection for it. Plan check, only when you are signed in: at launch and after you sign in, the app asks mxterm.net which plan your account has, sending your sign-in token and nothing from your terminals.
MXterm account and My Devices
A MXterm account is optional to use. You can create one yourself, and when you buy a license or redeem a code we create one for the email you used, so your license and sign-in are in one place; after a purchase you choose its password from the link in your license email. mxterm.net stores your email, how the account was created (for example from a purchase or a code), a password hash if you set a password, the public key of each passkey you register, and a record of each browser or app you are signed in on: its name, when it was last used and when the session ends. In the app, you sign in through your browser, and the app keeps the resulting sign-in token in your Keychain. For My Devices, the app then tells mxterm.net about this computer: a device ID, the computer's name and public keys, its operating system and version, hardware model and app version (to tell your devices apart; linked to your account, never used for tracking or advertising) and, only while usage reporting is on, the app's random install ID, of which we keep only a hash so we can match this computer to its license, and it asks for your device list about every five minutes. While you are signed in, it also sends a presence update about once a minute. Its content, the network address where this computer's host server can be reached, is encrypted for your other devices, so mxterm.net cannot read it; mxterm.net sees the device ID, the time and the IP address of the request. If you activate through your account instead of a key, the server also stores the email a license seat is assigned to, and the machine fingerprint, name, platform and app version of each machine. If you share a pane with another MXterm account by email, mxterm.net stores your email, the recipient's email, whether the share is view only or with control, how many panes it covers, when it ends, the names and public keys of the recipient's devices that accept it, and an encrypted key for each of them that mxterm.net cannot read, and it sends the recipient one email about it. It never learns a pane's name or what is in it. If you buy MXterm Pro while signed in, the purchase is linked to that account, and you can add another email you paid with by typing a code sent to it; mxterm.net keeps these links so your licenses show in your account. When the app opens the website for you (Upgrade or Manage account), it uses a one-time link, valid for two minutes, that signs that browser in; mxterm.net keeps only a hash of it. Terminal content never goes through mxterm.net. Signing out in the app stops these requests. Signing out of the app, or signing in as a different account, also ends the old account's access to this computer: that account's other devices can no longer connect to this computer through it, and signing back in restores the access through the normal sync. On sign-out or an account switch the app asks once whether to also remove the computers saved on this machine (computers linked through the account and computers paired from this computer); by default it keeps them. Devices paired with a pairing code or password, and email shares, are not changed by signing out: they keep working until you remove them in Settings > Phone & devices. If you sign in with Google or GitHub, you approve the sign-in on their page and they send us a verified email address and your user ID there; we keep that email and ID to link the sign-in to your MXterm account, plus the web address of your profile picture to show it next to your account (you can upload your own picture instead; we store it, resized, until you remove it or delete your account), and we never post to or read anything else from your Google or GitHub account. A cookie named mx_oauth lasts ten minutes while you sign in.
Phone app
The MXterm phone app (iPhone, iPad and Android) is free and controls MXterm on your own computers. It has no ads, no tracking and no analytics of its own. On Android the QR scanner uses Google's ML Kit, which runs on the phone and may send anonymous performance diagnostics to Google; on iPhone and iPad it uses Apple's camera framework. Sign-in: the app signs in to your MXterm account through your browser and keeps the sign-in token on the phone, in the iOS Keychain or Android's protected key storage; mxterm.net then knows your account email and a random identifier for this phone, linked to your account. Notifications, on iPhone and iPad only (Android shows none yet), on unless you turn them off in the Mac app: the phone registers its push token with mxterm.net, and each event reaches it as one short cleaned line through mxterm.net and Apple's push service; terminal text is never sent. Terminals and chat: what you see and type travels between the phone and your own computer, over your local network or your own Tailscale network, and does not pass through mxterm.net. Camera: used only to scan a pairing QR code, or to take a photo you choose to send to your own computer. Microphone: voice input uses the phone's own speech recognition: on iPhone and iPad, Apple's, on the device when the language allows; on Android, the system's speech service (usually Google's), on the device on Android 13 and later when the language is installed. MXterm stores no audio and no transcript; the text goes to your own computer. Local network: used only to find your own computers. The experimental network feature, if you turn it on, works as described in its section. You can delete your account from the app or at mxterm.net/account/delete.
Experimental network feature (invited testers)
This experimental network feature is optional. It is available only to invited testers, built for macOS, and does nothing until you switch it on in Settings. While it is on, the app runs a helper that connects to mesh.mxterm.net, which introduces your devices to each other, and to sg.relay.mxterm.net, a relay that carries traffic when two devices cannot reach each other directly. Both run on AWS servers in Singapore, not on our server in France and not behind Cloudflare. The coordination server stores each device's name, operating system, public key and network addresses, and when it was last seen. The relay operator can see device public keys and source IP addresses but not terminal content, which stays encrypted between your devices. Devices on the same mesh can see each other's name, operating system and addresses. If you are signed in, the app asks mxterm.net for a one-use enrollment key tied to your account by a hashed reference, not your email; if not, it uses a shared key built into the app. The app builds its networking library without log upload to Tailscale. If name lookup fails, the library may ask a Tailscale-run DNS service for the address of mesh.mxterm.net; that request carries only the hostname.
Machine fingerprint
To enforce per-device license limits, activation uses a fingerprint made from the first 12 characters of a SHA-256 hash of your computer's hardware UUID. The UUID itself isn't sent, and it can't be recovered from the fingerprint. We store the fingerprint and hostname with the activation, which lets us tell your computers apart and notice a license being shared. The free 7-day trial uses it too: we keep a normalised form of your email address and a keyed hash of the fingerprint of each computer that ran a trial, so that one person can start only one free trial.
Website cookies and records
mxterm.net sets first-party cookies. mxterm_locale remembers your language for a year. mxterm_vid holds a random visitor ID for a year, so a download or purchase can be linked to the visit that led to it. mxterm_ft lasts two minutes and marks a first visit. mxterm_attr lasts 30 days and is set on your first visit; it holds how you arrived (a campaign link or a referring site) and the landing page. mxterm_ref lasts 30 days and is set only when you arrive through a referral link; it holds the referral code. mxterm.net also loads Google Analytics 4, which sets its own cookies (_ga and _ga_ followed by an ID) and records page views and a few events, such as viewing the pricing page, clicking download or a link to the phone app (which button, the kind of device and a random click ID), starting a checkout (the plan, the button or page it started from, any discount code you used and whether you entered an email), completing a purchase and clicking one of the Ask AI buttons (only which assistant was chosen, on which page and in which language). It loads after your first scroll, tap, click or key press on a page, or after four seconds, whichever comes first, and at once if you arrive from a Google ad click or reach the purchase confirmation page. The site does not ask for consent first; you can stop it with a content blocker or by blocking Google's scripts in your browser. It does not load on the admin pages. When an order is paid, our server can also send the purchase (and any refund) to Google Analytics itself: the amount, tax, any discount, currency, plan, a transaction ID, the button or page you started from, how you arrived and the country, under the Google Analytics ID from your browser cookie so the sale is counted with the visit that led to it. It does not include your email, name or license key, and because it is sent from our server, a content blocker does not stop it. For each new visitor, each arrival through a new campaign link, referring site or ad click, and each view of the pricing page, we record the page, the referring site, campaign parameters, any ad click ID, the country and a hash of the IP address. For each visit to the phone-app page at mxterm.net/link, we record the kind of device we detected, where we sent you, which QR code or button you came from, the campaign, the visitor ID, the country and a hash of the IP address. When you download the app (or click a phone-app download, TestFlight, App Store or Google Play link) or start a checkout, we also record the IP address itself, your browser and operating system, the referring page and any ad click ID; a download record also has the platform, which button you clicked, the kind of device and a random click ID, with no email or user ID; a checkout record includes the email and name you enter, the button or page you started from, your language, the Google Analytics ID from your _ga cookie and any discount code. TestFlight, the App Store and Google Play are run by Apple and Google under their own policies: we only send you there and record the click. As of this update, the site does not load advertising tags or session-recording tools; if that changes, this page will say so.
Forms and programs on the website
Download page email box: if the download page asks for your email (optional, and it can be switched off), we store the email, your language, whether you agreed to updates, the campaign it came from, the country and a hash of your IP address. Download link reminder: if you ask us to email you the computer download link (macOS or Windows) from another device, including from the notice on the download page when you open it on a phone, we store the email, language, campaign, country and a hash of your IP address, and send one email with the link through Resend. We store an email only if you type it into a form. Refund requests: the form sends your email, order ID, reason and message to our support inbox, with the license key cut to its last four characters; in our own records we keep only the email it came from and the reason. Campaigns and affiliates: if you send a campaign or program form, we store your email, name, the link or note you submit, the country and a hash of your IP address; affiliate partners also have a payout method and note on file. License activations: each time a machine is activated, reactivated or deactivated, we record the machine name, the country, a hash of the IP address and whether it happened in the app, in your account or by us. Records in this section are kept until you ask us to delete them. Phone-app launch list: if you leave your email on the phone-app page (mxterm.net/link) to be told when the phone apps launch, we store the email, the phone you chose, your language, the campaign it came from, the country and a hash of your IP address. We email you only about that launch, with an unsubscribe link in every email; we send no confirmation email. We keep the address until you ask us to delete it, and if you unsubscribe it stays only on a do-not-email list.
Payments
Payments are processed by Polar, our merchant of record. Payment card data never passes through our servers. When you start a checkout we also give Polar an internal checkout id, a random visitor id and short labels (any referral code, ad click id and where you came from), so the order can be matched to its source.
Your email is used to send your license, deliver receipts, send sign-in links and codes, and let you access the account portal. We email you about your purchase and license, and may send a notice about an app update. We don't send marketing email unless you opt in.
How long we keep records
Web server access logs are kept for 14 days. Download, visit (including visits to the phone-app page) and checkout records, including the IP addresses and Google Analytics IDs in them, are deleted automatically after 180 days, or sooner if you ask us to. None of this data is sold.
Purchase and license records
We keep your purchase, license and activation records for as long as your license exists, because they are what lets you reinstall and reactivate. If you ask us to delete your data, we remove the personal data in them.
Data deletion requests
You can ask us to delete your personal data at any time. Write to us at the email below. You can also delete your MXterm account yourself, at any time: in the phone app, or at mxterm.net/account/delete. That removes the account at once (sign-ins, linked devices, notifications, shares); we keep order and licence records because the law requires it, and a licence key you bought keeps working.
Where your data is processed
Our servers run in France, in the EU, hosted by Contabo. mxterm.net is served through Cloudflare, which handles every request, including its IP address, to deliver and protect the site. Payments are processed by Polar. Email is sent through Resend. We receive internal order and activation alerts through Telegram; a purchase alert includes the buyer's email, country, IP address and browser. Website visit data, any purchase events our server sends, and app usage events sent to Google Analytics are processed by Google, including in the United States. The coordination and relay servers of the experimental network feature run on AWS in Singapore.
Children
MXterm Pro is a tool for developers and professionals, and is not directed at children under 13.
Questions about privacy or want us to delete your data? Write to support@mxterm.net.
Ask AI about MXterm Pro
Open a live answer in ChatGPT, Claude or Perplexity, based on this page. The assistant writes it, not us, so check the sources it cites.
Question sentWhat does MXterm Pro measure to improve the app, and how do I turn it off?