This policy explains what personal information OpenTex processes, why, who helps us process it, how long we keep it, and the choices and rights you have. It is written to meet Korea's Personal Information Protection Act (PIPA) and, for visitors from the European Economic Area and the United Kingdom, the GDPR.
- Service
- OpenTex, a free browser-based LaTeX editor at www.opentex.ai
- Operator (controller)
- Sangho Yun, an individual based in the Republic of Korea (not a company)
- Contact
- sanghoyun@postech.ac.kr
At a glance
- You can use OpenTex without an account. Projects you create without signing in (with their version history, comments and chat) and your paper library are stored in your browser, and LaTeX always compiles in your browser. We don't receive them.
- Google sign-in is optional. If you sign in, we receive your Google account ID, email address, name and profile picture, and the projects you create in your account are stored on our servers, so that they open on any device you sign in to.
- You can share a project in your account with people you invite. Its members see its content and each other's names and activity in it; owners and editors also see members' Google email addresses.
- Our hosting provider keeps standard request logs and records cookieless, aggregate usage statistics, and errors are reported to our error monitoring service.
- To see where visitors stop between the home page and a compiled paper, your browser sends Mixpanel a few anonymous usage events, such as “the editor opened” or “a compile finished”. They carry a random ID that lasts one visit, and no cookies, account details or anything you write. Global Privacy Control or Do Not Track turns them off.
- While you aren't signed in, Mixpanel also records how pages are used, such as clicks, scrolling and mouse movement, so that we can see where visitors get stuck. Except on the home page and the legal pages, text and images are left out before anything is sent, so nothing you write reaches Mixpanel. It sets no cookies. It doesn't run if your device's time zone is in Europe, and Global Privacy Control or Do Not Track turns it off.
- We don't sell personal information, show ads or use advertising trackers.
- You can download and delete your projects in the app. To get a copy of the other information we hold about you, or to delete your account, email sanghoyun@postech.ac.kr.
- If a project you work on is linked to a GitHub repository, your review activity in it (suggestions and decisions, comments, resolved threads and named versions) is written to that repository with your name, your email address and, if you connected GitHub, your GitHub username. Anyone who can read the repository can see it, and it stays in the repository's history.
1. Why we process personal information
We process personal information only for the purposes below, on the legal bases shown.
| Purpose | Information | Legal basis (PIPA) |
|---|---|---|
| Delivering the website, the editor and the TeX Live file service, and keeping them secure and working (troubleshooting, preventing abuse) | Request logs, error reports | Performing our agreement with you (Art. 15(1)(4)); our legitimate interest in a secure service (Art. 15(1)(6)) |
| Signing you in and identifying your account | Google account information, session records | Art. 15(1)(4) |
| Connecting your GitHub account when you choose Connect GitHub | The GitHub authorization code and tokens, passed through and not stored | Art. 15(1)(4) |
| Storing the projects in your account and keeping them in step between your devices and their members | Data of projects in accounts, live updates | Art. 15(1)(4) |
| Sharing projects: invitations, membership and roles, and showing members to each other | Display name, Google email address, invited email addresses, membership records | Art. 15(1)(4); an address invited before its owner has joined: Art. 15(1)(6) |
| Keeping shared projects safe (records of sharing actions, blocks, rate limits) | Account IDs, actions and their times, invited email addresses | Art. 15(1)(4); Art. 15(1)(6) |
| Writing the review record of a project linked to GitHub to that repository | Review activity with display names, email addresses, GitHub usernames and user IDs | Consent (Art. 15(1)(1), Art. 17(1)(1) and Art. 28-8(1)(1)), given by confirming the notice before taking part |
| Confirming the GitHub account you connect while signed in | GitHub username and user ID | Art. 15(1)(4) |
| Measuring usage and page performance in aggregate, to improve OpenTex | Usage and performance data, anonymous usage events | Art. 15(1)(6) |
| Seeing how visitors who aren't signed in use the pages, through recordings, to find what gets in their way | Recordings of pages (text and images left out, except on the home page and the legal pages), page addresses, the visit's random ID, IP address, browser and device information | Art. 15(1)(6) |
| Answering your messages and requests, including privacy requests | Your email address and message | Art. 15(1)(4); legal obligations (Art. 15(1)(2)) |
| Receiving and answering feedback reports, showing you the answers and status, and limiting abuse of the report form | The contents of a report and what you add to it, our team's replies, the report's status, your account's name and email address or the address you add, the hash of a guest's token, a keyed hash of your IP address | Art. 15(1)(4); Art. 15(1)(6) |
| Complying with the law | As the law requires | Art. 15(1)(2) |
If we want to use personal information for a new purpose, we will update this policy first and, where the law requires it, ask for your consent.
2. What we process, feature by feature
Projects you create without an account stay in your browser and don't reach us unless you move them to your account. Projects in your account are stored on our servers, so that they open on any device and can be shared. This is what we process, for each feature. We don't ask for sensitive information. Your projects contain whatever you write in them, though, and what is in a project in your account is stored with us and seen by its members, so think twice before writing sensitive information about yourself or others into a project.
Using OpenTex without an account
- We don't create an account or profile for you, and the app stores nothing about you on our servers (unless you send a feedback report, or someone invites your email address to a project, see Sharing a project). Like any website, though, our host, Vercel, receives your IP address, browser and device information (User-Agent), the address you request including its query (for example the random project ID in
/editor?project=…), the referring page, the cookies sent with the request, and the time. Vercel keeps these request logs for a short period. - Vercel derives your country from your IP address so that visitors from Korea who open the home page see the Korean version. We don't store the country.
- Vercel Web Analytics and Speed Insights run on every page. They record the page address and route, the referrer, filtered query parameters, country, region and city (derived from the IP address), operating system, browser, device type, network speed, and page performance measurements (Web Vitals). They set no cookies: visitors are counted by a hash of the request, which is discarded after 24 hours.
- When a page or one of our server functions runs into an error, a report goes to Sentry, our error monitoring service; a sample of page loads and requests also sends performance measurements. A report holds the error and where in the code it happened, the page address without its query, browser, operating system and device information, and the steps just before it, such as pages opened and requests made. We have set Sentry not to collect account details, cookies, request headers or bodies, or the values the code was working with, and not to record sessions. Sentry receives your IP address with each report, like any web request.
- Error reports and usage statistics never include the part of an address after “#”, where invite links carry their token; the anonymous usage statistics take only campaign tags (
utm_…) from it. Recordings of pages don't run on invitation pages.
Anonymous usage statistics (Mixpanel)
To learn where visitors stop on the way from the home page to a compiled paper, and so what to improve, your browser sends a few usage events straight to Mixpanel, whether you are signed in or not. OpenTex sends them itself, without Mixpanel's script. These are all of them:
| Event | When | What it says |
|---|---|---|
page_view | A page opens | Which page (the home page in English or Korean, the project list, the editor, the sign-in page, or another page), the kind of device (phone, tablet or computer), whether it is an app's own browser, and the browser's language (such as “ko”) |
start_clicked | A link into the app is clicked on the home page | Which link (the first screen, the import section, pricing, the header, the footer or the closing section), and the kind of device |
phone_sheet_shown, phone_sheet_share, phone_sheet_copy, phone_sheet_continue | On a phone, the note that OpenTex is made for a computer opens, and its link is sent or copied, or the visitor goes on | Nothing more |
inapp_notice_shown, inapp_open_browser | In an app's own browser, the notice to open the page in a browser is shown, and its button tapped | The app's name (such as KakaoTalk or Instagram) |
project_created | A project is created on the project list | What from (a blank project, the example paper, a ZIP file, one of several projects in a ZIP file, or a copy), and whether in an account |
editor_opened | The editor opens a project | Whether it is a project in an account, and whether it opens in the Visual view |
compile_result | A compile ends | Whether it made a PDF, the engine (pdfLaTeX or XeLaTeX), the TeX Live release, whether it was the visit's first compile, how many seconds it took and, if it failed, why: errors in the document, an engine that stopped or didn't answer, or TeX Live files out of reach. If the document had errors, also the kind of the first one (such as a missing image, an unknown command or unbalanced braces), never its text or the names in it |
save_prompt_shown, save_prompt_clicked | The card that suggests saving a project in this browser to an account opens, and its main button is used | Which step: signing in, or moving the project |
signin_started, signin_completed | A Google sign-in starts, and a session comes of it in the same visit | Which page it started on (the sign-in page, an invitation page or the project list) |
invite_created | Someone creates an invite link or an email invitation | Which of the two |
- With every event: the visit's random ID, the time, the app version, the domain of the site you came from (such as
www.google.com, never the page's address) and the campaign tags (utm_source,utm_medium,utm_campaign,utm_term,utm_content) of the address the visit started at, if it had any; and, while a recording is under way, its ID, so that the event shows in it. - Never sent: page addresses with their queries and fragments (so no project IDs or invite tokens), project and file names, anything you write, names, email addresses or account IDs. Signed in or not, nothing links the events to your account. No cookies are set or read.
- The visit's ID is made at random in your browser and kept in that tab's sessionStorage (see Cookies and browser storage). It is deleted when you close the tab and replaced after 30 minutes without an event, so visits can't be linked to one another. As the events say nothing more about who sent them, we can't pick out the events of a particular person, also when you ask us to under Your rights.
- The request itself: like any web request, each request reaches Mixpanel with your IP address and your browser's User-Agent. OpenTex asks Mixpanel not to derive a location from the IP address, and Mixpanel doesn't store IP addresses. It keeps the User-Agent with each event, for as long as the event.
- Turning it off: with Global Privacy Control or Do Not Track on in your browser, OpenTex sends no usage events and stores no ID. Automated browsers don't send them either. A content blocker can block them too; OpenTex works the same.
Recordings of how pages are used (Mixpanel)
To see where visitors get stuck, OpenTex records how pages are used while you aren't signed in. Mixpanel's recorder, which OpenTex serves, runs in your browser and sends what it records straight to Mixpanel about every 10 seconds, so a shorter visit isn't recorded. We watch the recordings in Mixpanel.
- What it collects: the page's layout and how it changes; mouse movement, clicks, scrolling, text selection and window size; each page's full address, with its query and the part after “#” (such as the project ID in
/editor?project=…); the visit's random ID (see Anonymous usage statistics); and, as with any web request, your IP address and your browser's User-Agent. Unlike the usage events, its requests can't carry OpenTex's request not to derive a location from the IP address. - What stays out of it: except on the home page and the legal pages, your browser masks text before anything is sent, and leaves out images and every element with an attribute that could hold a name or your content, such as a label, a tooltip or the address of a link. Project and file names, anything you write, compiled PDFs and compile logs aren't sent; what remains is where things are on the screen and how long the text is. Input fields are masked on every page. The home page and the legal pages, which show the same to everyone, are recorded with their text and images. Console messages and network requests aren't recorded.
- When it doesn't run: while you are signed in, or in a browser that holds a sign-in session (it stops when you sign in); on invitation pages, whose addresses hold a token; when your device's time zone is in Europe or unknown; with Global Privacy Control or Do Not Track on; in automated browsers and for crawlers; in a browser too old to apply the rules above.
- No cookies, and no ID of its own: it stores nothing in your browser. It goes by the visit's random ID, so that one visit's recordings can be seen together and with its usage events, and nothing links one visit to the next. As recordings say nothing more about who made them, we can't pick out the recordings of a particular person, also when you ask us to under Your rights.
- Turning it off: turn on Global Privacy Control or Do Not Track in your browser, or block it with a content blocker; OpenTex works the same.
Microsoft Clarity, on 2026-11-05: for a few hours on that day, OpenTex used Microsoft Clarity for the same purpose while you weren't signed in, with text and images masked except on the home page and the legal pages. OpenTex no longer uses it. If you visited then, Clarity set cookies: OpenTex removes _clck and _clsk on your next visit, and those on Microsoft's own domains (MUID, CLID, SM, MR, SRM_B, ANONCHK) stay until they expire, up to 13 months, or you delete them. Under Clarity's terms Microsoft is independently responsible for what it collected then, and can use it for purposes in the Microsoft Privacy Statement, including advertising.
Guest projects stay in your browser
- For the projects you create while signed out (guest projects), the project names and files (including images), version history, comment threads and replies, labels, the review log, tracked-change suggestions, settings, the project chat, and the GitHub repository and branch you sync with are stored in your browser (IndexedDB and localStorage). We can't see them. Signing in doesn't send them anywhere: a guest project goes to your account only if you choose “Move to my account” (see Projects in your account below).
- pdfLaTeX and XeLaTeX run as WebAssembly in your browser, for every project, and the PDF stays in the tab's memory. Your manuscript is not uploaded to compile.
TeX Live files
When a document needs a TeX Live file that isn't in your project, such as a class, package, font or format file, your browser requests it by file name from this site's /texlive service. If your document refers to a file that is missing from the project (for example \input{chapter3}), that file name is requested too. File contents are never sent. These are ordinary web requests (see above). Our server fetches public package archives from TeX Live mirrors, and the engines' format files from GitHub; those requests carry no information about you.
Google sign-in (optional)
- From Google, when you sign in: your Google account ID, email address and whether it is verified, your name, and your profile picture URL. We request nothing else from Google (see Google user data).
- Created by the sign-in service (Supabase Auth): when the account was created and last signed in, and session records that include your IP address and browser information.
- In your browser: a session cookie (see Cookies and browser storage).
- The sign-in page, the invitation pages and the prompt to accept invitations that wait for you load Google's sign-in script as soon as they open, before you click anything, so Google receives your IP address and browser information under its own privacy policy. While you are signed in, your profile picture is loaded from Google's servers; OpenTex shows it only to you, in the account menu.
Projects in your account (while you are signed in)
- While you are signed in, new projects and imported ZIP files are created in your account, and they open on any device you sign in to.
- Stored on our servers (Supabase) for each project in your account: its ID and name; the path and full text of each text file, kept as a log of changes that is regularly merged into a snapshot of the whole document; the images and other files added to it; the compiler and main document settings; comment threads (the file, the line, a short quote of the text the comment points to, the author, and when it was created and resolved) and their comments; suggestions (the proposed change, its author, and who accepted or rejected it and when); the review log (event type, author name, time and message); named versions (labels and notes); the project chat; and its members and invitations (see Sharing a project). Each change and record is stored with the account that made it. Review log messages can include short excerpts of comments and suggestions, file names, names of imported ZIP files, citation keys, and GitHub repository and branch names. Your display name, the name on your Google account when you first signed in, is kept in your profile.
- Not stored on our servers: version history (its snapshots stay in the browser where they were made), the auto-compile setting, the GitHub repository and branch you sync with, your GitHub token, and your paper library.
- Your browser keeps a copy of your account's projects, tied to your account, so that they open quickly and keep working offline; changes made offline are sent once you are back online. Signing out deletes this copy from the browser, and if some changes haven't reached our servers yet, OpenTex asks you first. Guest projects, your paper library and your GitHub token stay.
- API tokens and AI agents (MCP): if you create an API token in the account menu, we store a hash of it (never the token itself), its name, what it may do (read only, also comment and suggest, or also accept and reject suggestions; you can change this later), and when it was created, last used and revoked. Whoever holds the token, such as a script or an AI agent you connect through our MCP endpoint, can read the projects you are a member of: their files and their review records (comments, suggestions and decisions, the review log and named versions, with display names), until you revoke it or are no longer a member. To answer, our server reads the project's document. A token you allow to comment and suggest can also, as you and within your role, open, answer and resolve comment threads and propose suggestions; these are stored and shown to the project's members like the ones you write in the app, and withdraw your own suggestions. A token you allow to accept and reject can also, as you and within your role, decide suggestions: accepting one changes the file, as when you accept it in the app. What the tool or agent does with what it reads is up to you and its provider. Your tokens are deleted with your account.
- Projects that the earlier cloud backup copied to your account are listed as “Saved before the update”. Opening one turns it into a project in your account, once; the earlier copy isn't deleted.
Sharing a project
- Roles: owners and editors of a project in an account can invite people as editors, reviewers or viewers; an invitation never makes anyone an owner. Viewers read, compile and download the project; reviewers can also comment, resolve comments, suggest changes and write in the chat; editors can also change the files, accept or reject suggestions and invite people; owners can also manage the members, rename the project and delete it.
- What members see: the project's files and every change as it happens; who is online, the file each of them has open, and their cursor and selection; comments, suggestions and decisions, the review log, named versions and the chat, each with its author's display name; and the member list, with each member's display name, role, when they joined and whether by link or by email. Owners and editors also see members' Google email addresses and the addresses of pending email invitations (editors only those they sent). Your profile picture isn't shown to other members.
- Invite links: a link carries a random token after the “#” of its address, the part that browsers don't send to servers. The invitation page takes the token out of the address bar at once and keeps it in that tab for up to an hour, so that it survives signing in; it goes to our database only to show and to accept the invitation, and we store only a hash of it. Whoever opens the link and signs in with Google sees the project's name, the role, the display name of the person who made the link and when the link expires, and joins only by choosing “Join the project”. The person who makes a link chooses when it expires (within a year, or never) and how many people may use it, and can withdraw it.
- Email invitations: owners and editors can invite a Google address. We store the address, also when nobody has an OpenTex account with it yet, and compare it with the Google-verified address of each person who signs in: the invited person joins the project when they next sign in with Google using that address. OpenTex sends no email; the person who invites you lets you know. An invitation expires after 30 days unless it is accepted or withdrawn first. If someone invited your address, it was they who gave it to us; you can ask us about it or have it deleted (see Your rights).
- Live updates: in a project with two or more members, the browser of each member who has it open connects to Supabase Realtime, on private channels that only the project's current members can join. Our database sends document changes, new review records and chat messages there, and each browser tells the others that its member is online, which file they have open and, while others are there, where their cursor is. A project with no other members uses no live connection.
- Keeping shared projects safe: the database records sharing actions, each with the account and the time: invitations made and withdrawn (with the address of an email invitation), joins, role changes, removals, people leaving, and ownership passed on when an account is deleted. Owners and editors have access to this record. When an owner removes someone, that account is also blocked from rejoining through any invitation until an owner lifts the block, unless the owner chooses not to block it. Counters of each account's recent requests enforce rate limits, and we can turn off live connections for an account that abuses them.
- Compaction and maintenance: when a project's log of changes grows long, a member's browser asks our server to merge it into the snapshot. A daily job on our server merges logs too, deletes old rate-limit counters and invitations, and removes the stored files of deleted projects. For this our server, hosted by Vercel, reads the project's document with a key that only the server holds.
GitHub sync (optional)
- Connect GitHub (where this site offers it) links OpenTex's GitHub app instead of a token. Our server sends you to GitHub with a random value tied to your browser by a short-lived cookie; when you approve, GitHub sends you back with a one-time code, which our server exchanges, using the app's secret, for an access token and a refresh token. Our server hands the tokens to your browser once and doesn't store them. Your browser keeps them in localStorage, with your GitHub username and profile picture address, which it asks GitHub for. When the access token is about to expire, your browser sends the refresh token to our server, which gets a new pair from GitHub; “Disconnect” deletes the tokens from your browser and has our server ask GitHub to revoke the access token. GitHub lets the app work only in the repositories you install it on, with the access to their contents that it asks for.
- A personal access token you enter instead is saved in your browser's localStorage when you push or pull, and never passes through our servers.
- Either way, your browser talks to GitHub's API (
api.github.com) directly to push and pull, and your files never pass through our servers. Push uploads your changed files and the commit message to your repository; pull downloads the branch into your browser. With Connect GitHub, your browser also asks GitHub which repositories the app is installed on. - Sync results (repository and branch names, commit IDs, GitHub error messages) are written to the project's review log; in a project in your account, that log is stored on our servers and seen by the project's members. The repository and branch you sync with are saved in this browser only, also for projects in your account.
Projects linked to GitHub
- Who decides: the owner of a project in an account can link it to a branch of a GitHub repository, and unlink it again. Who can read the repository is up to its owner and its visibility; GitHub hosts it. Linking a public repository, or an internal one that everyone in a GitHub enterprise can read, needs the project owner's explicit confirmation; if a linked repository becomes public later, writing stops until the owner confirms again, and members see the notice again.
- What is written: each suggestion and its acceptance or rejection, comment, resolved thread, named version and review round, with its time, the file and line, the text of the comment or suggestion (and the text a thread quotes), the commit it led to, and the person who made it: their display name, their email address and, if they connected GitHub, their GitHub username and user ID. Each person's entries also carry an identifier that links them within that repository; it isn't their OpenTex account ID. Chat messages, the member list and invitations are not written.
- Where: in the file
.opentex/review/log.jsonl(every event, with email addresses), in the fileREVIEW.md(an overview with names and GitHub usernames but no email addresses), and in commits. Each accepted or rejected suggestion gets a commit of its own: its author is the person who decided it, its committer the member whose browser pushed it, and its message names who suggested it and who decided it, with their email addresses. For people who connected GitHub, the author, committer and co-author lines (Co-authored-by) use their GitHub noreply address (ID+username@users.noreply.github.com); for others, the author and committer show their email address, and there is no co-author line. - When and how: automatically, from the browser of an owner or editor who has GitHub connected and the project open, who may be someone other than the person who acted: decisions right away, other activity shortly after, together with the document changes made since the last push. Our server doesn't write to GitHub.
- Before you take part: OpenTex shows you a notice of all this before you can suggest, comment or decide anything in a linked project, and on an invite link's page before you join. Until you confirm it, you can still read and compile the project, but not take part.
- Earlier history: when the owner links a project, its review history from before the link can be written too, with names only: without email addresses or GitHub usernames.
- Your GitHub identity: when you connect GitHub while signed in, our server asks GitHub once to confirm that the connection is yours, and saves your GitHub username and user ID in your profile, where the members of your projects can see them. The token isn't stored on our servers.
- Our copy: our database keeps this record, with each person's name, email address and GitHub details as they were at the time, so that every push can write the whole record again; the project's owners and editors can read it there. It also keeps who confirmed the notice, and when.
Paper library and reference checks (optional)
- The PDFs you add, their metadata, notes, tags and highlights are stored only in your browser.
- To look up metadata, your browser sends the DOI, arXiv ID or title you enter, or a DOI or arXiv ID found in a PDF you add, directly to Crossref, DataCite or OpenAlex. “Verify refs” sends the DOI or title of every entry in your
.bibfiles as soon as you open it. PDFs and their text are never sent. These services also receive your IP address and browser information.
Feedback reports (optional)
- What a report contains: the category you choose, your message, the page you were on (without its query), your browser's User-Agent, your window size and the app version. It never includes your documents, file names, project IDs or compile logs, unless you write them in your message. Nothing is sent until you press Send.
- Who sent it: if you are signed in, the report is linked to your account; your account's name and email address are read each time the report's message in Slack is posted or updated (when you add to the report, and when our team replies or changes its status) and aren't stored with it. If you aren't signed in, we receive an email address only if you add one, and we use it only to reply.
- The thread: a report becomes a thread you can read and add to in the Feedback panel. We store your report, what you add to it, our team's replies, its status (open, in progress or resolved) and when you last read it. Replies are shown as coming from the OpenTex team. Comments our team writes to each other in Slack aren't stored with the thread and are never shown to you.
- Getting back to it: if you are signed in, your reports are linked to your account and you see them wherever you sign in. If you aren't, your browser makes a random token when you first send a report, keeps it in localStorage (see Cookies and browser storage) and sends it with the panel's requests; we store only its SHA-256 hash, with the report. So answers appear only in that browser, clearing the site's data ends your way back to the thread, and an email address you add is the only way we can reach you anywhere else. A browser with both an account and a token shows both sets of reports. Signing out leaves the token and takes your account's reports off the screen.
- Checking for answers: if you are signed in or have that token, your browser asks our server for your reports when a page with the Feedback button loads and when you open the panel. While a report is still open it asks again from time to time, and only while the tab is showing. With neither, it asks nothing.
- Where it goes: the report and what you add to it are stored in our database (Supabase) and delivered to our team through Slack, with the sender's name and email address where there are any. Our team replies and changes the status from Slack, where those stay too. The people in the channel it is posted to can read all of it.
- Limiting abuse: we don't store your IP address with a report. We keep a keyed hash of it (HMAC-SHA256; of an IPv6 address, its first 64 bits only) and count recent reports by that hash and by account, to limit how many can be sent. What you add to a report and the panel's requests are limited the same way, and by the token's hash, with counters that are normally deleted within a few hours.
- Deleting a report: we delete a report, with its thread, when you ask us to (see Your rights). When your account is deleted, the link between your reports and your account is removed, and their threads can no longer be opened from the panel. What was already posted to Slack, including the name and email address shown with it, stays there until we remove it by hand, which you can also ask us to do. When our team next replies to one of those reports or changes its status, its message in Slack stops showing them.
Email to us
If you email us, we receive your email address, your message and anything you choose to include.
Donations
Donations through GitHub Sponsors are handled entirely by GitHub; we never receive payment card details. Depending on your GitHub settings, we may see your GitHub username and sponsorship tier, and your email address if you choose to share it. We use this only to acknowledge your support.
3. How long we keep it
| Information | Kept until |
|---|---|
| Account information and session records (Supabase Auth) | You delete your account (email us). A session ends when you sign out or it expires. |
| Projects in accounts: files, document snapshot, settings, review records, chat, members | An owner deletes the project. Your membership ends when you leave or are removed. When you delete your account, a project shared with others stays with them (see How we delete it). |
| Projects saved before the update (the earlier cloud backup) | You delete them in the project list, or delete your account. |
| The log of a project's document changes | It is merged into the project's snapshot, and then deleted, as the log grows and in the daily maintenance run. |
| Invitations, including invited email addresses | 90 days after the invitation is accepted, withdrawn or expires (an email invitation expires after 30 days). A link without an expiry stays until it is withdrawn. A project's invitations go with the project. |
| Records of sharing actions and blocks | The project is deleted. A block also ends when an owner lifts it. |
| Rate-limit counters | Deleted after two days. |
| Live updates sent through Supabase Realtime | Kept by Supabase for a few days, then deleted automatically. |
| Review record of a project linked to GitHub, and confirmations of its notice, in our database | The project is deleted. When you delete your account, your name, email address and GitHub details in it are replaced. What was written to the repository stays there, under its owner's control and GitHub's terms. |
| GitHub username and user ID in your profile | You remove them, or delete your account. |
| Request logs (Vercel) | Deleted automatically after Vercel's log retention period, which is short and depends on the hosting plan. |
| Usage and performance data (Vercel) | Deleted automatically after the retention period of our hosting plan; we only see aggregate statistics. The hash used to count visitors is discarded after 24 hours. |
| API and sign-in logs (Supabase) | Deleted automatically under Supabase's log retention. |
| Error reports and performance measurements (Sentry) | Deleted automatically after the retention period of our Sentry plan. |
| Anonymous usage events (Mixpanel) | Deleted automatically two years after each event (Mixpanel's retention period). The visit's ID in your browser goes when you close the tab, and is replaced after 30 minutes without an event. |
| Recordings of pages (Mixpanel) | Deleted automatically 30 days after they are made (Mixpanel's retention period). |
| Feedback reports, with their threads and status | You ask us to delete them, or we no longer need them. Deleting your account only removes their link to it. What was posted to Slack stays until we remove it by hand. |
| Counters that limit what is added to feedback reports and the panel's requests | Deleted as later requests come in, normally within a few hours. |
| Your emails | Your request is resolved and we no longer need the message. |
| Data in your browser | You delete it. Its copies of your account's projects go when you sign out or remove a project from the device. We can't access it or delete it for you. |
If another law requires us to keep certain information for longer, we keep only that information, separately, for the required period and purpose.
4. How we delete it
- When a retention period ends or the purpose is fulfilled, we delete the information without delay.
- Electronic records are deleted so that they can't be restored by ordinary means. Deleting a project deletes everything stored with it on our servers: its document, review records, chat, members, invitations and records of sharing actions; its stored files are removed by the daily maintenance run. Copies already in members' browsers stay with them. Copies in our providers' backups disappear as those backups expire on the provider's schedule.
- Deleting your account deletes your profile and the projects that only you are a member of. A project you share with others stays with them: if you were its only owner, the remaining member with the highest role becomes its owner (among equals, the one who joined first). What you added to it (text, files, comments, suggestions, chat messages) stays in the project, no longer linked to your profile; entries of its review log keep the name they were recorded with, and copies already in members' browsers may still show your name. Invitations you made that are still pending are withdrawn.
- Leaving a project, or being removed from it, ends your access but doesn't remove what you added. The copy in a former member's browser stays readable to them until they remove it, and they may keep it as a personal copy.
- In a project in an account, comments, chat messages and the review log can't be edited or deleted, so every member sees the same record. Deleting a file takes it out of the file list but keeps its content in the project, so it can come back; files added to a project stay on our servers until the project is deleted. Text you delete within a file leaves the project's snapshot on our servers when the log of changes is merged into it.
- Deleting your account, or leaving a project, doesn't remove what was already written to a linked GitHub repository; only the repository's owner can remove it from the repository's history. When you delete your account, OpenTex replaces your name and email address in the review record it writes from then on. Leaving a project doesn't: your earlier activity stays in its record with your name and email address.
- We delete a feedback report, with its thread, when you ask us to. See Feedback reports for what deleting your account changes, and for what stays in Slack.
- We don't keep personal information on paper. Anything ever printed is shredded.
- You delete what is stored in your browser yourself (see Your rights).
6. Service providers
These providers process personal information on our behalf, only to perform the tasks below.
| Provider | Task |
|---|---|
| Vercel Inc. | Hosting and delivering the website, running server functions (the TeX Live file service, sign-in and session refresh, connecting GitHub and renewing its tokens, merging the document logs of projects in accounts, the daily maintenance and receiving and serving feedback reports), request logs, Web Analytics and Speed Insights |
| Supabase Pte. Ltd. | Sign-in and session management (Supabase Auth); the database and file storage that hold projects in accounts, their sharing and their review records, and feedback reports with their threads; live updates (Realtime) |
| Google LLC | Sign-in with Google (verifying your identity) |
| Functional Software, Inc. (Sentry) | Error and performance monitoring of the app and our server functions |
| Slack Technologies Limited | Delivering feedback reports and what is added to them to our team, and taking our team's replies and status changes |
| Mixpanel, Inc. | Anonymous usage statistics and recordings of pages: receiving and storing the usage events described in Anonymous usage statistics and the recordings described in Recordings of how pages are used, and the reports and playback we view of them |
Vercel, Supabase, Sentry, Slack and Mixpanel process personal information under their data processing terms. Google provides sign-in under its own terms and also processes your Google Account information as an independent controller under the Google Privacy Policy. If we change providers, we will update this policy.
7. International transfers
All of these providers process personal information outside Korea. The transfers to Vercel, Supabase, Google, Sentry and Slack are needed to provide the service you ask for, and we disclose their details here as PIPA Article 28-8(1)(3)(a) requires, so no separate consent is asked for. Mixpanel receives only the anonymous usage statistics and recordings of pages, which carry nothing that identifies you and which you can turn off; we disclose its details here in the same way.
The review record of a project linked to GitHub is also provided to GitHub, Inc. in the United States, with your consent: see Sharing with third parties.
Vercel Inc.
| Recipient and contact | Vercel Inc., privacy@vercel.com |
|---|---|
| Country | United States (requests may be served from the Vercel location nearest to you) |
| When and how | Every time you use the website, over encrypted connections (HTTPS) |
| Information | Request logs (IP address, browser and device information, requested address, referrer, time), cookies sent with requests, usage and performance data, the documents of projects in accounts while their logs are merged, GitHub's authorization code and tokens while you connect GitHub or renew its tokens, and feedback reports and what is added to them on their way to our database and Slack, with a guest's token in the requests that carry it |
| Purpose | Hosting and delivering the website, server functions, security and troubleshooting, aggregate statistics |
| Retention | Until our contract with Vercel ends. Request logs and usage data are deleted after the retention periods of our hosting plan; the visitor hash after 24 hours. |
| How to refuse, and the effect | Hosting is essential, so the only way to refuse is not to use OpenTex. You can block the analytics and performance scripts with a content blocker; OpenTex works the same. |
Supabase Pte. Ltd.
| Recipient and contact | Supabase Pte. Ltd., privacy@supabase.com |
|---|---|
| Country | Singapore, where the database is hosted (AWS region ap-southeast-1). Supabase and its subprocessors may handle some data in other countries, such as the United States. |
| When and how | When you sign in; while you work on a project in your account or one shared with you, as you make changes; when you share a project or someone invites you; when you send a feedback report or add to one, and when your browser asks for your reports. Over HTTPS, and encrypted WebSocket connections for live updates |
| Information | Account information (email address, Google account ID, name, profile picture URL, sign-in times), session records (IP address, browser information), projects in accounts (files, document log and snapshot, settings, review records, chat), members, invitations including invited email addresses, records of sharing actions, blocks, rate-limit counters, live updates, feedback reports with their threads and status, a keyed hash of the sender's IP address and the hash of a guest's token |
| Purpose | Signing you in, keeping your session, storing projects in accounts and keeping them in step between devices and members, storing feedback reports and their threads |
| Retention | Until you delete your account or the project is deleted (see How long we keep it); feedback reports until you ask us to delete them or we no longer need them; or until our contract with Supabase ends |
| How to refuse, and the effect | Don't sign in. Every editing feature works without an account, in guest projects; only projects in your account and sharing are unavailable. A feedback report reaches Supabase only if you send one. You can ask us to delete data already transferred, including an address someone invited. |
Google LLC
| Recipient and contact | Google LLC, privacy contact form |
|---|---|
| Country | United States |
| When and how | When you open a page with Google's sign-in button (the sign-in page, an invitation page, or the prompt to accept invitations that wait for you), where Google's sign-in script loads, and when you sign in with Google; directly between your browser and Google over HTTPS |
| Information | IP address, browser information and the page's address; your Google sign-in itself is handled by Google |
| Purpose | Verifying your identity with your Google account |
| Retention | As set out in Google's privacy policy |
| How to refuse, and the effect | Don't use Google sign-in; the script loads only on the pages that offer it. You can use OpenTex without an account. |
Functional Software, Inc. (Sentry)
| Recipient and contact | Functional Software, Inc. (Sentry), privacy@sentry.io |
|---|---|
| Country | United States |
| When and how | When the app or one of our server functions runs into an error, and for a sample of page loads and requests, over HTTPS |
| Information | Error reports and performance measurements (the error and where it happened, the page address without its query, browser, operating system and device information, the steps just before it), IP address |
| Purpose | Finding and fixing errors and slow pages |
| Retention | Until our contract with Sentry ends; reports are deleted after the retention period of our Sentry plan |
| How to refuse, and the effect | You can block the monitoring script with a content blocker; OpenTex works the same. Reports of errors in our server functions can't be refused separately. |
Slack Technologies Limited
| Recipient and contact | Slack Technologies Limited, privacy@slack.com |
|---|---|
| Country | Ireland, where Slack Technologies Limited is based. Slack and its subprocessors may handle data in other countries, such as the United States. |
| When and how | When you send a feedback report or add to one, and when our team replies to it or changes its status, or later if an attempt fails; from our server over HTTPS |
| Information | The report's category and message, what you add to it, its status, the page, browser information, window size and app version, and the sender: for a signed-in user the account's name and email address, for anyone else the email address they added, if any |
| Purpose | Delivering feedback reports and what is added to them to our team, and taking our team's replies and status changes |
| Retention | Until we remove the message from Slack by hand, or our contract with Slack ends |
| How to refuse, and the effect | Don't send a feedback report; you can email us instead. Everything else in OpenTex works the same. |
Mixpanel, Inc.
| Recipient and contact | Mixpanel, Inc., compliance@mixpanel.com |
|---|---|
| Country | United States (Mixpanel's US data centers, on Google Cloud) |
| When and how | While you use OpenTex, about a second after an event or when you leave the page; while you use a page without being signed in, recordings about every 10 seconds; directly from your browser over HTTPS |
| Information | The usage events described in Anonymous usage statistics and the recordings described in Recordings of how pages are used, with the visit's random ID; and, as with any web request, the IP address and browser information (User-Agent) each request comes with. Mixpanel doesn't store IP addresses, and keeps the User-Agent with each event |
| Purpose | Anonymous usage statistics and recordings of pages, to see where visitors stop and improve OpenTex |
| Retention | Two years from each event, and 30 days from each recording, after which Mixpanel deletes them automatically, or until our contract with Mixpanel ends |
| How to refuse, and the effect | Turn on Global Privacy Control or Do Not Track in your browser, or block the requests with a content blocker; OpenTex works the same. |
8. Services you connect to yourself
Some features make your browser talk to other services directly. We don't receive or relay that data, and each service handles it under its own privacy policy.
| Service | When | What your browser sends |
|---|---|---|
| GitHub | You connect GitHub, push or pull; also when your browser pushes a linked project's review record | Your token, the files you push and the commit message; with Connect GitHub, requests for your username, profile picture and the repositories the app is installed on; a linked project's review record (see Sharing with third parties) |
| Crossref, DataCite, OpenAlex | You look up a paper, add a PDF or open “Verify refs” | DOIs, arXiv IDs or titles |
| Your profile picture is shown while you are signed in | A request for the image |
Each request also reveals your IP address and browser information to that service.
Connecting GitHub, renewing its tokens and disconnecting go through our server, as described in GitHub sync. When you connect GitHub while signed in, our server also asks GitHub once to confirm the connection (see Projects linked to GitHub).
9. Your rights and how to use them
You can ask us at any time to give you access to, correct or delete your personal information, or to stop processing it (PIPA Articles 35 to 37), and you can withdraw any consent you have given. A legal guardian or a representative you authorize (with a power of attorney) can make these requests for you.
In the app
- Delete a guest project from the project list: removes its files, version history, editing data and chat from this browser.
- Projects in your account: owners can “Delete for everyone”, which deletes the project from our servers for all of its members (copies already in members' browsers stay with them), and can delete projects saved before the update. Members can leave a project (except its last owner) and remove a project from the device they use. Owners change roles, remove members and lift blocks; owners withdraw any invitation, editors those they made.
- Download a copy of a project you can open: export it as a ZIP file, and its review records as a JSON file.
- Delete items and highlights in the paper library.
- Projects linked to GitHub: you can decline the notice and still read and compile the project; owners can unlink the repository. Neither removes what is already in the repository.
- Clear this site's data in your browser settings: removes everything OpenTex stored in that browser, including your GitHub token. “Disconnect” in the GitHub panel removes only a Connect GitHub connection; there is no separate button for a personal access token. Projects in your account stay there.
- Sign out: ends the session in this browser and deletes its copy of your account's projects, which stay in your account. Guest projects, your library and your GitHub token stay in the browser, so on a shared computer, clear the site's data as well.
By email
Email sanghoyun@postech.ac.kr to get a copy of the information we hold about you, to have it corrected or deleted, or to delete your account; the app can't delete an account. Comments, chat messages and review records in a shared project can't be edited or deleted in the app, so to have something you wrote there removed, email us too. If someone invited your email address, you can ask us where it came from and have it deleted. Please write from your account's email address; otherwise we may ask you to confirm your identity.
We respond within 10 days. If we can't do what you ask, for example because a law requires us to keep the information, we will tell you why and how you can challenge the decision.
We make no decisions about you by fully automated processing (PIPA Article 37-2), so there is nothing to refuse or ask us to explain.
10. Children
OpenTex is meant for people aged 14 and over, and you must be at least 14 to sign in. We don't knowingly collect personal information from children under 14. If we learn that we have done so without a legal guardian's consent, we will delete it without delay. A guardian can contact us at sanghoyun@postech.ac.kr.
11. How we protect personal information
- Encryption: every connection to OpenTex and to the services it uses is encrypted (HTTPS/TLS), and Supabase encrypts the data it stores.
- Access control: the cloud database uses row-level security: only a project's current members can read it, and what each of them can change follows their role. Stored files and live channels are open to the project's current members only. Your browser uses only Supabase's public key, which those rules restrict; the secret key that merging document logs, the daily maintenance and feedback reports need stays on our server and is never sent to browsers. Feedback reports can be reached only with that key, not from any browser: a browser gets a thread only through our server, for the account signed in or a guest's token, which we store only as a hash.
- Invitations: invite links carry a random token that we store only as a hash and keep out of addresses sent to servers, Referer headers, our analytics and error reports; attempts to use links are rate-limited, and people an owner removes can be blocked from rejoining.
- Data minimization: guest projects stay in your browser, compiling happens in your browser, version history and your paper library never reach our servers, and your GitHub tokens are never stored there.
- Limited access: only the operator can access the hosting and database consoles, and only to run the service or handle your requests.
- Infrastructure: Vercel and Supabase are responsible for the physical and technical security of their data centers.
- What you can do: your GitHub token, or the tokens of Connect GitHub, are stored unencrypted in your browser's storage, so anyone with access to your browser profile could read them; signing out doesn't remove them. The token of your guest feedback reports is kept the same way, and with it someone could read and add to those reports. Use a fine-grained token limited to the repositories you sync, or install the GitHub app only on those, and clear the site's data on shared computers. Anyone you add to a project can read and download it and may keep a copy, so invite only people you trust with it, give links an expiry or a limit, and withdraw links you no longer need.
13. Privacy officer
OpenTex is run by one person, so the operator handles privacy questions, requests and complaints directly.
- Privacy officer
- Sangho Yun (operator of OpenTex)
14. Getting help
If we can't resolve a privacy problem to your satisfaction, you can turn to these Korean public bodies (phone numbers work in Korea without an area code):
| Organization | Phone | Website |
|---|---|---|
| Personal Information Dispute Mediation Committee | 1833-6972 | www.kopico.go.kr |
| Personal Information Infringement Report Center (KISA) | 118 | privacy.kisa.or.kr |
| Korean National Police Agency (cybercrime reports) | 182 | ecrm.police.go.kr |
In the EEA or the UK, you can also complain to your data protection authority (see Visitors from the EEA and the UK).
15. Visitors from the EEA and the UK
For the GDPR and the UK GDPR, the controller is Sangho Yun, Republic of Korea (sanghoyun@postech.ac.kr).
Legal bases
- Contract (Art. 6(1)(b)): providing the service you use, including web pages, TeX Live files, sign-in, connecting GitHub, projects in your account and sharing them, which includes showing you to the members of the projects you join.
- Legitimate interests (Art. 6(1)(f)): request logs and error reports for security and troubleshooting, records of sharing actions, blocks and rate limits that keep shared projects safe, aggregate usage and performance statistics (including the anonymous usage events sent to Mixpanel), showing the right language, answering your messages and feedback reports, keeping a report's thread and status so that you can follow it, limiting abuse of the report form with a keyed hash of your IP address and the hash of a guest's token, and holding an email address that someone invited until its owner joins, so that they can join. Our interest is running a secure, working service, letting people invite whom they work with, and replying to you; we keep this data minimal and don't use logs or statistics to identify you. You can object to it.
- Consent (Art. 6(1)(a)): writing your review activity in a project linked to GitHub, with your name, email address and GitHub username, to that repository, which GitHub hosts in the United States. You give it by confirming the notice.
- Legal obligation (Art. 6(1)(c)), or for obligations under Korean law our legitimate interest in complying with them (Art. 6(1)(f)): where a law requires us to keep or disclose information.
Your rights
You have the right to access, rectify and erase your personal data, to restrict or object to its processing, to data portability, and to withdraw consent where we rely on it. To use these rights, email us as described in Your rights and how to use them. You can also lodge a complaint with the data protection authority where you live or work, or where you believe an infringement took place.
Transfers
The European Commission and the United Kingdom have recognized the Republic of Korea as providing an adequate level of data protection. Our providers process data in the United States, Singapore and Ireland, among other places (see International transfers): Vercel participates in the EU-U.S. Data Privacy Framework, the data processing terms of Supabase and Sentry include the European Commission's standard contractual clauses, Slack uses those clauses for its transfers, and Mixpanel participates in the EU-U.S. Data Privacy Framework, with its UK Extension, and in the Swiss-U.S. Data Privacy Framework.
Recordings of pages
Recordings of pages don't run when your device's time zone is in Europe. On a device set to another time zone they can still run, and we don't ask for consent. Our legal basis is then our legitimate interest in improving OpenTex (Art. 6(1)(f)), and you can object by turning them off as described there.
Other information
You don't need to give us any personal information to use the editor; signing in requires your Google account information. We make no decisions based solely on automated processing that produce legal or similarly significant effects.
16. Google user data
OpenTex's use and transfer to any other app of information received from Google APIs will adhere to the Google API Services User Data Policy, including the Limited Use requirements.
- What we receive: only the basic sign-in information (the
openid,emailandprofilescopes): your Google account ID, email address and whether it is verified, your name, and your profile picture URL. We don't request access to Gmail, Drive, Calendar, Contacts or any other Google data, and OpenTex makes no Google API calls on your behalf. - How we use it: to create your account and sign you in; to show your name and picture in the account menu; to show your name as the author of your comments, review records and history snapshots; to keep the projects in your account tied to it; to show your name to the members of the projects you join, and your email address to their owners and editors; to match email invitations to your Google address; once you have confirmed the notice, to write your name and email address into the review record of projects linked to GitHub; and to answer your requests and confirm that they come from you.
- What we don't do: we don't sell it, use it for advertising, or use it to develop, improve or train generalized AI or machine-learning models. We share it only with the providers that run sign-in and host OpenTex for us (Supabase and Vercel), with the members of the projects you join as described in Sharing a project, with GitHub and the readers of a linked repository through its review record once you have confirmed the notice, or where the law requires. Apart from those members, nobody reads it except the operator, when needed for security, to comply with the law, or to handle a request you made.
- Removing access: you can remove OpenTex from your Google Account's third-party connections. That disconnects OpenTex from your Google Account but doesn't delete what we already hold; to delete that, email us.
17. Changes to this policy
We post any change on this page, with its effective date, at least 7 days before it takes effect, and at least 30 days before for changes that significantly affect your rights, such as new purposes, new kinds of information or new recipients. We will also email account holders about such significant changes.
Parts of this policy that apply only from a later date say so (“From …”); until that date, they don't apply.
See also the Terms of Service.
This Privacy Policy takes effect on .