Heliwm is designed and developed to be one of the smallest and lightest window managers in the world of X. I believe that saving memory and CPU time contributes to less electricity consumption, thus saving natural resources.

It simply provides essential window management operations: move, resize, iconify, raise, lower, focus change, maximize. No menus, gorgeous look, virtual screens, etc. It can even be compiled without window frames, to further reduce resource requirement. Heliwm is for those of you who want to spend minimum amount of computer resources for a window manager.

Here is a screen shot.

Package and License

The latest version (1.13) is available under the license below.

Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 Hidetoshi Ohtomo

Heliwm is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

Heliwm is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

The license can be found at


Following strategies were taken in order to make the program small and/or lessen CPU load:

Extensive use of compile time options
To make it possible to minimize heliwm according to individual needs, following features are optional (see "Compile Time Options" section below): window frame drawing (FRAME), configuration file parser (RCPARSER), native language system support (NLS), shape extension support (SHAPE), window maximizing operation (MAXIMIZE), window management list reordering operation (REORDER).
No intelligent automatic icon placement
When a window is first iconified, the icon is placed at where the window is, or a user must determine where to place the icon, depending on the specified option.
Rather cryptographic configuration file (like :-)
Configuration file syntax is not so intuitive and quite strict to minimize parsing module.
Simple frame decoration
Frame decoration is not gorgeous, and there is no decoration when compiled without FRAME option.
Lack of safeguards for rare cases
For example, upon startup, heliwm doesn't check if another window manager is running. Also, when malloc(3) fails, it simply exits silently, since such a case seems to be very rare.

For your reference, here is output from size(1) and ps(1) under Linux:

  text  data    bss    dec
  9908  4840    172  14920 heliwm # 1.9 alpha particle
  9796  4778    176  14750 heliwm # 1.10 alpha particle
  9756  4818    264  14838 heliwm # 1.11 alpha particle
 10368  4787    260  15415 heliwm # 1.12 alpha particle

 15024  5927    192  21143 heliwm # 1.9 +FRAME +RCPARSER +SHAPE +NLS +MAXIMIZE
 14920  5861    188  20969 heliwm # 1.10 +FRAME +RCPARSER +SHAPE +NLS +MAXIMIZE
 14928  5899    276  21103 heliwm # 1.11 +FRAME +RCPARSER +SHAPE +NLS +MAXIMIZE +REORDER
 15484  5864    280  21628 heliwm # 1.12 +FRAME +RCPARSER +SHAPE +NLS +MAXIMIZE +REORDER

 98948 14475   4620 118043 fvwm   # 1.23b
129460 35042   7300 171802 olwm
 99780 30975  82956 213711 twm
214060 58114 147092 419266 olvwm

 28  724  752  616 heliwm # heliwm 1.9 +FRAME +RCPARSER +SHAPE +NLS +MAXIMIZE
 28  724  752  616 heliwm # heliwm 1.10 +FRAME +RCPARSER +SHAPE +NLS +MAXIMIZE
 28  724  752  616 heliwm # heliwm 1.11 +FRAME +RCPARSER +SHAPE +NLS +MAXIMIZE +REORDER
 28  756  784  652 heliwm # heliwm 1.12 +FRAME +RCPARSER +SHAPE +NLS +MAXIMIZE +REORDER
116  732  848  664 fvwm
132 1388 1520 1060 twm

Compile Time Options

There are several compile time options, each of which adds extra code to heliwm. Choose necessary ones only, to minimize resulting binary.

If heliwm is compiled without this option, it is called alpha particle version. It doesn't draw window frame around client windows to save resources.
Configuration file parsing capability. Without this option, heliwm can only use its hard-coded configuration information.
Native Language System support. In order to use character sets other than ISO-8859-1 for window and icon titles, set environmental variable LANG to name of your locale.
X non-rectangular window shape extension support. Clients such as oclock(1) and xeyes(1) are written using the extension, but can be run without it. Some non-rectangular windows generate many X events upon exposure, and can be a burden to CPU, so compile heliwm without this option, if you would.
Optional automatic window maximizing feature. Window maximizing can be done manually with resizing, so if you want to save resources, compile heliwm without this option.
Optional window management list reordering feature. The list is used to move pointer from one window to another in a order. By using this feature, it is possible to bring a window to the top of the list.

In the list above, there are only six options, but there are seven. One of them is undocumented. For details, "Use the source, Luke." :-)


