โšก 53 developer tools, always updated, new upstream releases land in apt within hours. Join the Discord

๐Ÿ“… From , the apt mirror will require a subscription. See pricing ยท ๐Ÿ†“ There is an always-free mirror

๐Ÿ”‘ How the subscription works

What happens after you pay, how apt authenticates, and how the subscription is handled from renewal to cancellation

โšก The short answer. You pay through Stripe. Within a couple of minutes an email arrives with two things: a login (the email address you used at checkout) and a generated password. You put those in /etc/apt/auth.conf.d/deb.griffo.io.conf and apt sends them over HTTPS with every download. There is no account portal to log into, no token to rotate, no licence file, and no limit on how many machines use the same credentials.

๐Ÿงพ 1. What happens when you pay

  1. You complete checkout on Stripe. Card details go to Stripe and never touch this server.
  2. Stripe confirms the payment and notifies the repository. This is the moment access is created, not the moment the checkout page closes, so a payment still being authorised takes a little longer.
  3. Your account is created and a password is generated for it, at random, on the server.
  4. An email is sent to the address you gave Stripe, containing your login, your password, and the four setup commands. It is the only time that password is ever transmitted.

If it has not arrived within a few minutes, check spam first, then ask in Discord. That is the fastest way to get it sorted, and the account can be looked up by the email you paid with.

๐Ÿ” 2. What the credentials are

FieldValue
LoginThe email address used at checkout, nothing to choose or remember
Password24 random characters, generated server-side, never chosen by you
Stored asA bcrypt hash. The plaintext is not kept. It cannot be looked up later, by me or by anyone else
ExpiryNone. The password does not rotate or time out; only the subscription behind it decides access
MachinesUnlimited. No seat count, no activation, no device registration

Because only the hash is stored, a lost password cannot be recovered, but a new one can be issued on request. Reply to the welcome email or ask in Discord, and you get fresh credentials; the old password stops working the moment the new one is issued. Keep the welcome email, or better, put the password in your password manager.

๐Ÿ–ฅ๏ธ 3. How apt authenticates

Plain HTTP Basic authentication over HTTPS: the mechanism apt has supported natively for years, with no plugin, no helper binary and no extra package. Credentials belong in /etc/apt/auth.conf.d/, never in the sources.list line, where every user on the machine could read them and apt would leak them in error messages:

Run the commands
sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
sudo install -m 600 /dev/null /etc/apt/auth.conf.d/deb.griffo.io.conf
sudo tee /etc/apt/auth.conf.d/deb.griffo.io.conf > /dev/null <<'EOF'
machine deb.griffo.io
login your-email@example.com
password your-subscription-password
EOF
sudo apt update
install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
install -m 600 /dev/null /etc/apt/auth.conf.d/deb.griffo.io.conf
tee /etc/apt/auth.conf.d/deb.griffo.io.conf > /dev/null <<'EOF'
machine deb.griffo.io
login your-email@example.com
password your-subscription-password
EOF
apt update
sudo apt install extrepo
sudo extrepo enable griffo
sudo install -m 600 /dev/null /etc/apt/auth.conf.d/deb.griffo.io.conf
sudo tee /etc/apt/auth.conf.d/deb.griffo.io.conf > /dev/null <<'EOF'
machine deb.griffo.io
login your-email@example.com
password your-subscription-password
EOF
sudo apt update

๐Ÿงฉ About the extrepo option. extrepo is Debian's own tool for external repositories: it writes the sources file and installs the signing key for you, checking the key against signed metadata first. This repository is registered with it as griffo, and the always-free mirror as griffo-free, so on Debian (bookworm, trixie, forky and sid) the commands above are the whole setup.

extrepo sets up the sources file and the key only, so a subscription's credentials still go in /etc/apt/auth.conf.d/deb.griffo.io.conf. Ubuntu is not covered, because extrepo publishes metadata for Debian suites only: there, use the sudo or root commands.

That is the whole integration. Three details matter, and they are the three things that go wrong: the machine line is bare, deb.griffo.io, with no https://, no trailing slash and no /apt path; the filename ends in .conf, because apt silently ignores any other extension; and the file is root-owned and mode 600, because apt refuses to read credentials other users can read, which is why the file is created empty at mode 600 above, before the password is written into it. If apt returns 401, the full checklist is here โ†’

Every request is checked against the database at the moment it is made: the login, the password hash, and whether a subscription behind that account is currently active. Nothing is cached and nothing is issued to your machine, which is why a renewal, a cancellation or a new password takes effect immediately, with no action on your side.

๐Ÿ—๏ธ 4. Servers, containers and CI

One set of credentials covers every machine you run, workstation, laptops, servers, build agents. Drop the same auth.conf.d file on each, or mount it as a secret in CI. What you should not do is bake it into a container image that gets pushed to a public registry: it is a password in a file, and it travels with whatever you copy it into. For images, prefer a build secret, or install the .deb from its public GitHub release, which needs no credentials at all.

๐Ÿ”„ 5. Yearly subscription, the full lifecycle

What happensEffect on your access
Renewal, once a yearSilent. Stripe charges the card, the period extends, your credentials do not change: nothing to do, nothing to re-run
You cancelVia the cancellation link in your welcome email. Access continues to the end of the period you already paid for, then stops
A payment failsAccess stops. Fixing the card and paying restores it, ask in Discord if you get stuck
You resubscribe laterThe same account and the same password are reactivated. No new email is sent, because nothing changed
You request a refundAccess is revoked immediately when the refund is issued
Access endsYou get an email saying so, and apt install starts returning 401. Packages already installed are untouched

โ™พ๏ธ 6. Lifetime, what is different

Lifetime is a single payment, not a subscription. There is nothing to renew and nothing to cancel, no card on file to expire, and price changes do not reach you. The credentials work exactly the same way, same login, same auth.conf.d file, same everything. If you already had a yearly subscription and upgrade, you keep the credentials you have; you get a confirmation email rather than a new password. The one thing that ends lifetime access is a refund.

๐Ÿšฆ 7. What needs no subscription at all

CommandNeeds credentials?
apt updateNo, the indexes stay open to everyone
apt policy / apt-cacheNo
Browsing /apt/dists/No
apt install / apt upgradeYes
Packages already installedNo. They never expire or check a licence
deb-free.griffo.ioNo, free forever, no account
The .deb files on GitHubNo, free forever

So you can add the repository, run apt update and see exactly which versions are on offer before paying anything. The always-free mirror is explained here โ†’

๐Ÿ—ƒ๏ธ 8. What is stored about you

Your email address, the Stripe customer reference, the bcrypt hash of your password, and the dates of your subscription. That is the entire record. Payment details are handled by Stripe and never reach this server. The only emails sent are the ones the service itself requires: your credentials, a confirmation when lifetime access is activated, and a notice when access ends. No marketing, no list. Terms & Conditions โ†’

โ“ Still unsure?

Ask before you pay, the Discord is the fastest way to reach me, and questions about how any of this works are welcome. If you supported the project on Buy Me a Coffee in the past, come and say so there: you get a free lifetime subscription.