Skip to content

What an applet can do ​

An exec applet runs as you, with no sandbox. Installing one is the same trust decision as installing any program. The panel protects the bar from a broken applet, not your files from a hostile one.

What it can reach ​

Everything you can: your files, the network, the session bus, any program on PATH. The unit gets the panel's environment plus the env from its config table, and a 256 MiB memory limit. Its state directory is mode 0700, but nothing stops it writing elsewhere.

What goes through the panel ​

Some requests travel over the socket instead of being done by the applet itself:

RequestWhy the panel does it
open-uri, launchThe panel holds the activation token, so the opened window gets focus. The new app also starts outside the applet's 256 MiB unit, so it does not die with the applet.
close-popoverThe popover belongs to the panel.

The panel opens only http, https, mailto and file URIs of at most 2,048 bytes, and refuses a file that would run a program. Notifications and clipboard copies need nothing from the panel: the SDKs run notify-send and wl-copy from the applet process.

What the panel enforces ​

Slowed down, applet left running:

  • More than 120 lines a second: the panel stops reading until the next second.
  • A message with an unknown type is ignored, so a newer SDK works with an older panel.

The unit is killed, then restarted by systemd (a development copy stays down):

  • A line that is not valid JSON, or longer than 1 MiB.
  • A hello with an unsupported version, or a commit or request sent before hello.
  • A commit the panel rejects: see the limits.
  • More than 5 hellos within 10 seconds.
  • An applet that stops reading its socket until the panel's queue to it is full.

Any of these affects only that applet. The rest of the bar carries on.

Text from other apps ​

Titles and names from other programs (windows, notifications, media players, networks) are hostile input. The panel cleans and caps every string an applet sends, renders it as plain text, never as markup, and drops icon names with unexpected characters.

Released under the BSD 3-Clause license.