We are proud to announce the 8.0 LTS release of Tryton.
This release provides many bug fixes, performance improvements and some fine tuning.
You can give it a try on the demo server, use the docker image or download it here.
As usual upgrading from previous series is fully supported.
Here is a list of the most noticeable changes:
Changes for the User
Client
There is now a visual hint on the widgets of modified fields. This way the user can see what was modified before saving.
Web
The tabs can now be reordered.
The logout action has been moved in the same menu as the notification. And an entry for the help was also added. This simplifies visually the content of the header.
Accounting
The reconciliation of accounting lines can now be automated by a scheduled task.
The general ledger display only flat balance which is more comprehensive for a flat list of accounts.
We added the option to calculate rounding for cash using the opposite rounding method. This existed already for standard currency rounding but was missing for cash rounding.
It is now possible to define some payment means on the invoice.
They can be set manually or using a rule engine.
The supported payment means for now are by bank transfer and direct debit.
When invoices are created from an external source (like PEPPOL), we check the amounts against the source when the invoice is validated or posted.
This allows to create invoices for which the calculation is different in Tryton than in the source and let the user manually correct them.
Tryton warns now when the user tries to create an over-payment.
Europe
We added all the VAT exception code on the taxes which can be used in electronic invoices.
Belgium
The taxes are now setup with UNECE and VATEX codes which is useful to generate and parse UBL invoice like on PEPPOL.
Document Incoming
The OCR module supports now the payment reference of the supplier. It is stored on the supplier invoice and used when making a payment.
E-document
We added a button on the PEPPOL document to trigger an update of the status. The users do not always want to wait for the scheduled task to update the status.
We enforce that the unit price of any invoice lines sent to PEPPOL is not negative. This is a rule from the PEPPOL network that is better to enforce before posting the invoice.
The UBL invoice template has been extended to render the buyer’s item identification, the allowance and charges, the billing reference, the payment means, VATEX codes and prepaid amounts.
The UBL invoice parser supports now the payment means.
The UN/CEFACT invoice template renders the payment means and the VATEX codes.
The UNECE module stores now the allowance, charge and special service code on the product. And it stores on the payment means the UNCL4461 code.
Incoterm
The incoterm defines now who is responsible for the export and import duties between the buyer and the seller.
Party
These identifiers have been added: Slovenian Corporate Registration Number, Belgian Social Security Number, Spanish Activity Establishment Code, Russian Primary State Registration Number, Mozambique Tax Number, French Trade Registration Number, Azerbaijan Tax Number and Senegal Tax Number.
The identifiers are now formatted to ease the reading.
We added a new menu entry that lists all the party identifiers.
A “Attn” field has been added to the address. This is useful to manage delivery addresses for web shop when the customer is shipping to another party.
Production
The “Cancellation Stock” group can now also cancel running and done productions.
It is not possible to define if the cost from the time sheets must be included in the production cost calculation. This is defined per work center.
Project
The work efforts are now numbered to ease the communication between employees.
An origin field has been added to the work efforts.
Purchasing
The invoice method “on shipment” has been renamed into “on fulfillment” to be more generic.
The quantities to invoice are now calculated for each purchase line. And purchases with at least one line to invoice is marked as “To invoice”.
Quality
We added a reference field to the inspections. This allows to store an external number if the inspection was performed by an external service.
Sales
The invoice method “on shipment” has been renamed into “on fulfillment” to be more generic.
The quantities to ship and to invoice are now calculated for each sale line. And sales with at least one line to ship or to invoice is marked as “To ship” or “To invoice”.
Stock
We added a special group which is allowed to cancel done shipments and moves. This is useful to correct mistakes.
The shipments have now a wizard to ease the creation of package. It simplifies the operation like putting a package inside another package, putting only a quantity of a move into a package etc.
For UPS carrier, the module charges the duties and taxes to the shipper accordingly to the incoterm.
We store now the original planned date of the requested internal shipments and the requested production. This is useful to find late requests.
Shop
The sales stores now the URL of the corresponding order to the web shop.
Shopify
We support now the payment terms from Shopify. When a sale has a payment term, it is always confirmed in Tryton.
The gift cards are now supported with Shopify. So when a gift card is sold on Shopify, no gift card is created on Tryton. And when the gift card is used on Shopify, it appears as a payment from the gift_card gateway.
The actions from Shopify are now logged on the sale order.
The pick-up delivery method is now supported for Shopify order. When the shipment is packed on Tryton, it is marked as prepared for pickup on Shopify.
New Modules
Account Payment Check
The Account Payment Check Module allows managing and printing checks as payments.
Account Stock EU Excise
The Account Stock EU Excise Module is used to generate the excise duties declaration for European countries.
Production Ethanol
The Production Ethanol Module calculates the gain or loss of alcohol volumes in production.
Sale Project Task Module
The Sale Project Task Module adds the option to create tasks when selling services. The fulfillment of the sales is linked to the progression of these tasks.
Stock Ethanol Module
The Stock Ethanol Module helps to track alcohol in warehouses.
Removed Modules
Those modules have been removed:
account_de_skr03account_esaccount_es_siigoogle_maps
You may find alternatives published by the community.
Changes for the System Administrator
Client
Web
The build of the web client does not require bower anymore.
The session is now stored as cookie. This prevents the session to be leaked in case of security issue with our Javascript code.
The web client uses now relative path to perform the server requests. This allows to serve the web client from a sub-directory.
Server
Basic authentication is now supported also for user application. This is useful when the consumer of the user application can not support bearer authentication.
Document Incoming
The Typless modules requires now to define all the fields set on the service in order to generate a complete feedback even for fields that Typless did not recognized.
E-document
It is now possible to setup a webhook for Peppyrus. This allows to receive the PEPPOL invoices as soon as they landed on the inbox.
Inbound Email
The inbound email gains an action to handle replies to chat channels. The text content above a specific line is added as message to the corresponding channel.
Changes for the Developer
This release removes the support for Python 3.9 and adds Python 3.14.
Server
It is now possible to filter the user being notified by a scheduled task using a domain. This is useful for example when the notification applied only to users having access to a specific company.
The report engine can now use MJML as base format and convert it to HTML. This simplifies the creation of email template with compatibility against most common email clients.
The Field.sql_column receives now a tables dictionary and Model as argument.
The Field.sql_column can now be override by a method on the Model named column_<field name>(tables).
This extends the possibilities for more complex type of fields.
With those improvements, we can not support Function fields without getter but only SQL expression via the column_<field name>. Those fields are automatically searchable and sortable without the need to define domain_<field name> nor order_<field name> methods.
A last_modified field has been added to ModelSQL to avoid to duplicate the code write_date or create_date.
The fmany2one field can now be based on Function field.
We have upgraded the PostgreSQL backend to use Psycopg 3. By default Tryton is using server-side binding which allows to remove the limitation on the size of the list of IDs that can be passed by using array for the in operators.
Thus the reduce_ids and grouped_slice (without size) tools has been deprecated and the Database.IN_MAX replaced by backend.MAX_QUERY_PARAMS.
The delete and delete_many methods have been added to the FileStore API which allows to remove the files of Binary fields when they are deleted or updated.
The button states are now checked when executed with check for access. This ensure that a client can not execute a button that should be disable.
A notify_user method has been added to ModelStorage to ease the notification
of a user.
A contextual _log key can be used to force the logging of events even if they do not originate from a user.
New routes have been added to manage the login/logout with cookie.
It is now possible to include sub-directories in the tryton.cfg. This is useful when developing large module to split it into sub-directories.
A new attribute in the XML data allows to define a value as a path relative to the place of the XML file. This feature works in combination with the sub-directories to avoid to repeat the directory name.
The chat channel now send new messages by email new messages to followers who subscribed with emails.
It is now possible to mount the WSGI application under a prefix.
The RPC calls are not prefixed by /rpc/.
A generic REST API has been added as a user application.
It allows to search, retrieve, update and delete any record of a ModelStorage with the access right enforced for the user and to launch any RPC action and report.
The ModelStorage.__json__ method defines the default fields to include in the response based on usage but the client can also explicitly request the fields (with dotted notation).
The context is passed as value of the X-Tryton-Context header encoded in JSON. The language is selected from the Accept-Language header of the client. And the search can be paginated using the Range header.
Naiad
Naiad is a new Python library to access Tryton’s REST API.
Accounting
We removed the default value for the invoice’s type. It must be set explicitly.
An origin invoices field has been added to the invoice.
The Stripe payment module uses now the version 2025-09-30.clover of the API.
E-document
The UBL template filters now the additional documents per MIME type.
Web Shop
Shopify
We replaced the unmaintained ShopifyAPI library by the new shopifyapp.
