Skip to main content

Selfhosted event calendar Selfhost the whole thing. Nothing is held back

Run Event Schedule on your own infrastructure and every Pro and Enterprise feature is included, free. No platform fees, no seat counts, no data leaving your server.

Type a domain and every screen below is drawn at that address.

Watch it come up

A shared cPanel host, a Docker stack or a plain zip on your own box. All three land on the same setup wizard. These are the real commands, the wizard's own fields and a real admin screen, with only the waiting cut out.

Softaculous: One click, no terminal

your-domain.com : installer.log
1Open cPanel and find Event Schedule in Softaculous
2Choose your domain and directory, then Install
3Database created, environment configured, migrations run
No command line needed

Available on most cPanel hosts. The installer creates the database, writes the configuration and runs the migrations for you.

Open in Softaculous

Docker: Containerised, on any VPS

your-domain.com : bash
$git clone https://github.com/eventschedule/dockerfiles
$cd dockerfiles
$docker compose up --build -d
 # then open http://localhost:8080
Stack running

Bring up the Compose stack from the dockerfiles repo. The first build takes a few minutes while dependencies install and assets compile.

View the Docker setup

Manual: Full control, any host

your-domain.com : bash
$cd /var/www
$unzip eventschedule.zip
$cp .env.example .env
$chmod -R 755 storage
$chown -R www-data:www-data storage bootstrap public .env
 # leave APP_URL blank, then open your domain
Setup wizard ready

Download the latest release and point your web server at the public directory. Leave APP_URL blank and the browser wizard does the rest.

Read the full guide

The setup wizard

your-domain.com/sign_up

The wizard asks for five database values (MySQL Host, Port, Database, Username and Password) and tests them. Once the connection succeeds it asks for your email, full name and a password, then runs the migrations and writes the configuration.

The cron entry

your-domain.com : crontab
$crontab -e
+* * * * * php /path/to/eventschedule/artisan schedule:run
 # reminder emails, calendar sync and expiring ticket reservations run from this line
 # on cPanel, add it under Cron Jobs instead of the command line

One line, once. This is the step the software cannot do for you. Without it, everything that happens on a timer stops.

Yours to run

It is running

your-domain.com/admin/dashboard running
The admin dashboard of a selfhosted install: new organizers, active users, events added, upcoming events, recent schedules and recent events. The admin dashboard of a selfhosted install: new organizers, active users, events added, upcoming events, recent schedules and recent events.

The admin screen is from the user guide, with demo data in it.

Most shared hosts already pass
PHP
8.2 or newer
Database
MySQL 5.7+ or MariaDB 10.3+
Web server
Apache or Nginx with rewrites
SSL
Required, HTTPS only
PHP extensions:
  • BCMath
  • Ctype
  • Fileinfo
  • Intl
  • JSON
  • Mbstring
  • OpenSSL
  • PDO (MySQL)
  • MySQLi
  • Tokenizer
  • XML
  • cURL
  • GD
  • Zip

Every Pro and Enterprise feature. Free.

There is no selfhosted tier to upgrade from. A selfhosted install is treated as Enterprise everywhere in the code, so nothing on this page is behind a paywall. Turn the dial and see what each plan lights up.

What it costs
$0 a month $5 a month $15 a month $0 foreverinstead of $15 a month
Features lit
21 of 68 52 of 68 66 of 68 68 of 68
Newsletter emails a month
10 100 1,000 No limit
Team members
1 1 Up to 5 No limit

Two things change shape rather than carrying over. A hosted schedule can have a custom domain of its own, and your install already stands on a domain you chose. And white label here keeps one small licence credit, which is the whole of what the software asks.

0%Platform fees on ticketsWe never take a cut, on any plan

12Languages built inYour guest pages, translated

See the full feature list

Two features exist only here

The hosted service has neither. On your own server both are part of the install, and one of them is how the install stays current.

Selfhost only

Auto import from the web

Point Event Schedule at a list of URLs and AI pulls the events in once a day, keeping only the cities you name. It checks each site's robots.txt first.

Auto import
Import URLs
thevenue.com/gigs
jazzclub.example/calendar
Import Cities
LeedsYork
  • EventFriday Night Jazz
  • DateFri 14 Aug, 8:00 PM
  • VenueThe Blue Room, Leeds

The Auto import row of the schedule form's Integrations tab, with example addresses and an example result in it.

