Release 4.0.0 of pretix

May 31, 2021

Today, we are releasing pretix 4.0.0. This release brings customer accounts, memberships, and lots of improvements to ticket shop and backend.

Big thanks go to Ahmad AlHarthi, albert, lapor-kris, Lina-Caro, Maarten van den Berg, Maico Timmerman, Mohamed Tawfiq, Smejkal Vojtěch, and zackern who contributed to this release. ❤️

pretix 4.0.0 is now available for installation via pip. The new Docker images will appear on Docker over the next few hours. All customers of pretix Hosted are already using the new version and do not need to take any action.

Customer accounts

pretix 4.0 brings back a feature that was part of pretix very early on and had been removed in 2015 for simplicity reasons: The option for ticket buyers to sign up for an account. We're happy to bring this feature back, in a cleaner, simpler and more useful way than before.

If you enable customer accounts in the settings of your organizer account, we'll ask your customers to optionally sign up for a new customer account or sign in to an existing customer account during checkout.

Currently, this allows your customers to view all of their tickets in one place and enables more advanced features like the membership feature described below. It also allows you to identify your customers more easily.

In one of the next releases, we'll make it even more useful by allowing customers to save invoice addresses and attendee data to their account, allowing for a much faster checkout experience.


Building on the new customer accounts feature, we introduce the concept of memberships. This new concept provides the infrastructure to realize a number of ticket types common to various event types.

You can define one or more membership types, which you can then sell through pretix. Later, you can define specific products to require an active membership in the customer account.

Possible use cases include:

  • Multi-pass: You can set up a membership type with a limited number of usages. This way, customers can buy e.g. a ticket of ten at a reduced price once and then later buy a "free" ticket using their membership every time they want to come.

  • Season pass: You can also skip limiting the number of usages and instead limit the time frame in which a membership can be used. This way, you can sell a season pass (or week pass, or month pass) which grants access to all events in a time frame.

  • Club member tickets: If you're hosting events either exclusive to members of some organization, or available at reduced price to members of some organizations, you could use our API to tell pretix which customer accounts are active members of the organization. pretix can then verify that only these customers are able to buy specific products.

We've added a documentation page that shows you how to set up this feature. We plan to extend this feature in the future to allow for more use cases such as seat-based subscriptions common in the theatre world.

Organizer-level email settings

With this release, basic email settings like your sender address and SMTP server will now be configured on organizer level by default on new organizer accounts. This makes it much simpler to make changes across all your events. Of course, you can still change the settings for individual events if you need to.

Check-in rule improvements

Last June, we introduced the option to configure your own check-in rules, allowing you to realise complex scenarios. With this release, we're improving this functionality in three aspects:

  • Previously, rules only evaluated to either a positive or negative result. However, if a scan is denied because the rules do not match, it is vital to know why. Without that information, explaining the rejection to an attendee can be hard and time-consuming. Starting with this release, our pretixSCAN Android and Desktop apps (in online mode) will show a human-readable reason citing at least one rule responsible for the decision.

  • Configuring a complex set of rules can be hard, and it's easy to make a mistake. We now introduced a visualization mode that draws the configured rules as a flow chart, making it much easier to visually grasp what's going on and check for any errors.

  • You can now configure rules based on the time of day, e.g. you can configure that an "evening ticket" ticket type is valid for access starting at 5pm every day.

Email all invoices

We introduced a new option in the invoice settings that allows you to configure an email address. Every time a new invoice has been created in the system, we'll email the invoice to this email address. This can be used as an easy way to import invoices into many accounting systems.

Smaller changes and bugfixes

Ticket shop and widget

  • The confirmation step before submitting an order has been optimized to show long confirmation texts in a more readable way.

  • Number input fields have been improved: Arrow buttons are now always shown in Chrome, click targets of arrow buttons are larger, and a bug preventing them to be clicked in Firefox has been fixed.

  • It is no longer possible that an organizer page is shown in a locale that isn't enabled for the organizer profile.

  • Instead of "Business customer", we now say "Business or institutional customer".

  • When asking for a salutation like "Mr" or "Ms", a non-binary "Mx" option is now always available.

  • A bug has been fixed that allowed to create a cart which could neither be confirmed nor deleted.

  • A bug has been fixed that caused some ticket PDFs to miss seat numbers.

  • The "your order has been approved" emails now contain ticket attachments if tickets are already available.

  • Invoices now include additional spacing between the "additional text" and payment-specific text.

  • Personal information from invoice addresses is no longer automatically copied to add-ons of the first product, but only to the first product itself.

  • Phone numbers are now shown correctly in our Arabic localization.

  • Stripe: A broken redirect after giropay payments has been fixed.

  • Stripe: Payment failures due to concurrent requests with the same key are now prevented.

  • Widget: The seating plan is no longer opened automatically if the event is no longer selling tickets.

  • Widget: An incorrect timezone computation has been fixed.

