Skip to content

Repository files navigation

Trilium Scripts

A collection of widgets, themes, and scripts for TriliumNext Notes.

Browse the addon catalog: https://beatlink.github.io/trilium-scripts/

⚠️ Work in progress. The addon system (TAM, its manifest format, and how addons store data) is under active development and changing frequently. Data loss is possible. Download this to test and explore only — do not point it at real/production Trilium data yet.

Installation

Install addons using Trilium Addon Manager by adding this catalog to TAM:

https://beatlink.github.io/trilium-scripts/catalog.json

Or download individual .zip files from Releases and import manually via Trilium → Import.

Addons

Name Type Description Version
Agenda widget A schema-driven, multi-profile agenda system for TriliumNext, in two widgets sharing one configuration: Overview (a right-pane widget whose search/filter/sort/prefix/color rules re-file the active profile's matching notes under a shared overview note shown as a built-in collection view, exporting an iCal feed, and the Agenda Editor page that edits the config) and Note Actions (a right-pane widget on every note with Zen Mode and Hoist Note quick actions). Everything is driven by one open-ended dimensions registry - area and priority ship as defaults, but you can add your own; each dimension gets a sort ordinal and a derived prefix/color/grouping/filter variant. Item type is a separate axis owned by template-picker@beatlink's own registry (a note's ~template relation, not a dimension label). Agenda's config, including the dimensions registry, lives in one settings note (schema.json/config.json) tagged #agendaConfig; every widget discovers and reads it at runtime. Three sibling addons split out of this one and each own their own settings note: agenda-task@beatlink (the Task pane; #agendaTaskConfig) whose recurrence/reschedule code this addon clones back in, agenda-myday@beatlink (the My Day focus panel and timer; #agendaMyDayConfig) which clones this addon's query engine to find due tasks, and agenda-organize@beatlink (the GTD notebook provisioner and triage page; #agendaOrganizeConfig) which reads the dimensions registry back out of #agendaConfig so the two never drift. 6.0.1
Agenda My Day widget A right-pane panel shown only while your My Day note is active, modelled on Microsoft To Do's My Day page. It lists recommended tasks to add to your day - grouped into Earlier, Today and Next 7 Days - each with a + that files it onto the My Day note you nominate; tasks already linked there drop off the list. It also carries a countdown timer with selectable durations and start/select/end sounds, optionally files tasks in automatically as their start time arrives, and sends a desktop notification as each task comes due. A second right-pane panel appears on task notes themselves - any note carrying the configurable task label - with a single Add to My Day / Remove from My Day button, so a task can be filed onto today without going to the My Day note first. Fully self-contained: it owns its settings note (myDaySchema.json/myDayConfig.json, tagged #agendaMyDayConfig) and resolves its task list from a configurable Trilium search rather than depending on agenda@beatlink's code. The default search matches agenda's task vocabulary (#startDateTime/#dueDateTime), so the two interoperate through shared label conventions, but neither requires the other. No My Day note ships with the addon: point the My Day Note setting at a note of your own, and the panel appears while that note is active. 12.0.0
Agenda Organize widget The Organize triage UI from agenda@beatlink. As of 3.0.0 the notebook scaffolder has moved to agenda-structure@beatlink; this addon reads the structural identity labels that addon writes (#agendaOrganizeArea / #agendaOrganizeType / #agendaOrganizeSpecial) and triages the items filed under those roots. The Organize page - shown on a note you pick in the Organize Editor - walks the Inbox, Area and Type subtrees (de-duped, since a filed item is reachable from two roots) and gives you one triage queue per classification dimension, plus a start-date queue with Morning/Noon/Evening/Night quick-times, a misfiled-notes queue that checks each note against the axis of the root it sits under, and an Invalid Roots cleanup table. Filing an item into its Area root and its Type root as a Trilium clone is this addon's per-note job. Owns its own settings note (organizeSchema.json/organizeConfig.json) tagged #agendaOrganizeConfig - the Organize note picker and the four quick-times - independent of agenda@beatlink's #agendaConfig. The classification dimensions registry deliberately stays in agenda@beatlink and is read cross-addon via #agendaConfig, because agenda's Overview derives its prefix/color/grouping/filter variants from the same list these triage queues write to; a local copy would silently drift. Item type comes from template-picker@beatlink's own registry (a note's ~template relation). Every cross-addon read degrades gracefully: without agenda-structure the queues are simply empty until something provisions the roots. 3.0.0
Agenda Structure widget The notebook scaffolder split out of agenda-organize@beatlink: provisions the opinionated GTD structure and owns the structural identity labels every other agenda addon reads. Workflow Setup provisions two PARALLEL top-level trees, each exactly one level deep - one note per Area and one note per enabled template - alongside the Inbox / My Day / Agenda singletons, by find-or-create, adopting notes you already made by hand rather than duplicating them. Neither tree nests the other: a filed item lives in both at once as a Trilium clone, one branch under the Area root matching its #area and one under the Type root matching its ~template. Setup provisions CONTAINERS only and never creates, moves or deletes an item branch, so re-running it cannot disturb anything you have filed; the per-item cloning is agenda-organize@beatlink's job. Also ships the three structural templates (AreaCollection / TypeCollection / Special) the containers are instances of, and re-keys notes left on a stale area slug after an area reorder. Neither classification vocabulary is owned here: the Area list is read cross-addon from agenda@beatlink's dimensions registry (#agendaConfig) and the Type list from template-picker@beatlink's template registry (#templatePickerConfig), because both owners also write them and a local copy would silently drift. Both reads degrade gracefully - with neither installed, Setup still provisions the three singletons. 1.0.0
Agenda Task widget The Task widget from agenda@beatlink, split out as its own addon: a right-pane editor for a note's start/due dates, duration, recurrence, and an Actions section with Complete Task and a row of reschedule buttons. Each section is collapsible. Owns its own settings note (schema.json/config.json) tagged #agendaTaskConfig — the label-name overrides and the reschedule buttons' option registry — independent of agenda@beatlink's own #agendaConfig. Exports its recurrence picker, task-completion/reschedule library, and settings-editor panels (Reschedule Options, label overrides) so agenda@beatlink's Overview and Agenda Editor can clone them in without a hard cross-addon dependency. 1.2.0
Area Picker widget A right pane dropdown widget for setting a note to a specific area of life, plus a Missing Areas page that triages every note still lacking one, and configurable search-based filters to exclude specific notes from the picker. 3.0.1
Budget widget Nested budget tables — apply the Budget template to any note and edit Title / Amount Budgeted / Notes rows in place, with child rows rolling up into their parents. Rollup behaviour (computed, own + children, or budget cap) is configurable, rows can be expanded and collapsed individually or all at once, columns can be shown, hidden and reordered, and budgets can be imported and exported as JSON. 1.4.4
Cinnamon Applet Agenda script Backend API endpoint for the Trilium API Cinnamon panel applet — surfaces the earliest (or latest) past-due task matched by a configurable date label. 1.6.2
Cinnamon Applet First Child script Backend API endpoint for the Trilium API Cinnamon panel applet — surfaces the first child (in Trilium sort order) of a configured parent note. 1.3.2
Cinnamon Applet Inbox script Backend API endpoint for the Trilium API Cinnamon panel applet — surfaces the first line of a designated inbox note, with an optional embedded countdown timer and desktop notification. 1.7.2
Draw.io widget Integrates Draw.io diagram editing into TriliumNext — click any SVG note to edit it inline using the embedded Draw.io editor 0.8.2
Email to Trilium widget Multi-account email inbox for TriliumNext. Connects to Gmail and Microsoft (Outlook) accounts over their HTTP APIs, lists recent messages in a render view, and lets you turn any email into a note (subject + HTML body + attachments) filed under a per-account target note, or delete it from the mail account. 1.2.2
Expanded widget Keep selected notes always expanded in the note tree. Toggle 'Always Expanded' from the right pane header on any note to pin it open permanently, even after restarting Trilium. The label used to mark a note is configurable in settings. 1.4.2
Game Tracker widget A video game tracker for TriliumNext. Your whole library lives in one JSON note created under a library root you choose, so it is a single note you can back up, inspect, or hand-edit. Pick any note as the Library Root and the addon wires it up for you: it becomes a render note showing the tracker, and switching roots reverts the old one. Metadata comes from an ordered list of seven sources -- IGDB, RAWG, Steam, GOG, Lutris, SteamGridDB, and TheGamesDB -- merged FIELD BY FIELD rather than picked one at a time: the first source supplying a value wins that field, and anything it leaves empty falls through to the next, so one game can carry IGDB's platforms, SteamGridDB's cover, and Steam's summary. Reordering changes precedence and untick disables. Three sources (Steam, GOG, Lutris) need no API key at all, so the tracker works with zero setup even where Twitch's two-factor requirement makes IGDB unobtainable. The chain stops as soon as every field is filled, so sources placed lower are only consulted for genuine gaps -- which is how the quota-limited TheGamesDB stays cheap at the end of the order. Each source records which fields it supplied, so provenance is visible per game. The composite is used everywhere metadata is read, not just on import: the library refresh re-merges every enabled source rather than only the first, and the details page is composed the same way -- addressing each source by its own recorded id, the Steam appid, or the title -- so a game with no IGDB id, including a Steam-only or file-imported one, opens and refreshes exactly like any other. Steam is a one-way import source for owned games and playtime, read but never written to; on IGDB, Steam appids are resolved in bulk through the external_games index so a whole library matches in a handful of requests. A library file can also be imported directly: an IGDB GDPR data export, or any CSV/JSON list of games. Because such files carry only titles, every row is matched by name and the result is previewed -- matched, unmatched, and already-tracked counts, with the provider's own spelling shown -- before anything is written. Statuses are fully user-defined -- add, rename, recolour, reorder, or remove them on the Statuses tab. Each status carries a role (backlog / playing / done / abandoned / none) and imports target the role rather than the name, so renaming Beaten to Finished, or adding a Wishlist alongside Backlog, never breaks an import. A game stores a status id, so renaming one touches no data, and removing a status leaves every game still holding it untouched rather than silently reclassifying it. Imports are additive and idempotent: games are keyed by their strongest known id and matched on any shared id so every source converges on one entry, playtime never moves backwards, and your own ratings and status are never overwritten unless you opt in. Nothing is ever marked Beaten by a Steam import -- playtime cannot tell whether a game was finished, so that stays your call. Each import reads the database once and writes once, so it cannot half-apply. Modelled on media-tracker@beatlink, which tracks films and TV. 1.0.0
Hoist Note widget This script adds a launchbar button to quickly toggle the hoisting of the current note. 1.0.4
Margin Top css This simple CSS adds extra padding to any notes with the #cssClass=margin-top label. Useful for headings in the tree view. 1.0.4
Media Tracker widget A movie and TV tracker for TriliumNext. Your whole library lives in one JSON note created under a library root you choose, so it is a single note you can back up, inspect, or hand-edit. Pick any note as the Library Root and the addon wires it up for you: it becomes a render note showing the tracker, and switching roots reverts the old one. TMDB provides search, posters, and episode lists; Trakt and Stremio are one-way import sources, read but never written to. Per-episode progress for shows is a compact run-collapsed string (s01e01-e10,s02e01) rather than a list of every episode, so a fully-watched ten-season show stays a short value. Imports are additive and idempotent: titles are keyed by their strongest known id and matched on any shared id so different sources converge on one entry, episode progress is merged rather than replaced, and your own ratings and status are never overwritten unless you opt in. Each import reads the database once and writes once, so it cannot half-apply. Absorbs and replaces stremio-sync@beatlink. 1.0.0
Mobile View widget These set of scripts allow you to use the full capabilities of the Trilium desktop interface while on a mobile device. 0.0.6
MultiSort script Sorts note children by multiple attributes and criteria using the #multiSorted label. 1.2.2
Notifications script Polls for notes matching a date label and sends desktop notifications for past-due items. 1.2.2
Priority Widget widget A right pane dropdown widget for setting the priority of a note, plus a Missing Priorities page that triages every note still lacking one, and configurable search-based filters to exclude specific notes from the picker. 3.0.0
Recipes widget A food and recipe database with a daily nutrition diary, built to replace Cronometer. Track foods with per-serving nutrition facts (manually entered or looked up via USDA FoodData Central and Open Food Facts), build recipes out of those foods with nutrition computed automatically per serving, and log servings eaten each day against configurable daily nutrient targets. All data is a single persisted JSON note. 1.0.0
Simple Calendar widget Shows a FullCalendar day/week/month view of either an external ics feed URL, or notes matching a configurable Trilium search, mapped to start/due date labels. Settings-driven, no manual note setup required. 1.3.2
TAMTheme theme A full Trilium theme carrying the Trilium Addon Manager's own white/slate/blue design language across the whole app, with a matching dark mode. 0.1.6
Template Picker widget A right-pane widget for assigning or changing the template of the currently active note, plus a Missing Templates page that triages every note still lacking one, and configurable search-based filters to exclude specific notes from the picker. 1.5.2
ToggleNote widget Configurable buttons to quickly add or remove the current note as a child of one or more parent notes. Supports exclusive mode and placement in either the right pane or left pane launchbar. 1.1.2
Trilium Addon Manager widget This addon allows for the easy installation, removal and updating of Trilium addons from any manifest URL or catalog. 6.3.1
Web Preview widget Browse-and-save toolbar for Trilium Desktop's built-in Web View note type. Adds a small toolbar (Back / Forward / Save to Inbox / Open in Browser) above any Web View note, driving the actual Electron <webview> element Trilium already renders for that note type. 1.0.2
WhiteBlueLegacy theme Legacy WhiteBlue theme for older versions of Trilium. A white-dominant theme with light blue accents. 1.0.4
WhiteBlueNext theme This theme has a heavy emphasis on the use of white backgrounds throughout the interface for light users. Light greys and other non white colors are removed where possible. A light blue color is used as an accent for controls, headings and other areas of interest 0.0.6

Development

nix-shell        # enter dev shell

validate         # validate addon structure
ci               # validate then build every addon's ZIP

zip_to_tam <zip>          # convert a Trilium export ZIP into a _tam_manifest_.json
tam_to_zip <manifest>     # convert a _tam_manifest_.json into a Trilium-importable ZIP
generate_pages            # build GitHub Pages site into docs/ (incl. catalog.json)
generate_readme           # regenerate README.md's addon table from manifests

About

Useful Scripts for Trilium

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages