Skip to content
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1,166 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Forge

CI

Forge is a GNOME Shell extension that brings i3/sway-style tiling window management to GNOME. This repository (lukebmay/forge) is a product fork focused on multi-monitor reliability, tabbed layouts, a forge control CLI, and a daily-driver workflow.

Works on GNOME 45+ (X11 and Wayland). Extension UUID: forge@jmmaranan.com (same as upstream — installs replace each other in place).

Thanks to @jmmaranan, @jcrussell, and all original contributors.


Lineage

Layer Repository Role
Upstream (EGO) forge-ext/forge Original Forge; listed on extensions.gnome.org
Community base jcrussell/forge AI-maintained fork with tests, prefs, and many fixes
This project lukebmay/forge Product work on the jcrussell base (master branch)

Upstream EGO is lightly maintained and has sought a new maintainer. The community fork is the better code base for modern GNOME; this tree builds on that base for reliability and scripting.

Pull community updates with the upstream remote (upstream/main); day-to-day development and installs stay on this repo.


Features

Core (from original Forge)

  • Tree-based tiling with horizontal and vertical splits (i3/sway-like)
  • Vim-style navigation, swap, and move keybindings
  • Drag-and-drop tiling with preview hints
  • Floating windows, smart gaps, and focus borders
  • Stacked and tabbed container layouts; workspace monocle
  • Per-workspace tiling; multi-monitor support
  • Window resize via keyboard; auto-split / quarter tiling
  • Customizable shortcuts in extension preferences

From the community base (jcrussell)

Improvements that land in this tree via the jcrussell lineage:

Features

  • Keybindings cheatsheet overlay
  • Portable config sync (export/import settings and keybindings)
  • Arrow-key navigation alongside hjkl
  • Floating window rules UI in preferences
  • Screen edge margins (panels/docks)
  • Extra bindings: config reload, evenly distribute, workspace monocle, …
  • More appearance options (border radius, tab margins, gap limits, default layout)
  • Monitor exclusion from tiling

Bug fixes

  • Resize and focus navigation reliability
  • App-specific fixes (Chrome, Brave, Steam, Blender, ddterm, …)
  • Stacked/tabbed container behavior
  • Preview hints and border rendering
  • Cross-workspace window operations
  • Preferences save and theme handling

Engineering

  • Large unit-test suite (1,600+ tests) and Dockerized E2E
  • Refactored managers and clearer architecture (docs/dev/architecture.md)
  • Riskier options behind experimental toggles

Added in this project (lukebmay/forge)

Product work aimed at surviving real multi-monitor sessions and scripting the desk:

Area What & why
Soft rehome After lock/blank/wake, workarea thrash no longer piles all tiles onto the primary monitor. Debounced rehome from last-known geometry.
Session layout Last-good tree snapshot (session-layout.json) so install/HUP reload can restore splits and tabs instead of flattening to columns.
Tab chrome Tab/stack labels always show for every window in the group (no empty gap when Shell.App is missing).
Tab-first groups Stack mode on (available); tabbed remains the default group type for DnD center, bare-array sugar, and merge-group.
Sizing policy Equal shares until you resize; preserve vs equalize when a new window joins.
Keybind kits Safe defaults (no bare Super+letter grabs); vim/i3 kits; conflict scan; save your own kit.
Open-app placement Last Focused Tile (LFT) attach; dock-sticky monitor; optional tiny-pane → tab fallback.
Layout debug overlay Opt-in labels for layout type, percent, and mon-ws id (Ctrl+Super+d).
forge CLI DBus control plane: tree, focus, swap, move, launch, settings, session-layout flush.
forge layout Named layout profiles — idempotent reconcile (open gaps, move mismatches, leave companions).
Install tooling ./install + forge install / update / uninstall; settings-safe migrate from EGO.

Getting started

Requirements

  • GNOME Shell 45+
  • To build from source: Node.js 20+, npm, make, gettext (msgfmt), glib-compile-schemas

Install from this repository

git clone https://github.com/lukebmay/forge.git
cd forge
./install

That builds the extension, installs it under ~/.local/share/gnome-shell/extensions/forge@jmmaranan.com, enables it, puts the forge CLI on ~/.local/bin/forge, and reloads GNOME Shell on X11.

