Pimpo
Documentation

RFC 0003: Dashboards and widgets#

Problem#

Pimpo does things on its own, but you only see them as notices, receipts and run history. Many routines exist to know something at a glance: the balance of an account, today's agenda, whether the backup ran, how many orders came in, the price of the dollar. Today that means reading a message each time. There is nowhere to look.

People want:

Where things stand#

Proposal#

1. Widgets are what a routine shows#

A new capability, widget.show, is what a routine calls to put something on a widget. Its risk is Notify: it only ever reaches the routine's own person, it is recorded like any other call, and a routine's tests can check it.

await widget.show({
  key: "balance",                 // one routine may show several widgets
  kind: "metric",               // metric | list | status | text | table | chart
  title: "Checking account",
  value: 1843.20, unit: "BRL",  // metric
  trend: -2.4,                  // optional, percent
  status: "ok",                 // ok | warn | alert, any kind
  items: [...],                 // list and table
  link: "https://…",            // optional: opens on tap
})

Built-in widgets need no routine:

2. Routines become widgets#

3. Dashboards#

4. Widgets outside the app, each on its own#

Every surface reads the same widget feed. GET /api/widgets/feed returns the chosen widgets' latest snapshots in one compact JSON file. The native widgets use it with a widget key (wk_…):

SurfaceHowRefreshNeeds
Web app, phone appDashboards pages, live over the event stream (widget.updated, which carries the person)instantnothing
Floating widgets on macOS, Windows, LinuxEach widget its own small always-on-top window, like the floating Pimpo: its own size and place, remembered, shown on every desktop, hidden while the app is lockedinstantnothing
Android home screenAn app widget in the Android app, one per pinned widget, placed from the app or chosen from the launcher (built with Android's own AppWidgetProvider and RemoteViews, so no new libraries)the system's update, every 30 min, plus on openKotlin in gen/android
iOS home and lock screenA WidgetKit extension with an App Group, and App Intents to choose the widget and, on iOS 17, to refresh or run itthe system's timeline budget, about every 15–60 minSwift in gen/apple, and an Apple Developer account (App Groups, signing)
macOS Notification Center and desktopThe same WidgetKit extension, in the desktop app's bundleas iOSthe Apple account, and the desktop app signed and notarized (2.2)
Windows Widgets boardA widget provider with Adaptive Cardsas Androida packaged (MSIX) app; later, if people ask
LinuxFloating widgets; no standard native widgetinstantnothing

Safety#

Alternatives#

Migration#

Plan (M7)#

ItemWhatSizeDone when
7.1widget.show, snapshots and history, built-in widgets, the dashboards API, privacy and testsMa routine's widget and a built-in one show on a dashboard, and the privacy sweep passes
7.2Dashboards in the app: N per person, grid, drag and resize, phone layout, live updates, stale and refreshMthree dashboards with ten widgets work on desktop and phone
7.3Routines become widgets: the compiler rule, Turn into a widget, status widgets from runsM"show me the dollar every hour" makes a widget unaided in 4 of 5 tries
7.4Floating widgets on macOS, Windows and LinuxMthree widgets float independently, keep their places and hide with the lock
7.5The widget feed and key; Android home-screen widgetsLan Android widget shows a routine's widget and refreshes on its own
7.6iOS widgets (home and lock screen), then macOS WidgetKitLan iOS widget refreshes on its own and redacts on the lock screen · needs the Apple account
7.7Windows Widgets boardMonly if people ask for it after 7.4

Decisions (2026-09-30)#

  1. No Apple Developer account for now. The Mac gets floating widgets (7.4) and the iPhone gets dashboards inside the app. 7.6 waits.
  2. Shared dashboards: yes. A dashboard can be shared with the house. It shows others only widgets marked shared, and their own ready-made ones.
  3. Refresh now: it runs at once, unless the routine uses a model and its last run cost a cent or more; then it asks first.
  4. Order: as proposed. Dashboards, routines as widgets and floating widgets come first, then Android, then iOS.
  5. Dashboards are tabs. Any number of them, and widgets come in many good-looking kinds (numbers, goals, status, lists, tables, and line, area, bar and donut charts).

This page is built from the repository's documentation. Improve it on GitHub.