When comparing XMonad vs i3, the Slant community recommends i3 for most people. In the question“What are the best window managers for Linux?” i3 is ranked 1st while XMonad is ranked 3rd. The most important reason people chose i3 is:
Every feature is thoroughly documented (including examples), and documentation is kept up-to-date. For questions that are not answered by the i3 [user guide](http://i3wm.org/docs/userguide.html), because they concern tools outside of i3 for example, there is the community [question & answer site](https://faq.i3wm.org/).
Ranked in these QuestionsQuestion Ranking
Pro Fully extensible with Haskell
XMonad is written, configured, and fully extensible in Haskell. This means that users aren't limited to a small set of pre-programmed layouts and actions: anything can be programmed into the configuration.
It's simple to modify basic settings, and the example config has lots of comments to get you started. Haskell keeps this code clean, concise, and readable, and its type system keeps you safe from any serious mistakes. This makes it fast and light, even on very small and slow systems.
Pro Efficient to use
XMonad is a very minimal and efficient window manager, especially if the user is familiar with Haskell.
Pro Absolutely minimal
The entire window manager is extremely small, and includes nothing beyond basic window manipulation and tiling. Out of the box, there are no window decorations, status bar nor icon dock; just clean lines and efficiency.
Pro Very stable
Use of Haskell, in conjunction with smart programming practices, guarantees a crash-free experience.
Pro Edit configuration and reload on-the-fly
Configuration is compiled into the WM, and it can be changed/updated on-the-fly, without requiring a full reload.
Pro Great availability of libraries
The use of Haskell as an extension language means that popular pieces of functionality are easily shared and widely available as Haskell Libraries. Many default layouts, and tools for quickly and easily building your own, are available through XMonad-contrib, and highly re-usable configurations are commonly shared through blog articles and the Xmonad Wiki.
Pro Highly configurable
If you enjoy programming, you can even add features to XMonad to make it your perfect desktop environment, and the Contrib modules give you most of what you need to do exactly that.
Pro Handles multiple monitors well
XMonad can handle multi-monitor setups by default.
Pro Xinerama support
XMonad has full support for Xinerama: windows can be tiled and managed across multiple physical screens.
Pro Dynamic Tiling
XMonad uses dynamic tiling which means that it automatically handles arranging your windows into various layouts which the user can cycle through.
Pro Fully configurable (including tiling)
One of the biggest attractions of i3 is that it can be configured just about any way the user likes. Ranging from custom keyboard shortcuts to placement of opened apps, it is up to the user as to how they would like their window manager to behave.
Pro Easily readable plain-text configuration
i3 has plain-text configuration, meaning that no lua or haskell is needed. This makes it rather easy to recommend i3 to other people without worrying whether or not they have the knowledge to configure it as it can be read by anyone without prior knowledge.
Pro Easily switch to and manage floating windows
i3 can allow for the user to manage floating windows. Floating mode can be toggled by pressing $mod+Shift+Space. This way the user can take advantage of tiling as well as floating windows, all in the same session.
Pro Can tab windows
i3 permits tabbing through windows by turning on tab mode with $mod+w.
Pro RandR support
RandR provides more information about your outputs and connected screens than Xinerama does. To be specific, the code which handled on-the-fly screen reconfiguration (meaning without restarting the X server) was a very messy heuristic approach and most of the time did not work correctly — that is just not possible with the limited information that Xinerama offers (just a list of screen resolutions and no identifiers for the screens or any additional information). Xinerama simply was not designed for dynamic configuration.
Pro Fast, especially on weaker hardware
Tiling means there are no fancy compositing or window effects to take up system resources.
Pro Can stack
i3 allows for stacking of windows in its environment.
Pro No window gap
Space is not wasted by separators, therefore making the most of the confined space on smaller monitors.
Pro Can be reloaded quickly and configured without a client restart
Just two hot keys: Shift+Super+C to reload the config and Shift+Super+R to restart (which takes less than one second). Restarts pick up new versions of i3 or the updated config file, so you can upgrade to a newer version or quickly see the changes to i3 without quitting your X session.
Pro Sane development process
i3 uses test driven development with an extensive test suite to prevent bugs from ever happening again. All external contributions require a thorough code review to guarantee a certain level of quality.
Pro Terminal bell can be used to notify of completed actions
Terminal-bell gets passed through and marks the workspace visibly.
Pro Awesome multi-monitor support
User can assign specific workspaces to specific displays as well as apps to workspaces. This makes possible opening set of most used apps with 1 shortcut always on the same screens.
Pro Simple to use
Configuration is nearly automatic and simple, which can be really helpful to beginners.
Pro VIM Style key bindings
You can configure i3 so that your keys for moving windows is similar to vim, for example, M-j to move the window down.
Pro Great choice for keyboard users
The user keeps their hands in one spot (most of the time). One will find that the mouse is used less and less, making navigation quicker over time.
Con Steep learning curve for uninitiated users
Like a lot of tiling window managers, the learning curve for XMonad is quite steep.
Con Requires knowledge of Haskell for configuration
Understanding of Haskell is required in order to configure XMonad.
Con Requires a lot of Haskell dependencies
XMonad depends on GHC (the Glasgow Haskell Compiler) which can take up about 700 MB or disk space.
Con Missing "include" possibility in config
While pretty good and easy to use for common tasks, the configuration language is missing the
include directive common in other languages. You can use a workaround - a shell script to config parts on demand. It would be best if this were built-in however.
Con Poor floating window support
Sometimes this is necessary, even when the Dev rejects feature requests. Firefox child windows (option dialog) is an example.
Con No window gap option
You can do a lot with i3 but the official version lacks the option to have gaps between windows. However, there's a fork called i3-gaps that is almost the same as i3 except the fact that it lets you have gaps between windows.
Con Steep learning curve
Has a steep learning curve for beginners.
Con It has some issues with transparency
Using transparent windows can cause them to crash.
Con Not very configurable
Unlike XMonad or Awesome, i3 can't be configured in a turing complete language, so it is much harder to alter its core functionality to do exactly what the user wants.
Con The plain-text configuration may not be suitable for beginners
i3 is configured through a plaintext configuration file. While it's very powerful and easy to learn, it may not be entirely user-friendly for those who have never edited a text configuration.
Con Documentation is online
Can't access it offline unless you download the page.
Con Manual tiling
The layout isn't automatic. The user must move panels manually and may indeed end up spending time on that rather than on working with the application.