Open Source, Forever

Built in Europe · Licensed under EUPL · Free to self-host

Why Open Source?

Your Software, Your Rules

Licensed under EUPL - one of the strongest copyleft licences. Fork it, modify it, run it anywhere. No CLAs, no permission needed.

Self-Host With Confidence

Runs on Linux, PHP 8.4, MySQL 8+. Docker-based setup gets you running in minutes. Your data never leaves your server.

Built in Europe

Developed and hosted in the EU. GDPR-compliant by design. No US cloud dependencies, no surveillance capitalism.

Everything You Need, Out of the Box

Core Features

  • Event management with RSVP
  • Member system with roles & invitations
  • CMS for static pages
  • Multilingual support (EN, DE, ZH)
  • Full admin panel
  • Plugin API for custom extensions

Bundled Plugins

Dishes & Menus Film Club Book Club Karaoke Glossary + your own via the plugin API

All bundled plugins are open source under EUPL, same as the core.

Develop Locally in 4 Steps

1

Clone

Get the source from GitHub using Git.

git clone https://github.com/xuedi/meetagain.git

2

Start Docker

All dependencies are containerised.

docker compose up -d

3

Configure

Set your domain, database, and mail settings.

cp .env.example .env

4

Load Data

Seed the database with initial data.

just devModeFixtures
Requirements: Docker  ·  just (command runner)

Install on a Server

1

Upload

Clone or upload the source to your server.

git clone …/meetagain.git

2

Point Web Server

Set your document root to the `public/` directory.

document root: public/

3

Run the Wizard

Visit /install and follow the 3-step setup wizard.

https://your-domain.tld/install

4

Done

Configures the app and creates your admin.

→ redirect to /
Requirements: Linux  ·  PHP 8.4+  ·  MySQL 8+ or MariaDB 10.6+  ·  Caddy, Nginx or Apache

Extend Anything

MeetAgain is built around a clean plugin API. Every bundled plugin uses the same interfaces available to you.

Plugin Interfaces

  • Plugin contract - register menu & footer links
  • Twig extensions - inject content into any template block
  • EntityActionInterface - hook into entity lifecycle events
  • Filter interfaces - control event visibility and access
  • CronTaskInterface - schedule background jobs
<?php

final class MyPlugin implements Plugin
{
    public function getPluginKey(): string
    {
        return 'my-plugin';
    }

    public function getMenuLinks(): array
    {
        return [
            new Link('/my-page', 'My Page'),
        ];
    }
}

How This Stays Free

Hosted Platform

meetagain.org runs a commercial MultiSite plugin on top of the open source core. Subscriptions fund ongoing development.

Supporter Plans

Groups that choose the Supporter tier directly fund open source work and receive a visible badge as a thank-you.

EUPL Forever

The commercial layer is a separate private plugin. The core is and always will remain EUPL-licensed and free to use.

Get Involved

Report a Bug

Found something? Open an issue on GitHub. Public tracker, transparent history.

Open an Issue

Submit a Patch

Fork, fix, open a pull request. We review all contributions promptly. No CLA required.

Fork on GitHub

Improve Translations

We support EN, DE, and CN. Help us add more languages or improve the existing ones.

Browse Translations

Want the managed version? Skip the setup.

See Pricing

You can export your data anytime and go self-hosted