Website review
This review may include AI-generated content and is not individually verified. Domain, certificate and other facts come from the observed data on this page.
What is i3?
i3 is a tiling window manager for X11 on GNU/Linux and BSD. Instead of letting windows overlap and float freely, it arranges them automatically to fill the screen, and you move between them with keyboard shortcuts. It is written from scratch, released under the BSD license, and aimed primarily at advanced users and developers.
Its defining traits, according to the project itself:
- Tiling with a tree structure. Windows are arranged in a hierarchy rather than simple columns, which allows more flexible layouts.
- Multi-monitor support. Each workspace is assigned to a virtual screen, so attaching or detaching a monitor (such as a projector) works while the system is running, and rotated monitors are supported.
- Modal keybindings. Like vim, i3 has modes, so the same keys can do different things in a "resize" mode than in the default mode.
- An IPC interface. Other programs can subscribe to events and send commands, without depending on a separate core process.
- Clean, documented code. The stated goals include readable, well-documented source and UTF-8 correctness, using xcb rather than Xlib.
- Deliberate restraint. Simple borders are the extent of decoration; the project says it is happy with its feature set and focuses on bug fixes and stability rather than new features.
Who it suits: people who prefer keyboard-driven control, want predictable window placement, and are comfortable editing a text configuration file. If you prefer dragging windows around by hand or want heavy visual decoration, a floating desktop environment will feel more natural.
A concrete next step: read the User's Guide on i3 and watch the screencast before installing. It will show you the default keybindings and the tree-based layout in action, which is the fastest way to judge whether the workflow fits how you work.
How does i3's tree-based window layout work compared to column-based tiling?
i3 arranges windows in a tree, not in a fixed set of columns. Each container in that tree is either split horizontally or vertically, and new windows are placed into the focused container according to that split. A workspace can therefore mix rows, columns and nested groups: one side of the screen might be a vertical stack while the other side is split horizontally, without forcing every window into the same column count.
Column-based tiling, as found in simpler managers, treats the workspace as a sequence of columns. You add or remove columns, and windows occupy a slot in one of them. It is predictable and quick to learn, but layouts tend to be uniform. To get a 2x2 grid in a pure column model, you often need a separate stacking or grid mode, or you accept that one column contains two windows.
The practical difference is how you think about a layout:
- Tree-based (i3): you choose a split direction for the focused container, then open windows into it. Nesting lets you express asymmetric layouts directly.
- Column-based: you manage a row of columns; each column usually holds one visible window or a stack. Layouts are flatter and more regular.
A useful scenario: you want a wide editor on the left, and on the right a terminal above a browser. In i3 you split the workspace vertically, open the editor, move focus right, split horizontally, then open the terminal and browser. The result is a nested tree: vertical split at the root, horizontal split in the right child. A column manager would typically need an extra layout mode or manual resizing to approximate this.
The trade-off is cognitive overhead. Tree layouts reward users who internalise split direction, focus movement and container manipulation; they can feel fiddly if you just want two or three equal columns. Column layouts are easier to predict but less flexible for mixed arrangements. i3 also uses modes, so resize and other operations can have their own keybindings, which suits users who want many layout commands without dedicating the default mode to all of them.
If you are deciding between them, ask what your typical screen looks like. If it is mostly one window per column and occasional stacking, a column-based manager may be enough. If you regularly want nested, asymmetric arrangements across multiple monitors, i3's tree model is the more direct fit. The project is aimed at advanced users and developers, and its documentation and source are part of the intended experience, so expect to read the User's Guide rather than rely on a graphical settings panel. You can start at i3.
How do I install and configure i3 on GNU/Linux or BSD?
Install i3 from your distribution's package manager, then write a small config file that defines your modifier key, terminal and keybindings. On GNU/Linux, i3 is packaged almost everywhere (Debian/Ubuntu i3, Fedora i3, Arch i3-wm); on BSD, use the ports/pkgsrc package or build from source. i3 is Free and Open Source software under the BSD license, written from scratch, and targets GNU/Linux and BSD — see i3. The project also publishes a User's Guide and a screencast, which are the fastest way to see the intended workflow before you commit to a config.
A practical first run:
- Install the package, then log out and pick the "i3" session at your display manager, or run
i3from a TTY withstartx. - On first launch i3 offers to create a config; accept it, or copy the shipped default from
/etc/i3/configto~/.config/i3/config. - Reload with your reload binding (default
$mod+Shift+r) after each edit, and usei3-msg reloadori3-msg restartif you prefer the command line.
H3 What to configure first
- Modifier key. The default
$modis the Super/Windows key. If you remap it, change the singleset $mod Mod4line rather than every binding. - Terminal and launcher. Point
bindsym $mod+Returnat the terminal you actually have installed; the default may not be present on a minimal system. - Workspaces and monitors. i3 assigns workspaces to virtual screens, so multi-monitor setups work by default. Workspace-to-output bindings let you send a workspace to a specific monitor, and rotated monitors are supported.
- Modes. i3 implements vim-style modes, so bindings in a
resizemode can differ from the default mode. - Status bar and IPC. i3bar is configured in the same file, and the IPC interface lets other programs subscribe to events and send commands — useful for scripts, status generators and automation.
H3 Choosing between a default and a hand-built config
| Approach | Best for | Trade-off |
|---|---|---|
| Wizard-generated default | First install, learning the keybindings | Generic; you replace terminal and launcher entries anyway |
| Distribution example config | A known-good base to trim | Carries bindings you may never use |
| Written from scratch | Advanced users who want only their own bindings | More upfront work; you must cover reload, restart, exit and lock |
i3 is explicitly aimed at advanced users and developers, and its stated goals include readable, documented code and a tree structure for arranging windows, which gives more flexible layouts than a purely column-based approach. That matters if you routinely want split directions, tabbed or stacked containers, or floating exceptions for dialogs — not just side-by-side columns. The trade-off is that tiling is a different mental model: expect to learn containers and the tree rather than dragging windows.
Next step: open the User's Guide on i3, copy the default config, and change exactly one thing — your terminal binding — then reload and confirm it works before customising further. Growing the config in small, tested increments is far less frustrating than pasting a large config you don't yet understand.
What are i3's different modes, such as resize mode, and how do I switch between them?
i3's modes are named sets of keybindings that change what your keys do without restarting the window manager. The default mode handles normal window management; other modes exist so that keys which normally launch applications or move focus can instead adjust windows. The resize mode is the standard example: while it is active, the arrow or h/j/k/l keys change the size of the focused window instead of moving focus.
The general switching pattern has three parts:
- A binding in the default mode enters the named mode, e.g.
bindsym $mod+r mode "resize". - Bindings inside that mode perform the mode-specific actions, such as
resize grow width 10 px or 10 ppt. - A binding returns to the default mode, usually
EscapeorReturn, e.g.bindsym Escape mode "default".
Modes are defined in your i3 config, so the exact key that enters resize mode is whatever you choose. i3 ships a default configuration that already includes a resize mode, and the User's Guide on i3 documents the syntax if you want to add your own, such as a mode for launching applications or for moving windows between workspaces.
A practical way to decide whether you need a custom mode: if a task needs repeated keypresses with a temporarily different meaning (resizing, moving floating windows, media controls), a mode keeps those keys from cluttering the default bindings. If a task is a one-shot action, a normal binding is simpler.
One caveat: i3 modes are not modal in the sense of blocking everything else. The mode name is shown in the bar, and any binding not defined in the current mode does nothing until you return to default, so always include a clearly documented exit binding.
Next step: copy the resize mode block from the default config, change the entry key, and test it with i3-msg -t get_binding_modes or by watching the mode indicator in your bar.
How does i3 handle multiple monitors and workspace assignment?
i3 treats each monitor as a separate virtual screen and assigns workspaces to those screens. In practice, every workspace lives on one output, so switching to a workspace moves focus to the monitor that owns it rather than stretching the workspace across all displays.
Key mechanics:
- Workspace-to-output binding. Workspaces are attached to a specific monitor. If you move a workspace to another monitor, it relocates there and stays associated with that output.
- Per-monitor workspace switching. Each monitor shows its own active workspace, so you can have different workspaces visible on different screens at the same time.
- Hotplug handling. The page evidence states that i3 aims to handle attaching and detaching monitors—such as projectors—during operation and to do the right thing, including support for rotated monitors.
- Tree-based layout per workspace. Windows inside a workspace are arranged in a tree structure, which allows more flexible layouts than a purely column-based approach. That layout logic operates within the workspace, while the monitor assignment decides where the workspace appears.
For a concrete scenario: you might keep workspace 1 on a laptop screen and workspace 2 on an external monitor. When you unplug the external display, i3 needs to reassign the workspaces that were on it; when you plug it back in, those workspaces can return. This is the behavior the project explicitly targets, though the exact result depends on your configuration and the version you run.
A useful next step is to read the i3 User’s Guide and check the workspace and multi-monitor sections, then test hotplugging with your own displays. If you want to compare approaches, i3 documents its own model, while other tiling window managers may handle multi-monitor workspaces differently—some use dynamic workspace creation per monitor, others use static assignments. The trade-off is control versus predictability: explicit workspace-to-output rules give you a stable setup, but they require more configuration when your monitor arrangement changes.
How can I use i3's IPC interface to script or control the window manager?
i3's IPC interface lets external programs talk to the running window manager over a Unix socket. You can send commands (the same ones you'd bind to keys) and subscribe to events such as workspace changes, window focus, or mode changes. The page_evidence confirms i3 implements an IPC interface for other programs, providing event subscription and command acceptance, and notes this design is more lightweight than wmii's 9P approach and keeps core functionality independent of a separate helper program.
H3 Practical uses
- Scripting layouts: Send commands to move, resize, or reassign windows without touching config files.
- Status bars: Subscribe to events and render the current workspace, focused window title, or mode in a custom bar.
- Automation: Trigger actions when a specific window appears, such as moving it to a named workspace.
- External controls: Drive i3 from a script, a launcher, or another program that speaks to the socket.
H3 How the pieces fit
| Piece | What it does | Typical use |
|---|---|---|
| Command channel | Accepts i3 commands | Change layout, focus, workspaces |
| Event subscription | Pushes state changes | Status bars, reactive scripts |
| Socket transport | Local Unix socket | Any language with socket support |
H3 A concrete scenario
Suppose you want a script that, when you plug in a projector, moves your browser to a workspace on the new output. Your script subscribes to output or workspace events, detects the change, then sends a command over IPC to move the window. Because i3 supports multi-monitor by assigning each workspace to a virtual screen, the script can target the right output by name. The page_evidence describes this multi-monitor behavior and rotated-monitor support, which matters when you script workspace placement.
H3 Next step
Read the official i3 documentation at i3 for the IPC socket path, message format, and the list of subscribable events. Start with a small script that sends one command, then add event subscription once the basics work. If you prefer a higher-level language binding, check the i3 wiki or community projects, but verify they match your i3 version before relying on them.
User reviews (0)