# Forge, tiling window management inside GNOME Shell

> Forge is a GNOME Shell extension that gives the desktop an i3 style tree of tiled windows, with vim-like keybindings, drag and drop, floating windows and per workspace tiling. It works on GNOME 45 through 51 on both X11 and Wayland, and the first line of its own README asks for a new maintainer.

**forge-ext/forge** — Forge - Tiling and Window Manager for Gnome-Shell

- Repository: https://github.com/forge-ext/forge
- Stars: 1,281 · Forks: 113
- Language: JavaScript
- License: GPL-3.0
- Published: 2026-10-19 · Updated: 2026-10-19 · Language: en
- Canonical page: https://hysenlabs.com/projects/forge-ext-forge

## A tiling model borrowed from i3, living inside the shell

Forge is a GNOME Shell extension that provides tiling and window management, and it is not a standalone window manager. It runs inside the shell and cooperates with it, which is the whole point of the approach and also its constraint. The window layout is tree based, with vertical and horizontal split containers in the style of i3-wm and sway-wm, and the keyboard model is borrowed from vim, with motions for navigation, swapping windows and moving windows inside the containers. On top of that base there is drag and drop tiling, support for floating windows, smart gaps, a focus hint, a stacked tiling layout, auto split or quarter tiling, keyboard window resizing, and tiling that can be toggled per workspace. Some support for multiple displays is listed as well, and the word some does a lot of work in that sentence. The audience is a keyboard driven desktop user who wants the layout of a tiling window manager without abandoning GNOME.

## The first line of the README asks for a maintainer

The document opens with the line that a reader should not skip. Forge is a GNOME Shell extension that provides tiling and window management, and it is looking for a new owner or maintainer, with the discussion thread and the tracking issue linked right there. The README also points readers to a separate repository by Claude and jcrussell and asks them to check it out. That is context an adopter needs, but it does change what you are adopting. The version in the package manifest is 22.51.0, which encodes the GNOME version it targets, and the release tags are named for the same reason, with v49-89 dated 2025-12-16 and v48-88 dated 2025-05-10, so a tag pairs a GNOME release with an extension revision. The repository is not archived and the last push was on 2026-10-01, so the code still moves.

## Super plus hjkl, and the conflicts you have to fix yourself

The default shortcuts follow a consistent scheme, and reading the table tells you the whole interaction model. Focus is on Super with h for left, l for right, k for up and j for down. Moving the active window uses Shift with the same four keys, and swapping the active window with its neighbour uses Ctrl. Splitting is Super with z for a horizontal split and v for a vertical one, and toggling a split container is Super with g. Super with w toggles tiling mode, Super with c floats the active window, and Super with Return swaps the current window with the last active one. Sizes are resized in each direction with a Ctrl and Super combination, and there are dedicated keys for quarter and two thirds snapping, plus keys for gap size, focus hint, stacked and tabbed layouts, and tab decoration visibility. Every one of them is configurable in the extension preferences. One gap in that configurability is worth naming. Shortcut conflicts are not detected or resolved by the extension, and the user has to reconfigure them manually in the GNOME Control Center under Keyboard and then Customize Shortcuts, which is tracked as issue 37.

## No dynamic workspaces, no vertical monitor

The known issues section is short and unambiguous. Forge does not support dynamic workspaces, and it does not support a vertical monitor setup. The first of those is a design decision rather than a bug, and the README explains it in the section on GNOME defaults. GNOME Shell has built in support for workspace management and seems to work well, so Forge will not touch those. Instead, the user is encouraged to bind the actions for switching or moving windows to a different workspace, and for switching to a numbered, previous or next workspace, in the usual GNOME keyboard settings. The vertical monitor limitation is a real constraint for anyone with a portrait display, and unlike the workspace decision there is no documented workaround. Both of these belong in a purchase decision rather than a bug report, and the fact that they are listed plainly is a point in the project's favour, since a user who needs a portrait layout can rule the project out before installing it.

## Installing it, and the two files you may want to edit

There are three installation routes, and the project recommends building it yourself with make install or make dev. The alternative is the GNOME extensions website, or a distribution package, with an AUR package called gnome-shell-extension-forge and a Fedora package under the same name. Building from source needs NodeJS 16 or later, gettext, and npm install, and the Makefile in the tree shows the rest. The dev target compiles the extension and overrides the gnome-shell update repo, so a change appears without reinstalling.

```bash
# Compile and override the gnome-shell update repo
make dev

# Or run below, and restart the shell manually
make build && make debug && make install

# X11 - build from source and restarts gnome-shell
make test-x

# Wayland - build from source and starts a wayland instance (no restart)
make test-wayland
```

