From Wikipedia, the free encyclopedia
Jump to navigation Jump to search

XMonad in tiling mode with two URXVT terminals and pcmanFM open
xmonad in tiling mode
Original author(s) Spencer Janssen, Don Stewart, Jason Creighton
Initial release March 6, 2007; 11 years ago (2007-03-06)[1]
Stable release
0.14[2] / July 30, 2018; 2 months ago (2018-07-30)
Preview release
latest Darcs revision / (snapshot)
Repository Edit this at Wikidata
Written in Haskell
Operating system POSIX-compatible
Platform Cross-platform; requires the X Window System and GHC
Size 56 KB (source code)[3]
Available in English
Type Window manager
License BSD-3
Website www.xmonad.org
xmonad's Xinerama support: tiling on three screens simultaneously (with Kinesis keyboard).
xmonad in tiling mode

xmonad is a dynamic window manager (tiling) for the X Window System, noted for being written in the functional programming language Haskell.[4][5]

Window manager[edit]

Begun in March 2007, version 0.1 was announced[6] in April 2007 as 500 lines of Haskell.[7] xmonad is similar to dwm, larswm, StumpWM and other members of the tiling window manager family in that it arranges windows in a nonoverlapping pattern and strives to make it possible for the user to productively manage windows without the use of the mouse. xmonad is packaged and distributed on a wide range of Unix-like operating systems, such as a large number of Linux distributions, and BSD systems.

While originally a clone of dwm (derivative in areas such as default keybindings), xmonad now supports features not available to dwm users[8][9] such as per-workspace layout, tiling reflection, state preservation, layout mirroring, GNOME support and per-screen status bars; it can be customised by modifying an external configuration file and 'reloaded' while running.[10] xmonad features have begun to influence other tiling window managers - dwm has borrowed "urgency hooks" from xmonad,[11] has also included Xinerama support (for multihead displays) with release 4.8, and patches exist to reimplement xmonad's Fibonacci layout.[12]

Haskell project[edit]

In 2007 the man page stated:

"By utilising the expressivity of a modern functional language with a rich static type system, xmonad provides a complete, featureful window manager in less than 500 lines of code, with an emphasis on correctness and robustness. Internal properties of the window manager are checked using a combination of static guarantees provided by the type system, and type-based automated testing. A benefit of this is that the code is simple to understand, and easy to modify."[13]

Extensions to the core system, including emulation of other window managers and unusual layout algorithms, such as window tiling based on the Fibonacci spiral, have been implemented by the active community[14] and are available as a library.[15]

In addition to obviating the need for the mouse,[16] the xmonad developers make heavy use of semi-formal methods and program derivation for improving reliability and enabling a total line of code count less than 1200, as of version 0.7; window manager properties (such as the behavior of window focus) are checked through use of QuickCheck.[17] This emphasis makes xmonad unusual in a number of ways; besides being the first window manager written in Haskell, it is also the first to use the zipper data structure for automatically managing focus, and its core has been proven to be safe with respect to pattern matches,[18] contributing further to reliability. The developers write:

"xmonad is a tiling window manager for the X Window system, implemented, configured and dynamically extensible in Haskell. This demonstration presents the case that software dominated by side effects can be developed with the precision and efficiency we expect from Haskell by utilising purely functional data structures, an expressive type system, extended static checking and property-based testing. In addition, we describe the use of Haskell as an application configuration and extension language."[19]

The code is separated into side-effect free code, and a thin wrapper for the side-effects.[20] According to Alejandro Serrano Mena, there's two ways of implementing domain-specific languages for actions in Haskell applications and libraries "developing a combinator library" or "rolling your own monad", with xmonad being a successful example of the latter.[21] xmonad was regarded as one of the most well known Haskell projects in a 2013 functional programming book.[5]


