The short version
The FoldRender app has no account of its own and no analytics. It asks GitHub to sign you in,
for git and for Artifacts, and it sends data to us only in the cases below. Nothing leaves your
device except at your instruction: to GitHub when you sign in, clone, pull or push; briefly
through a sign-in relay of ours during the one-tap sign-in; to Artifacts (foldrender.dev/artifacts)
when you publish a page, or open, list, share, change or delete one; and to DeepWiki when you
ask it to read a repository's generated documentation or to answer a question about it.
Pushing to a git remote uploads your files to that remote, because that is what pushing is.
Each is described below. The one thing that moves without your asking each time is the backup
Android itself performs, which copies app data to your Google account rather than to us if
you have it switched on; it has a section of its own below.
The iPhone and iPad app, in public beta, is an app for Artifacts rather than a git reader; it has a section of its own below.
What stays on your device
- Your documents and repositories. Files are read through Android's
Storage Access Framework, from folders you pick yourself, and cloned repositories are
written to the app's own storage. The app never uploads them anywhere on its own — the one
exception is a git push, which sends your commits to the remote you configured, at the
moment you ask for it.
- Reading preferences — theme, font size, recent files, the folder you
last opened — in app-private storage.
- Which app a file came from. When another app hands FoldRender a
document — a chat app, your mail, the system file manager — the app works out which one
and keeps the answer beside that file, so the list of things sent to you says where each
came from instead of showing a row you cannot place. It asks Android for the name of an
app already installed on your phone; it asks the internet nothing, and no request this
app makes contains the answer. Over time it adds up to a record of which apps you
receive documents from, which is why it is named here rather than folded in with the
font size.
- Which Artifacts page each document went to. When you publish a document from the app, the app remembers the link it produced for that document, so publishing it again updates the same page. This record is kept in app-private storage and is included in Android's backup; see the backup section below.
- Your commit identity — the name and email address you enter for git.
They stay on the device, and they are written into every commit you make, so they travel
to the remote when you push. That is how git works, and it is why the fields are yours to
fill in rather than something we collect.
- Your GitHub username, read once after sign-in so the app can show who
is signed in and label commits.
- Your GitHub access token, if you sign in. It is kept in app-private
storage, encrypted with a key held in the device keystore, and is used only to talk to
GitHub. Signing out deletes it; so does uninstalling the app.
- Your Devin API key, if you enter one to read a private repository's
DeepWiki. Same storage, same keystore, and it is sent only to DeepWiki.
What leaves your device
- GitHub (
github.com and api.github.com), only
when you sign in, clone, pull, or push. Those requests go straight from your phone to
GitHub and are covered by
GitHub's privacy statement.
- Our sign-in relay (
foldrender.dev/api/gh/), only during
a one-tap GitHub sign-in. GitHub requires a client secret to turn an authorization code
into a token, and an app cannot keep a secret, so that one exchange happens on our server.
It means the relay sees your GitHub access token for the moment it performs that
exchange. It keeps nothing: no database, and the token is never written to a
log. Our host (Vercel) keeps
standard request logs, which record the request URL, so treat the one-time authorization
code as seen by the host even though the token is not. The token comes back to your phone
encrypted and bound to a nonce that never left it. If you would
rather no server of ours were involved at all, use Use a code instead — device-code
sign-in talks only to GitHub.
- Artifacts (
foldrender.dev/artifacts, and each page's own address ending in --u.foldrender.dev), only when you use it: publishing a document, opening or reading a page in the app, or listing, sharing, changing or deleting your pages. A publish sends the rendered HTML of the document and its title. Every request that uses Artifacts (publishing, listing, opening a page in the app, sharing, changing access and deleting) carries your GitHub access token, which the service uses to identify you. Those requests go to Cloudflare, which hosts the service, through Vercel, which hosts foldrender.dev, and the service checks the token with GitHub. Earlier versions of the app send them to Cloudflare directly, at a.foldrender.dev, the service's earlier address. See Artifacts below.
- DeepWiki (
mcp.deepwiki.com, or mcp.devin.ai
if you have entered a Devin API key), only when you ask to read a repository's generated
documentation, or ask a question about it. What is sent is the repository name, and — if
you asked a question — the words of that question, which are yours to choose, and, so that a follow-up makes sense, up to three earlier questions from the same conversation. Not
your code, and not the contents of anything you have open. Their handling is covered by
Devin's privacy policy.
- Your files, on a git push — to the remote you configured, when you
press push. Nothing is pushed automatically.
- Whatever a document itself points at. A README with a badge, an HTML page whose pictures or stylesheet live on a server — the app fetches those the way any reader would, from the host the document names, when you open it. That request carries your IP address to a host we neither choose nor see, and nothing about you is added to it. A document that references nothing remote makes no such request.
- Nothing else. No telemetry, no crash reporting service, no advertising
SDK, no third-party analytics anywhere in the app.
Artifacts, at foldrender.dev/artifacts
Artifacts is an optional web service that hosts HTML pages you choose to publish. Nothing about it runs unless you use it, and the app and this website do not need it. It is operated by DUOCODE TECHNOLOGY and hosted on Cloudflare.
- Your account. When you sign in with GitHub, we store your GitHub login and numeric user ID, your plan (free, which is the only plan there is today), when you first signed in, and when you were last seen.
- Your pages. For each page: the HTML you published, its title and size, when it was published and when it expires, who can open it (public, anyone with the link, only you, or only the people you added), and the GitHub logins you shared it with. When you publish again to the same link, the HTML it replaces is kept as an earlier version, up to 10 per page, so that you can restore it. The pages and their earlier versions are stored in Cloudflare R2, and their records in Cloudflare D1.
- Answers to a page's questions. A page can ask questions that its owner, and people the owner lets collaborate, answer on the page. For each answer: the page, the question and the options picked as the page showed them, a sentence if one was written, your GitHub login, when you answered, and when it was passed on to or read by the owner's tools. Changing an answer keeps the earlier one. The page's owner sees every answer on the page; a collaborator sees their own. Answers are stored in Cloudflare D1, and are deleted with the page or with your account.
- Talking with an agent beside a page. A page's owner can connect a coding agent that runs on their own computer to the page; the owner and the people the owner lets collaborate then talk with it in a sidebar beside the page. For each message: the page, the words and any text quoted from the page, your GitHub login, whether you wrote it on a computer, tablet or phone, and when; and, for each of the agent's turns, a record of its reply, the tools it used and the changes it made, and how its questions were answered. Everyone the page lets in sees the whole conversation. FoldRender runs no model: what you write is passed to the owner's agent on the owner's computer, which may send it to its own model provider under the owner's account. The page's Markdown panel (its plan) is also copied into the folder the owner's agent works in, on the owner's computer, and the agent's edits to it are written back to the panel. While the owner's agent is not connected, the page keeps a count of the messages waiting for it, shown on the owner's own page list; nothing of what was written is in that count. What each conversation's agent is set to (its mode and model, as the agent names them) is kept with the conversation. A page keeps its newest 2,000 entries or 5 MB, in Cloudflare Durable Objects; the conversation is deleted with the page, and your messages on other people's pages are deleted with your account.
- Annotations. What you write on a page, yours or one whose owner lets you collaborate: handwriting, notes, highlights and boxes, each with where it sits on the page, your GitHub login and when; a highlight keeps the words it marks. Everyone who can write on the page sees them. When you press Recognize, the strokes you select, whoever wrote them, are drawn as a picture and sent, with the text of the page around them, through our model gateway (llm.sunflowerslw.tech, on Amazon Web Services) to the model that reads them: Google's Gemini, reached through Neon's AI Gateway (Neon is part of Databricks; its servers are in the United States), or Anthropic's Claude, directly, when you ask it to read again. Each request also carries a code made from your account, the same every time but not your login or name, so that use can be counted and limited per person; our gateway sees it, and so does Anthropic when Claude reads again. What it read is kept beside your handwriting. Recognize asks your permission before it sends anything, and then sends only the ink you press it on; Stop sending, beside its hint, withdraws the permission, as does signing out — including the app's own, on iPhone and iPad and, from its next version, on Android; on Android versions before it, signing out leaves the permission behind and only Stop sending takes it. Annotations are stored in Cloudflare D1, and are deleted with the page or with your account.
- People you block. The GitHub logins you block, and when. Their pages leave your list of pages shared with you, they cannot write on your pages, and their handwriting is not shown to you; what they wrote stays, unseen by you, and unblocking shows it again. The list is deleted with your account. In the iPhone and iPad app, people you block before signing in are kept on the device only.
- Your agents' to-do lists. Your coding agents can keep their own to-do lists in your desk's memory: each list's name and the repository it belongs to, its items, each with whether it is to do, being done, done or dropped, and a few fields of their own (such as what comes next), with which of your tokens wrote it and when. Anything that looks like a secret is refused or kept as [hidden]. Your desk page shows the open ones (To-do), and what you add or change there is kept the same way, marked as yours. Your agents read them, and a new session in that repository is handed the open ones touched in the last 7 days, yours marked as yours. At most 500 open lists are kept, and the newest 500 closed lists, with up to 200 items each. Your agents can remove a list at any time. They are stored in Cloudflare Durable Objects, are in your account's export, and are deleted with your account.
- Context packs. A pack is what your agent picks out of your messages on your desk, your pages and files you give it, to hand to another session or agent of yours: for each item, its text as it was when picked, where it came from (a thread and its message numbers, a page's address, a file's path on your computer and its fingerprint) and when; the pack's goal and name if given, and which of your tokens made it. FoldRender runs no model on it: your agent, on its own model and account, decides what goes in. Anything that looks like a secret is refused, or kept as [hidden] when your agent asks. Only your own tokens read your packs. Packs are stored in Cloudflare D1, are in your account's export, and are deleted when you remove them or delete your account.
- Your desk. The desk, at foldrender.dev/desk, is where your coding agents ask you things and you answer. It keeps: the questions your agents put on it (each with its context, its options, the product and agent session it names, and any pictures), your drafts and the answers you send (with whether you were on a computer, tablet or phone, and when), and what your agents mark of them (read, being done, done, with the name you gave that agent's token); the messages you send your agents and their replies; your agents' memory, which their hooks send from their sessions on your computers: your prompts and their last replies, the notes they keep, and which machine, agent and repository each came from; and, for the computers you connect to it, their names, how busy they are and the sessions they run. Anything that looks like a secret is refused or kept as [hidden]. FoldRender runs no model on your desk. A question that was answered and done is put away a day later and deleted 30 days after that; the newest 500 batches of answers you sent are kept; your agents' memory keeps prompts and replies for 14 days unless your agents set another time, and its newest 50,000 notes; a picture is deleted a day after no question shows it. The messages you send your agents and their replies are kept until nothing has been said in a thread for 90 days, when the thread is deleted with its replies and the note it left in your agents' memory, and at most the newest 2,000 threads, each with its newest 100 replies. A computer you connect has its sessions kept as it last reported them, until it reports again or you remove it, and a session it has not reported for 90 days is deleted. A record of what was done on your desk (which of your agents or pages sent, marked, closed or uploaded what, and when) keeps its newest 2,000 entries. The desk is stored in Cloudflare Durable Objects and Cloudflare D1, its pictures in Cloudflare R2; the tokens your agents and computers use are kept only as SHA-256 hashes, with their names and dates. FoldRender sends no notification about your desk: when answers you sent are waiting for your agents, the desk page says so. Only you, and the tokens you make for your agents, read it. It is in your account's export, and is deleted with your account.
- Sessions for the apps. The iPhone, iPad and Android apps show pages in a web view, and sign it in with a session they ask for with their own token. For each session we keep its id, which app asked and the device name it gave (such as "FoldRender for iPhone"), the token it came from, and when it was made, when it expires (30 days) and when it was ended. Signing out in the app ends it, as does revoking the app's token or deleting your account. Such a session cannot create tokens or delete your account.
- Command-line tokens. A token that the CLI or a script uses is stored only as a SHA-256 hash, with the label you gave it and when it was created, last used and revoked.
- Signing in from the CLI. When you run
foldrender login and approve it in your browser, the service keeps a short-lived record for 10 minutes. It holds a hash of the device code the CLI keeps (never the code itself), the short code shown to you, your GitHub ID, and the new command-line token, encrypted until the CLI collects it. The CLI collects it once; then the encrypted copy and the record are deleted. A record that expires before it is collected has its token revoked.
- Sign-in on the web. A signed session cookie in your browser,
__Host-fr_session, identifies you for 30 days. It holds your numeric GitHub ID, the time it was issued, and a signature, and your browser sends it only to foldrender.dev. The service keeps no list of sessions. It replaced an earlier cookie, and everyone who was signed in on the web was signed out once when it did.
- Opening a private or shared page. Once the page's address on foldrender.dev has checked who you are, it passes your browser on to the page's own address with a signed value that is good for 60 seconds. That address swaps it for a cookie named for the page and for you (
__Host-fr_grant- and the page's id, the version's for an earlier one, and your GitHub login), which is good for 10 minutes, is renewed each time it opens the page for up to 12 hours, and is sent only to the address that serves that author's pages. Your browser keeps at most 16 of them for that address; the oldest are removed. Both name the page, the version if it is an earlier one, your GitHub login, which of your sign-ins they were made for and when the first was made, with a signature; signing out ends them. The service keeps no record of either.
- Reporting a page. Anyone who can open an Artifacts page can report it to us from its ⋯ menu. A report holds the page and its owner's GitHub login, the reason you chose, any details you typed, and the time. If you are signed in it also holds your GitHub login. If you are not, we do not store your IP address: we store a keyed one-way hash of it, used only to limit how many reports one address can send and to count one person's reports of a page once a day, and we delete it 30 days after the report. Only the people who run FoldRender see reports; the page's owner is not told who reported it. When a report arrives we send ourselves a notification through ntfy.sh naming the report's number, its reason and the page owner's login, and nothing about you. A report does not take a page down. We keep a report while it is open and for one year after we have dealt with it. If you delete your account, reports you sent are kept without your login.
- Hiding the toolbar. If you choose Hide toolbar on a page, a cookie,
__Host-fr_bar, holding only the word hidden, keeps it hidden on this browser for up to a year. Showing the toolbar again removes it.
- Your GitHub access token is not stored. The service uses the token to ask GitHub who you are. When you sign in on the web, the token is used once and then discarded. The service keeps a hash of a token and the login it belongs to in memory for up to five minutes, so that it does not ask GitHub on every request.
Who can read a page depends on its setting. A private or shared page is hidden from anyone who is not allowed. Once such a person has signed in, they get the same "not found" answer as for a page that does not exist. A public page can be opened by anyone who has its link. Pages are not encrypted end to end. They are stored as plain HTML, so the operator of the service and Cloudflare can read them.
Pages are served from addresses of their own, not from foldrender.dev. A page's address is on foldrender.dev/artifacts, and the page itself is loaded into it from an address ending in --u.foldrender.dev, one for each account. The part in front of that is derived from the owner's GitHub login with a key only the service holds, so the login cannot be read back from the address. Keeping pages apart from the address you sign in on means that a page's own code cannot use your sign-in. Links on a.foldrender.dev, the service's earlier address, take your browser to the page's address.
On the free plan, each page expires 30 days after it was last published, and publishing again to the same link restarts the 30 days. A daily job deletes expired pages, their earlier versions and their records. For one year afterwards it keeps a one-way hash of the link, the date the page expired and whether it was public, and for a private or shared page, a keyed one-way hash of each GitHub login that could read it. Reading the link then tells those people (anyone, for a public page) that the page expired instead of that it never existed; anyone else gets the same answer as for a link that never existed. None of this holds the page or its title, and a login can neither be read back from it nor checked against it without a key that only the service holds. Deleting a page removes it, its earlier versions and its record. The CLI deletes at once; the library and the app wait a few seconds first, so that you can undo. You can delete any of your pages yourself, at any time, from the library, the app or the CLI.
You can delete your account yourself at foldrender.dev/artifacts/account#delete-account, or in the iPhone and iPad app under Settings, Delete account…. Before you do, you can download all your pages as a zip file — each page's HTML with its annotations, Markdown panel, answers and earlier versions, and your desk. Deletion takes effect at once: it removes your pages, their links, your desk, your tokens and your account record. Signing in again starts a new, empty account. If you cannot reach that page, contact us at the address in "Changes and contact" below.
The Artifacts pages load their fonts from foldrender.dev itself, so opening one contacts no font service. A published page is served as you wrote it, and anything it loads from elsewhere is fetched by your browser, as it would be for any web page. The Artifacts service loads no analytics of its own.
The processors are Cloudflare, which hosts the service and stores the pages and records; Vercel, which hosts foldrender.dev and passes the requests for foldrender.dev/artifacts on to the service; GitHub, which signs you in and confirms your identity; and, only when you press Recognize on handwriting, our model gateway on Amazon Web Services and those that read it: Neon's AI Gateway and Google for the first reading, Anthropic for a second.
The iPhone and iPad app
FoldRender for iPhone and iPad is in public beta on TestFlight. It is an app for Artifacts: it lists your pages and the pages shared with you, opens them, keeps copies for reading offline, lets you write on them, and publishes files from the share sheet. It does not clone repositories. It has no analytics, no advertising and no tracking, and it does not read your device's advertising identifier.
- What it keeps on the device. A FoldRender token for your account, in the iOS keychain, shared only with the app's own share extension: signing in opens GitHub in a browser sheet, and the app receives this token, never your GitHub token. Copies of the pages you open, if Keep pages for offline reading is on (it is unless you turn it off); the list of pages you opened recently; files you open from Files or another app; and, before you sign in, the people you block. Signing out removes the token and ends it on the service (a token you pasted in is only removed); Remove offline copies, and deleting a file in the app, remove those.
- What it sends. To Artifacts, as described above, and only when you use it: signing in, your list, the pages you open, what you publish, changes to who can open a page, deletions, what you write on pages, your answers to their questions, reports and blocks. Its web views are signed in with a session for the app (see Sessions for the apps above). A page you open loads whatever it loads, as it would in a browser.
- Apple. TestFlight sends us the feedback, screenshots and crash reports you choose to send from it. What Apple itself collects is covered by Apple's privacy policy.
In the App Store's terms, the app collects a user ID (your GitHub login and numeric ID) and user content (your pages, what you write on pages, and your answers), both linked to you and used only to make the app work. None of it is used for tracking.
You can delete your account from the app: Settings, then Delete account…, with your login typed to confirm. It deletes everything that deleting it on the website does.
Repos, at foldrender.dev/repos
Repos opens a public GitHub repository on this site, with the wiki and the answers that DeepWiki writes for it. Nothing about it runs unless you open a page under foldrender.dev/repos, or a link that leads there.
- What your browser contacts. To show a repository, your browser asks GitHub (
api.github.com and raw.githubusercontent.com) for its description, files and README, and DeepWiki (mcp.deepwiki.com, run by Cognition) for its wiki. These requests go from your browser straight to those services, without your GitHub sign-in or any token of ours, and like any request they show those services your IP address. A question you type into Ask goes to DeepWiki the same way: we do not receive it and do not keep it. See GitHub's privacy statement and Cognition's privacy policy.
- When GitHub turns your browser away. GitHub limits how often a browser that is not signed in to it may ask. When it refuses, the page asks our service at foldrender.dev/artifacts instead, which fetches the same public data from GitHub and keeps a copy for up to a day so that it does not have to ask again. That request names the repository and the file you are reading and, like any request, shows your IP address, which the service uses only to limit how often it can be called. It keeps no record of who asked.
- Pictures in a README. A README can show images hosted anywhere, such as badges. Your browser loads them from wherever they are, as it would on GitHub, and those hosts see your IP address.
- The repositories you opened. If you are signed in (the same GitHub sign-in as Artifacts), we store the last 50 repositories you opened and when you opened them, so that the list follows you to your other devices. You can remove a repository from the list, and deleting your account deletes the list. If you are not signed in, the list is kept only in your browser's own storage.
- A cookie that says you have signed in before.
__Host-fr_hint holds only the value 1. It tells a page on this site that it is worth asking whether you are signed in. It says nothing about who you are, and signing out removes it.
Android's own backup
Everything in the section above stays on your device as far as FoldRender is concerned:
the app sends none of it anywhere. Android itself is a separate matter, and this page would
be misleading without saying so. If you have backup switched on — it is on by default on
most phones — the system copies app data to your own Google Drive and restores it when you
set up a new phone or transfer to one. It goes to your Google account, not to us: we have
no access to it and no copy of it.
FoldRender deliberately keeps things out of that copy. Your GitHub access token, your
Devin API key and the local push token are excluded, which is what makes it true that
signing out deletes the token and so does uninstalling. The list of folders you have opened
is excluded too, and with it the record of which app each file came from, because a list of
the apps you receive documents from should not reach your cloud storage by a back door. So
are the questions you have asked DeepWiki and the repositories you looked up: a question is
someone thinking out loud about work they may not have shipped.
What is still carried is the way you have set the reader up — theme, font size, reading
width — and the address of the last document you had open, so that a new phone opens where
the old one left off, and the record of which Artifacts page each document went to. Everything else the app holds stays on the device it was made on: your
folders and recent files, your clones and their git history, your commit identity, your
credentials, and the questions you have asked. If you would rather even that much were not
copied, Android's own settings turn backup off — on a Pixel under System, then Backup; on a Samsung phone under Accounts and backup, then Google Drive.
The local push endpoint
FoldRender can open a small HTTP endpoint so a machine on your own network can send a
document straight into the reading pane. It is off by default, binds only
while you have it switched on, requires a token generated on your device, and only ever
accepts documents — it never serves your files back out. It is reachable from your local
network only, never from the internet.
Permissions
The app requests one Android permission, INTERNET, which is what git
operations and GitHub sign-in need. Access to your files comes from the folders you choose in
the system picker, not from a storage permission.
It also declares one package visibility filter. That is not a permission and grants
nothing: it is what lets the app ask Android the name of an app that can receive shared
files, so a document sent to you by a chat app can be labelled with that app's name instead
of an identifier you would have to decode. It matches only apps that can receive shared
content, and the app deliberately does not request the blanket permission that would let it
see everything installed on your phone.
This website
foldrender.dev uses Umami to see which pages get read — it is loaded on the home page
and on the guides and the Artifacts page, not on this policy page. It records page views and an approximate region
derived from your IP address. It sets no cookie, and it gives you no identifier that lasts
from one day to the next, which is why this site asks you to accept nothing before you read
it. Our Umami is self-hosted on a DUOCODE TECHNOLOGY server at fluentdojo.com, so those page
views leave foldrender.dev. We do not use any of it to build advertising profiles, and the
site shows no ads. Hosting is Vercel, whose servers keep standard request logs. Fonts are served from foldrender.dev itself, so loading a page contacts no font service. Artifacts is hosted on Cloudflare, as described above.
Until September 2026 this site loaded Google Analytics 4 instead, which stored a client
identifier in a _ga cookie. It has been removed, and nothing here loads it any
more.
None of this touches the app: FoldRender itself still contains no analytics of any kind.
Children
FoldRender is a developer tool and is not directed at children under 13. Since we collect
no data at all, we hold no information about anyone, children included.
Changes and contact
This policy is provided by DUOCODE TECHNOLOGY (registration LA0087244-A), Malaysia, the
developer of FoldRender, and it is the privacy notice required by section 7 of Malaysia's
Personal Data Protection Act 2010. If it changes, the updated version will be posted here
with a new date. Questions about privacy in FoldRender or Artifacts can go to
duocodetechu@gmail.com.
This notice is published in English, in Chinese and in Bahasa Malaysia. Where the
versions differ, the English version prevails.