Selfhost only

Updates are one click, not one afternoon

When a release lands, a notice appears in your admin panel. Click it and the update applies in seconds, migrations included. No SSH session, no maintenance window.

v1.0.138v1.0.139Installed Version
v1.0.139Latest Version
2 minutes agojust nowLast Checked
App Update Update availableYou're up to date!
This downloads the new release, installs it and runs any new database migrations. Take a backup first.
Release installed, migrations run. That was the whole update.
Go on, press it.

The App Update screen, with the installed version live from this release. The real button asks before it runs.

The control room is yours too

Whoever runs the install gets an operator's panel at /admin. The stage above ended on its dashboard. These are three more of its real screens, taken from the user guide.

Try it before you install anythingBoth halves of what you will be running: the admin portal you manage events in, and the public calendar your attendees see.

your-domain.com/admin/queue
The Queue screen: a Scheduler card reading last tick 1 minute ago, and the work waiting. The Queue screen: a Scheduler card reading last tick 1 minute ago, and the work waiting.

Whether the scheduler is running, how much work it still has to get through, and the jobs in the queue. This is where you see your cron entry tick.

your-domain.com/admin/audit-log
The Audit Log screen: totals, filters and a table of sign-ins by time, user, action and IP address. The Audit Log screen: totals, filters and a table of sign-ins by time, user, action and IP address.

Sign-ins, changes and payments across the installation, and who made them, newest first.

your-domain.com/admin/realtime
The Realtime screen: visitors right now, where they are, and page views per minute. The Realtime screen: visitors right now, where they are, and page views per minute.

Who is on your install right now and the page views by the minute. Off until you switch it on in Settings.

The data is yours, and so is the upkeep

Nothing is shipped anywhere by default. Here is exactly what stays with you, what you can choose to share, and what you are on the hook for.

It never leaves your server

Your events, attendees, ticket sales and follower emails live in your database. Event Schedule cannot access, modify or remove selfhosted data, because there is no connection back to us to do it with.

  • Your database, your backups, your retention rules
  • Stripe and PayPal payments land in your own accounts
  • Your own Gemini or OpenAI key for the AI features
  • No telemetry, no phone-home, no usage reporting

Two optional features can send data to eventschedule.com. Both start off.

  • FederationYour public events, once an admin switches it on.off
  • Translation sharingWording you corrected, when an admin presses Share.off
Opt in, off by default

Or share out, on your terms

Federation is a bridge that carries your events to eventschedule.com, and it only exists if an admin switches it on. Your public events appear in the main listings, and every listing links back to the event on your own site.

FederationA demonstration. Flip it to see what would be shared.

Off. Nothing is sent, and nothing about your install is listed anywhere. On. Once eventschedule.com has approved your install, public events of the schedules that said yes are listed, and every listing links back to your site.

  • Only public events, never drafts, internal or unlisted ones
  • Enabled by an admin at /admin/settings, never automatically
  • Each schedule is listed only if someone who manages it says yes

Read the federation guide

Yours to run

Six things nobody does for you

Selfhosting means you are the operator. It is not much, but it is honest to say it out loud. Tick what you already have covered.

0 of 6 covered

Not all six yet? The hosted version is free to start, and backup and restore is built in for the day you move.

All six covered. You are ready to run it yourself.

Try hosted Install it

Should you actually selfhost?

Honestly, most people should not. Selfhosting earns its keep when the data has to live on your own infrastructure, or when you are building something on top of it.

Start here, for now

Hosted

Under five minutes
Setup
We have it running before you finish your coffee
Infrastructure
We run the servers, backups and updates
Updates
Automatic, you never think about it
Features
Free, Pro at $5/mo or Enterprise at $15/mo
Your data
Hosted by us, exportable at any time
Support
Email support, priority on Enterprise

Right for almost everyone. Start here unless you have a reason not to.

You are here By your own count

Selfhosted

An afternoon
Setup
One-click installer, Docker, or a zip and a wizard
Infrastructure
Your server, your SSL, your cron, your backups
Updates
One click in your admin panel, when you choose
Features
Every Pro and Enterprise feature, included
Your data
Entirely on your own infrastructure
Support
GitHub issues

Right when the data has to be yours, or you are building on top of it.

0 of 6 covered

Tick the six above and the mark moves. Not sure? The hosted version is free to start. By your own count: start hosted, and move over when the rest is covered. By your own count, you are ready to selfhost.

