Draw a GPU accelerated dock panel on your desktop¶
Draw the desktop wallpaper or docks and panels using arbitrary terminal programs, For example, have btop or cava be your desktop wallpaper.
It is useful for showing status information or notifications on your desktop using terminal programs instead of GUI toolkits.

Screenshot, showing a sample panel¶
The screenshot above shows a sample panel that displays the current desktop and window title as well as miscellaneous system information such as network activity, CPU load, date/time, etc.
Added in version 0.42.0: Support for macOS and support for Wayland was added in 0.34.0
Note
This kitten currently only works on macOS and Wayland compositors
that support the wlr layer shell protocol
(which is almost all of them except GNOME). On macOS the panels do not
prevent other windows from floating over them because of limitations in
Cocoa. On X11, only the top
and bottom
panels are widely supported,
the other types depend on the window manager used.
Using this kitten is simple, for example:
kitten panel sh -c 'printf "\n\n\nHello, world."; sleep 5s'
This will show Hello, world.
at the top edge of your screen for five
seconds. Here, the terminal program we are running is sh with a script
to print out Hello, world!
. You can make the terminal program as complex as
you like, as demonstrated in the screenshot above.
If you are on Wayland or macOS, you can, for instance run:
kitten panel --edge=background htop
to display htop
as your desktop background. Remember this works in everything
but GNOME and also, in sway, you have to disable the background wallpaper as
sway renders that over the panel kitten surface.
There are projects that make use of this facility to implement generalised panels and desktop components:
Controlling panels via remote control¶
You can control panels via the kitty remote control facility. Create a panel with remote control enabled:
kitten panel -o allow_remote_control=socket-only --lines=2 \
--listen-on=unix:/tmp/panel kitten run-shell
Now you can control this panel using remote control, for example to show/hide it, use:
kitten @ --to=unix:/tmp/panel resize-os-window --action=toggle-visibility
To move the panel to the bottom of the screen and increase its height:
kitten @ --to=unix:/tmp/panel resize-os-window --action=os-panel \
--incremental edge=bottom lines=4
To create a new panel running the program top, in the same instance (like creating a new OS window):
kitten @ --to=unix:/tmp/panel launch --type=os-panel --os-panel edge=top \
--os-panel lines=8 top
Source code for panel¶
The source code for this kitten is available on GitHub.
Command Line Interface¶
kitty +kitten panel [options] [cmdline-to-run ...]
Use a command line program to draw a GPU accelerated panel on your desktop
Options¶
- --lines <LINES>¶
The number of lines shown in the panel. Ignored for background, centered, and vertical panels. If it has the suffix
px
then it sets the height of the panel in pixels instead of lines. Default:1
- --columns <COLUMNS>¶
The number of columns shown in the panel. Ignored for background, centered, and horizontal panels. If it has the suffix
px
then it sets the width of the panel in pixels instead of columns. Default:1
- --margin-top <MARGIN_TOP>¶
Set the top margin for the panel, in pixels. Has no effect for bottom edge panels. Only works on macOS and Wayland compositors that supports the wlr layer shell protocol. Default:
0
- --margin-left <MARGIN_LEFT>¶
Set the left margin for the panel, in pixels. Has no effect for right edge panels. Only works on macOS and Wayland compositors that supports the wlr layer shell protocol. Default:
0
- --margin-bottom <MARGIN_BOTTOM>¶
Set the bottom margin for the panel, in pixels. Has no effect for top edge panels. Only works on macOS and Wayland compositors that supports the wlr layer shell protocol. Default:
0
- --margin-right <MARGIN_RIGHT>¶
Set the right margin for the panel, in pixels. Has no effect for left edge panels. Only works on macOS and Wayland compositors that supports the wlr layer shell protocol. Default:
0
- --edge <EDGE>¶
Which edge of the screen to place the panel on. Note that some window managers (such as i3) do not support placing docked windows on the left and right edges. The value
background
means make the panel the “desktop wallpaper”. This is not supported on X11 and note that when using sway if you set a background in your sway config it will cover the background drawn using this kitten. Additionally, there are two more values:center
andnone
. The valuecenter
anchors the panel to all sides and covers the entire display (on macOS the part of the display not covered by titlebar and dock). The panel can be shrunk and placed using the margin parameters. The valuenone
anchors the panel to the top left corner and should be placed and using the margin parameters. Its size is set by--lines
and--columns
. Default:top
Choices:background
,bottom
,center
,left
,none
,right
,top
- --layer <LAYER>¶
On a Wayland compositor that supports the wlr layer shell protocol, specifies the layer on which the panel should be drawn. This parameter is ignored and set to
background
if--edge
is set tobackground
. On macOS, maps these to appropriate NSWindow levels. Default:bottom
Choices:background
,bottom
,overlay
,top
- --config <CONFIG>, -c <CONFIG>¶
Path to config file to use for kitty when drawing the panel.
- --override <OVERRIDE>, -o <OVERRIDE>¶
default= Override individual kitty configuration options, can be specified multiple times. Syntax: name=value. For example:
kitty +kitten panel -o
font_size=20
- --output-name <OUTPUT_NAME>¶
On Wayland, the panel can only be displayed on a single monitor (output) at a time. This allows you to specify which output is used, by name. If not specified the compositor will choose an output automatically, typically the last output the user interacted with or the primary monitor.
- --app-id <CLS>, --class <CLS>¶
Set the class part of the WM_CLASS window property. On Wayland, it sets the app id. Default:
kitty-panel
- --name <NAME>¶
Set the name part of the WM_CLASS property (defaults to using the value from
kitty --class
)
- --focus-policy <FOCUS_POLICY>¶
On a Wayland compositor that supports the wlr layer shell protocol, specify the focus policy for keyboard interactivity with the panel. Please refer to the wlr layer shell protocol documentation for more details. On macOS,
exclusive
andon-demand
are currently the same. Ignored on X11. Default:not-allowed
Choices:exclusive
,not-allowed
,on-demand
- --exclusive-zone <EXCLUSIVE_ZONE>¶
On a Wayland compositor that supports the wlr layer shell protocol, request a given exclusive zone for the panel. Please refer to the wlr layer shell documentation for more details on the meaning of exclusive and its value. If
--edge
is set to anything other thancenter
ornone
, this flag will not have any effect unless the flag--override-exclusive-zone
is also set. If--edge
is set tobackground
, this option has no effect. Ignored on X11 and macOS. Default:-1
- --override-exclusive-zone [=no]¶
On a Wayland compositor that supports the wlr layer shell protocol, override the default exclusive zone. This has effect only if
--edge
is set totop
,left
,bottom
orright
. Ignored on X11 and macOS. Default:no
- --single-instance [=no], -1 [=no]¶
If specified only a single instance of the panel will run. New invocations will instead create a new top-level window in the existing panel instance. Default:
no
- --instance-group <INSTANCE_GROUP>¶
default= Used in combination with the
--single-instance
option. All panel invocations with the same--instance-group
will result in new panels being created in the first panel instance within that group.
- --listen-on <LISTEN_ON>¶
Listen on the specified socket address for control messages. For example,
kitty --listen-on
=unix:/tmp/mykitty
orkitty --listen-on
=tcp:localhost:12345
. On Linux systems, you can also use abstract UNIX sockets, not associated with a file, like this:kitty --listen-on
=unix:@mykitty
. Environment variables are expanded and relative paths are resolved with respect to the temporary directory. To control kitty, you can send commands to it with kitten @ using thekitten @ --to
option to specify this address. Note that if you run kitten @ within a kitty window, there is no need to specify thekitten @ --to
option as it will automatically read from the environment. Note that this will be ignored unlessallow_remote_control
is set to either:yes
,socket
orsocket-only
. This can also be specified inkitty.conf
.
- --toggle-visibility [=no]¶
When set and using
--single-instance
will toggle the visibility of the existing panel rather than creating a new one. Default:no
Start in hidden mode, useful with
--toggle-visibility
. Default:no
- --detach [=no]¶
Detach from the controlling terminal, if any, running in an independent child process, the parent process exits immediately. Default:
no
- --detached-log <DETACHED_LOG>¶
default= Path to a log file to store STDOUT/STDERR when using
--detach
- --debug-rendering [=no]¶
For internal debugging use.