Customisable Wayland GTK4 bar written in Rust. https://ironb.ar
  • Rust 98.7%
  • Nix 1%
  • Shell 0.3%
Find a file
Jake Stanger ae6f1067f5
Some checks are pending
Build / Formatting (push) Waiting to run
Build / Clippy (Base features) (push) Waiting to run
Build / Clippy (All features) (push) Waiting to run
Build / Build & Test (push) Waiting to run
Build / Check feature flag (push) Waiting to run
Build / Check feature flag-1 (push) Waiting to run
Build / Check feature flag-2 (push) Waiting to run
Build / Check feature flag-3 (push) Waiting to run
Build / Check feature flag-4 (push) Waiting to run
Build / Check feature flag-5 (push) Waiting to run
Build / Check feature flag-6 (push) Waiting to run
Build / Check feature flag-7 (push) Waiting to run
Build / Check feature flag-8 (push) Waiting to run
Build / Check feature flag-9 (push) Waiting to run
Build / Check feature flag-10 (push) Waiting to run
Build / Check feature flag-11 (push) Waiting to run
Build / Check feature flag-12 (push) Waiting to run
Build / Check feature flag-13 (push) Waiting to run
Build / Check feature flag-14 (push) Waiting to run
Build / Check feature flag-15 (push) Waiting to run
Build / Check feature flag-16 (push) Waiting to run
Build / Check feature flag-17 (push) Waiting to run
Build / Check feature flag-18 (push) Waiting to run
Build / Check feature flag-19 (push) Waiting to run
Build / Check feature flag-20 (push) Waiting to run
Build / Check feature flag-21 (push) Waiting to run
Build / Check feature flag-28 (push) Waiting to run
Build / Build (Nix) (push) Waiting to run
Build / Check feature flag-22 (push) Waiting to run
Build / Check feature flag-23 (push) Waiting to run
Build / Check feature flag-24 (push) Waiting to run
Build / Check feature flag-25 (push) Waiting to run
Build / Check feature flag-26 (push) Waiting to run
Build / Check feature flag-27 (push) Waiting to run
Build / Check feature flag-29 (push) Waiting to run
Build / Check feature flag-30 (push) Waiting to run
Build / Check feature flag-31 (push) Waiting to run
Build / Check feature flag-32 (push) Waiting to run
Build / Check feature flag-33 (push) Waiting to run
Build / Check feature flag-34 (push) Waiting to run
Build / Check feature flag-35 (push) Waiting to run
Build / Check feature flag-36 (push) Waiting to run
Build / Check feature flag-37 (push) Waiting to run
Build / Check feature flag-38 (push) Waiting to run
Publish Schema / Publish Schema (push) Waiting to run
docs(readme): add jetbrains acknowledgement
2026-07-10 20:55:25 +01:00
.cargo build: add optimised tagged release profile 2026-02-14 23:45:13 +00:00
.github ci: add nix-build job to replace garnix 2026-06-03 22:43:21 +01:00
.idea refactor(clients): use concrete errors where possible 2025-11-27 22:55:57 +00:00
docs docs(compiling): add libevdev as explicit dependency 2026-07-07 16:23:47 +01:00
examples fix(style): Use dark backgrounds for more UI (#1517) 2026-06-20 14:05:43 +01:00
lua feat!(cairo): Load script like a lua-module (#1348) 2026-01-29 11:49:28 +00:00
nix build(nix): replace naersk with crane 2026-06-03 22:44:03 +01:00
scripts docs(examples): replace with new minimal and desktop configs 2025-10-22 21:02:45 +01:00
src chore: fix new clippy lint warnings 2026-07-10 20:50:41 +01:00
test-configs feat(network manager): rework module (#1233) 2026-02-12 21:42:42 +00:00
.envrc feat(nix): automatic development environment with direnv 2023-08-15 20:09:32 +01:00
.gitignore build: update hyprland-rs to 0.4.0-alpha.1 2024-05-03 21:39:09 +01:00
build.rs feat(logging): log commit for non-tagged versions 2026-05-17 16:58:22 +01:00
Cargo.lock Merge pull request #1553 from JakeStanger/dependabot/cargo/mlua-0.12.0 2026-07-06 16:16:15 +01:00
Cargo.toml build(deps): bump mlua from 0.11.6 to 0.12.0 2026-07-06 14:53:35 +00:00
CHANGELOG.md docs(changelog): add 0.19.0 note to packagers 2026-05-17 17:29:59 +01:00
CONTRIBUTING.md docs(contributing): add ai policy details 2026-04-14 22:24:01 +01:00
default.nix chore(nix): simplify packaging and outputs 2025-06-04 13:05:17 +10:00
Dockerfile ci(docker): add clippy 2025-04-16 23:30:08 +01:00
flake.lock flake.lock: Update 2026-07-01 00:45:51 +00:00
flake.nix build(nix): replace naersk with crane 2026-06-03 22:44:03 +01:00
ironbar.service chore: add ironbar systemd service (#1364) 2026-02-04 21:59:41 +00:00
LICENSE chore: add mit license 2022-08-14 14:32:54 +01:00
README.md docs(readme): add jetbrains acknowledgement 2026-07-10 20:55:25 +01:00
shell.nix chore(nix): simplify packaging and outputs 2025-06-04 13:05:17 +10:00

--- Ironbar ---


A customisable and feature-rich GTK4 bar for Wayland compositors, written in Rust.

Ironbar is designed to support anything from a lightweight bar to a full desktop panel with ease.


Getting Started

Wiki | Configuration Guide | Style Guide


Screenshot of minimal theme with clock popup widget open Screenshot of desktop theme with MPD popup open

Looking for a starting point, or want to show off? Head to Show and tell


Features

  • First-class support for Sway and Hyprland, and partial support for Niri
  • Fully themeable with hot-loaded CSS
  • Popups to show rich content
  • A range of modules which integrate with native desktop libraries
  • Ability to create custom widgets, run scripts and embed dynamic content (including via Lua)
  • Easy to configure anything from a single bar across all monitors, to multiple different unique bars per monitor
  • Support for multiple config languages

Ironbar was born out of my frustrations with existing alternatives: I wanted an experience similar to that of a full desktop panel, and I wanted that without requiring a lot of configuration for the end-user. The project strives to stay true to these key philosophies:

  • Easy to configure: The config schema should be as intuitive and as standardized as possible. Each module should work the same way on every compositor with no additional configuration.
  • A middle-ground: Ironbar should provide more customization and a richer UI than a light-weight bar, but should not strive to step on the toes of full custom shell solutions.
  • Multithreaded async design: Scripts should run in the background. If one module or service blocks or crashes, the rest of the bar should continue to run smoothly.

Installation

Packaging status

Ironbar can be installed from source or using your preferred package manager.

It is also recommended to install a Nerd Font for displaying symbols.

Cargo

crate

Using cargo-binstall

Ensure you have cargo-binstall and the runtime depedencies installed. This installs the prebuilt binary from Github.

cargo binstall ironbar --locked

Cargo (from source)

Ensure you have the build dependencies installed.

cargo install ironbar --locked

Arch Linux

official package | aur git package

pacman -S ironbar
# or
yay -S ironbar-git

Nix

nix package

nix-shell -p ironbar

Flake

A flake is included with the repo which can be used with Home Manager.

Example usage
{
  # Add the ironbar flake input
  inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
  inputs.ironbar = {
    url = "github:JakeStanger/ironbar";
    inputs.nixpkgs.follows = "nixpkgs";
  };
  inputs.hm = {
    url = "github:nix-community/home-manager";
    inputs.nixpkgs.follows = "nixpkgs";
  };

  outputs = inputs: {
    homeManagerConfigurations."USER@HOSTNAME" = inputs.hm.lib.homeManagerConfiguration {
      pkgs = nixpkgs.legacyPackages.x86_64-linux;
      modules = [
        # And add the home-manager module
        inputs.ironbar.homeManagerModules.default
        {
          # And configure
          programs.ironbar = {
            enable = true;
            systemd = true;
            config = {
              # An example: 
              monitors = {
                DP-1 = {
                  anchor_to_edges = true;
                  position = "top";
                  height = 16;
                  start = [
                    { type = "clock"; }
                  ];
                  end = [
                    { 
                      type = "tray";
                      icon_size = 16;
                    }
                  ];
                };
              };
            };
            style = /* css */ ''
              /* An example */
              * {
                font-family: Noto Sans Nerd Font, sans-serif;
                font-size: 16px;
                border: none;
                border-radius: 0;
              }
            '';
            package = inputs.ironbar;
            features = ["feature" "another_feature"];
          };
        }
      ];
    };
  };
}

CI builds are automatically cached to Cachix.

  • Subsituter: jakestanger.cachix.org
  • Public key: jakestanger.cachix.org-1:VWJE7AWNe5/KOEvCQRxoE8UsI2Xs2nHULJ7TEjYm7mM=

Void Linux

void package

xbps-install ironbar

Source

repo

Ensure you have the build dependencies installed.

git clone https://github.com/jakestanger/ironbar.git
cd ironbar
cargo build --release
# change path to wherever you want to install
install target/release/ironbar ~/.local/bin/ironbar

By default, all features are enabled. See here for controlling which features are included.

Running

Once installed, you will need to create a config and optionally a stylesheet in .config/ironbar. See the Configuration Guide and Style Guide for full details.

Ironbar can be launched using the ironbar binary.

The IRONBAR_LOG and IRONBAR_FILE_LOG environment variables can be set to change console and file log verbosity respectively. You can use any of error, warn, info, debug or trace.

These default to IRONBAR_LOG=info and IRONBAR_FILE_LOG=warn. Note that you cannot increase the file log verbosity above console verbosity.

Log files can be found at ~/.local/share/ironbar/.log.

Status

Ironbar is an alpha project. It is unfinished and subject to constant breaking changes, and will continue that way until the foundation is rock solid.

If you would like to take the risk and help shape development, any bug reports, feature requests and discussion is welcome.

I use Ironbar on my daily driver, so development is active. Features aim to be stable and well documented before being merged.

Contribution Guidelines

All are welcome, but I ask a few basic things to help make things easier. Please check here for details.

Acknowledgements

  • Waybar - A lot of the initial inspiration, and a pretty great bar
  • Rustbar - Served as a good demo for writing a basic GTK bar in Rust
  • Smithay Client Toolkit - Essential in being able to communicate to Wayland
  • gtk-layer-shell - Ironbar and many other projects would be impossible without this
  • Mixxc - Basis for Ironbar's PulseAudio client code and a cool standalone volume widget
  • JetBrains - Supply a free all products pack licence

Thanks to everybody who has contributed to Ironbar in any shape or form ❤️