Welcome | Get started | Dive | Contribute | Topics | Reference | Changes | More
2026¶
This is the 2026 change log for Lino. Learn how to read and maintain this document in Documenting changes.
2026-03-12¶
An application developer can now temporarily change a @schedule_often
into @schedule_often(log_level=”DEBUG”) for debugging. Until now Lino always
always forced lino.modlib.linod.SystemTask.log_level to WARNING for
background tasks with a frequency specified in seconds.
2026-03-10¶
Added new mixins FormatPreviewable and
HistoryAwarePreviewable
and new actions ResetToRevision and
CompareRevisions, see their corresponding
documentations.
2026-03-05¶
Introduce new action ForgetMe on User to schedule
the deletion of all data related to a user. Running this action sets the current
datetime on User.forget_me_since.
The actual deletion of data is done by a data checker
ForgettableChecker that looks for objects
that are instances of Forgettable mixin
and whose Forgettable.get_forgettable_data
method returns a queryset that contains objects that are related to the user and needs to be deleted.
The data checker calls the Forgettable.forget() method on these objects, which deletes them unless
the developer has defined a custom behavior.
Changes in lino.modlib.printing:
Add new attribute DocumentClass.mirror_pages.
Add a keyword argument with_url to Addressable.get_address_lines().
Both features are currently used only by songbook.weasy.html.
TODO: use it also in the other document classes.
Add new plugin setting auto_load_config_files, which defaults to
False. Set it to True to preserve old behaviour (which is to look for a
series of image files in the config directory). This feature isn’t used on any
production site and I think we can deprecate it. Only the
DocumentClass.page_background_image seems useful and recommended.
2026-02-26¶
The new choicelist lino.modlib.printing.DocumentClasses
(#6632) makes it possible to have multiple sets of layouts for
printable documents.
The settings.py potentially need manual conversion; instead of saying:
yield ('weasyprint', 'header_height', 30)
in your get_plugin_configs() you must now override (e.g.) your
startup() method:
def startup(self):
super().startup()
self.models.printing.DocumentClasses.default.header_height = 30
You can now start numbering the items of a page at an arbitrary number. Added a
new field Page.start_num, and Sequenced now calls this instead
of unconditionally starting with 1.
2026-02-24¶
Updated the signature of msg_func (the 5th positional argument to
notify.Message.emit_notification)
now takes user as the only positional argument.
2026-02-20¶
New feature #6605 (A feedback form for collecting contact data). New
plugin lino.modlib.webforms. Visible in noi2: the pages “Contact” and
“Register” each contain a form that is generated from the insert_layout of the
respective model and whose submit button does the same AJAX request under
publisher as under react. The body of these pages contains a memo command [show
webforms.RequestContactsWeb.insert], which is a new variant of the show command.
2026-02-10¶
New site setting lino.core.site.Site.unwrap_span_tags.
2026-02-03¶
Moved TextFieldTemplate from tinymce to jinja. The biggest side effect now is the menu location: “My text field templates” was moved from “Configuration” to the main menu and “Text field templates” was moved from “Explorer” to “Configuration”.
2026-01-27¶
A subtle optimization for #6595 (Suboptimal breadcrumbs in
SectionResponsesByCertificate): When get_parent_links() yields at least
one breadcrumb, then Lino no longer adds a link to the list view.
Added instructions for testing Breadcrumbs in the manual test suite.
2026-01-26¶
New features
ensure_even_pages
and clear_cache_of_children
for lino.modlib.printing.MultiCachedPrintable (#6591).
2026-01-12¶
Added new Model attribute
exempt_from_clean.
The field names given on this Iterable/Sequence are exempted from
validation during full_clean.
By default all VirtualField
if this set is empty (NOT overridden).
2026-01-08¶
Add a new database field lino_xl.lib.trading.TradingRule.journal. In
Lino Studio we want a default value for
lino_xl.lib.trading.TradingRule.columns_to_print per journal.