Privacy policy
Last updated 1 October 2026 · Applies to TableDI 2, to tabledi.com, and — in section 10 — to the previous app, TableDI 0.0.9
The short version. TableDI 2 reads and processes your files on your Mac. We never receive your files, your tables, your results or your AI key. The app connects to our license service at tabledi.com (license checks once you have a key, and a daily install check-in), to GitHub (to check for updates), to our event counter at tabledi.com (anonymous usage events) and — only if you set one up — to your own AI provider. The check-in and the usage events share one switch. If you buy a license, we also keep your email address and the order.
1. Your data stays on your machine
TableDI 2 is a desktop application. Its engine runs inside the app and only accepts connections
from your own Mac: it listens on 127.0.0.1, behind a secret that changes every time
the app starts. Everything the app keeps is on your disk:
- The app's own folder,
~/Library/Application Support/TableDI 2/: the engine's data (your jobs, periods and history),settings.json(with no keys in it), logs for the last seven days, your license file if you activate one, and a random install id. - Your AI key, if you add one: encrypted with the macOS Keychain before it is written
to disk. It is not in
settings.json, not in backups, and not in the diagnostics bundle. - Backups: once a week (on by default) a
.tdbk2file in~/Documents/TableDI 2/Backups/— the engine's data and your job settings, without the AI key. - Your source files stay wherever you keep them, and deliveries are written to the folder you choose, or handed to your own mail app.
You can back up, move or delete any of it. We have no copy and no way to get one, and there is no cloud account it could be synced to.
2. Where TableDI 2 connects
Every request the app makes to the internet goes through one place in the app, and only to the destinations below. Settings → Where this app connects lists them, and each request is written to the network log in the app's log folder — the time, the destination, the purpose, the size and the result, never the content.
a. Our license service — tabledi.com
| When | What is sent | Can you switch it off? |
|---|---|---|
| About once a day, free or paid (the install check-in) | A SHA-256 hash of your Mac's hardware id, the app version, the platform (for example
darwin-arm64), and whether a license is active (free /
paid). |
Yes — it shares its switch with the anonymous usage events (c). |
| When you click Activate or Move to another machine | Your license key, the same hashed machine id, and the app version. | It only happens when you click. |
| With an activated key: about every 30 days (every 6 hours while it keeps failing) | Your license key, the hashed machine id, and the app version. | No — this is what keeps a license valid. If the app can't reach us for more than 30 days after the last successful check, it works as the free version until it can. |
The hash can't be turned back into your hardware id and isn't linked to a name or an email address. The server also sees the request's IP address, as any web server does.
b. The update check — github.com
About 30 seconds after launch and then once a day, the app fetches a small file describing the
latest release (latest.json) from TableDI 2's public release repository on GitHub.
Nothing about you is sent beyond what any web request carries — your IP address and the app's
user agent — and GitHub's own privacy policy applies. The app never downloads or installs a new
version on its own; when an update file is fetched, it comes from GitHub (or through the
gh-proxy.com mirror, which is off by default) and is checked against the SHA-256 in that file.
Switch: Settings → Where this app connects → "Checking for a new version".
c. Anonymous usage counts — tabledi.com/_event
So we can tell whether people get from a first job to a second period, the app records a few coarse events and sends them in batches — every 20 events or every 5 minutes, and once when you quit. Each event has a name (first launch, a one-shot task done, a job saved, a first period run, a first delivery, a second period done, a lifetime card shown, a license activated, history opened, one job handed to another, and a daily heartbeat), a random install id that is not the machine id, the app version, the platform, the interface language, and a few coarse properties such as a row-count range or which lifetime card was shown. No file names, paths, table contents or job names. Our server adds the country the request came from. If it can't be reached, up to 1,000 events wait in a local file and are sent later.
Switch: the checkbox on the usage-events row in Settings → Where this app connects. While it's off, nothing is recorded, stored or sent — and the daily install check-in (a) stops too.
d. Your AI provider — only if you set one up
AI is optional. Without a key, TableDI 2 sends nothing to any AI provider. With a key, the app
calls the address you entered in Settings → AI (by default
https://api.openai.com/v1) directly from your Mac, with your key. What it sends:
- Drafting a job: your one-sentence goal, and for each file its name, its column names and its first 50 rows (text cells cut to 40 characters; amounts left as they are). Never a whole sheet.
- Explaining an exception: the two sides of that row, the column names, and how many rows have the same cause this period and last period.
- Suggesting a rule: up to 20 sample rows of one kind of exception, and your current rule steps.
- The one-line preflight summary: counts and column names only — no rows.
The preflight summary and the exception explanation cards appear on their own once a key is set; each has its own switch in Settings → AI. We're not in the middle of any of these calls and never see the key, the request or the answer; your provider's own terms and privacy policy apply. The network log records each AI request's destination and size.
e. Nothing else
TableDI 2 has no crash reporter and uploads no crash data. If something goes wrong, Settings → Export a diagnostics bundle writes a zip to your desktop: the last seven days of logs, your settings without any key, and machine details (version numbers, platform, language, memory, and the path of the app's folder). It reaches us only if you attach it to an email yourself.
3. Purchases
TableDI 2 licenses go on sale soon. When you buy one, we store your email address, the order number, the plan, the amount and the payment status. We use the email to identify your order for support, resends and refunds — not for marketing. Payment is processed by Stripe via our payment provider; card details are entered on their page and never reach us. If you write to us asking to be told when licenses open, we use your address for that one reply.
4. The website, tabledi.com
- Analytics. Every page loads two cookieless analytics scripts: Vercel Web Analytics,
served from tabledi.com itself (
/_vercel/insights/script.js), and Cloudflare Web Analytics, loaded fromstatic.cloudflareinsights.com. They count page views, referrers, and the rough location and device type of visitors, without cookies or cross-site identifiers. Loading Cloudflare's script means Cloudflare sees your IP address, as any server you connect to does. - Fonts are served from tabledi.com; no third-party font service is contacted.
- The free tools under /tools/ process your files in your browser; the files are not uploaded.
- Downloads. Download buttons link straight to the files on GitHub, which sees the request. When our own download counter is running, a click also tells it which build and version you picked, and it records the page you came from (with any campaign tags), your country, your browser and your IP address, so we can count downloads.
- The purchase page talks only to our own license server, through tabledi.com.
- “Tell me when it's ready”. If you're on Windows, the site may offer to email you when TableDI 2 for Windows ships. If you leave your address there, we store the address, the language of the page and the time — not your IP address or browser — and use it for that one email only. Once it has gone out, we delete the list. You can ask us to delete your address before then (section 7).
5. What we never do
- We don't sell, rent or share your personal data.
- We don't train anything on your data — we don't have your data.
- We don't run advertising or behavioral tracking, on the site or in the app.
- We don't require an account, so we hold no password of yours.
6. How long we keep things
- Check-ins and usage counts — kept for product statistics; they carry no name, email address or file content.
- Orders and licenses — for as long as the license is valid, plus the period required for accounting and tax records.
- The Windows notification list — until that one email has gone out, then deleted.
- Server logs — rotated regularly.
- On your Mac — the app deletes its own logs after seven days; everything else stays until you delete it.
7. Your rights
If you're in the EU/EEA or the UK, the GDPR gives you the right to access, correct, export, or delete the personal data we hold about you, and to object to processing. Practically, the only personal data we're likely to hold is the email address attached to a purchase.
Email us and we'll act on it. We'll ask you to write from the address on the order, so we don't hand someone else's order details to the wrong person. Deleting the order record also removes our ability to resend or refund that key, so we'll say so before doing it.
Our lawful basis is contract performance for purchase data and license checks, and legitimate interest for the install check-in and the usage events — both can be switched off in the app.
8. Children
TableDI is a tool for professional work and is not directed at children under 16.
9. Changes
If we change what we collect, we change this page and update the date at the top. Since the collection lives in the application, a change also means a new release — so the version you have keeps behaving the way the policy did when you installed it.
10. TableDI 0.0.9 (the previous app)
If you still use TableDI 0.0.9, this is what it sends. It's a separate app with its own settings; nothing here changed on 11 September 2026.
- Data folder:
~/Library/Application Support/tabledi-desktop/on macOS,%APPDATA%\tabledi-desktop\on Windows. - Startup ping on launch and roughly every six hours: a SHA-256 hash of the machine's hardware UUID, the app version, the platform, and whether a license is active. No file names, table contents, license key or account. The receiving server also records the request's IP address.
- Crash reports to Sentry, our error-tracking provider, scrubbed before sending: the user object is deleted, and email addresses, long tokens and your home directory path are redacted out of messages, breadcrumbs and stack data; cookies and request headers are dropped.
- Switch for both: Desktop settings → Privacy. It takes effect at the next launch.
- License activation and release send the license key and the same hashed machine id. An activated 0.0.9 license is verified locally against a signed file.
- AI uses your own key and calls your provider directly from your machine, with the prompt and the data you selected for that request.
11. Who we are, and how to reach us
TableDI is published by 上海鑫沃克斯信息科技有限公司, a company registered in Shanghai, China. (We give the name in its registered form rather than a translation, so it matches company records.)
Privacy questions and data requests: tabledi@thingworks.com.cn, or see support.