The two test targets are the interesting difference for a developer, because an X11 session can be restarted from the build while a Wayland session cannot and is instead started as a new instance. The extension also exposes two override paths, a window override file at $HOME/.config/forge/config/windows.json and a stylesheet override at $HOME/.config/forge/stylesheet/forge/stylesheet.css, which is how a user changes per window behaviour or the look without forking the extension.

## What the Makefile actually assembles

The build is a packaging pipeline rather than a compiler invocation, and the file shows every step. The extension UUID is forge@jmmaranan.com, and the install path is the user's local share directory for gnome-shell extensions, so a build does not touch a system directory. The build target depends on clean, metadata.json, schemas, compiled message catalogues and metadata, and it stages the sources into a temp/ directory that mirrors the extension layout. The schemas are compiled with glib-compile-schemas, the translations are compiled with msgfmt from the po/ directory into a locale tree inside the package, and the debug target flips a production flag in the staged settings file so the extension talks to a development shell. There is a metadata target that generates lib/prefs/metadata.js from the git shortlog, so the contributors list shown in the preferences is built from the commit history. The repository layout matches this, with extension.js and prefs.js at the top, the lib/ directory holding the implementation, config/, resources/, schemas/, templates/ and po/ alongside, and the language files built from the po/ catalogue.

## GPL, per generation branches, and an open question

The licence is GPL-3.0-or-later, the same terms the extension has to be distributed under, which is the norm for GNOME Shell extensions and means a derivative has to carry the same licence. The source tree also separates desktop generations, and the development section is explicit about it. The main branch contains the gnome-4x code, while the legacy and gnome-3-36 branches are the same and are the source for gnome-3x. That matters for anyone running an older GNOME, and it means the README instructions on the main branch do not apply to the legacy branch without checking what has diverged. The formatting and commit hooks are set up with husky, lint-staged and prettier, so a commit is formatted automatically and the npm run format script rewrites the tree the same way. The outstanding question is the one the README leads with. A GNOME extension is tied to shell internals that change between releases, and the listed support range of GNOME 45 through 51 is a statement about testing rather than a promise about GNOME 52, so an adopter should treat the maintainer search as a live risk rather than background noise. The credits name the extension contributors and the projects the code was inspired by, including i3 by Michael Stapelberg and contributors, and pop-shell from System76.

## Conclusion

Forge fits a GNOME user who works with many windows at once and wants the i3 model of keyboard driven layout without giving up the rest of the desktop. It does not fit someone who relies on dynamic workspaces or on a vertical monitor arrangement, because both are listed as unsupported, and it does not fit a team that needs a project with a settled maintenance answer, since the project is asking for a new owner. Verify three things first: that your GNOME version is inside the supported range of 45 to 51, that the shortcuts you need do not collide with your existing bindings, which you will have to resolve by hand in the GNOME keyboard settings, and whether the branch you install matches your desktop generation, since the main branch carries the gnome-4x code.

## FAQ

### What is the Forge GNOME Shell extension?

Forge is a GNOME Shell extension that adds tiling and window management to the desktop, with tree based split containers like i3-wm and sway-wm, vim-like keybindings, drag and drop tiling, floating windows and per workspace tiling. It works on GNOME 45 through 51 on both X11 and Wayland.

### How do I install Forge?

You can build it yourself with make install or make dev, download it from the GNOME extensions website, or install the distribution packages, gnome-shell-extension-forge in the AUR and the Fedora package of the same name. Building from source needs NodeJS 16 or later, gettext and npm install.

### What are Forge's known limitations?

The README lists two: it does not support dynamic workspaces, and it does not support a vertical monitor setup. It also leaves workspace management to GNOME Shell and asks the user to bind the workspace switching shortcuts in the GNOME keyboard settings.

### Is Forge still looking for a maintainer?

The README leads with a request for a new owner or maintainer, linking a discussion thread and a tracking issue, and it points readers to a separate repository by Claude and jcrussell. The repository is not archived and the last push was on 2026-10-01.

## Sources

- [forge-ext/forge on GitHub](https://github.com/forge-ext/forge)
- [Issues](https://github.com/forge-ext/forge/issues)
- [License: GPL-3.0](https://github.com/forge-ext/forge/blob/main/LICENSE)
- [README](https://github.com/forge-ext/forge/blob/main/README.md)
- [Releases](https://github.com/forge-ext/forge/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/forge-ext-forge
