Privacy Policy
Last updated
This policy describes how the Markdown Viewer site handles data as it works today: documents you open, links you paste, share links, copying and downloading, feedback and analytics.
Short version
- The site sets no cookies of its own (the analytics host's bot-protection cookie is described under Cookies).
- Files you open or drop, and text you paste, are read and rendered in your browser. They are not uploaded to my server, to analytics or to anyone else.
- When you paste a link, your browser downloads that file directly from the site it lives on. Only if that site refuses, the address goes to my server, which fetches the file once, hands the text back and keeps nothing. The same applies to the pictures in a document while a Word file is being made.
- A share link for pasted or local text carries the text inside the link, after the
#sign, which browsers never send to a server. Anyone with the link can read it. - I count page views and feature use with my own analytics under a random ID. It never includes your documents, the links you paste or the names of your files. You can turn it off on this page, and browsers that send Global Privacy Control are never counted.
- A feedback message is stored only if you write one and press send.
- I don't sell or share personal information, and I don't use it for advertising.
Who runs the site
Markdown Viewer is run by one independent developer, not a company (“I”, “me” in this policy; see About). I decide what the site collects and why, so I am responsible for that data. To contact me about privacy, including any of the requests under “Your rights”, use the Send feedback button on the contact page. There is no public email address.
What is collected at a glance
| What | Where it is kept | Why | How long |
|---|---|---|---|
| The documents you have open: text, name, folder path, edited or not (no pictures) | Your browser's session storage, this tab only | So a reload doesn't lose it | Until you close the tab |
| Reading settings (page following your device, light or dark; typeface, size, line length, margin marks) | Your browser's local storage | So the page looks the way you left it | Until you clear this site's data |
| Text in a share link | Inside the link, after the # sign | So the link reopens the same text | As long as the link exists wherever it was pasted |
| A link you paste, or a picture's address while a Word file is made (only when the other site blocks direct downloads) | Passes through my server; may appear in host request logs | To fetch that file or picture for you | Not stored by me; host log retention applies |
| Analytics events (page, feature, outcome, random IDs) | My analytics database on Supabase | To see what people use and what fails | Reviewed for deletion at least once a year |
| Feedback message, website hostname, page path | My feedback database on Supabase | To read and act on your message | Until dealt with; reviewed at least once a year |
| IP address for the feedback limit | The feedback service on Supabase | To cap messages at 10 per hour | Only for the rate-limit check |
| Request logs (IP address, browser, time, address requested) | Vercel and Supabase | Delivering pages, security, fixing faults | Each provider's log retention |
Documents you open, paste or drop
Rendering, the contents list, the source editor, math, diagrams and syntax highlighting all run inside your browser. When you press Open file, drop files or a whole folder on the viewer, paste text, or open an .md file with the installed viewer from your computer, your browser reads them on your device. They are never uploaded. From a dropped folder only Markdown files and pictures are read. Images you drop along with a document are turned into temporary addresses that exist only in that browser tab.
So that a reload doesn't lose what you are reading, the documents you have open are saved in your browser's session storage under the key markdown-viewer:doc, together with their names, whether you edited them, for files from a dropped folder their path inside that folder (such as vault/notes/plan.md), and, for documents opened from a link, those links. Beyond about 2,000,000 characters in total, the rest are not saved. For a file opened from your computer only its text is kept, not its pictures. Session storage belongs to the one tab and is deleted when you close it.
Your reading settings are saved under markdown-viewer:settings: whether the page follows your device or stays light or dark, sans or serif typeface, text size, line length and whether margin marks are shown.
Opening a document from a link
When you paste a link and press Open, or open a share link that points to a file, your browser first asks the site that hosts the file for it directly. GitHub, Gist and most raw-file hosts allow this, and in that case my server is not involved: the host sees a request from your browser, like any visit to that site, without the address of this page (requests are sent with no referrer).
Some sites don't allow other websites to read their files. Only then does the link go to my server (/api/fetch?url=…), which:
- refuses addresses that point to private or local networks, such as localhost or a home router, including after redirects;
- fetches the file once, identifying itself as
Mozilla/5.0 (compatible; MarkdownViewer/1.0; fetches one Markdown file on request), and follows up to 5 redirects; - gives up after 12 seconds and stops reading after 5 MB;
- returns the text to your browser and does not store it.
The other site then sees a request from my server, not from your device. My hosting provider's request logs may record the address you pasted along with the request. Don't paste links that contain private tokens or one-time passwords.
Images and other content inside documents
A Markdown document can point to images on other servers, such as badges or screenshots. When the document is shown, your browser loads those images directly from their servers, which see your IP address and browser details like any web page would. Images are requested without a referrer, so those servers aren't told which page you were reading. HTML in documents is cleaned first: scripts, frames, forms and embedded objects are removed, so a document can't run code or load another page inside this one.
When you download a document as a Word file, the file is put together in your browser. Your browser fetches each picture in the document again to place it in the file. If a picture's server refuses that, its address goes to my server (/api/fetch?image=1&url=…), which fetches that one picture under the same rules as above, hands it back and keeps nothing. Pictures that still can't be fetched are left out, with their description in brackets.
The site's own fonts, the math typesetting (KaTeX) and the diagram renderer (Mermaid) are bundled into the site and served from my domain. Visitors' browsers don't contact Google Fonts or any content delivery network for them.
Share links
There are three kinds of share link:
- Documents opened from a web address get a link of the form
/?url=…containing that address. When someone opens it, the page request (including the address) reaches my host like any page request, and their browser then downloads the file as described above. The text of the document is not in the link. - Examples get
/?example=…with the example's name. - Pasted, edited or local documents are compressed and written into the link after the
#sign. Browsers don't send that part of an address to a server, so the text never reaches my server; it is unpacked by the page in the browser of whoever opens it.
Anyone who has a link can read the document. There is no password and no way for me to revoke a link, which lasts wherever you paste it: chat apps, email, documents and the browser history of everyone who opens it. Don't put passwords, keys or private customer data in documents you share. When a share link is opened, the viewer removes the link's extra part from the address bar; the original link may still be in the browser history.
Copy, download and print
Copy for Docs puts the formatted document on your clipboard. Download builds a Word, HTML or .md file in your browser and saves it to your device. Print / PDF opens your browser's own print dialog. None of these send the document's text anywhere. A Word file needs its pictures inside it, so your browser fetches each picture again, and a picture whose server refuses goes through my server as described under Images.
Feedback you send
The Send feedback button opens a short form. Nothing is sent while you type. Only if you press send, these details go to my feedback service, which runs on Supabase, and are stored so I can read and handle the message:
- the message you wrote, exactly as you wrote it;
- this website's domain and the path of the page you were on, without any query string or
#part (so a share link's contents are never included).
The form doesn't ask for your name or email. If you want a reply, include a way to reach you in the message; I will use it only to answer you. To limit spam, the feedback service allows up to 10 messages per hour from one network, so it processes your IP address to apply that limit. Please don't include passwords, keys, payment details or other sensitive information in a message, and don't paste private documents into it.
Analytics
I run my own analytics service, hosted on Supabase, to learn which features people use and where the site fails. It is not Google Analytics and it is not shared with any advertising network. It records:
- page views, with the page path only (nothing after
?or#); - time on the page and how far you scrolled;
- clicks on labelled buttons and controls;
- the outcome of a feature, with its name and sometimes a short code or a number: a document opened and how (file, drop, paste, link, example or share link, with the number of files), a document that couldn't be opened (with a reason code such as “file rejected” or “link failed”), switching between Read, Split and Source, and using Print / PDF, Copy for Docs, Download or Share;
- a random visitor ID, a random session ID and the time.
It never records the text you type or paste. It does not record your documents or any part of them, file names, the links you paste, your name, your email or anything else that identifies you, and it doesn't store your IP address as a way to identify you. The visitor ID is kept in your browser's local storage and the session ID in session storage, both under keys starting with wa_. They are random, are not linked to any account and are not used on other websites.
The analytics script is loaded from my Supabase project on every page, so Supabase receives your IP address and browser details when your browser fetches the script, as any web server does, even if you have turned analytics off. There is no consent banner: analytics is limited to the items above, is used only to improve this site, and can be switched off here at any time.
Turning analytics off stops all events and deletes the wa_ IDs from this browser. Your choice is saved in local storage under markdown-viewer:analytics-off, so it applies only to this browser on this device. If you clear this site's data, the choice is cleared too and you would need to turn it off again.
Cookies and browser storage
The site sets no cookies of its own. It uses your browser's storage as listed below, and you can clear all of it in your browser's settings for this site. One third-party cookie can appear: when the analytics script is fetched, Cloudflare (which sits in front of Supabase) sets __cf_bm on the Supabase domain to tell browsers from bots. It expires after about 30 minutes and is not readable by this site.
| Key | Type | Purpose |
|---|---|---|
markdown-viewer:doc | Session storage | The documents you have open: their text, names, whether you edited them, folder paths for files from a dropped folder and, for linked documents, the links |
markdown-viewer:settings | Local storage | Reading settings |
markdown-viewer:analytics-off | Local storage | Remembers that you turned analytics off |
wa_… | Local storage | Random analytics visitor ID |
wa_… | Session storage | Random analytics session ID, deleted when you close the tab |
Hosting and server logs
The site is hosted on Vercel. The servers that deliver its pages receive technical information with every request, such as your IP address, browser type and version, the address requested and the time. That includes share links of the ?url= kind and the server fetch described above, whose addresses contain the link you pasted. The host may keep this in short-lived logs for security, abuse prevention and troubleshooting. I don't combine those logs with analytics or feedback.
Service providers and transfers
Two service providers process data on my behalf, only for running this site:
- Vercel: hosting, delivery of the pages and running the server code that fetches a link when needed.
- Supabase: the databases that store analytics events and feedback messages, the feedback rate limit, and the server that delivers the analytics script.
These providers may process data in the United States and in other countries where they or their sub-processors operate. Where the law requires it, such transfers rely on the providers' standard contractual safeguards.
Why the data may be used
If you are in the European Economic Area or the United Kingdom, the legal bases I rely on are:
- Legitimate interests for analytics, server logs and the feedback limit: understanding how the site is used, fixing faults and keeping it safe from abuse. I keep this light by never recording your documents or links, by honoring Global Privacy Control and by offering the switch above.
- Providing the feature you asked for when a link has to be fetched by my server: the address has to reach the server for it to fetch the file.
- Your choice to contact me for feedback: a message is stored only because you sent it, and it is used to read and answer it.
Sharing and selling
I don't sell personal information, rent it or share it for targeted advertising, and I don't combine it with data from other sources. Apart from the service providers above, I would disclose information only if the law required it, to protect the site or its users from fraud or abuse, or as part of a transfer of the site to a new owner, who would stay bound by this policy for data collected under it.
How long data is kept
- The current document and the analytics session ID: until you close the tab.
- Your settings, the analytics visitor ID and your opt-out choice: in your browser until you clear this site's data.
- Share links: as long as the link exists wherever it was pasted; I never receive a copy of the text in one.
- Files fetched through my server: not stored by me at all.
- Analytics events: only as long as they help me improve the site, reviewed for deletion at least once a year. There is no automatic deletion schedule. I may keep totals with no IDs in them, such as page views per day, for longer.
- Feedback messages: until they have been dealt with, and reviewed for deletion at least once a year.
- Hosting and provider logs: according to each provider's retention period.
Security
The site is served only over HTTPS. Every document passes through DOMPurify before it is shown, so scripts and event handlers in a document don't run. The server fetch refuses private and local network addresses, including after redirects. Analytics events and feedback are written through narrow interfaces that accept new records but don't let a visitor read anyone else's data, and access to the stored data is limited to the person who runs the site. No system is perfectly secure, which is one more reason not to put secrets in documents you share.
Your rights
Depending on where you live, for example under the GDPR, the UK GDPR or US state privacy laws, you may have the right to ask whether I hold information about you, to get a copy of it, to have it corrected or deleted, to restrict or object to how I use it, and to withdraw a choice you made. You won't be treated differently for using these rights.
To make a request, use the feedback form and say what you want. Because I don't collect names or accounts, I can usually only find a feedback message if you tell me roughly what it said and when you sent it, and I can only find analytics events if you give me the visitor ID from your browser's storage (the wa_ key). Turning analytics off is the quickest way to stop further collection. Anything kept only in your browser you can delete yourself by clearing this site's data. I act on requests within one month; include a way to reach you if you want a written answer. If you are in the EEA or the UK, you can also complain to your local data protection authority.
US state privacy laws
In the past 12 months I have collected, as described above, internet activity on this site (analytics events and server logs) and the content of feedback messages people chose to send. I have not sold personal information or shared it for cross-context behavioral advertising, and I don't use or disclose sensitive personal information. Residents of California and other states with similar laws can make the requests described under “Your rights”.
Global Privacy Control and Do Not Track
If your browser sends a Global Privacy Control signal, the analytics script doesn't record anything and there is no setting to change. There is no common standard for responding to the older Do Not Track signal. I don't track you across other sites, so there is nothing for it to switch off, and you can still turn analytics off above.
Children
The site is a general-audience tool for reading Markdown documents. It is not aimed at children, and I don't knowingly collect personal information from children under 13 (or under 16 in the EEA and the UK). If you believe a child has sent me personal information in a feedback message, tell me and I will delete it.
Changes to this policy
I will update this page, and the date at the top, whenever the way the site handles data changes. If a change means collecting something new, it will be described here before it starts. Questions about this policy can go through the contact page.