Discourse Member Application

:information_source: Summary Discourse Member Application lets you run a structured application process for prospective members before they join your Discourse community.
:hammer_and_wrench: Repository Link GitHub - R23DPrinting/discourse-member-application · GitHub
:open_book: Install Guide How to install plugins in Discourse

discourse-member-application — A Pre-Invite Application System for Private Communities

discourse-member-application lets you run a structured application process for prospective members before they join your Discourse community. Applicants fill out a customizable public form at /apply, admins review submissions and approve or reject them, and approved applicants receive a private invite link automatically.

:link: GitHub: GitHub - R23DPrinting/discourse-member-application · GitHub


The Story

I run a private community that uses Discourse’s invite-only mode. We were managing membership applications manually — a Google Form, a spreadsheet, copy-pasting invite links by hand. It worked, but it didn’t scale and it felt disconnected from the community itself.

I looked for a Discourse plugin that could handle pre-invite applications. I didn’t find one that fit. So I built this.


Demo


Features

:clipboard: Customizable Application Form
The form is built entirely through a Fields tab in the admin panel — no code required. Supported field types: text, textarea, yes/no, radio, checkbox group, and checkbox. Fields support labels, hints, required/optional, enable/disable, and conditional visibility (show a field only when another field has a specific value).

:magnifying_glass_tilted_left: Admin Dashboard
Review and manage all applications from a dedicated plugin page. Filter by status (Pending / Approved / Rejected / Redeemed), search by email or username, and paginate through large lists. View full application details, add private admin notes, and approve or reject individually or in bulk.

:white_check_mark: Approval Flow
Approving an application generates a single-use Discourse invite and emails it to the applicant. Rejecting sends a customizable rejection email with optional feedback. When the applicant redeems their invite and creates an account, the application status automatically updates to “Redeemed.” Approved members can optionally be added to a Discourse group automatically.

:bar_chart: Analytics
The Analytics tab shows summary stats (total applications, approval rate, avg review time), a 12-week trend chart of submissions vs approvals, and a conversion funnel from submitted → approved → redeemed.

:bell: Admin Notifications
When a new application is submitted, a private message is sent to configured usernames (or all admins if left blank).

:artist_palette: Configurable UX

  • Intro text at the top of the form (supports markdown)
  • Success page at /apply/success after submission with a configurable message (supports markdown)
  • “Apply to Join” button on the login page and login-required homepage (toggleable)
  • Application expiry — auto-reject pending applications after a configurable number of days

:e_mail: Editable Email Templates
Both the submission confirmation and rejection emails are editable via Admin → Customize → Email Templates — no code changes needed.

:locked: Security
Rate limiting (5 submissions per IP per hour), duplicate detection (blocks re-submission with pending/approved email or username, and blocks already-registered emails/usernames), and single-use invites.


Configuration

Installation

Add to your /var/discourse/containers/app.yml:

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/R23DPrinting/discourse-member-application.git

Then rebuild:

cd /var/discourse && ./launcher rebuild app

Setting Up Your Form

After installation, go to Admin → Plugins → Member Application → Fields to build your application form.

The plugin ships with these default fields (all editable or deletable):

  1. Desired username
  2. Tell us a bit about yourself
  3. How did you hear about us?
  4. Are you currently part of any other similar online communities? (yes/no)
  5. If yes, which ones? (conditional — shown only when above is Yes)
  6. Vendor disclosures (checkbox group)
  7. Honesty confirmation (checkbox — system field, cannot be deleted)

Use the Add field button to create new fields. Use the up/down arrows to reorder. To make a field conditional, edit it and use the “Show only when” section to select a parent field and trigger value.

Workflow

  1. Prospective member visits your site and clicks Apply to Join (or navigates directly to /apply)
  2. They fill out the form and submit — no account required
  3. Admins receive a private message notification
  4. Admin reviews the application in Admin → Plugins → Member Application → Applications
  5. Admin approves → applicant receives an invite email with a single-use link
  6. Applicant redeems the invite, creates their account, and the application status updates to Redeemed

Settings

Name Description
member_application_enabled Enable or disable the application form at /apply
member_application_notify_usernames Comma-separated usernames to notify via PM on new submission. Leave blank to notify all admins.
member_application_invite_group Group name to add to the invite when approving (leave blank to skip)
member_application_expiry_days Auto-reject pending applications after this many days (0 = never)
member_application_expiry_notify Send rejection email when auto-expiring applications
member_application_show_apply_button Show an “Apply to Join” button on the login page and login-required homepage
member_application_apply_button_text Label for the Apply to Join button (default: “Apply to Join”)
member_application_intro_text Introductory text shown at the top of the apply form. Supports markdown. Leave blank to hide.
member_application_success_message Message shown on the /apply/success page after submission. Supports markdown.

Notes

  • Community-agnostic — all default field text is configurable via the Fields tab
  • Works with Discourse’s login_required / invite-only mode
  • MIT licensed
  • Tested on Discourse 2026.3.0

Issues, PRs, and feature requests welcome on GitHub.

:link: GitHub - R23DPrinting/discourse-member-application · GitHub

5 Likes