/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
- You complete checkout on Stripe. Card details go to Stripe and never touch this server.
- 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.
- Your account is created and a password is generated for it, at random, on the server.
- 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
| Field | Value |
|---|---|
| Login | The email address used at checkout, nothing to choose or remember |
| Password | 24 random characters, generated server-side, never chosen by you |
| Stored as | A bcrypt hash. The plaintext is not kept. It cannot be looked up later, by me or by anyone else |
| Expiry | None. The password does not rotate or time out; only the subscription behind it decides access |
| Machines | Unlimited. 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:
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 updateinstall -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 updatesudo 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 happens | Effect on your access |
|---|---|
| Renewal, once a year | Silent. Stripe charges the card, the period extends, your credentials do not change: nothing to do, nothing to re-run |
| You cancel | Via the cancellation link in your welcome email. Access continues to the end of the period you already paid for, then stops |
| A payment fails | Access stops. Fixing the card and paying restores it, ask in Discord if you get stuck |
| You resubscribe later | The same account and the same password are reactivated. No new email is sent, because nothing changed |
| You request a refund | Access is revoked immediately when the refund is issued |
| Access ends | You 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
| Command | Needs credentials? |
|---|---|
apt update | No, the indexes stay open to everyone |
apt policy / apt-cache | No |
| Browsing /apt/dists/ | No |
apt install / apt upgrade | Yes |
| Packages already installed | No. They never expire or check a licence |
| deb-free.griffo.io | No, free forever, no account |
The .deb files on GitHub | No, 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.