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

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

WhatWhere it is keptWhyHow long
The documents you have open: text, name, folder path, edited or not (no pictures)Your browser's session storage, this tab onlySo a reload doesn't lose itUntil you close the tab
Reading settings (page following your device, light or dark; typeface, size, line length, margin marks)Your browser's local storageSo the page looks the way you left itUntil you clear this site's data
Text in a share linkInside the link, after the # signSo the link reopens the same textAs 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 logsTo fetch that file or picture for youNot stored by me; host log retention applies
Analytics events (page, feature, outcome, random IDs)My analytics database on SupabaseTo see what people use and what failsReviewed for deletion at least once a year
Feedback message, website hostname, page pathMy feedback database on SupabaseTo read and act on your messageUntil dealt with; reviewed at least once a year
IP address for the feedback limitThe feedback service on SupabaseTo cap messages at 10 per hourOnly for the rate-limit check
Request logs (IP address, browser, time, address requested)Vercel and SupabaseDelivering pages, security, fixing faultsEach 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.

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:

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:

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 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:

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.

KeyTypePurpose
markdown-viewer:docSession storageThe 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:settingsLocal storageReading settings
markdown-viewer:analytics-offLocal storageRemembers that you turned analytics off
wa_…Local storageRandom analytics visitor ID
wa_…Session storageRandom 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:

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.

If you are in the European Economic Area or the United Kingdom, the legal bases I rely on are:

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

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.