Linux Magazine included xmonad in a list of "My Top Resources of 2009".[22] In 2012 How-To Geek described xmonad as having good, but complicated, ability to be configured,[23] and was included in a 2013 list of eight desktop environments for Linux.[24] According to an 2013 article in Lifehacker, the basic operations of using the xmonad user interface can be taught using a small set of instructions.[25] A high level of customisation and speed were noted by Network World in 2013.[4] xmonad was reviewed positively compared to Openbox in a 2013 MakeUseOf article.[26] In 2016 Ars Technica said xmonad and Awesome had more advanced tiling ability than Cinnamon.[27] In 2017 it was described as powerful, with application as a windows manager for big data.[28] dwm was chosen over xmonad in a 2017 article on opensource.com.[29] A TechRadar review of the "Best Linux desktop of 2018" said "If there's one desktop environment that stands out from all the others we have here it's this one."[30]

Due to the small number of lines of code of the Xmonad application, the use of the purely functional programming language Haskell, and recorded use of a rigorous testing procedure it is sometimes used as a baseline application in other research projects. This has included re-implementation of xmonad using the Coq proof assistant,[31] a determination xmonad is an imperative program[32], and studies of package management relating to the NixOS linux distribution.[33]

See also[edit]


  1. ^ "Initial import. · xmonad/xmonad@b2c1430". GitHub.
  2. ^ "Releases xmonad/xmonad". GitHub.
  3. ^ "xmonad : download". suckless.org. Archived from the original on 2012-12-26. Retrieved December 17, 2012.
  4. ^ a b Lunduke, Bryan (15 May 2013). "10 amazing Linux desktop environments you've probably never seen". Network World. xmonad. Archived from the original on 25 May 2018.
  5. ^ a b Ohlig, Jens; Mehnert, Hannes; Schirmer, Stefanie (24 September 2018). Das Curry-Buch - Funktional programmieren lernen mit JavaScript. O'Reilly Germany. p. 177. ISBN 386899369X – via Google Books.
  6. ^ "{title}". Archived from the original on 2007-06-25. Retrieved 2018-09-23. Haskell-cafe mailing list by Spencer Janssen
  7. ^ "Xmonad: a Tiling Window Manager Written in Haskell". OSNews. 2007-05-22. Archived from the original on 2008-04-11. Retrieved 2007-09-23.
  8. ^ "Keyboard-Driven Environments Open a New Window". OSNews. 2007-05-31. Archived from the original on 2007-06-04. Retrieved 2007-05-31.
  9. ^ "xmonad 0.4 Released". OSNews. 2007-10-19. Archived from the original on 2007-12-22. Retrieved 2007-12-23.
  10. ^ Through a combination of swiftly re-compiling and then execing the new xmonad binary; see "Haskell Weekly News: April 27, 2007". Haskell Weekly News. 2007-04-27. Archived from the original on 2007-05-29. Retrieved 2007-05-23.
  11. ^ See the developer discussion Archived 2018-09-18 at the Wayback Machine. on the dwm mailing list
  12. ^ Suckless.org: Fibonacci layouts patch Archived 2013-04-13 at the Wayback Machine. to dwm
  13. ^ "Manpage of xmonad". xmonad.org. 2007-04-18. Archived from the original on 2007-07-08. Retrieved 2007-05-17.
  14. ^ xmonad users generate significant traffic in the #xmonad Archived 2007-12-29 at the Wayback Machine. IRC channel and the xmonad mailing list; in addition, there are a significant number of commits to the extension library from non-core devs (see the xmonad statistic page Archived 2007-12-23 at the Wayback Machine.)
  15. ^ "xmonad: Contributed code". xmonad.org. 2007-05-22. Archived from the original on 2007-09-16. Retrieved 2007-05-23.
  16. ^ Mitchell, Neil (June 2008). "6.5.5". Transformation and Analysis (PDF) (PhD). University of York. Archived (PDF) from the original on 12 September 2018. Retrieved 12 September 2018.
  17. ^ Hu, Zhenjiang; Hughes, John; Wang, Meng (2015). "How functional programming mattered" (PDF). National Science Review. 2 (3): 350–351. ISSN 2095-5138. Archived (PDF) from the original on 2018-07-23. Retrieved 27 September 2018.
  18. ^ Mitchell, Neil (9 May 2007). "Neil Mitchell's Haskell Blog: Does XMonad crash?". Archived from the original on 2007-05-14. Retrieved 2007-05-17.
  19. ^ Stewart & Janssen, 2007
  20. ^ Warden, Shane; Biancuzzi, Federico (2009). Masterminds of Programming: Conversations with the Creators of Major Programming Languages. O'Reilly Media. p. 181. ISBN 978-0596515171. Archived from the original on 2018-09-19. Retrieved 2018-09-18.
  21. ^ Mena, Alejandro Serrano (5 March 2014). Beginning Haskell: A Project-Based Approach. Apress. p. 385. ISBN 9781430262510. Archived from the original on 2018-09-24. Retrieved 2018-09-24 – via Google Books.
  22. ^ Zawodny, Jeremy (2009-12-06). "My Top Resources of 2009". Linux Magazine. Archived from the original on 2018-09-23. Retrieved 2018-09-23.
  23. ^ Hoffman, Chris (2012-05-24). "How to Use Xmonad, a Tiling Window Manager for Linux". How-To Geek. Archived from the original on 2018-09-18. Retrieved 2018-09-17.
  24. ^ Hoffman, Chris (2013-05-18). "Linux Users Have a Choice: 8 Linux Desktop Environments". How-To Geek. Archived from the original on 2017-07-13. Retrieved 2018-09-24.
  25. ^ Goerzen, John (2013-01-08). "I Raised My Kids On the Command Line...and They Love It". Lifehacker. Univision Communications. Archived from the original on 2018-09-18. Retrieved 2018-09-17.
  26. ^ Stieben, Danny (2018-09-18). "Need A Fresh Desktop Environment for Linux? Try Openbox Or xmonad". makeuseof.com. Archived from the original on 2017-11-23. Retrieved 2018-09-24.
  27. ^ "Mint 18 review: "Just works" Linux doesn't get any better than this". Ars Technica. 2016-08-04. Archived from the original on 2018-09-17. Retrieved 2018-09-17.
  28. ^ Nita, Stefania Loredana; Mihailescu, Marius (14 September 2017). Practical Concurrent Haskell: With Big Data Applications. Apress. p. 40—41. ISBN 978-1484227800 – via Amazon.
  29. ^ "Top 4 reasons I use dwm for my Linux window manager". Opensource.com. Red Hat. 2017-07-18. Archived from the original on 2018-09-18. Retrieved 2018-09-17.
  30. ^ "Best Linux desktop of 2018". TechRadar. Future plc. 2018-01-15. Archived from the original on 2018-09-18. Retrieved 2018-09-17.
  31. ^ Swierstra, Wouter (13 September 2012). "xmonad in Coq (Experience Report) Programming a Window Manager with a Proof Assistant". In Voigtländer, J. Haskell '12 Proceedings of the 2012 Haskell Symposium. ICFP 2012 The 17th ACM SIGPLAN International Conference on Functional Programming. Copenhagen, Denmark: Association for Computing Machinery. pp. 131–136. ISBN 978-1-4503-1574-6.
  32. ^ Lippmeier, Ben (May 2010). Type Inference and Optimisation for an Impure World (PDF) (PhD). Australian National University. pp. 45–46. Archived (PDF) from the original on 2018-09-27.
  33. ^ Dolstra, Eelco; LÖH, Andres; Pierron, Nicolas (November 2010). "NixOS: A Purely Functional Linux Distribution". Journal of Functional Programming. 20 (5–6): 577–615. ISSN 0956-7968.

Further reading[edit]

External links[edit]