Edgewall Software

1.3 | 1.5

Release Notes for Trac 1.4 Jinja Release

Trac 1.4 is the currrent stable version of Trac.
These notes reflect the final status.


  • Switch to Jinja2 template engine for faster and more memory lenient server-side content generation (#12639)
  • Modernized the code to support Python 2.7 idioms (earlier versions are no longer supported) (#12046, #12148, #12558, #12569)
  • Removed lots of backward compatibility APIs from pre-1.0 days; in particular, the database API is now exclusively based on the context managers (#9612, #11901)

Maintenance Releases



0 / 8


8 / 8


5 / 5

Tickets with release notes

Milestone: 1.4.1 (7 matches)

Ticket Release Notes

Fixed TypeError cloning a ticket that has a time custom field. Fixed Clone button not present when Reply button not present.


Fixed malformed content of RSS feed when Genshi stream filters exist.


Fixed UnicodeDecodeError when searching a ticket link to query view with non-quickjump.


Fixed compatibility issues with Jinja2 version 2.11.


Skip Jinja2 context instance in Href.__call__ to fix wrong link generated from Jinja2 template since Jinja2 2.11.0.


Fixed wiki page path disappeared after r17236.


Reject inf and nan for auto preview timeout user preference.

Trac 1.4: Detailed User Visible Changes

Component: admin/console (6 matches)

Ticket Release Notes

Added ticket delete_comment command to TracAdmin.

  • Traceback is not shown when existing resource is added using TracAdmin (e.g. trac-admin $env milestone add <milestone>.
  • Cached fields returned by TicketSystem.get_ticket_fields were not updated when milestone due or completed dates were changed.

Added test coverage for TracAdmin help commands.


The trac-admin permission add command is atomic when operating on a list of permissions. If the user already possesses one of the permissions, a warning will be printed and the other permissions in the list will be granted. If one of the permissions raises a TracError (e.g. not a valid action), none of the permissions in the list are granted.

  • Removed repostype and repospath arguments from trac-admin initenv command.
  • All cached repositories are synchronized on environment creation.
  • The installed wiki pages are not printed to the console when creating an environment with trac-admin initenv. The information is logged at INFO level to $ENV/log/trac.log.
  • The log_type defaults to file rather than none.
  • The log_level defaults to INFO rather than DEBUG.

Component: admin/web (2 matches)

Ticket Release Notes

Milestone admin page can be accessed by a user possessing MILESTONE_ADMIN. TICKET_ADMIN is required to set the default ticket milestone and default retarget milestone.


Added help links to documentation on various pages.

Component: attachment (1 match)

Ticket Release Notes

Added attachment move command to TracAdmin.

Component: database backend (4 matches)

Ticket Release Notes

Added TracAdmin convert_db command, which migrates a database to the same or new environment while changing the database backend.

  • PostgreSQL version is shown in System Information table.
  • The minimum PostgreSQL version is now 9.1.0.

Dropped support for PostgreSQL < 9.1.


PyMySQL is the supported MySQL library, with support dropped for MySQL-python.

Component: general (24 matches)

Ticket Release Notes

Use relative font sizes in Trac CSS stylesheets


5 times speed-up when rendering query results, thanks to the migration from Genshi to Jinja2.


Made the navigation more configurable.

  • Entries can be added to the navigation
  • Entries provided by Trac and plugins can be moved the between meta and main navigation
  • Added a permission attribute for controlling visibility of the entry

EnvironmentStub logs to a MemoryHandler and a list of (debug_level, message) tuples can be retrieved through the log_messages property.


Removed deprecated functions, classes, attributes and methods.


Replaced StringIO.StringIO and cStringIO.StringIO with io.StringIO and io.BytesIO.


Replaced uses of optparse with argparse throughout codebase.


Fixed regression in r14888.


Refactored code to use Popen context manager.


Refactored code to use open and contextlib.closing context managers.


Fixed case-insensitive usernames in AuthzPolicy, a regression introduced in Trac 1.2.


Fixed exceptions due to req.args.get unexpectedly returning a list.

  • Added a new permission policy for the ticket system (DefaultTicketPolicy):
    • Authenticated user with TICKET_APPEND or TICKET_CHGPROP can modify description of ticket they reported.
  • Renamed ReadonlyWikiPolicy to DefaultWikiPolicy.
  • Modified LegacyAttachmentPolicy to allow authenticated users to delete their own attachments.
  • The workflow is upgraded in db21.py rather than ConfigurableTicketWorkflow.upgrade_environment.
  • The wiki-macros directory is removed in db26.py rather than EnvironmentAdmin._do_upgrade.

Values in owner, reporter and CC property changes are decorated with trac-author-* classes (by Chrome.authorinfo).

  • Improved wording of ticket edit conflict message.
  • Fixed conflict not highlighted when comment is edited.

Improved coding style of sample-plugins/workflow.


The auto preview timeout value can be configured for a session through the User Interface preferences page.


Replaced uses of __import__ with importlib.import_module.


Fixed PostgreSQL server version reported incorrectly for version ≥ 10.


Fixed TypeError rendering error page with [trac] use_chunked_encoding = enabled.


Improved styling of wiki and ticket pages.


Changed Genshi requirement to 0.7 or later.


Fix "Environment needs to be upgraded" when an exception is raised from plugin.

Component: i18n (5 matches)

Ticket Release Notes

Leading whitespace (indentation) is removed from extracted messages.


Fixed now button in jQuery timepicker not using session timezone preference.


Fix distutils.log has no attribute warning.


Improve check_catalog command to check whether same markups are used between msgid and msgstr in translations.


Fix switch to plain-text/interactive mode in error.html when preferred language is not English.

Component: notification (2 matches)

Ticket Release Notes

Ticket changes can be used to format the subject template. changes is the dictionary returned from Ticket.get_change.


Permission groups in the CC list are resolved to the users that are members of the group.

Component: query system (3 matches)

Ticket Release Notes
  • Ticket manipulators are called in batch modify request.

Report sort order is preserved when changing Max items per page.


Fix a visual glitch in the way the first group in a TracQuery tabular results is presented.

Component: rendering (2 matches)

Ticket Release Notes

The template engine used by Trac is now Jinja2. Genshi templates rendering in plugins will be supported until Trac 1.5.1.


Improved exception trapping and logging when executing ExtensionPoints: IEnvironmentSetupParticipant, INavigationContributor and ITimelineEventProvider.

Component: report system (6 matches)

Ticket Release Notes

Default values for TracReports dynamic variables can be specified in the SQL query itself, inside SQL comments.


Report dynamic variables are autocompleted in the preferences form.


Fixed TypeError when report is saved with an empty Query.


Fix malformed html being rendered when a report has only one column.


Fix malformed html when the column ended with _ is used in report.


Fix 'int' is undefined error in report_view.html.

Component: roadmap (2 matches)

Ticket Release Notes

Added autopreviews to all textareas that accept wiki markup.


The path /milestone redirects to /roadmap even when a user doesn't have MILESTONE_VIEW.

Component: ticket system (21 matches)

Ticket Release Notes

The TICKET_CHG_MILESTONE action is used internally to grant/deny changing the ticket milestone. DefaultPermissionPolicy grants the action when the user has MILESTONE_VIEW for the milestone. See CookBook/PermissionPolicies#RestrictChangingTicketMilestone for details on implementing fine-grained access control for changing the ticket milestone.


The tracopt.ticket.clone optional component makes it possible to clone a ticket starting from one of its comment, which can be useful to create "sub-tickets".


Added description field to ticket enums.


Workflow macro can render files from the repository.


Added max_size attribute to text and textarea custom fields.

  • Ticket preview is disabled when there are no workflow actions.
  • The default reset action is not added if there is no new state in the workflow.

Use setUpModule and tearDownModule in trac.ticket.tests.notification to avoid test failures when running individual test cases rather than all tests in the module.


Redirect to the query module after deleting a ticket. If the deleted ticket is in the list of results from the last query, the last query is displayed, otherwise the default query is displayed.

  • Ticket comment edits are validated. ITicketManipulators are called and [ticket] max_comment_size is enforced.
  • Added ticket warnings above the preview.

Empty Comment field is not displayed when viewing diff of a comment.


The version release date is shown in the title of the Version link of the ticket box.


The allowed ticket owners can be programmatically controlled by subclassing ConfigurableTicketWorkflow and overriding the get_allowed_owner method.


Use url-regexp for tc.follow() rather than text-regexp to avoid modifying incorrect textarea value by twill.


The authenticated user is used as the reporter when cloning a ticket.


The cloned ticket description is quoted when cloning a ticket.


Remove unnecessary __FORM_TOKEN from ticketdeleter forms.


The behavior user can edit CC field for new ticket without possessing TICKET_EDIT_CC is implemented in DefaultTicketPolicy. This allows the behavior to be modified by replacing DefaultTicketPolicy.


Replaced term deleted in ticket property changes with removed, in order to unify terminology.


TICKET_EDIT_CC is required for editing the CC list as a text field for the new ticket form.


Ticket change entry for default value of custom field is not added to existing tickets when a new custom field is added.


Fixed regression in ticket list changes that led to display of empty property change.

Component: timeline (4 matches)

Ticket Release Notes

Fixed timeline date headings not localized (regression in Jinja2 porting).


Timeline Ticket updates filter is enabled by default and the filter value defaults to True.

  • Fix typo, __slot__, in trac.util.html.
  • Fix UnicodeEncodeError raised from Element.__str__.
  • Fix TemplateRuntimeError raised in error.html when faulty plugins are more than one.

Fix broken timeline rss when entry's title has xml special characters.

Component: version control (3 matches)

Ticket Release Notes

Repository cannot be added from the admin page if a repository of the same name is already defined in the [repositories] section of trac.ini.


Improve interoperability on Windows with the Windows subsystem for Linux (WSL). Repository paths stored as Windows paths will be converted at runtime to the equivalent POSIX paths if needed.


trac-svn-hook can be configured using the hook script environment configuration, available in Subversion 1.8 and later.

Component: version control/browser (1 match)

Ticket Release Notes

Fix unbalanced </p> in preview_file.html.

Component: version control/log view (1 match)

Ticket Release Notes
  • Improved error reporting.
  • Error is not sent when the response has already started.
  • [trac] use_chunked_encoding is enabled by default and the error page is never sent as iterable content.

Component: web frontend (2 matches)

Ticket Release Notes

Added test coverage for Request.__repr__.


Use sha1 rather than md5 for generating ETag header.

Component: web frontend/tracd (1 match)

Ticket Release Notes

Added support for HTTPS protocol to tracd (TracStandalone).

Component: wiki system (15 matches)

Ticket Release Notes

Extracted variables in WikiModule for the start page and title index page, so they can be overridden by a plugin.


Respect spacing within inline code style in the wiki


Absolute path to wiki page can be passed in the template argument by prefixing path with / (e.g. /TheTemplate). This is useful for plugins and links that wish to use a template that shouldn't be visible in the templates dropdown of the wiki new page form. Relative paths are still prefixed with PageTemplates/.


Restyles the wiki and allow toggling the page between narrow and full width.


Added comment edit link to wiki diff view.


Fixed TypeError when deleting wiki page with more than one version.


Avoid extra spaces in each title of diff block.


No Changes is shown in side-by-side wiki diff mode when there are no differences.


Fix TracHTMLSanitizer raising exceptions and decoding refs twice in title attributes.


Fix wrong msgid_plural in wiki_delete.html.


Fixed duplicate ids on page when more than one wiki toolbar.


TracGuide wiki pages are set readonly when creating an environment.


Macros can be hidden from the MacroList index.


Added link to wiki diff view on delete confirmation page.


The BR macro takes an optional "clear" parameters, which adds the corresponding CSS styling (i.e. [[br(clear:left)]] generates the HTML <br style="clear: left"/>, same thing for "right" or "clear"). Note that [[br(clear)]] stands for [[br(clear:both)]].

Developer-visible changes

A detailed view of the API changes since 1.2.x can be found in TracDev/ApiChanges/1.4.

Code Name

The 0.11 release was dubbed "Genshi" and 0.12 "Babel", after the names of the Python packages that became closely associated to these Trac versions. Therefore, it seems appropriate to name 1.4 "Jinja".

Last modified 8 weeks ago Last modified on Feb 12, 2020, 6:56:51 AM
Note: See TracWiki for help on using the wiki.