Selfhost Event Schedule
Run Event Schedule on your own server and your own database. A single-tenant install has no plan tiers, so every Pro and Enterprise feature is switched on.
Selfhost guides
Start with Installation, then add only the integrations you need. Each guide lists the .env keys it requires. If you want to host schedules for other people, each on its own subdomain, follow the SaaS documentation after installing.
Setting IS_HOSTED=false makes every schedule resolve to the top tier, so the Pro and Enterprise badges you see elsewhere in these docs do not apply to your install: ticketing and QR check-in, unlimited paid ticket sales, custom fields, waitlists, event graphics, webhooks, custom CSS, internal and unlisted events, team members and unlimited newsletters are all available, and the AI features come with them once you add an AI key. The differences run the other way instead, and they are listed below.
-
Installation
Step-by-step server setup: database, web server, and first run. -
Stripe Integration
Set up Stripe payments for a selfhost or SaaS deployment. -
Google Calendar
Bidirectional Google Calendar sync. -
Outlook Calendar
Bidirectional Outlook sync via Microsoft Graph. -
Email Setup
Configure SMTP, Mailgun, Amazon SES or another mail driver. -
AI Setup
Configure Google Gemini or OpenAI for import, scanning and translation. -
Boost Setup
Configure the Meta ads integration behind the boost feature. -
Admin Panel
Monitor users, revenue and analytics, and manage platform settings. -
Federation
Share your public events with the eventschedule.com listings. -
Web accessibility
Accessibility declarations, configuration and user-generated content.
Where to start
-
Install the app. It runs on ordinary PHP hosting: PHP 8.2 or newer, MySQL 5.7 or MariaDB 10.3, a web server whose document root is the
publicdirectory, and HTTPS. Create an empty database, upload the release files, set the file permissions, then open your domain: the sign-up page doubles as the first-run setup wizard, and it takes your database details, runs the migrations, writes.envand creates your account. Finish with the cron entry that runs the scheduler every minute. It is not optional: the scheduler drives the queue worker, so without it email and calendar sync quietly stop. Installation -
Set up email. Nothing that emails a person works until a mail driver is configured, including password resets, ticket confirmations, booking requests and newsletters. One driver in
.envserves the whole instance. Email Setup -
Add Stripe if you sell tickets, passes, gift cards or paid appointments. One account can collect for the whole install, or, with Stripe Connect, each event owner can connect their own and be paid directly. No platform fee is ever added to a sale. Invoice Ninja is the alternative, and it needs no
.envconfiguration at all. Stripe Integration - Add an AI key (Google Gemini or OpenAI) if you want AI event import, agenda scanning, translation or auto import. Everything else works without one. AI Setup
-
Connect calendars. Google and Outlook sync each need your own OAuth credentials in
.env; CalDAV needs no server-side configuration, so a schedule can connect one straight away. Google Calendar, Outlook Calendar -
Then the optional pieces.
Federation lists your public events on eventschedule.com and links each one back to your site, and stays off until you turn it on in the admin panel;
Boost runs Meta ads from inside the app, billed to the one Meta ad account you configure, so every campaign spends your money;
the admin panel at
/admingives you instance-wide monitoring and settings, and the account the setup wizard created is already an instance admin; and the accessibility guide covers what to put in your own accessibility statement.
How a selfhosted install differs
Same codebase either way. IS_HOSTED=false is what selects the middle column.
| Area | Your own server | eventschedule.com |
|---|---|---|
| Plans | No tiers. Every schedule has every feature. | Free, Pro and Enterprise |
| Schedule addresses | Paths under your domain, e.g. yourdomain.com/my-schedule, set in the Path field of a schedule's settings |
A subdomain, e.g. my-schedule.eventschedule.com, and Enterprise can point its own domain at a schedule |
| Accounts | The setup wizard creates the first account, which becomes the instance admin, then sign-up closes. Set ALLOW_REGISTRATION=true to reopen it. |
Anyone can sign up |
| Team members | Unlimited | The owner only, until Enterprise, which allows up to five members per schedule |
| Email delivery | One mail driver in .env for the whole instance |
Per-schedule SMTP in the Email Settings tab of a schedule's Integrations section. Hosted only, so that tab is hidden on your install. |
| Newsletter allowance | Unlimited | 10 recipients a month on Free, 100 on Pro, 1,000 on Enterprise, and unlimited for a schedule sending through its own SMTP. Each recipient counts as one. |
| Paid ticket allowance | Unlimited | 25 paid tickets a month on Free, unlimited on Pro and Enterprise. Free tickets and RSVPs never count. |
| Auto Import | An Auto Import section in a schedule's settings takes Import URLs and Import Cities, and runs once a day from the scheduler. Needs an AI key. | Not available |
| Updates | Settings → App Update compares your installed version against the latest release and applies it in one click, or run php artisan app:update |
Updated for you |
| Attribution | No "Powered by" footer, but every public schedule page keeps a small Event Schedule chip in the corner, which the license asks you to leave in place. Embedded views do not carry it. | Branding is removed on Pro and Enterprise |
Beyond selfhosting
The rest of the documentation applies to every deployment: the user guide describes the same screens your install runs.
Event Schedule is released under the Attribution Assurance License, an OSI-approved licence adapted from the BSD licence, which is why the credit chip stays on a selfhosted install. The open source page links the repository, the releases and the license text.