Skip to main content

Kiln vs SomeWM

kiln and SomeWM share a lineage. SomeWM brings the AwesomeWM framework to Wayland with API compatibility as its goal; kiln is a re-basing experiment grown from the same stock, asking a different question: what does that desktop look like if the entire screen is one declarative layout tree? Same desktop concepts, deliberately different API.

What is the same

The mental model transfers whole. kiln has clients, tags, screens, layouts, rules, keybindings, and a bar, and they mean what an AwesomeWM or SomeWM user expects: tags are per-screen and multi-selectable, layouts arrange the tiled clients of the selected tags, rules apply properties when clients map, a modkey drives the chords. If you can think in AwesomeWM, you can think in kiln.

What is deliberately different

There is no AwesomeWM compatibility layer. No awful, wibox, gears, naughty, or beautiful namespaces exist. An existing rc.lua does not run on kiln, and neither do AwesomeWM widget libraries. This is by design, not by omission: kiln exists to test the declarative model on its own terms, and a compat layer would reintroduce exactly the imperative machinery the model removes.

What maps, conceptually rather than literally:

  • Keybindings become entries in the kiln.key registry: one table per chord with mods, key, a handler, and a description that feeds the hotkeys popup. Ranges like "1-9" replace keygroups. See keybindings.
  • Layouts are plain Lua functions over the clients and the area, declaring nodes instead of computing geometries. master_width_factor, master_count, and friends live on the tag, as before. See Custom layouts.
  • Widgets are declarations, not objects. Where AwesomeWM composes wibox widget instances with layouts and containers, kiln composes function calls that declare boxes, rows, text, and images each frame. There is no widget lifecycle to manage. The split even lands where an AwesomeWM hand expects it: kiln.widgets is roughly awful.widget territory (taglist, tasklist, layoutbox, the stock compositions), while ui.* covers what the wibox.widget and wibox.layout primitives did. See the widgets tutorial.
  • Rules, menus, notifications, prompts, placement helpers, the systray, the taglist and tasklist: all present, all with kiln spellings. Most daily-driver capabilities have a direct kiln expression, and the guides cover them one by one.

What has no AwesomeWM counterpart at all: a live layout inspector. Because one solver owns the whole screen, kiln can embed Clay's own debug panel and draw it over the running desktop, giving you the element tree of the last solve with the computed box, sizing mode, padding and alignment for every row, and hover-to-highlight back into the real scene. Debugging a wibox layout means print statements and inference; debugging a kiln layout means opening the tree and reading it. See Inspect the Live Element Tree.

What does not map at all: the imperative widget machinery (wibox, drawins, the widget hierarchy) and the cairo draw path. kiln draws rectangles, borders, text, and images through Clay; there is no canvas to paint on. Code built on either has no kiln translation. The full list of what kiln's drawing model excludes is in Limitations.

warning

The close verbs invert between the systems. In AwesomeWM and SomeWM, c:kill() is the polite close. In kiln, c:close() is the polite close (the xdg close request) and c:kill() is the impolite one: SIGKILL. Muscle memory that binds mod+shift+c to kill() will hard-kill applications on kiln. Bind c:close().

When to choose which

Choose SomeWM if you have an AwesomeWM configuration or depend on its ecosystem: your rc.lua, your themes, and the widget libraries you use are the investment, and SomeWM is built to honor it on Wayland.

Choose kiln if the declarative single-tree model is the draw: one tree for windows and widgets, layouts without arithmetic, widgets without lifecycle, policy as replaceable Lua functions, and a live inspector over the whole thing. You will write your configuration fresh, and it will be shorter than the one you left, but it is a rewrite, not a port.

kiln is also younger and blunter about it: a proof of concept with an unstable API. SomeWM is the conservative choice; kiln is the experiment. Both are honest about which they are.

See also