What Is the awesome Window Manager?
Updated
awesome is a highly configurable, next-generation framework window manager for the X Window System. It is designed for power users, developers, and anyone who wants fine-grained control over their graphical environment, and it is heavily extensible through the Lua programming language. If you are comfortable editing a configuration file and want your window manager to behave exactly the way you decide, awesome is built for that. If you prefer a graphical settings panel and sensible defaults you never touch, it will likely feel like more work than you want.
What "framework window manager" means
The key idea is that awesome is not just a program with options — it is a framework you build on. The site describes it as "an extensible, highly configurable window manager" designed to "complete" the other tools power users already rely on, such as a browser, mail reader, and text editor.
To achieve this, awesome exposes a documented API. You configure and define the behavior of the window manager itself, rather than only toggling predefined settings. That is the practical difference between a framework window manager and a conventional one: the configuration is a program, and the behavior is something you define.
Core design characteristics
From the project's own description, the defining traits are:
- Fast and small — a stable, fast, small codebase and footprint.
- Asynchronous XCB — the first window manager to use the asynchronous XCB library instead of the older, synchronous Xlib, which the project says makes it less subject to latency than other window managers.
- Lua-based extensibility — behavior is defined and extended using Lua, with a documented API and documented source code.
- Keyboard-driven — no mouse is needed; everything can be performed with the keyboard.
- Licensed under GNU GPLv2.
How it organizes windows: tags, not workspaces
awesome deliberately does not distinguish between a floating layer and a tiled layer. Instead of workspaces, it uses tags, which allow you to:
- place a client on several tags at once, and
- display several tags at the same time.
This is a meaningful departure from the workspace model most users know, and it is one of the reasons the configuration model matters so much: tag behavior is something you define rather than something fixed by the window manager.
Standards and multi-monitor support
awesome implements a number of Freedesktop standards:
| Standard | What it covers |
|---|---|
| EWMH | Extended Window Manager Hints |
| XDG Base Directory | Standard locations for config and data files |
| XEmbed | Embedding one window inside another |
| Desktop Notification | Desktop notification protocol |
| System Tray | System tray protocol |
It also provides real multihead support via XRandR, with per-screen desktops (tags). If you run multiple monitors and want each screen to have its own independent set of tags, that is a supported, first-class scenario rather than an afterthought.
Extensions and integration
Beyond the core, the project points to a large set of Lua extensions for adding features such as dynamic tagging, widget feeding, tabs, and layouts. It also supports D-Bus, which matters if you want to drive or query the window manager from other applications.
Who it is for
awesome is explicitly "primarily targeted at power users, developers and any people dealing with every day computing tasks and who want to have fine-grained control on their graphical environment."
Read that as a condition rather than a slogan. The payoff — precise control, keyboard-only operation, per-screen tags, and Lua extensibility — comes with the expectation that you will write and maintain a configuration. The project provides a documented API and documentation for the stable release (4.3 at the time of the site text) plus docs for the latest git version, so the material to do that work exists; the work itself is yours.
Where to go next
- Read the Concepts section of the documentation to understand the model before writing configuration.
- Use the stable (4.3) documentation if you want to match a released version, or the latest git documentation if you are tracking development.
- Expect to work in Lua and to consult the API reference as you define behavior.