Membora
A club register that knows who is in good standing, whether a meeting was quorate and what carried.
For clubs and associations. Often replaces ClubExpress, WildApricot or Join It.
Single license $59 · Extended license $129 · paid once, yours for good
What it does
Anyone at the meeting can be marked present; standing decides whether they may vote. Standing is worked out from what each member has paid.
A motion cannot carry at an inquorate meeting; the refusal names the numbers and the motion stays open.
Mark people present during the meeting and the quorum figure updates as you go. One definition of quorum serves the screen, API and assistant.
Close a meeting and its minutes, roll and votes are sealed with a SHA-256 of the record. The PDF and CSV say whether it still matches.
The renewal email says what renewing costs and how to pay, by your payment link or bank details. Nothing sends until you switch it on.
Members register for events themselves with their member number and email, and capacity applies.
Each member carries a card link with a QR code that shows today's standing.
A household or an organization holds one membership that covers its people. Leaving deletes nothing and keeps the paid-to date.
A PDF receipt for every payment, and payment requests that carry your payment link and bank details.
Add your own fields to every member. They appear in the export and can filter it.
Filter the export by status, rate, people or organizations, lapsing soon, an overdue charge or your own fields.
Minutes, the roll, the tally and the outcome export as PDF and CSV, ready to send round.
Also: a Send reminder button for arrears, a renewal follow-up, and role-checked REST writes.
What Membora deliberately doesn’t do.
- **No card processing of its own** — members can pay dues by card on Stripe's own page when you switch on card payment with your own Stripe account; otherwise it records what was paid
- **No member logins** — members register for events with their number and email and carry a card link; they are tracked, not users
- **No online or remote voting** — it records votes taken at a meeting, it does not run ballots
- **No accounting** — subscriptions are a membership fact, not a ledger
- **Single-tenant: one organization per installation**
- **Not legal advice** — what your constitution requires for quorum and eligibility is yours to set
What renting costs instead
3 months of ClubExpress costs what Membora costs once.
Read Sep 26, 2026 · source1 month of WildApricot costs what Membora costs once.
Read Aug 22, 2026 · source3 months of Join It costs what Membora costs once.
Read Aug 22, 2026 · sourceThe full comparison: every rival, what each does better, and who should stay with them →
Replacing one of these? ClubExpress alternative · WildApricot alternative · Join It alternative
Release history
For Membora, 4.1 adds dues paid by card through your own Stripe account, and renewal reminders by text through your own SMS gateway. What’s new in 4.1 →
For Membora, 4.0 means updates from inside the app: the Updates page checks for a new release with your license key, verifies Ownware's signature, takes a backup and… What’s new in 4.0 →
For Membora, 3.3 meant memberships held by a company, school or group, covering the people added to its household, and a members export you filter by status, rate… What’s new in 3.3 →
For Membora, 3.2 meant renewal emails that say what renewing costs and how to pay, PDF receipts and payment requests, members signing up for events themselves, digital…
Membora was built after the 3.1 wave.
What’s in the zip
The tree as the zip ships it — the working leftovers the packager deletes are not listed
- .htaccess
- API.md
- Dockerfile
- LICENSE.txt
- QUICKSTART.txt
- README.md
- assets/
- bin/
- config.sample.php
- controllers/
- cron/
- deploy/
- index.php
- install/
- manifest.json
- offline.html
- router.php
- src/
- sw.js
- tests/
- views/
src/Membership.php: a real module, the first 24 of 422 lines
Chosen as the largest module in src/ that is not one of the shared cores — this product's own logic, not a file every product carries.
<?php
/**
* Membership.php — Membora's business core (fully covered by tests/run.php, offline).
*
* A club's membership desk lives and dies on one question asked hundreds of times a day:
* "can this person walk in right now?" The answer depends on membership status, an
* end date that may have quietly passed, and whether the member's standing lets them vote.
* left. Getting that wrong means either turning away a paying member or letting an
* expired one train for free.
*
* This class holds all of that logic as pure functions: the voting guard, status
* transitions, term-date math, the expiring/arrears/revenue calculations that drive
* the dashboard, and CSV export. Nothing here touches the database or the network,
* which is exactly what makes it testable in isolation and trustworthy in production.
*
* Ownware conventions: money is integer cents; dates are "YYYY-MM-DD" strings;
* "today" is computed by the caller in the business's configured timezone.
*/
declare(strict_types=1);
final class Membership
{
/** Every status a member or a membership can hold. */
public const STATUSES = ['active', 'frozen', 'expired', 'cancelled'];Runs on: Web installer in about two minutes; plain PHP 8.1+ with MySQL/MariaDB (or SQLite for a trial), no Composer and no build step — Docker one-liner included. Tested on PHP 8.3. Or run it in Docker: the Dockerfile is in the zip.
Technical owners can install it with one line and their license key: curl -fsSL https://ownware.io/install.sh | sh -s -- membora <your license key>
Nothing is obfuscated or encoded; what you read is what runs. Manual · API · the test run
Which license do I need?
It comes down to how many installations you need. Running your own business on one site is the Single license. A second domain of your own, or sites you build or run for other people, is the Extended license.
- Install it on one domain or subdomain you own or operate
- Change the source however you like for that installation
- Run your own business on it commercially, client work included
- Re-download the current build any time from your buyer portal
- A second site, or an installation you hand to a client as theirs, needs the Extended license
- No reselling, redistributing or sublicensing the source
- Not for offering it to other people as a hosted service
- Everything the Single license grants
- Install it on as many domains as you own or operate — no cap on the number
- Up to ten client installations, one per client project, handed over or hosted for each client; for more, buy another Extended license
- White-label: remove or replace the product name and logo in the screens of client installations
- Still no reselling or redistributing the source itself
- Running it as a multi-tenant service others sign up for needs a SaaS agreement
Every download carries the full terms as LICENSE.txt. The complete wording is on the terms page.
After you buy
The app’s Updates page installs a new release with your license key, with the release’s signature checked and a backup taken first. Your download link always serves the current build. Download again any time from your order page or the buyer portal; there is no renewal fee.
Email support for installation and for defects in the code as delivered: a person reads and answers every message. It does not cover custom development or server administration. What support covers
Refunds are handled by Lemon Squeezy as merchant of record, case by case. EU consumers keep the statutory 14-day right until delivery starts. Refund terms
It keeps running: your server, the full PHP source, no license check that can fail. If no stable release is published for 365 days, the domain limit lifts; after three such years your copy becomes MIT-licensed. The terms have the exact wording: continuity.
Questions
Does it take payments?
Can members log in?
Does it run online voting?
What happens if a lapsed member votes anyway?
Can it handle several clubs?
Is it priced per member?
Does a member in arrears get turned away at the door?
Are life members chased for renewal?
Is a subscription due today already overdue?
Covered in these guides
More about Membora
Self-hosted membership register for clubs and associations: who is in good standing, whether a meeting was quorate, and whether a motion actually carried.
The problem it solves
A club's records are fine until the year somebody disputes a vote. Then the questions arrive at once: who was a member on that date, were enough of them present, and was the person who moved it entitled to vote at all.
Those are three different questions, and a spreadsheet of names and payment dates answers none of them.
- Membership, subscriptions and attendance kept in three places that disagree
- Minutes that record a motion as carried without recording whether the meeting was quorate
- Association software priced per member per month, for a register that changes a few times a year
Every feature
- Standing gates the vote, not the door. Attendance is a record of fact: anyone who was there can be marked present, lapsed or not. Standing decides whether they may VOTE. Conflating the two is how registers end up unable to answer either question.
- A motion cannot carry at an inquorate meeting. The refusal names the numbers — 4 present, 5 required — and the motion stays open. Withdrawing is still allowed, because withdrawal is not a decision the meeting takes.
- Quorum has ONE definition. Computed in one place from the roll and the rule, and used by the screen, the REST API and the assistant tool alike. A quorum that means something different in two places is not a quorum.
- Roll call as it happens. Mark people present during the meeting, and the quorum figure updates as you go. The fifth arrival is the moment the meeting becomes able to decide, and the screen says so.
- Subscriptions and standing. Rates, periods, and what each member has paid — with standing derived from it rather than typed in. Good standing is a computed fact about a date, not a checkbox somebody remembered to tick.
- The record afterward. Minutes, the roll, the tally and the outcome, exportable as PDF and CSV — the document you send round, and the one you produce when the vote is questioned a year later.
- Renewal notices by email. A daily cron job writes to each member whose subscription is about to end, once per end date, through your own SMTP, with the amount and your own payment link or bank details. Nothing sends until you switch it on.
- A meeting record you can prove. Close a meeting and its minutes, roll and votes are sealed with a SHA-256 of the record. The PDF and CSV carry the seal and say whether the record still matches, so a vote questioned a year later can be checked.
- Renewals that collect. The renewal email says what renewing costs and how to pay: your own payment link and/or your bank details. One follow-up goes to members who have not renewed, and arrears have a Send reminder button. No platform fee, no percentage.
- Your club's own fields. Your own fields on every member, and in the export.
- Members sign up for events themselves. With their member number and email; capacity applies.
- Digital membership cards. Cards that show today's standing, with a QR code.
- Joint and family memberships. People in a member's household are covered by that subscription; leaving deletes nothing and keeps the paid-to date.
- PDF receipts and payment requests. For every payment, with your payment link and bank details on a request.
- Organization memberships. A company, school or group holds the membership, and the people added to its household are covered by it.
- Export exactly who you need. The members export filters by status, rate, people or organizations, lapsing within so many days, an overdue charge, or one of your own member fields.
- Updates from inside the app. The Updates page installs a new release with your license key: Ownware's signature is checked, a backup is taken first, and the app puts the previous version back by itself if the update is interrupted or the database step or start-up check of the new version fails. It never checks by itself.
- Backups by themselves. Automatic backups, an optional copy to S3-compatible storage you own, and a weekly check that the latest backup reads back. The Health page names anything that needs attention.
- Dues by card. Switch on card payment with your own Stripe account and a member pays an unpaid charge or their renewal from their card page, on Stripe's own page. Membora records it when Stripe confirms the payment, and a renewal moves their standing. No card number reaches your server.
- Renewal reminders by text. Texts through an SMS gateway the club already pays for, only to members with Texts OK ticked on their record: 14 and 3 days before the membership ends by default, inside your send window. Every text links to the member's card page, where one tap stops them.
- Own It 4.0.1 — fixes and an up-to-date manual. For Membora, 4.0.1 fixes an installer that had lost its styling, a rollback that a page opened during an update could stop, scheduled tasks that a browser could start and a command-line update that ended in an error after putting the previous version back. Its manual, FAQ and QUICKSTART now cover everything 4.0 added, including two Nginx rules that keep the data folder private. Your license covers it: press Check for updates on the Updates page, or download it from your order page.
- Own It 4.0.2 — the installer opens on every host. For Membora, 4.0.2 fixes a fresh install on an Apache host: the one-page setup at /install/ looped back to itself and never opened, and now it opens. Your license covers it: press Check for updates on the Updates page, or download it from your order page.
Release notes in full
- Own It 4.1: dues by card, renewals by text. For Membora, 4.1 adds dues paid by card through your own Stripe account, and renewal reminders by text through your own SMS gateway. An Extended license bought from October 4, 2026 covers up to ten client installations, one per client project: hand each one over to the client or host it for them, with the client's logo and colors from the app's branding settings. The API reference now shows how to connect Membora to Zapier, Make or n8n, using its own webhooks and API key. Your license covers the update: press Check for updates on the Updates page, or download it from your order page.
- Own It 4.0: it updates and backs itself up. For Membora, 4.0 means updates from inside the app: the Updates page checks for a new release with your license key, verifies Ownware's signature, takes a backup and puts the previous version back by itself if the update is interrupted or the database step or start-up check of the new version fails. A new install can start with a sample business and remove it in one click; backups run by themselves, with an optional offsite copy and a weekly check that the latest one reads back; and the Health page says whether the install is looking after itself.
- Own It 3.3: organizations as members. For Membora, 3.3 meant memberships held by a company, school or group, covering the people added to its household, and a members export you filter by status, rate, lapsing date, an overdue charge or one of your own fields. Both are cards above.
- Own It 3.2: renewals that collect, and a record you can prove. For Membora, 3.2 meant renewal emails that say what renewing costs and how to pay, PDF receipts and payment requests, members signing up for events themselves, digital cards with a QR code, joint and family memberships, your own member fields, and meeting records sealed so a questioned vote can be checked. Every REST write now checks the key holder's role. Each change is a card above.
- Own It 3.1: it writes to the people you serve. Membora was built after the 3.1 wave. Its outbound path is the renewal notice: a daily job writes to each member whose subscription is about to end, once per end date, through your own SMTP — off until you switch it on.
Browse self-hosted: Front-office software · Charity, club & association software · Coworking & workspace software