Modules: a Lucide icon as a module's logo #874

Closed
opened 2026-10-10 16:11:37 +00:00 by tiagoagueda · 1 comment
Owner

The module issues below give each module a Lucide icon (mails, git-graph, waypoints, message-square-dot, mail, webhook, pyramid, map). Today that is not possible.

What exists today

  • Manifest.logo is a file name inside the plugin's own package (plugins/base.py:186), read with importlib.resources, rendered as sanitised SVG or re-encoded PNG by PluginLogoView (plugins/logos.py); never a path or a URL. No built-in declares one (logos.py: "a decision rather than an omission"); without one the page draws an initials tile (core/templatetags/postulo.py:305-326).
  • Lucide icons are drawn by {% icon %} from static/icons/, synced from assets/icons.txt by npm run sync:icons. Of the icons asked for, only mail and settings are synced; mails, git-graph, waypoints, message-square-dot, webhook, pyramid, map are in lucide-static only.

What would change

  • Manifest.icon (a Lucide name) for modules, drawn with {% icon %} where the logo goes; logo stays for packages, which may ship their own file.
  • The icons added to assets/icons.txt and synced.

Decisions

  • icon beside logo, or logo="lucide:mails". Recommended: a separate field — a module's icon is Postulo's own vocabulary, a package's logo is its author's file, and the logo pipeline's checks (#777) stay for files.

Checked against main at 8c3d03570. From the maintainer's improvements list of 2026-10-07 (plugins).

The module issues below give each module a Lucide icon (`mails`, `git-graph`, `waypoints`, `message-square-dot`, `mail`, `webhook`, `pyramid`, `map`). Today that is not possible. ## What exists today - `Manifest.logo` is a **file name inside the plugin's own package** (`plugins/base.py:186`), read with `importlib.resources`, rendered as sanitised SVG or re-encoded PNG by `PluginLogoView` (`plugins/logos.py`); never a path or a URL. **No built-in declares one** (`logos.py`: "a decision rather than an omission"); without one the page draws an initials tile (`core/templatetags/postulo.py:305-326`). - Lucide icons are drawn by `{% icon %}` from `static/icons/`, synced from `assets/icons.txt` by `npm run sync:icons`. Of the icons asked for, only `mail` and `settings` are synced; `mails`, `git-graph`, `waypoints`, `message-square-dot`, `webhook`, `pyramid`, `map` are in `lucide-static` only. ## What would change - `Manifest.icon` (a Lucide name) for modules, drawn with `{% icon %}` where the logo goes; `logo` stays for packages, which may ship their own file. - The icons added to `assets/icons.txt` and synced. ## Decisions - **`icon` beside `logo`, or `logo="lucide:mails"`.** Recommended: a separate field — a module's icon is Postulo's own vocabulary, a package's logo is its author's file, and the logo pipeline's checks (#777) stay for files. Checked against `main` at `8c3d03570`. From the maintainer's improvements list of 2026-10-07 (plugins).
tiagoagueda added this to the 0.6.0 milestone 2026-10-10 16:11:37 +00:00
Author
Owner

Fixed in 8fb9459ce on main.

Fixed in 8fb9459ce on main.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Postulo/postulo#874
No description provided.