Privacy

Last updated: 2 August 2026

Rowline is in private beta and is run by one person, not a company. This page is a plain-language draft written by reading Rowline's own source code. It is not legal advice, and it has not been reviewed by a lawyer. Everything below describes what the app actually does today; where something is not decided yet, it says so instead of guessing.

Your patterns stay on your device. When you import a pattern, Rowline saves it in your browser's own storage on the device you used. It does not upload the PDF, the photo, the pasted text, your rows, your notes, or your row-by-row progress anywhere, unless you choose to sign in and sync, which is off unless you turn it on.

What Rowline keeps on your device

Rowline is a local-first app. The following live in your browser's local storage, on that browser, on that device:

Rowline's own code does not set any cookies. Your browser also keeps a copy of the app's own files (the page, the stylesheet, the scripts, the icons) in a service-worker cache so the app keeps working offline. That cache holds Rowline's program files, not your patterns.

Because this is ordinary browser storage, clearing your browser data, using private browsing, or switching device or browser will lose it. Rowline has a "Download backup" button that writes your saved projects to a JSON file you keep, and a "Restore backup" button that reads one back. During beta, please use them.

What happens when you import a pattern

PDFs and photos

PDF reading and image handling happen inside your browser. Rowline loads its PDF reader from its own server first, and only falls back to a public code CDN (cdnjs, jsDelivr) if that copy fails to load. In either case what travels is Rowline's program code, in one direction: your file is not sent to Rowline or to anyone else.

OCR (reading text out of an image)

If a PDF is image-only, Rowline offers a "Try OCR" button. OCR only runs when you press it. The recognition itself runs in your browser; to do that, your browser downloads the OCR engine from jsDelivr and the English language data from tessdata.projectnaptha.com. Those hosts see a request for their own files, and can see your IP address as any web request would. The page image is not uploaded to them or to Rowline.

Website imports

If you paste a link to a pattern page, Rowline can't fetch that page directly from your browser, so the address you paste is sent to Rowline's own server, which fetches the page and hands the HTML back to your browser to parse. The request is made without your cookies or credentials. That endpoint does not store the page and does not write the address to a database; it refuses anything that isn't a public http/https address. If a site blocks it, you can paste the pattern text instead, and nothing leaves your device at all.

Pasted and typed text

Nothing leaves your device.

Anonymous beta usage events

During the private beta, Rowline sends a small anonymous event when you pass certain points in the flow, so it's possible to see where the app is losing people. There are exactly nine such points, and each is sent at most once per visit:

Two more are sent from this site's own pages rather than the app, so it's possible to tell whether anyone finds them at all:

Each event carries exactly five things and nothing else: the word funnel, which of those nine step names it is, a random session number, the app's build version (the two events sent from this site's pages carry no version, because those pages don't have one), and one word for how you arrived. The random session number is generated fresh each time the page loads, is not tied to any account, and is not stored anywhere in your browser. It exists only so the steps from one visit can be read together. No pattern text, pattern title, file name, link, email address or account identifier is included, and the server that receives it copies only those five named fields before storing them. Your IP address and your browser's user-agent string are not part of the stored event.

The word for how you arrived is one of exactly these nineteen, and never anything else: direct, rowline, ravelry, lovecrafts, etsy, kofi, reddit, facebook, instagram, threads, pinterest, youtube, tiktok, bluesky, discord, email, ai, search, other. It exists so Rowline can tell which places are worth posting in, without which there is no way to know whether anyone is finding it at all. The address of the page you came from is not sent, and never leaves your device. Your browser works out which of those ten words applies and sends only the word, so the page address, anything after the ? in it, and any words you typed into a search box are discarded before anything is sent. If you came from somewhere not on the list, that is other: the name of the site is not recorded. If your browser sends no referrer at all, which many do, that is direct.

These events are kept in Rowline's own database, and are also written to the hosting provider's function log, which that provider discards within a day. They are not shared with anyone. There is no analytics product, no advertising network, and no tracking pixel anywhere in Rowline: counting these eight steps is the only way Rowline knows whether the app is being used at all, which is why the list stays this short.

Turning it off

Crash reports

If the app hits an unexpected error, it automatically sends a short report so the bug can be found: the error message, the technical stack trace, the file and line it came from, the path of the page you were on, the app version, and your browser's user-agent string. These are capped at five per visit, repeats are skipped, and they are written to the hosting provider's function log rather than a database.

An honest caveat. Rowline never deliberately puts pattern content into a crash report, and none of the fields it fills in are pattern fields. But an error message and a stack trace are produced by the browser, not by Rowline, and Rowline does not scrub them. It is therefore possible in principle for a fragment of whatever was being processed to appear in one. Saying that plainly is better than promising a guarantee the code doesn't make.

Feedback you send

Nothing is sent unless you press Send. When you do, the feedback form sends: your message, the email address you optionally typed, a subject, the app version, a short description of your browser and operating system, and the path of the page you were on. It is emailed to feedback@rowline.app.

A copy of those same fields is also stored in Rowline's Supabase database. Email alone used to be the only copy, which meant a report could vanish if the delivery failed. The stored copy is not public: the table is configured so that browsers can neither read nor write it, and only Rowline's own server can add to it. There is no automatic deletion yet. If you want a report you sent removed, email feedback@rowline.app and it will be deleted.

If you're reporting a bad import, Rowline attaches an import diagnostic summary and tells you on the form that it is doing so. That summary describes how the import went (source type, how many rows were found, confidence, and Rowline's own warning messages) and deliberately excludes the raw pattern text. For a website import it does include the address of the page you imported, so the problem can be reproduced.

Your email address is used to reply to you about your feedback. There is no mailing list and no newsletter.

If you sign up as a tester

The form on the testers page asks for your email address, and optionally a short note about what you crochet. Submitting it also records the same context the feedback form does: the app version, a short description of your browser and operating system, and the path of the page you were on.

Those are stored in a tester_signups table in Rowline's Supabase database, and a notification is emailed to feedback@rowline.app so the sign-up gets seen. As with feedback, the table is configured so that browsers can neither read nor write it; only Rowline's own server can add to it.

Signing up is not the same as signing in, and it does not create an account. Your email is used to send you an invite and to write back to you about the beta. To be taken off the list, email feedback@rowline.app and the row will be deleted.

If you sign in

Signing in is optional, and Rowline works fully without it. If you do:

If you never sign in, none of this applies and no account exists.

Services Rowline relies on

These are the only third parties named anywhere in the code, and what each one is for:

The app ships a strict content-security policy that only permits connections to those hosts, so a stray request somewhere else would be blocked by your browser rather than silently allowed.

Your patterns and your copyright

Patterns you import are yours (or their author's). Rowline claims no rights over them, does not train anything on them, and does not share or sell them. By default they never leave your device, which is the strongest form of that promise Rowline can make.

Children

Rowline is a tool for people following crochet patterns and is not designed for or aimed at children. It does not ask your age and has no way of knowing it. If you are a parent and believe a child has created an account, email feedback@rowline.app and it will be deleted.

Deleting your data

Changes to this page

If this page changes, the "Last updated" date at the top changes with it. There is no mailing list, so Rowline cannot notify you; the date is the notice.

Contact

One address for everything, including privacy questions and deletion requests: feedback@rowline.app.