NewWe open-sourced 50+ Laravel packages
Custom AI apps, agents and automation — Roundly ConsultingRoundly
All packages

Open source

Events for Laravel

Install
composer require roundly-consulting/events-for-laravel
Requires: PHP ^8.4 · Laravel ^12.0|^13.0

Overview

Run real-world events in any Laravel app: reusable venues with near-me search, ticket types priced in Money, RSVPs with a race-free waitlist, QR check-in at the door, co-hosts and invite-only events — with every time stored in UTC and read in each event’s own timezone. Calendar files and feeds, schema.org JSON-LD, notices and reminders in English and Slovak and an opt-in JSON API sit behind one Events facade. It is headless and MIT-licensed, built only on official Laravel components and Roundly’s own packages for tags, statuses, locations, money, slugs, translations, media, QR codes and cryptography — no third-party event platform.

What you get

Venues and near-me search

Reusable venues with an address, coordinates and a timezone, opt-in geocoding, and one exact great-circle distance in SQL and PHP.

The right time, everywhere

Instants stored in UTC, wall-clock input read in each event’s own timezone, DST gaps refused, and all-day festivals that keep their dates.

Ticket types and a payment seam

Free and paid ticket types priced in Money, with capacity, sale windows and party limits. Paid seats are held while your own checkout collects.

RSVPs with a race-free waitlist

Going, interested or not going, guests per RSVP and a first-fit waitlist with no queue-jumping — exact under concurrent requests on MySQL and PostgreSQL.

QR check-in at the door

Unguessable encrypted codes, a QR that is never cached, idempotent scans, a check-in window, manual check-in and one-step code rotation.

Private events and co-hosts

Public, link-only or invite-only events, co-hosts, organizer transfer and team organizers — one visibility rule for lists, pages, feeds and notices.

Calendars, search and notices

.ics files and feeds, schema.org JSON-LD, queued notices and reminders in English and Slovak, and an opt-in JSON API.

Facade, DI or actions

One Events facade, an injectable manager or single-purpose actions — and a recording fake that still performs every call.

Documentation

Use cases

Where the package fits — meetup platforms, venues and clubs, conferences, ticketing through your own checkout, private events and near-me listings.

Installation

Install via Composer, run events:install and migrate, settle key types and table names, add the model traits and schedule the two sweeps.

Configuration

Every config key with its env variable and default — keys, tables, models, defaults, venues, payments, check-in, posters, URLs, API and notices.

Models and schema

The seven tables and seven models, what the Event model reads, its query scopes, the enums, DTOs and contracts, and swapping a model.

The Events facade

Tour the Events facade — make(), the for($event) handle and its sub-handles, venues, RSVPs, invitations, the builders and the model traits.

DI and actions

Skip the facade: inject EventsManager or call one of the 49 single-purpose actions — every execute() signature with its facade path.

Creating and editing events

Build and publish events fluently or from CreateEventData, then edit, find, list, set posters, transfer, delete and restore them.

Time and timezones

UTC storage, wall-clock input in each event’s timezone, DST gaps and overlaps, durations and doors, all-day and multi-day events and time scopes.

Statuses and lifecycle

Six states on lifecycle-for-laravel — publish, postpone, reschedule, cancel, complete and move online — the guards, phases and your own workflow.

Venues and near-me search

Reusable venues with addresses, coordinates and timezones, who may edit them, opt-in geocoding and an exact near-me distance in SQL.

Ticket types and payments

Ticket types priced in Money with capacity, sale windows and party limits — plus seat holds, your payment collector, the webhook and refunds.

RSVPs and the waitlist

Going, interested or not going, guests and party limits, capacity under concurrency, the first-fit waitlist and the managers’ attendee tools.

Check-in at the door

Unguessable encrypted codes and a never-cached QR, scoped and unscoped door scans, refusals, the window, manual check-in and code rotation.

Organizers, co-hosts and invitations

Users and teams as organizers, who manages an event, co-hosts, organizer transfer and invite-only events with single-use, hashed tokens.

Categories and labels

One curated category tree and free-form labels through tags-for-laravel — seeding, tagging, filtering, private labels, organizer scopes and overrides.

Privacy and authorization

Who sees an event, what each surface hides, the EventPolicy abilities, the venue rules and the visitor-IP note for near-me search.

Calendar files, feeds and JSON-LD

.ics files per event and per list, public and personal feeds, schema.org JSON-LD with @eventJsonLd and the URL templates behind every link.

JSON API

An opt-in JSON API — 49 routes, request bodies, discovery filters and sorts, role-aware resources, reference resources, errors and rate limits.

Notifications and reminders

Nine queued, after-commit notices in English and Slovak — recipients and delivery checks, payloads, swapping a notice, silent writes and reminders.

Domain events

42 after-commit domain events for events, venues, ticket types, RSVPs, holds, payments, check-ins, co-hosts and invitations — payloads and listening.

Exceptions

Every EventsException with its code and HTTP status, the errors the API maps from tags, lifecycle and media-library, and configuration errors.

Artisan commands

events:install, events:doctor and its checks, events:sweep, events:repair and events:geocode — plus the scheduler lines and the PHP equivalents.

Recipes

Guests without accounts, team organizers with teams-for-laravel, custom fields, event discussion, post-event reviews and an overbooking ratio.

Testing

Events::fake() records every operation and still performs it — every assertion pair, recorded operations, Pest expectations, factories and pitfalls.

Requirements

PHP 8.4, Laravel 12 or 13, MySQL 8 or PostgreSQL, the PHP extensions its dependencies need and the Roundly packages it builds on.

Show your open-source love

This package is free and MIT-licensed. If it saves you time, a one-off donation or a Patreon membership keeps it maintained, tested and documented.

More ways to support, including crypto

By donating, you agree to our donation terms.

Want this built into your product?

We integrate our packages into custom Laravel and AI builds. Tell us what you're working on and we'll reply within 48 hours.