Its configuration is achieved via a plain text file and extending i3 is possible using its Unix domain socket and JSON based IPC interface from many programming languages.
[7] i3's primary design goals are to possess well-written, documented code that encourages user contribution;[4] to use XCB instead of Xlib; to implement multi-monitor features correctly, so that each workspace is assigned to a virtual screen, and monitor additions and removals are non-destructive of windows; to implement different modes, in a manner similar to that of the text editors vi and vim; to use a tree as the abstraction (and underlying data structure) for window management; and to implement UTF-8 character encoding.
i3's configuration is done via a plain text file (usually found in ~/.config/i3/config),[Note 1] which can be customized without any sophisticated programming knowledge.
Windows are held inside containers, which can be split vertically or horizontally.
There are also options for stacking the windows, as well as tabbing them (similar to the interface that web browsers use).