Skip to content

PayGlue-OS v0.4.0 — Run it yourself, without signing up for anything

Latest

Choose a tag to compare

@Nuenni Nuenni released this 08 Aug 19:56
· 1 commit to main since this release
bf9004a

You can finally just run it

Until this release, starting your own copy of PayGlue meant creating a Supabase project first. Not as a nice-to-have. Without one the application threw while loading and never reached a screen at all.

That is a strange first requirement for software you were about to run on your own machine. It is gone.

git clone https://github.com/PayGlue/PayGlue-OS.git
cd PayGlue-OS
cp .env.example .env      # fill in one key, the file tells you the command
docker compose up -d postgres redis
docker compose run --rm web python manage.py migrate
docker compose up -d

Open the dashboard and it walks you through creating your account and your first publication. No external service, no second sign-up, no account anywhere but yours.

Accounts that live in your installation

LOCAL_AUTH_ENABLED=1, which the compose file now sets by default, and the accounts are in your own database. Django hashes the passwords, Django's token generator carries the reset links.

This is a branch, not a fork. get_auth_token_verifier() already chose between four implementations behind one protocol; local accounts are the fifth. A local token arrives in the same header and resolves to the same profile through the same invite gate, so nothing downstream can tell the two apart. Whatever is true of the hosted path stays true here, including the parts nobody remembers to test.

Prefer a hosted identity provider? Unchanged, and it still brings what only such a provider can: authenticator apps, magic links, sign-in with Google or GitHub. Where those do not exist, the screens for them are hidden rather than shown and broken.

Setup on first run

Two steps: pick how sign-in works, create the first account. Then straight into the publication and Ghost screens that were always there.

The wizard closes for good once an account exists, and that is decided by counting rows in your database, never by anything the browser sends. Everyone after the first person arrives by invitation. An installation reachable from the internet with an open registration endpoint is the easiest way there is to lose it, so that gate is not a UI decision.

We installed it before we shipped it

This is the first release that was set up twice from a clean clone before it went out, on a laptop, with Docker Desktop, following our own guide word for word. That found things no test could:

  • The quickstart broke the install. .env.example shipped a placeholder encryption key that is not a valid key, and it overrode the working default in the compose file. Copying the example file, step one of our own guide, left you worse off than skipping it. Fixed, with the command to generate a real one right beside the empty value.
  • Host ports could not be changed without editing a file under version control. Compose appends port lists rather than replacing them, so the obvious workaround does not work. They come from the environment now.

Neither of these would ever have shown up in CI. Both stood between a stranger and their first working install.

Also in this release

  • X-Frame-Options was missing from every response, including the HTML the embed endpoints serve. The middleware that sets it was simply not in the list. Found by a test we had written but never published.
  • The full test suite ships now: 176 tests become 579. It used to be a separate hand-maintained copy here, which is how main once went red for two commits without anyone noticing.
  • Billing, plans and affiliate screens are gone. They were the storefront of the hosted service. You have no subscription with us, and being shown one is worse than being shown nothing.
  • Creating a publication no longer needs PostgREST.
  • A race in the setup gate is closed. Two requests arriving together could both create a first account, leaving an installation with two administrators. A unique index settles it in the database now, however the two are interleaved.
  • The setup guide gained a chapter on signing in, and the wizard carries a short letter about why this project exists.

Upgrade notes

Run migrations. 0044 and 0045 add local credentials and the constraint that keeps the first account unique.

Using a hosted identity provider? Nothing changes. Leave LOCAL_AUTH_ENABLED unset or 0 and everything works exactly as before.


Full changelog: CHANGELOG.md · Setup guide: SETUP.md · Docs: docs.payglue.io