Ticketing backend and configuration

  • Support for Internet Explorer 11 in the backend is officially deprecated and will be removed entirely in a future release. IE11 bugs in new features will not be fixed.

  • A new placeholder name_for_salutation can be used in email layouts to allow for texts like "Dear Mr Sample".

  • You can now manually exclude specific quotas from the availability computation of the event calendar.

  • Creating many new dates in an event series no longer leads to response timeouts.

  • When creating new dates in an event series, the form now has some more sensible defaults to prevent common mistakes of first-time users.

  • You can now change products in canceled orders.

  • Order import: The street of the attendee address can now properly be imported.

  • You can now use the date and time of the first ticket scan as part of your PDF layouts.

  • Generation of large numbers of voucher codes has been optimized on PostgreSQL.

  • Logging of undeliverable emails has been improved.

  • Questions are now never asked during exit scans.

  • You can now configure the length of the contents of ticket barcodes.

  • When copying products, the product picture is now copied correctly.

  • Special characters in user data will no longer crash XLSX file exports.

  • A few bugs in bulk-editing of event series dates have been fixed.

  • The list of tax rules now shows whether tax rules are inclusive or exclusive and whether reverse charge is enabled.

  • Disabled products are now shown in a light grey color in many places.

  • Event change logs on the event dashboard are now loaded asynchronously to speed up loading times.

  • Web check-in: Scanning multiple tickets in a row now works properly.

  • The Stripe plugin no longer shows configured secret keys again.

  • Event short forms with just one character are now allowed again, as long as the letter is alphanumeric.

  • Bulk deletion of waiting list entries is now possible.

  • Cloning events now properly copies the list of enabled sales channels.

  • Newly created events are now available on all sales channels by default.

  • Stripe: A custom "destination" for the payment can now be set (only relevant for very rare use cases).

Runtime and server environment

  • Since we updated to Django 3.2, this release formally drops support for PostgreSQL 9.5. You should not run a version that old anyways.

  • The license detection in the license check tool has been improved.

  • The background job responsible for generating new CSS files now cleans up old files properly.

  • Our Sentry integration supports new configuration options to enable performance monitoring.

  • Auto-generated Sentry environment names no longer include the https:// which is invalid in recent Sentry versions.

  • We've added a few optional database indexes to our documentation.

  • Logging of CSP violations is now off by default.

Updates to official plugins and tools

  • The free font pack has been released in version 1.7.0 to add fonts Ubuntu and Almarai.

  • The Bounces plugin has been released in version 1.3.0 to support customer accounts.

  • The Reports plugin has been released in version 1.9.0, adding reporting capabilities to quotas and a new capacity reporting export.

  • The Reseller plugin has been released in version 2.1.1 to fix a minor bug.

  • The Seating plugin has been released in version 1.6.4 to fix a minor bug.

  • The Shipping plugin has been released in version 1.12.1 to fix a minor bug during event cloning.

  • The Tracking plugin has been released in version 2.1.3 to improve CSP integration with Google Tag Manager.

Plugin API changes

  • We upgraded from Django 3.0 to Django 3.2, please make sure to read the release notes of Django 3.1 and 3.2 to check for backwards-incompatible changes.

  • The RequiredAction model and mechanism have been removed.

  • The installed method is now called after event creation if a plugin is enabled by default.

REST API changes

  • A bug in handling of read-only meta properties has been fixed.

  • Creating new paid orders through the API now correctly fires the corresponding signals and webhooks.

  • Events can now be cloned across organizers with the new clone_from query parameter of the event creation endpoint.

  • New resources for customers, membership types, and memberships have been added. New attributes related to these features have been added to the order, item, and item variation resources.

Raphael Michel

Raphael is the founder and main developer of pretix. He is passionate about user-friendly, elegant software, and when he's not busy building software for conference organizers, he enjoys co-organizing con​fer​en​ces himself.

Read more blog posts

Any questions?
+49 6221 32177-50 Mo-Fr 09:00-17:00 Uhr