Skip to content
The Stump Window Manager
Common Lisp Other
Find file
Latest commit b507313 Apr 19, 2016 @jorams jorams Merge pull request #249 from dwchandler/master
Fix two typos in
Failed to load latest commit information.
.dir-locals.el Allow insertion of TAB character when editing Makefiles Nov 19, 2013
.gitattributes add .gitattributes Sep 15, 2007
.gitignore Merge pull request #8 from filonenko-mikhail/event-hook Jan 27, 2014
.travis.yml Updating travis build Jan 25, 2016
AUTHORS Merging partial PR changes from #211 Sep 29, 2015
COPYING Update FSF address Nov 13, 2011
HACKING touch up b53c01d to make the manual build again. May 9, 2008 Updating travis build Jan 25, 2016
NEWS update NEWS file May 18, 2010 Fix two typos in Apr 18, 2016 add remove stumpwm.sbcl and stumpwm.clisp Oct 6, 2007
bindings.lisp bindings.lisp: Add bindings for repack-window-numbers, show-window-pr… Feb 27, 2016
color.lisp Incorporating part from @PuercoPop to fix #203 since PR #211 has dive… Sep 29, 2015
command.lisp Merge branch 'master' of Oct 4, 2015 Updated configure to error when makeinfo isn't found Jan 23, 2016
core.lisp Exporting symbols Jan 28, 2015
events.lisp Replace the fullscreen-SDL skip-raise heuristic with grabbing the server Mar 10, 2016
fdump.lisp Update FSF address Nov 13, 2011
floating-group.lisp Fix (gmove-and-follow "<float>") exception Nov 7, 2015
font-rendering.lisp Add multiple font support Jul 24, 2014
group.lisp Export ADD-GROUP Sep 16, 2014
head.lisp Added refresh-heads command to fix #107 Sep 22, 2014
help.lisp Update FSF address Nov 13, 2011
input.lisp Fixing #169 Nov 18, 2014
iresize.lisp Update FSF address Nov 13, 2011
keysyms.lisp Include keysym for XF86AudioMicMute. Apr 27, 2014
keytrans.lisp Update FSF address Nov 13, 2011
kmap.lisp Update FSF address Nov 13, 2011 Removed embedded emacs variables Feb 16, 2014 Correctly set default *module-dir* Nov 9, 2014
manual.lisp Fix #188: Missing arguments in manual when built with CCL. Feb 21, 2015
menu.lisp menu.lisp: Don't display a blank prompt. Mar 24, 2016
message-window.lisp Move gravity calculation into a generic function Aug 11, 2014
mode-line.lisp Manual updates Nov 6, 2014
module.lisp Clean up "module.lisp" from trailing whitespaces Aug 4, 2015
package.lisp Update FSF address Nov 13, 2011
pathnames.lisp Fixing pathname issue with clisp Nov 13, 2014
primitives.lisp menu: refactor, add `match-all-regexps` Feb 5, 2016
sample-stumpwmrc.lisp Fixes #207 Jul 14, 2015
screen.lisp Merge remote-tracking branch 'upstream/master' Sep 15, 2014
selection.lisp Update UTF-8 selection for multiple selections Oct 12, 2014
stumpwm.asd Trying to merge pull request Nov 7, 2014
stumpwm.lisp Add ~/.stumpwm.d/init.lisp as an init file. Feb 4, 2015 Adds documentation for the new hooks. Oct 1, 2015
test-wm.lisp add 2 more tests to test-wm-class Oct 17, 2008
tile-group.lisp Reverting fix that broke splitting and managing tiled windows Apr 9, 2015
tile-window.lisp use `select-window-from-menu` wherever possible Feb 5, 2016
time.lisp time.lisp: *time-format-string-default*: Include the year Feb 27, 2016
user.lisp Handle show-window-properties error when no windows are open Sep 27, 2015
version.lisp Added Daniel Borchmann's patch to honor version number from tags Feb 24, 2014
window-placement.lisp Only sync window frames when the frame exists. Feb 3, 2014
window.lisp Replace the fullscreen-SDL skip-raise heuristic with grabbing the server Mar 11, 2016
workarounds.lisp Remove obsolete workaround. Feb 23, 2015
wrappers.lisp Revert "Addresses #142, making read-line the same for all lisps" Apr 9, 2015
wse.lisp Adding a missing function from module and exporting some functionalit… Mar 18, 2014

The Stump Window Manager

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.


Stumpwm is a "everything-and-the-kitchen-sink WM" or "the emacs of WMs."


  • StumpWM is
    • Hackable
    • A tileable window manager
    • Includes support for floats
    • Written in Common Lisp
    • Compatible with many lisp distributions
    • 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 sloc, 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


  • a common lisp distribution. sbcl, clisp, ccl and ecl all work (ecl must have been built with clx support, must use version >= 13.5.1 see here for discussion).
  • quicklisp (for obtaining the following dependencies, not needed if you use your distribution's package manager.)
  • clx
  • cl-ppcre
  • cl-xembed

The recommended way to install the dependencies is using Quicklisp. Follow the instructions at to install it. In short:

$ curl -O
$ sbcl --load quicklisp.lisp

Or insert your favorite lisp distribution (clisp, ccl or ecl). Then at the REPL:


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


Then, in a repl:

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


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


If there's already a configure script then just run it.


By default stumpwm selects sbcl. If you have multiple lisps installed, you can explicitly select clisp, ccl, or ecl like so:

 ./configure --with-lisp=clisp

If your lisps are in strange places you may need to tell the script where to find them:

 ./configure --with-sbcl=/home/sabetts/opt/bin/sbcl
 ./configure --with-clisp=/usr/local/downstairs/to/the/left/clisp

Now build it:


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

 make install

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

 echo /path/to/stumpwm >> ~/.xinitrc

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

Requirements for multiple monitor setups

For stumpwm to work as intended with multiple monitors setups the xdpyinfo utility is needed.


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
    • 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.
  • 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

Our wiki has fallen into disarray/disrepair, but it is shaping up. 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.


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
  • Dynamic tiling
  • 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.
    • Support fixed number of chars for window titles
    • 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)
    • Support raising windows when left-clicked, closing/killing when right-clicked

CCL And Virtual Memory

On 64bit platforms, CCL reserves a "very large" amount of virtual memory. If this bothers you for some reason, you can pass the -R or --heap-reserve option to the binary in your ~/.xinitrc file. See for an explanation.


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 do "C-t h v,f,k,c,w" for docstrings of Variable,Functions,Keys,Commands, and Where-is respectively.

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

There's a #stumpwm channel on, too.

Finally, there's our mailing list (click to sign up)

Something went wrong with that request. Please try again.