1.13 (3 March 2006)
  • Added horizontal and vertical maximize operations.
  • Changed default of REDRAW_ACTIVE_WINDOW_ONLY to off.
1.12 (9 February 2005)
  • Added pointing device support for move and resize operations (finally!). Now all operations can be done using both keyboard and pointing device.
1.11 (1 June 2003)
  • Added REORDER compile time option.
  • Disclosed VERBOSE code, though undocumented.
  • Refined code extensively.
  • Removed unnecessary free(3) in terminate().
  • Changed target installation directory of heliwmrc from /usr/lib/X11/heliwm to /usr/X11R6/lib/X11/heliwm.
  • Changed default key binding for "previous" operation from Alt-Return to Alt-Shift-Tab.
1.10 (3 May 2002)
  • Improved the code and reduced the binary size by less than 1%, while improving resize operation for clients with {width,height}_inc greater than 1 (e.g., xterm).
1.9 (22 January 2002)
  • Added RCPARSER compile time option.
  • Added a built-in key bind table.
  • Changed a couple of default key bindings.
1.8 (20 October 2001)
  • Added interactive placement option.
1.7 (16 August 2001)
  • Fixed another focus-related bug, which didn't pass focus to gimp(1) and possibly other clients participating WM_TAKE_FOCUS.
1.6 (19 June 2001)
  • Improved frame drawing routine; changed several configuration keys accordingly.
  • By prohibiting delete operation on icon windows, fixed a bug which caused an X protocol error upon executing the operation on a client-supplied icon.
  • Improved find_window().
1.5 (20 May 2001)
  • Changed to free created background pixmap immediately after creating icon window with it.
1.4 (29 April 2001)
  • Fixed a bug, which seldom prevented change of focus.
  • Added cursor configuration.
  • Added installation procedure of heliwmrc to Imakefile.
  • Added MAXIMIZE compile time option.
  • Passed gcc(1) `-pedantic' option.
  • Added NLS compile time option.
  • Fixed a PMinSize-related bug.
  • Fixed a bug which caused memory leak.
1.0.0 (30 December 2000)
  • First public release.


First of all, I must confess that I have pronounced "-wm" suffix almost same as "-um," since about a year after my first experience with X Window System. So, for example, I pronounced fvwm as "ef-vee-um" and twm as "toom" when I read them in documents and articles. When I talk to other people, though, I pronounced "F-V-W-M" and "T-W-M" as many people do, in order to avoid unnecessary arguments.

When I decided to write this software in summer of 2000, I named it lithiwm, after the third lightest element, lithium. I chose lithium because it is the lightest metal element, and my objective was to create one of the lightest window manager. But a few days (or was it a few weeks?) later, I thought that I don't have to limit myself to metal elements, so I changed the name to heliwm, after the second lightest element, helium. Thus, I pronounce heliwm exactly same as helium. By the way, you may wonder why I didn't select the lightest element. The reason is simple: hydrogen doesn't end with "-um" suffix.

The FRAME option was one of the first compile time options, so it seemed nice to use alpha particle as the name for a binary without the option (for those of you who aren't familiar with chemistry: an alpha particle is a helium element without electrons).

It was only then that I began thinking what "HELIWM" should stand for, as many acronym makers did (I don't believe that acronyms such as VERONICA and AEGIS were made coincidentally). "WM" stands for "window manager," as other window managers. "L" for "Light" was easy; "H" for "Highly" after a day or two; "E" for "Essential" after looking up my thesaurus; "I" for "Itsy-bitsy" was chosen when I asked my family at lunch (thank you, Yuki).

Heliwm shares some characteristics with helium: light, small, stable (I hope), etc. But there is one aspect which I don't want heliwm to share: rare in earth's atmosphere. :-) So if you like heliwm, please tell about it to your friends, and help me spreading it over the world.


If you tried heliwm, please tell me how you felt about it via email (see below). Even a line of response can be a great encouragement and motivation toward improving the software.

You can also make my day by sending me one or more of the following:

I'm looking forward to hear from you.

Nature Oriented Computing

Heliwm is written in the hope of saving natural resources by its low computer resource requirement. People who want to contribute to nature protection may want to use this window manager instead of other heavy, gorgeous-looking ones.

Please take a look at my document, Nature Oriented Computing, for more information on how to save the resources.