~ knotless Search/
↑↓ move↵ open⇧↵ all results

johnandersen777.bsky.social/knotless

git that lives in your Atmosphere account

Forked from chadtmiller.com/knotless

0
0
181 lines · 8.8 KB Raw History
<script lang="ts">
	import Meta from '#lib/atoms/Meta.svelte';
</script>

<Meta title="privacy policy · knotless" />

<article class="policy">
	<h1>Privacy policy</h1>
	<p class="updated">Last updated: October 27, 2026</p>
	<h2>In short</h2>
	<p>
		Most of what knotless.dev shows is already public: your repositories, pulls, issues and comments
		are records on your PDS, the server that hosts your atproto account, and anyone can read them.
		knotless.dev keeps a little more to log you in, show you private repositories you belong to, and
		count how it is used. It shows no ads, sells nothing, runs no third-party analytics and sends no
		email. This page says what it keeps, who else is involved, how long things last and how to
		remove them.
	</p>
	<h2>What is public by design</h2>
	<p>
		On atproto, your account is named by a DID, a permanent identifier, and shown by a handle such
		as alice.example.com. Its records live on your PDS, and public records there can be read by
		anyone, not only knotless.dev. A repository you push, a pull or issue you open, a comment, a
		star or a follow is one of these records.
	</p>
	<p>
		knotless.dev reads these records from the network, indexes them and caches the git data, so it
		can draw pages and answer clones. It cannot make a public record private, and removing something
		from knotless.dev does not remove it from your PDS or from other services that read it.
	</p>
	<p>
		The email addresses you link to your commits are kept the same way, in a record in your own
		account, but only as SHA-256 hashes salted with your DID. No one can list them.
	</p>
	<p>
		Private repositories are the exception. Their records can be read only by their members.
		knotless.dev indexes one when a member reads it there or when its owner logs in, keeps it in
		step through a member's session, and forgets it once that access fails. Private repositories
		never appear in search, feeds, social cards or stars, and their cached git data is kept apart
		for each viewer.
	</p>
	<h2>What knotless.dev keeps beyond that</h2>
	<p>Cookies. Logging in sets three, all HttpOnly, Secure and SameSite=Lax:</p>
	<ul>
		<li><code>knotless_session</code>, signed, names your DID, and lasts 90 days.</li>
		<li><code>knotless_accounts</code> lists up to four other accounts you are logged in to.</li>
		<li><code>knotless_login</code> holds the state of a login in progress, for 15 minutes.</li>
	</ul>
	<p>Your browser also keeps your time zone in a cookie for a year, so times show in your zone.</p>
	<p>
		Sessions. When you log in, knotless.dev holds your OAuth session on the server. A session from
		the web pages can do what knotless needs, including reading private repositories you are a
		member of. A session for the git gateway lasts up to two years if used at least every three
		months. An MCP session is dropped after 90 days unused.
	</p>
	<p>
		Notifications. Your notifications are worked out from the index. knotless.dev keeps when you
		last looked, and which notifications you chose to hear of.
	</p>
	<p>
		Usage counts. Requests are counted by the hour, by route and by the kind of client that sent
		them. Pages drawn in a browser report the route and, if you came from another site, that site.
		Visitors are counted once a day by a hash of their IP address, with its last byte dropped, and
		their browser's user agent, salted with a key made for that day. The key and the hashes are
		deleted once the day is over, so no address is kept and no one can be followed from one day to
		the next. A browser that sends Global Privacy Control is not counted. Which accounts used which
		kinds of action each day is counted by DID, and the DIDs are dropped after 30 days, leaving only
		totals that name no one. Why an action failed, as the server answered, and the user agents of
		crawlers and scripts, never of browsers, are counted by the hour and dropped after 30 days.
	</p>
	<p>
		Logs. The server logs each request's route, path, query string, status, size, duration and a
		trace ID, and for some requests the DID and repository involved. Before a query string is
		logged, any value that could be a secret is removed, such as a login code, a token or a
		password. Login requests have no query string logged at all. The server never logs headers or
		request bodies, and its logs hold no IP addresses. Logs are deleted after 30 days.
	</p>
	<p>
		Hosted CI. The minutes a public repository's CI uses are published as records. Private
		repositories' minutes are not.
	</p>
	<h2>What knotless.dev never does</h2>
	<ul>
		<li>It shows no ads and sells no data.</li>
		<li>It runs no third-party analytics or error tracking.</li>
		<li>It sends no email.</li>
		<li>The knotless command line tool sends no telemetry.</li>
	</ul>
	<h2>Who else is involved</h2>
	<ul>
		<li>Hetzner hosts the server and the CI runners.</li>
		<li>Cloudflare provides DNS. Traffic does not pass through Cloudflare.</li>
		<li>
			Cloudflare Workers AI suggests labels for issues: the labeller sends it an issue's title and
			text, on repositories that use the labeller.
		</li>
		<li>The Bluesky relay and Jetstream feed the index with records from across the network.</li>
		<li>
			typeahead.waow.tech suggests handles as you type in the login dialog, and receives what you
			type there.
		</li>
		<li>
			<a href="https://selfhosted.social" rel="noopener noreferrer">selfhosted.social</a> creates your
			account if you choose "Create one" in the login dialog. It is a PDS run by others, under its own
			policies.
		</li>
	</ul>
	<p>
		Your PDS, wherever it is, holds your records and your login. Its operator's policy covers what
		it keeps.
	</p>
	<h2>How long things are kept</h2>
	<ul>
		<li>Session cookies: 90 days. Login cookies: 15 minutes. The time zone cookie: one year.</li>
		<li>
			Gateway sessions: up to two years if used every three months. MCP sessions: until 90 days
			unused. Any session: until you log out.
		</li>
		<li>Daily visitor hashes and their key: until the end of the day.</li>
		<li>
			DIDs in usage counts, and why actions failed: 30 days. Hourly counts carry no DID or address.
		</li>
		<li>Private repositories: until no member's access works any more.</li>
		<li>Server logs: 30 days.</li>
	</ul>
	<h2>How to remove things</h2>
	<ul>
		<li>Log out. This ends your session on the server and revokes it.</li>
		<li>Delete a comment you wrote.</li>
		<li>
			Delete a repository. This removes its record, refs and git data from your account, and
			knotless.dev stops showing it. Pulls, issues and comments others wrote about it stay in their
			accounts.
		</li>
		<li>
			Delete your knotless data, from <a href="/settings/profile">your account settings</a> or with
			<code>knotless account delete-data</code>. This deletes every knotless record from your
			atproto account: your repositories, private ones with their spaces, and your pulls, issues,
			comments, stars, follows and the rest. knotless.dev then deletes everything it indexed from
			you and ends your sessions, as for a deleted account below. Your atproto account, and what
			other apps keep in it, stay.
		</li>
		<li>
			Delete your account at its PDS. knotless.dev then deletes everything it indexed from the
			account, its repositories' cached git data and any sessions it kept for you. It keeps only its
			moderation records about the account: takedowns and reports. An account deactivated at its PDS
			is hidden instead, and comes back if it is reactivated.
		</li>
		<li>
			For anything else, ask on the <a
				href="https://knotless.dev/chadtmiller.com/knotless/issues"
				rel="noopener noreferrer">knotless issue tracker</a
			>.
		</li>
	</ul>
	<h2>Your rights</h2>
	<p>
		Depending on where you live, laws such as the GDPR give you the right to ask what data is held
		about you, to have it corrected or deleted, to object to its use, and to complain to a data
		protection authority. Most of your data is in your own account, where you can read and delete it
		yourself, all at once by deleting your knotless data. For what knotless.dev keeps, ask on the <a
			href="https://knotless.dev/chadtmiller.com/knotless/issues"
			rel="noopener noreferrer">issue tracker</a
		>. An issue there is public, so say what you need without posting the data itself.
	</p>
	<h2>Children</h2>
	<p>
		knotless.dev is not for anyone under 16. If you learn that a child under 16 is using it, tell
		the maintainers on the issue tracker.
	</p>
	<h2>Changes to this policy</h2>
	<p>When this policy changes, the date at the top changes too.</p>
	<h2>Contact</h2>
	<p>
		knotless.dev is run by the knotless project's maintainers. Reach them on the <a
			href="https://knotless.dev/chadtmiller.com/knotless/issues"
			rel="noopener noreferrer">knotless issue tracker</a
		>. There is no email address. See also the <a href="/terms">terms</a> and the
		<a href="/guidelines">community guidelines</a>.
	</p>
</article>