4 <title>i3 - an improved dynamic tiling window manager</title>
5 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
6 <meta name="description" content="i3 is a dynamic tiling window manager with clean, readable and documented code, featuring extended Xinerama support, usage of libxcb instead of xlib and several improvements over wmii">
7 <meta name="keywords" content="i3, window, manager, tiling, keyboard, wmii, x11, xcb, xinerama, utf8">
8 <meta name="author" content="i3 developers">
9 <style type="text/css">
13 background-color: #1e1e1e;
24 list-style-type: none;
35 text-decoration: underline;
42 <img width="131" height="125" src="http://i3.zekjur.net/logo.png" style="margin-right: 15px" alt="logo" id="logo" align="left">
44 <h1 style="color: red; font-family: georgia; font-size: 3em;margin-bottom: 0;">i3</h1>
45 <h1 style="font-family: georgia; font-size: 2em;margin-bottom: 0;">improved tiling wm</h1>
47 <br style="height: 0; clear: both;">
48 <hr style="border: 1px solid black; clear: both; margin-top: 5px;">
55 <a href="/docs/">Docs</a>
58 <a href="/downloads/">Downloads</a>
61 <a href="/screenshots/">Screens</a>
64 <a href="/bugs">Bugtracker</a>
67 <a href="/contact/">Contact</a>
70 <a href="/impress.html">Impressum</a>
74 <hr style="border: 1px solid black; clear: both; margin-top: 15px;">
77 i3 is a tiling window manager, completely written from scratch.
81 i3 was created because wmii, our favorite window manager at the time, didn’t
82 provide some features we wanted (Xinerama done right, for example), had some
83 bugs, didn’t progress since quite some time and wasn’t easy to hack at all
84 (source code comments/documentation completely lacking). Still, we think the
85 wmii developers and contributors did a great job. Thank you for inspiring us
90 Please be aware that i3 is primarily targeted at advanced users and developers.
96 Based upon the experiences we made when wanting to hack/fix wmii, we agreed
97 upon the following goals for i3:
102 Write well readable, well <strong>documented</strong> code. Create additional
103 documentation on how to extend i3 by explaining its internal workings.
105 This includes being modifyable by people who do know how to program but who are
106 not necessarily familiar with all of X11’s internals. That is, document why
107 things happen and when they happen so that the user gets a picture of the whole
108 process a Window Manager is responsible of by just reading the source code.
111 Use xcb as far as possible (it does not provide functions for some features
112 yet, like XKB) instead of Xlib. xcb has a much cleaner API and should be faster
113 in quite a lot of situations.
116 Implement Xinerama correctly, that is by assigning each workspace to a
117 virtual screen. Especially make sure that attaching and detaching new monitors
118 like video projectors works during operation and does the right thing.
121 Use the metaphor of a table for abstraction. You can create horizontal and
122 vertical columns (in wmii, you can only create vertical columns). See the documentation
123 for more information on how this works, it really is an important principle in i3.
124 (TODO: documentation :-))
127 Implement a command mode, like in vim. You can easily combine multiple
128 actions (like focusing, moving, snapping) by using the command mode.
131 Implement XRandR support for flipping monitors.
134 Do <strong>not</strong> use programs such as autoconf/automake for configuration and
135 creating unreadable/broken makefiles. Instead, use a clean makefile which automatically
136 enables/disables features for specific platforms. Also, document the dependencies
137 properly, so that package maintainers have an easy job packaging i3.
140 Provide hooks/callbacks for other programs to integrate. Using this mechanism, one
141 can easily extend i3 in whatever language, without ever touching the C code. Also,
142 to communicate with a running i3 instance, messages can be sent.
144 This approach should be more lightweight than wmii’s usage of the 9P filesystem.
145 Furthermore, core functionality does not depend on a separate program, so that i3
146 runs faster, especially when your system is under load.
152 The usual elitism amongst minimal window managers: Don’t be bloated, don’t be fancy
153 (simple borders are the most decoration we want to have), don’t add support for Xft
156 However, we do not enforce unnecessary limits such as a maximum amount of source lines
157 of code. If it needs to be a bit bigger, it will be.
161 <h3>Special Features</h3>
165 We can bind on Mode_switch (Alt Gr). Other window managers fail to do that because
166 of an X11-bug, which causes the modifier state to not be correctly set in KeyPress-
167 events. We use XKB for making sure to get the correct state.
174 i3 is currently developed at <a href="http://code.stapelberg.de/git/i3" title="cgit">
175 http://code.stapelberg.de/git/i3</a>. Checkouts of the master branch are intended to
176 be stable and working all the time. Integration of new features happens in a separate branch.
182 Copyright © 2009, Michael Stapelberg
185 Redistribution and use in source and binary forms, with or without
186 modification, are permitted provided that the following conditions are met:
188 * Redistributions of source code must retain the above copyright
189 notice, this list of conditions and the following disclaimer.
191 * Redistributions in binary form must reproduce the above copyright
192 notice, this list of conditions and the following disclaimer in the
193 documentation and/or other materials provided with the distribution.
195 * Neither the name of Michael Stapelberg nor the
196 names of contributors may be used to endorse or promote products
197 derived from this software without specific prior written permission.
199 THIS SOFTWARE IS PROVIDED BY Michael Stapelberg ''AS IS'' AND ANY
200 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
201 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
202 DISCLAIMED. IN NO EVENT SHALL Michael Stapelberg BE LIABLE FOR ANY
203 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
204 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
205 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
206 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
207 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
208 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.