StumpWM. My new favorite window manager.
Go to file
2026-01-26 00:25:08 +02:00
.github/workflows CI: Create script for running GitHub workflow locally 2022-11-15 02:09:47 +01:00
dynamic-mixins Add sorting rules for minor mode inheritance order 2023-09-13 11:27:56 +02:00
tests Account for the characters taken by the color chars in STUMPWM:BAR 2023-09-07 22:04:15 -05:00
.dir-locals.el Allow insertion of TAB character when editing Makefiles 2013-11-19 00:30:27 -02:00
.dockerignore CI: Expand .dockerignore 2022-11-15 02:09:47 +01:00
.gitattributes add .gitattributes 2007-09-15 16:03:40 -07:00
.gitignore Let git ignore generated test cases 2021-06-11 11:05:15 +02:00
.travis.yml Replace refereces to Freenode with Libera 2021-06-01 19:22:06 -05:00
AUTHORS Add to AUTHORS 2022-08-16 12:32:59 +02:00
autogen.sh add autogen.sh. remove stumpwm.sbcl and stumpwm.clisp 2007-10-06 18:32:47 -07:00
bindings.lisp Clarified nuances of command-mode 2025-04-21 12:36:54 +02:00
ci CI: Use same docker image for both tests and integration-tests 2022-11-15 02:09:47 +01:00
color.lisp Allow specifying bright and dark colors separately 2022-08-17 16:48:58 -06:00
command.lisp add a report to the restart 2022-12-10 07:24:38 +01:00
configure.ac Supporting reproducible builds. 2024-10-19 17:23:28 +02:00
COPYING Update FSF address 2011-11-13 12:31:20 +00:00
core.lisp Fixing issue 226 by adding a synthetic click when no-focus is called 2019-11-27 18:08:39 -05:00
debug.lisp move (rotate|open|close)-log from debug to primitives 2024-10-22 06:51:48 +03:00
dynamic-group.lisp rename dynamic-mixins->dynamic-mixins-swm to avoid package conflicts 2023-03-30 08:37:46 -05:00
dynamic-window.lisp Compact conditional, removing unneeded clause 2022-12-07 06:18:16 +01:00
events.lisp Accept root-window button-presses when received for a source-window (child) that is ours. 2022-12-29 15:06:50 +01:00
fdump.lisp Downcase ungrammatical capitals in prompts 2022-03-04 17:11:14 +01:00
floating-group.lisp Fixed an issue where floating a window sometimes flashes the color Orange instead of the focus color 2026-01-26 00:25:08 +02:00
font-rendering.lisp Simplify FONT-EXISTS-P 2019-07-14 14:08:55 -05:00
group.lisp Re-fix issue #1000 2022-11-10 20:55:35 +01:00
HACKING touch up b53c01d617 to make the manual build again. 2008-05-09 15:49:50 -07:00
head.lisp Remove duplicate orphaned-frames definition 2022-12-07 06:06:44 +01:00
help.lisp Downcase ungrammatical capitals in prompts 2022-03-04 17:11:14 +01:00
input.lisp support S-DEL and C-DEL in *input-map* 2024-08-09 00:53:34 -05:00
interactive-keymap.lisp Make messages punctuation more uniform 2019-12-23 13:24:21 -08:00
ioloop.lisp Reworked IO loop, simplification & removing restarts. 2025-01-28 15:14:41 +01:00
iresize.lisp Rewrite resize-direction 2023-11-10 19:40:32 +01:00
keysyms.lisp Add preliminary support for dead keys 2022-05-27 15:33:42 +02:00
keytrans.lisp FIX issue #997 2025-03-17 13:27:24 +02:00
kmap.lisp Improve kbd by adding a diagnostic message in some error cases 2022-09-21 23:03:31 -06:00
load-stumpwm.lisp.in Avoid source registry init and add (require "asdf") where it's missing. 2024-05-26 21:32:30 +02:00
main.lisp Add Option to GENERATE-MANUAL 2020-09-26 22:32:40 -05:00
make-image.lisp.in Reworked IO loop, simplification & removing restarts. 2025-01-28 15:14:41 +01:00
Makefile.in Merge system definitions in a single ASD file. 2024-05-26 23:20:28 +02:00
manual.lisp Print functions macros and commands in semi-pretty way in the manual 2022-12-04 19:01:00 +01:00
menu-declarations.lisp Fix select-from-menu crashing X (#1029) 2022-08-24 20:59:07 -06:00
menu-definitions.lisp Patch run-menu to only funcall functions, not remove help message 2022-02-21 14:24:47 +01:00
message-window.lisp Adding support for message window margins. 2024-05-29 10:54:46 +02:00
minor-modes.lisp Merge pull request #1187 from szos/patch-minor-mode-scopes 2024-04-18 20:36:45 -04:00
mode-line-formatters.lisp support fixed number of chars for window titles 2025-08-12 11:21:41 +03:00
mode-line.lisp Merge pull request #1246 from Luminous-99/wishlist-revamped-mode-line 2026-01-08 22:08:35 -05:00
module.lisp Downcase ungrammatical capitals in prompts 2022-03-04 17:11:14 +01:00
NEWS NEWS: remove merge cruft 2018-10-07 12:16:13 -05:00
package.lisp Added functions IN-MAIN-THREAD-P and PUSH-EVENT 2017-07-18 01:49:04 -05:00
pathnames.lisp Convert some pathname functions to use uiop 2019-01-03 22:24:50 -05:00
primitives.lisp Add _NET_WM_STATE_ABOVE to +NETWM-SUPPORTED+ 2025-07-09 01:19:53 -06:00
README.md support fixed number of chars for window titles 2025-08-12 11:21:41 +03:00
remap-keys.lisp Fix send-raw-key 2020-10-08 10:32:32 -05:00
replace-class.lisp rename dynamic-mixins->dynamic-mixins-swm to avoid package conflicts 2023-03-30 08:37:46 -05:00
sample-stumpwmrc.lisp Replace Google in sample stumpwmrc with DuckDuckGo 2020-06-08 20:08:24 +02:00
screen.lisp Add an alpha channel to some allocated colors 2022-08-06 13:06:49 +02:00
selection.lisp Fix typos in strings 2021-04-23 16:21:35 +00:00
stumpwm.asd Fix version in stumpwm.asd 2024-12-03 19:48:23 +01:00
stumpwm.lisp Merge pull request #1209 from zmyrgel/better-default-data-dir 2025-02-07 20:41:28 -05:00
stumpwm.texi.in support fixed number of chars for window titles 2025-08-12 11:21:41 +03:00
test-wm.lisp add 2 more tests to test-wm-class 2008-10-17 15:16:13 -07:00
tile-group.lisp Merge pull request #1171 from Dorovich/master 2024-02-17 12:53:57 -05:00
tile-window.lisp Use rational numbers for tiled layout 2022-11-10 18:05:34 +01:00
time.lisp Merge pull request #1075 from svenssonaxel/1074-d-e-time-format 2023-03-04 14:45:34 -05:00
timers.lisp Reworked IO loop, simplification & removing restarts. 2025-01-28 15:14:41 +01:00
user.lisp Use rational numbers for tiled layout 2022-11-10 18:05:34 +01:00
version.lisp Revert "Supporting reproducible builds." 2024-10-19 09:19:51 -04:00
window-placement.lisp FIX issue #1234 2025-03-30 22:12:49 +03:00
window.lisp Patch MARK to accept the window as an optional argument 2024-03-25 14:13:28 -07:00
wrappers.lisp UTF8-to-string: Use Replacement Character (\uFFFD) 2019-09-08 00:46:27 -05:00
wse.lisp Replaced all tab characters with an appropriate number of spaces. 2017-12-20 14:32:38 -06:00

The Stump Window Manager

Gitter

StumpWM is a window manager written entirely in Common Lisp. It attempts to be highly customizable while relying entirely on the keyboard for input. You will not find buttons, icons, title bars, tool bars, or any of the other conventional GUI widgets.

These design decisions reflect the growing popularity of productive, customizable lisp based systems.

Philosophy

StumpWM is a "everything-and-the-kitchen-sink WM" or "the Emacs of WMs."

StumpWM:Windows::Emacs:Text

  • StumpWM is
    • Hackable
    • Written in Common Lisp
    • A multi paradigm window manager
    • A Superior window managing experience
  • StumpWM is not
    • Minimalist
    • Narrow scope
    • Configured by editing the source directly
    • A full blown desktop environment

If you want a minimalist tiling window manager, then StumpWM is not what you're looking for. The code base is ~15k lines, the binaries produced are ~60mb.

StumpWM manages windows the way emacs manages buffers, or the way screen manages terminals. If you want a flexible, customizable, hackable desktop experience, look no further.

Build & Start Stumpwm

Prerequisites

  • SBCL
  • quicklisp (for obtaining the following dependencies; not needed if you use your distribution's package manager.)
  • clx
  • cl-ppcre
  • alexandria

The recommended way to install the dependencies is using Quicklisp. Follow the instructions at http://www.quicklisp.org/ to install it. In short:

$ curl -O https://beta.quicklisp.org/quicklisp.lisp
$ sbcl --load quicklisp.lisp

Then at the REPL:

(quicklisp-quickstart:install)

Make sure you have added it to your lisp init file using:

 (ql:add-to-init-file)

Then, in a repl:

 (ql:quickload "clx")
 (ql:quickload "cl-ppcre")
 (ql:quickload "alexandria")

Note: The recommended way to install SBCL is by downloading one of their pre-built binaries available in their web page or build it from source. Please do not install SBCL using your distributions package manager, especially Ubuntu. If you do so it is likely that you'll run into problems when building StumpWM due to using obsolete versions of the dependencies.

Building

Building stumpwm from git requires that you build the configure script:

 ./autogen.sh

Then run it:

 ./configure

Now build it:

 make

If all goes well, you should have a stumpwm binary now. You can run the binary from where it is (starting it with X) or install it, along with the .info documentation, with:

 make install

Now that you have a binary, call it from your ~/.xinitrc file:

 # The default path is /usr/local/bin/stumpwm
 echo /path/to/stumpwm >> ~/.xinitrc
 startx

Hopefully that will put you in X running stumpwm! See StartUp on the wiki for more examples.

Contributing

Pull requests are always welcome! Here are some guidelines to ensure that your contribution gets merged in a timely manner:

  • Do's
    • Add your name to the list of AUTHORS with your pull request.
    • Preserve comments or docstrings explaining what code does, and update them if your patch changes them in a significant way
    • Try to follow an "80 column rule." The current code base does not follow this all the time, so don't use it as an example
    • If you export a symbol, you must add it to the manual.
    • Use lisp idioms
    • If you are working on a major change to the internals, keep us informed on stumpwm-devel! Also, it will probably help if the changes are made and then incrementally applied to the codebase in order to avoid introducing show-stopping bugs.
    • Run ./ci before making a pull request to confirm that the GitHub workflow will succeed.
  • Do not's
    • Include Emacs local variables
    • Change whitespace
    • Write lots of code without supporting comments/documentation
    • Delete comments or docstrings (yes this is a duplicate of above!)
    • Export symbols from packages that aren't widely useful (many times a little more thought will reveal how to implement your internal change without having to export/break encapsulation)
    • Make stylistic changes that suit your coding style/way of thinking

If you aren't a lisp hacker, you can contribute in the form of documenting and organizing the wiki. There's a lot of information floating around; if you find it where you didn't expect it, move or link to it in a more logical place.

Wishlist

Fancy yourself a lisp hacker? Here's a wishlist of features for the StumpWM universe (in no particular order):

  • float-splits (ie allow floating windows over tiled ones)
  • Float windows within parent applications (specifically dialogs in gimp or firefox).
  • tab-list showing the contents of the current frame at the side, top, or bottom of the frame
  • Emacs' iswitchb function implemented in emacs
    • Re-arranging windows between groups
    • Killing windows
    • Marking windows for batch operations
    • Deleting/adding groups
    • Import data from stumpwm to emacs, use an emacs minor mode to implement the above features, then export the data back to stumpwm and let stumpwm perform the appropriate actions
  • Emacs' completing-read-multiple function
  • Lock Screen (with support for leaving notes, bonus points if emacs is involved)
  • Wallpapers! (support pulling from remote sources, changing based on timers, and other hacky features)
  • Shutdown, restart, suspend, and hibernate functions that don't require root access
  • Revamped, mouse-friendly mode-line.
    • Dynamically trim window titles to fit them all on the mode-line
    • Split the mode-line into multiple cells for containing different information
    • Implement widget icons to indicate system status (new mail, low battery, network etc)

Help

There's a texinfo manual, stumpwm.texi. The build scripts generate an info file you can read in emacs or with the `info' program. The manual for the latest git version (may be slightly out of date) is available to read online at: The Manual

And, as in Emacs, you can always get documentation with:

Key Help
C-t h v Variables
C-t h f Functions
C-t h k Key sequences
C-t h c Commands
C-t h w Find key sequences for a command

For other stuff (tips tricks and examples) visit the stumpwm wiki

There's a #stumpwm channel on irc.libera.chat, too.

Finally, there's our mailing list (click to sign up) stumpwm-devel@nongnu.org.