Compare plans Try hosted

Or turn it into your own product

The same install runs in multi-tenant mode. Give every customer a subdomain, set your own prices and bill them through your Stripe account, where only Stripe's own fee comes off.

  • Multi-tenant subdomains built in
  • Stripe subscription billing at your own prices
  • White-label branding, bar one small licence credit
  • No licence fee and no revenue share
IS_HOSTED=falsetrue

One install, one operator: every schedule lives at your address. One install, many customers: each on a subdomain of yours, on a plan you priced.

Read it, change it, fork it

Event Schedule is open source under the Attribution Assurance License. Inspect the code, send a pull request, or take it in your own direction. The AAL asks only that the original attribution stays in place.

Before you ask

Frequently asked questions

Everything people ask before they install.

Is Event Schedule really free to selfhost?

Yes. Event Schedule is open source under the Attribution Assurance License. There is no licence fee, no per-event charge and no platform fee on ticket sales. Your only costs are the server and the processing fees your payment provider charges.

Do I get the paid features when I selfhost?

A selfhosted install is treated as Enterprise throughout the code, so ticketing, team members, the API, AI generation and everything else are included at no cost. Two features, auto import from URLs and one-click app updates, exist only on selfhosted installs. Per-schedule custom domains are the one thing that does not carry over, because they belong to hosted mode and your install already runs on a domain you chose.

What do I need on the server?

PHP 8.2 or newer with the usual extensions, MySQL 5.7+ or MariaDB 10.3+, Apache or Nginx with rewrites enabled, and an SSL certificate. Most shared hosts already meet this.

Can I install it on shared hosting?

Yes. If your host offers Softaculous, Event Schedule installs in one click with the database and configuration set up for you. Otherwise upload the release zip and point your document root at the public directory.

How do updates work?

When a new version is released, a notice appears in your admin panel. One click applies the update in seconds, database migrations included. No terminal access is required.

Do I have to set up a cron job?

Yes, one line: "* * * * * php /path/to/eventschedule/artisan schedule:run". It drives reminder emails, calendar sync and the release of expired ticket reservations. Without it those stop running.

Which payment methods work on a selfhosted install?

Stripe, PayPal, Payfast (for rand), Razorpay (for Indian rupees), Invoice Ninja, a payment link and cash, with no platform fee on any of them. Stripe runs on the platform keys in your .env, which is the only Stripe rail a selfhost has. PayPal and Razorpay can each be one account for the whole install, set with PAYPAL_CLIENT_ID and PAYPAL_CLIENT_SECRET or RAZORPAY_KEY_ID and RAZORPAY_KEY_SECRET, or each schedule owner can connect their own in Settings > Payment Methods. Neither has to call your server for an ordinary sale, so only their optional webhooks need a public address. A Stripe, PayPal or Razorpay sale can be refunded from the Sales page, in full or in part, and the money goes back through the provider.

Which features need my own accounts or keys?

Anything that talks to another service needs your own account with it, and that part does nothing until you add the credentials: an SMTP service for email, Stripe or PayPal for payments, a Google or Microsoft app for calendar sync, a Gemini or OpenAI key for the AI features, a Google Wallet issuer account for the Add to Google Wallet button on tickets, and a OneSignal app for push notifications.

Does a selfhosted install send anything back to Event Schedule?

Not unless an admin switches something on. There is no telemetry and no phone-home. Two optional features do send data to eventschedule.com, and both start off. Federation shares only your public events into the eventschedule.com listings, with every listing linking back to your own site, and a schedule is only listed once someone who manages it says yes. Translation sharing sends wording you corrected in the translation manager, when an admin presses Share or, with automatic sharing on, as it is saved.

Can I run it as a white-label SaaS for my own customers?

Yes. Set IS_HOSTED=true and the same install runs multi-tenant, with a subdomain per customer, Stripe subscription billing and your own prices on the Pro and Enterprise tiers. You set the prices and keep the revenue. One thing to know before you price it: the licence credit stays on the public pages of every customer you charge. It is a small chip in the corner, it sits on your free tier too, and it is the whole of what the software costs you.

Can I move from the hosted version to selfhosted?

Yes. Backup and restore is built in, so you can export your schedule data, with images if you want them, and import it into your own install.

Your server is waiting

Pick an install method and you can be running your own event platform this afternoon.