Release 2025.1.0 of pretix

Today, we are releasing pretix 2025.1.0. The first release of the new year includes features around electronic invoices, dunning, custom domains, and many other large and small changes.
Big thanks go out to Aarni Heinonen, Bernd Mohring, Christiaan de Die le Clercq, Damien Bremont, David Vaz, Deborah Foell, Dimitris Tsimpidis, Hector, Hijiri Umemoto, Johanna Ketola, Neriman Memmedli, Nicolas Thumann, Nikolai, Patrick Chilton, Rosario Castellana, Serge Bazanski, Vasco Baleia, Wikinaut, and Wiktor Przybylski, who contributed to this release. ❤️
pretix 2025.1.0 is now available for installation via pip
. The new Docker images will appear on Docker Hub over the
next few hours. All customers of pretix Hosted are already using the new version and do not need to take any action.
Tax codes
As part of our preparations for the mandatory electronic invoices in Germany and other countries, we've extended the functionality of our tax rules.
A valid electronic invoice must contain machine-readable information about the taxes applied to the sold products. However, the tax rate alone (e.g. 19%) is not enough for a complete specification of taxes in some cases. Sometimes, it is important to know why the tax rate has a certain percentage. This applies in particular to cases where the tax is 0%. Even though no tax is charged here, it can make a large difference whether this is because the seller is not required to charge tax (e.g. small business exception), the product is non-taxable (e.g. charity donation), or the sale is outside the scope of tax (e.g. sales with a place of performance outside the legislation).
For this reason, we have now created the option in pretix to assign a tax rule a so-called "tax code" that includes the reason for the tax rate. We recommend filling in this reason in all tax rules. For tax-exempt event organizers who want to issue e-invoices, it is advisable to create tax rules with a rate of 0% and a corresponding reason.
Dunning
pretix has always supported sending payment reminders to customers before their order expires due to a missing payment. However, that's only how some of the events using pretix work. For a number of events organized with pretix, orders do not automatically expire and payment deadlines might even be after the event happened. Especially in these situations where the event participation has already happened, you need a strong process to ensure orders actually are paid.
Our new "Dunning" plugin allows you to design a multi-step reminder process that kicks in after the payment deadline if no payment has been received and orders are not expiring. Every step is executed after a given number of days and can include either sending reminders to the customer or alerting someone else, for example your internal accounting team to trigger a collection process.
Alternative organizer domains
So far, pretix supported using a custom domain for your organizer account, or for a single event.
With this release, pretix also supports using a custom domain for some of your events.
For example, if you have one company that operates under two different brands, you could set up tickets.brand1.com
and tickets.brand2.com
as "alternative domains".
You can then assign each event to one of the brands and the ticket shop of the event will show up under the correct domain.
The organizer-level domain will still point to a list containing all events of the organizer account, this only affects the canonical domains of the event pages themselves.
The screenshot shows the user interface on pretix Hosted. The user interface on pretix Community and Enterprise looks a little different, but also allows reaching the same goal:
Smart voucher / gift card input
A common source of user confusion is the two types of "vouchers" someone can have: The ones we actually call "vouchers" that give a discount or allow buying a restricted product, and "gift cards" that act as a payment method. With this release of pretix, this distinction becomes a lot less important for your customers. If a gift card is erroneously entered into the field intended for vouchers, the system no longer responds with an error message. Instead, the input will automatically be detected to be a gift card and the gift card will be applied to the current cart, such that it will be automatically applied at checkout.
Smaller changes and bugfixes
Ticket shop and widget
-
Improved user experience and accessibility across many parts of the ticket shop, such as the event list, event calendar, product selection page, checkout pages, customer account pages.
-
Japanese is now a supported language.
-
When an automatic discount is applied to the cart, the discount percentage is now shown in the cart.
-
Addresses in Japan now require choosing a prefecture.
-
Invoices that have at least one taxed position now explicitly show their zero-taxed total amounts as well.
-
Widget: New configuration option that allows always showing or hiding event info.
-
Widget: The accessibility has been improved, e.g. in regard to keyboard navigation when the checkout process is started.
-
The mechanism that shows or hides field on the invoice address form depending on customer type and country has been improved to properly reflect the actual validation.
-
A bug has been fixed that prevented users to switch to Norwegian as the shop language.
-
Stripe: Fix a bug that prevented using the "Revolut Pay" payment method.
-
Stripe: Removed "Sofort" payment method as it got deprecated.
Ticketing backend and configuration
-
A new invoice generation mode "on user request only for paid orders" has been added.
-
The "show in backend" pages on ticket pages is now available in some situations even on custom domains.
-
The minimum and maximum value of number questions now supports a higher number of digits.
-
Marking an expired order as paid that includes a blocked seat now works if the sales channel of the order allows booking blocked seats.
-
Importing orders that include blocked seats is now possible if the selected sales channel allows booking blocked seats.
-
Numbers on the event dashboard now use a thousand separator.
-
When regenerating the secrets of an order or a ticket, this now also affects the secret URL to download an individual ticket.
-
When configuring a product to only be available when another product is sold out (e.g. quota-based early bird option), you can now configure the unavailable product to be already visible.
-
When manually adding a fee to an order, the type of fee now always needs to be manually selected instead of "payment fee" being the default.
-
When creating new events, entering 0% as the sales tax rate now creates a tax rule with a rate of 0% instead of not creating a tax rule.
-
When exporting multiple badges on one page, the order alphabetical order is now respected correctly.
-
Transparent backgrounds of invoice logos are now converted to white before PDF generation, making PDF/A-3 compliance easier.
-
When cloning products, the sales channels selected for product variations are now copied correctly.
-
.ics
files are now allowed as attachments to manually sent emails. -
The configuration of relative deadlines has been adjusted to properly work for languages with different sentence order like Japanese.
-
The examples for some person name schemes have been improved.
Updates to official plugins and tools
-
The Adyen plugin has been released in version 1.4.6 to improve compatibility with Adyen.
-
The Digital Content plugin has been released in version 1.6.0 to allow recording digital content clicks as check-ins and fix an issue with reordering contents.
-
The Mollie plugin has been released in version 2.2.2 to improve wording.
-
The Offline Sales plugin has been released in version 1.11.1 to fix missing ticket validity time frames and add a PDF variable for the batch comment.
-
The pretixPOS backend plugin has been released in version 3.16.0 to add support for tax codes.
-
The SEPA Direct debit plugin has been released in version 2.6.0 to improve the user experience when exporting SEPA XML files.
-
The Service Fees plugin has been released in version 1.13.0 to allow excluding products from the calculation of service fees.
-
The Shipping plugin has been released in version 1.22.0 to improve address input forms, hide non-shipping products from the packing list, add support for tax codes and add a notification option for new orders that require shipping.
-
The Slack plugin has been released in version 2.1.1 to fix a bug that prevented other plugins' notification types from being used.
-
The Tracking codes plugin has been released in version 2.16.0 to fix missing positions in the Google Analytics data, allow access to settings through the API, integrate Plausible.io, and add a config option for self-hosted installations.
-
The ZUGFeRD invoices plugin has been released in version 2.3.0 to utilize tax codes, fix cancellations and lots of small specification compliance issues.
Runtime and server environment
- Our suggested nginx configuration
now denies access to
/static/staticfiles.json
and/static/CACHE/manifest.json
as an additional hardening to make guessing your pretix version and installed plugins harder.
Plugin API changes
-
We have defined a new mechanism for plugins to register various kinds of objects with the system.
-
The new registry system is now used to register log entry types. In the future, it will raise an error if you try to create a log entry that does not match a registered type.
REST API changes
-
A new API endpoint allows to block or unblock seats in bulk.
-
The quota availability endpoint now reliably returns all parameters even for unlimited quotas.
-
When cloning events through the API, the sales channel selection is now copied correctly.