# after install (ensure ~/.local/bin is on PATH)
forge ping
forge tree
forge help

Already on extensions.gnome.org Forge? ./install migrates with an automatic settings backup (dconf + ~/.config/forge). Prefs and keybindings are kept when the schemas allow.

Daily reinstall after pulling code:

git pull
forge install          # or: ./install
# or: forge update     # clean master: fetch → pull if new → always install

Remove (keeps prefs):

forge uninstall
# wipe config too:
forge uninstall --purge-config

Other install options

Method Status
extensions.gnome.org This fork is not published there yet
Pre-built zip from community releases jcrussell/forge releases (community base, not this product tree)
make dev / make prod Developer install — see CONTRIBUTING.md

After any install that does not reload Shell: on X11 use Alt+F2r, or killall -HUP gnome-shell; on Wayland, log out and back in.

Forge tiling screenshot


Using Forge

In-session basics

  • Cheatsheet: Safe kit default Ctrl+Super+/ (Vim kit: Super+Shift+/)
  • Reload config / theme: Super+Shift+r (or your kit’s reload chord)
  • Group chrome (tab ↔ stack): Safe Ctrl+Super+g · Vim Shift+Super+n
  • Merge into tabbed group: Safe Ctrl+Super+m · Vim Shift+Super+m
  • Layout debug overlay: Ctrl+Super+d
  • Preferences: Extensions app → Forge, or gnome-extensions prefs forge@jmmaranan.com
  • Keybind kits CLI: forge keybind apply vim (also safe / i3; backup/list)

User guide:

Topic Doc
Layouts & tiling docs/user/layouts.md
Keybindings docs/user/keybindings.md
Theming docs/user/theming.md
Window rules docs/user/rules.md
Portable config docs/user/config.md
Multi-monitor docs/user/monitors.md
Layout profiles docs/user/layout.md
Troubleshooting docs/user/troubleshooting.md

Control CLI (forge)

Talks to the enabled extension over DBus. Install also places it at ~/.local/bin/forge.

forge help
forge tree                              # tiling forest (JSON)
forge tree --monitor=0 --compact
forge focus 'class:firefox'
forge launch nautilus                   # resolve .desktop + place after LFT
forge launch ghostty --monitor=1
forge launch nautilus --path=mo1ws0/1/1

# Named layout profiles
forge layout help
forge layout list
forge layout save mydesk
forge layout mydesk --dry-run
forge layout mydesk

# Install helpers (no DBus)
forge install
forge update
forge uninstall

Full install/migrate script reference: scripts/forge/README.md.

Config paths

What Where
Window rules ~/.config/forge/config/windows.json
User stylesheet ~/.config/forge/stylesheet/forge/stylesheet.css
Layout profiles <tree>/hosts/<host>/<name>.json (FORGE_LAYOUT_DIR or ~/.config/forge/layout)
Session layout snapshot ~/.config/forge/config/session-layout.json
Install origin stamp ~/.local/share/forge-manage/install-origin.json
Settings backups ~/.local/share/forge-manage/backups/

GNOME still owns workspaces. Bind workspace switch/move in GNOME Settings as you prefer; Forge does not replace that.


Known limitations

  • No dynamic workspaces
  • Limited vertical-monitor support
  • Multi-monitor blank/wake is much more robust than stock, but edge thrash cases can still need a config reload (Super+Shift+r) or a retab
  • Stack mode is off by default (tab-first; enable in prefs if you want it)

Documentation map

Need Where
This overview + install README.md (you are here)
User behavior docs/user/
Architecture / Mutter / render docs/dev/
Design “why” docs/DESIGN.md
Build, test, contribute CONTRIBUTING.md
Install scripts scripts/forge/README.md
Unit / E2E tests tests/README.md, tests/e2e/README.md

Contributing

See CONTRIBUTING.md. Branch off master. Prefer small, tested patches (npm test / make unit-test).

Issues for this fork: https://github.com/lukebmay/forge/issues
Community base: https://github.com/jcrussell/forge/issues
Original project discussion on maintainership: forge-ext discussion #501.


Credits

About

Forge - Tiling and Window Manager for Gnome-Shell

Resources

Contributing

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages