Releases: pinnacle-comp/pinnacle
v0.2.3
Featuring copy-paste errors from me 9 months ago!
Additions
- There is now very basic tablet support. I mean really basic as in the pointer doesn't even move when you hover the pen around. Probably not all that useful until I implement that.
- You can now specify drm devices that Pinnacle will use with the
PINNACLE_DRM_DEVICESenvironment variable:Devices not listed will not be used. (#413 - thanks @rustysec)PINNACLE_DRM_DEVICES="/dev/dri/card1:/dev/dri/renderD128" pinnacle
Fixes
- Builds on ARM should work now
- nix: The UWSM session should have a shorter name now (#407 - thanks @cassandracomar)
- nix: Cross compilation fixes (#410 - thanks @doronbehar)
- Applications like Nautilus no longer start maximized (read: I copy pasted the code for
maximize_requesttounmaximize_requestand didn't change it) (#419 - thanks @Ph4ntomas)
v0.2.2
I have been playing an alarming amount of Baba is You recently. Really beat the game and I still don't know how to do Deep Forest - E. Perhaps it will never be done.
Changes
- When VRR is on, the cursor will now match the refresh rate of only fullscreen windows with a content type of
gameor that are xwayland. Previously, this occurred with all fullscreen windows, leading to choppy cursor movement with fullscreen terminals, for example. (thanks @anriha)
Bug fixes
- The Nix package should now properly re-layout windows on certain changes (thanks @anriha)
- VRAM should leak less/not at all when opening and closing decorated windows and Snowcap widgets (I think) (thanks @Ph4ntomas)
What's changed
- fix: properly remove root cache entry when a surface is destroyed by @Ph4ntomas in #405
- nix: disable wlcs for the final package by @anriha in #401
- backend: implement content-type based cursor throttling by @anriha in #406
Full Changelog: v0.2.1...v0.2.2
v0.2.1
If you got a second notification for this release it's because I forgot to update Cargo.lock 😅
What's this? A patch? With bug fixes? It's more likely than you think.
Bug fixes
- Floating windows no longer have their tags assigned to active ones when unplugging and replugging their monitor (or turning it off and on)
- Monitors now properly turn on if they were turned off and on in another tty
v0.2.0
v0.2: Zipping through forsaken cities
Important
This release contains breaking changes. For details and migration steps, visit the wiki page.
Additionally, there are new features that require additions to existing configs (details below).
Users with a Rust config will additionally need to update pinnacle-api to the "v0.2.0" tag to take advantage of said new features.
Greetings humans and robots,
Well it seems another year has come and gone, and hey it only took this big rock we're standing on halfway around the sun to get a new version out! Ok, admittedly I would've liked the time between v0.1 and now to be a bit less than half a year, but rest assured I spent that time doing very, very high priority items. Like playing Silksong.
Nix package
A big shoutout to @cassandracomar for adding a Nix package! I have no idea how any of it works so visit the wiki page for details.
New features
Tiled window resizing
You can now resize tiled windows! This is something that Awesome doesn't generally have that I miss every time I go back to it to test stuff out.
tile_resizing.mp4
Resizing works using the already-existing begin_resize function.
Important
If you haven't already visited the breaking changes page at the top, in order for Pinnacle to remember tile sizes, you'll now need to
provide an identifier when submitting a layout tree.
For Lua users using the AUR package, your current config won't break, but I highly recommend following the steps in that page to
avoid breakage in the future.
For Rust users, update pinnacle-api to the "v0.2.0" tag to have rustc yell at you to make the change.
v0.1.0 configs will still work, but tiles will reset their size on tag and layout change without updates.
It's not perfect—there are issues with Pinnacle "forgetting" tile sizes when you fullscreen and unfullscreen a window for example—but it's a great start!
Focus borders and titlebars
You may have noticed it in the previous clip, but we now have focus borders (finally) and titlebars! These are drawn using Snowcap, our widget system that's also used for the quit prompt and bind overlay.
Important
This feature requires additions to existing configs.
Lua: Add these lines to your config. To remove the titlebar, replace focus_border_with_titlebar with just focus_border.
Rust: Add these lines to your config. To remove the titlebar, replace new_with_titlebar with just new.
ext-workspace-v1
A big thank you to @cassandracomar for implementing ext-workspace-v1! Bars implementing the protocol should now be able to display tags and provide tag controls.
ext-image-capture-source-v1 and ext-image-copy-capture-v1
Pinnacle now implements the ext image capture protocols. Notably, this enables capturing of individual windows. To use this protocol for PipeWire capture for applications like OBS, you will need xdg-desktop-portal-wlr 0.8 installed.
Floating layout
There is now a true floating layout courtesy of @Ph4ntomas! All windows on the floating layout will become floating. To add the floating layout to existing configs:
- Lua: Use
Layout.builtin.floating() - Rust: Use
pinnacle_api::layout::generators::Floating::default()
8-directional window resizing
Previously, window resizing was corner based and worked like this depending on where your pointer was in the window:

Now, thanks to @Ph4ntomas, it works like this for more control:

Misc additions
- Pinnacle now remembers whether a monitor was powered after unplug and replug (thanks @anriha)
- Drag-and-drop now works between Wayland and Xwayland windows
- The Snowcap API has been exposed as an experimental module (for the Rust side, Lua users technically always had access to it). This API will 100% change in the future, but if you want to change the color of the focus border for example then you'll need to go through this API to create the
Colors necessary to do so.- Lua:
local snowcap_api = require("snowcap") - Rust:
use pinnacle_api::experimental::snowcap_api;
- Lua:
API additions
-
OutputHandle::active_tags (Lua, Rust) (by @Ph4ntomas)
-
OutputHandle::inactive_tags (Lua, Rust) (by @Ph4ntomas)
-
WindowHandle::move_to_output (Lua, Rust) (by @Ph4ntomas)
-
WindowHandle::swap (Lua, Rust) (by @Ph4ntomas)
-
WindowHandle::lower (Lua, Rust) (by @Ph4ntomas)
-
Floating layout (Lua, Rust) (by @Ph4ntomas)
-
Signals
Changes
- Outputs are now manually focused instead of being implicitly the one that the pointer is on. See the breaking changes page to restore the old behavior.
- Focusing a different output will now focus the last focused window on that output, rather than not changing the focused window.
- And a whole load of bugfixes that probably should've been backported to v0.1 but I was too lazy to do that
- And probably some other stuff I'm forgetting
Contributions
- luaapi: improve custom searcher logic by @Ph4ntomas in #323
- justfile: Fix various error when building from source by @Ph4ntomas in #322
- Add floating layout by @Ph4ntomas in #326
- layout: Update window floating loc on resize by @Ph4ntomas in #333
- window: Update position on LayoutMode changes by @Ph4ntomas in #331
- Make compositor-initiated window resizing also use...
v0.2.0-alpha.2
Hello left twixes and right twixes,
Skong DLC teaser just dropped. Anyway, here's another alpha! What makes it an alpha or a beta or a full release? I have no clue haha probably should just call it a release candidate or something.
Breaking Changes
- Rust
FocusBorder::decoratenow returns aResult
Features
- Drag-and-drop between Wayland and Xwayland windows should work now, big thanks to the people working on Smithay for that!
- The default config now contains keybinds for media and brightness control
Bug Fixes
- The focus border should now be correctly sized on Godot on Wayland
Contributions
- Remove dash from the rockspec in nix by @anriha in #394
- fix(integration): fix syntax error in lua tests by @Ph4ntomas in #399
Full Changelog: v0.2.0-alpha.1...v0.2.0-alpha.2
v0.2.0-alpha.1
Heya silkers and songers,
Well after skonging and playing stoneblock 4 doing productive things for the past couple of months, here's the first alpha for 0.2, now featuring resizable tiles and window decorations! Full release notes when the full release comes out.
There will probably be a few small breaking changes as I refine bits of the config API.
Special thanks to the following contributors:
- luaapi: improve custom searcher logic by @Ph4ntomas in #323
- justfile: Fix various error when building from source by @Ph4ntomas in #322
- Add floating layout by @Ph4ntomas in #326
- layout: Update window floating loc on resize by @Ph4ntomas in #333
- window: Update position on LayoutMode changes by @Ph4ntomas in #331
- Make compositor-initiated window resizing also use single edges by @Ph4ntomas in #335
- api/window: Add a RPC to move a window to other output by @Ph4ntomas in #337
- api: add [in]active tags filtering to OutputHandle by @Ph4ntomas in #339
- window: Add method to swap two windows by @Ph4ntomas in #340
- api/window: add response to WindowHandle::MoveToOutput RPC by @Ph4ntomas in #341
- Add WindowHandle::lower by @Ph4ntomas in #344
- Decrease tests flakyness by @Ph4ntomas in #345
- api/lua - Use pcall when calling user code by @Ph4ntomas in #347
- XDG Shell protocol: Add tests to ensure protocol correctness by @Ph4ntomas in #349
- Refactor window mapping by @Ph4ntomas in #348
- XDG Shell - Respect client output preference for fullscreen requests by @Ph4ntomas in #351
- feat(nix): add packages and modules by @cassandracomar in #352
- Adds send_message method to LayerHandle by @Ph4ntomas in #360
- Add powered to ConnectorSavedState by @anriha in #366
- feat: implement ext-workspace-v1 by @cassandracomar in #358
- feat(nix): add nixGL support for non-NixOS by @cassandracomar in #367
- api/lua: Fix XDG_DATA_DIRS usage. by @Ph4ntomas in #373
- Tag: Add signal to notify config of tag lifetime by @Ph4ntomas in #372
- window: Fix floating window initial size by @Ph4ntomas in #378
- snowcap: pool surface events on update by @Ph4ntomas in #379
- test: fix api::tag::tag_signal_created race-condition by @Ph4ntomas in #380
- Window created/destroyed/layout_mode_change signals by @anriha in #368
- tests: disable automatic features, and pass them as a cargo test flag by @Ph4ntomas in #382
- snowcap: Allow updating Layers attributes by @Ph4ntomas in #387
New Contributors
- @Ph4ntomas made their first contribution in #323
- @cassandracomar made their first contribution in #352
Full Changelog: v0.1.0...v0.2.0-alpha.1
v0.1.0
v0.1.0: Arriving at the base of the mountain
Hello ladies and gentlemen,
We're finally here! Yea there's still, idk, the whole rest of the mountain, but small steps first.
So uh, this release was supposed to come out three days ago. Unfortunately I caught a stomach bug or got food poisoning or something 🫠.
Why three days ago? Well, it's because that's Pinnacle's birthday!
$ git log --max-parents=0
commit 1c1c685385502405a513879703cc34e4ab7d1c56
Author: Ottatop <120758733+Ottatop@users.noreply.github.com>
Date: Sun May 28 19:10:42 2023 -0500
Initial commit
Yep. Two whole years and we still don't have any indicator of which window is focused. ![]()
This is the first release of Pinnacle, a Wayland compositor I'm writing that's inspired by AwesomeWM. That means you get:
- Dynamic tiling
- Tags instead of workspaces
- Configuration in Lua
- The beginnings of a built-in widget system (not yet configurable)
Because I've been indoctrinated by the Cult of Rust, you can also configure Pinnacle with Rust! Two configuration libraries in two completely polar opposite languages—you can imagine why this release took two years.
To get started, see the wiki. Please note that the wiki does not document every available API feature, as that's a lot of doc duplication I'd have to do. For API documentation, see the Lua and Rust references.
For those with access to the AUR, there's an official AUR package.
Changes since 0.1.0-beta.1
Changes
pinnacle clientno longer prints a few logs when running with-eor piped input- Snowcap now accepts WGPU environment variables on startup (by @sapient-cogbag in #315)
Bug fixes
Window::get_focusednow returns the actual focus, rather than the last focus on the focused output- Moving a window with
set_geometrynow correctly updates its tags if it moves to another output- As a side effect, moving a floating window by dragging it now updates its tags
to the output that it has more area on, rather than the output that the cursor is on
- As a side effect, moving a floating window by dragging it now updates its tags
- Fixed some applications not fullscreening on open, like
mpv --fullscreen
Special thanks to these contributors!
- @vnepogodin made their first contribution in #115
- @LogicalOverflow made their first contribution in #200
- @thmasq made their first contribution in #241
- @anriha made their first contribution in #274
- @PatchMixolydic made their first contribution in #278
- @jo-so gave me a few diffs in the matrix that ended up in b8502f4 and 9ff28fc
- @sapient-cogbag made their first contribution in #315
Changelog since v0.1.0-beta.1: v0.1.0-beta.1...v0.1.0
v0.1.0-beta.1
Greetings Whoppers and Big Macs,
We're in beta now! "How is this any different from alpha?", I hear you asking. Well it's only bug fixes from here on out until the actual release (as you can tell I've been sneaking in some stuff between the alphas). I'll let this beta stew for a few days and if all goes well we're set for release and I can finally get to work on new features!
Changes since 0.1.0-alpha.2
New features
- Child windows now open centered against their parent window
- API: The
set_envfunction has been resurrected from the dead.- This allows you to set environment variables for all newly spawned processes.
Changes
- Getting stdio from spawned processes is now opt-in. Set the
pipe_std{in,out,err}option to pipe that file descriptor for use.- This fixes an issue where unconditional piping caused applications to freeze when spewing out too much data on stdout/err due to the pipe buffer filling up
- Popups now appear above everything else
Bug fixes
- Floating windows no longer jump to the top left of the output if they are not on active tags while the output is disconnected and reconnected
- Windows opened when there are no tags will now inherit the next added tag. This prevents xdg-autostart windows from getting lost when the Rust config is compiling, for example
- It is no longer possible for a session locker to lock the session while it is already locked
- The pointer should now disappear from the previous output if it moves slowly to a new output (haven't tested this lol)
- Really large popups should no longer overflow past the top or left of the display in some circumstances
v0.1.0-alpha.2
What's up lemons and limes,
In other less important news, hey here's another pre-release!
Changes since 0.1.0-alpha.1:
New features
- Support for setting the xkb keymap through a file/string
- Support for cycling and setting keyboard layouts
- Binds can now be set to trigger when the session is locked with the
allow_when_lockedoption
Changes
- The way windows' layout modes are tracked has been modified. Now, setting a window to, say, fullscreen then repeatedly toggling maximized won't leave the window stuck between fullscreen and maximized. Toggles will now attempt to return the window to floating or tiled (whichever of the two the window was in previously).
- Fullscreen and maximized requests from clients are now tracked to prevent the scenario where you started with a maximized window, double-clicked a YouTube video to make it fullscreen, and the window returned to tiled instead of maximized when unfullscreened.
Bug fixes
- Having multiple screencopy clients active at once now works
- Pointer motion is now sent to clients when they move under the pointer. This fixes right-click menus being in the wrong place when fullscreening Firefox and right-clicking without moving the mouse.
v0.1.0-alpha.1
Hey hopers and copers,
Silksong still isn't out 🤡. But this release sure is! Ok, it's an alpha pre-release, but that's still more than anything Team Cherry has given us in the last 5 years :P.
So what's left to do until the full first release? Well, a few bugs still need squashing and there are some small feature requests that I want to implement. Other than that, there shouldn't be any major breaking changes until the full release. But I still reserve the right to do that.
If you'd like to try Pinnacle out and you use Arch btw™️, there is an AUR package for the main branch (currently doesn't bundle the Lua API, but this release contains a rock you can install with LuaRocks).
Full release notes once the full release comes out.
What's Changed
Literally everything lol
New Contributors
- @vnepogodin made their first contribution in #115
- @LogicalOverflow made their first contribution in #200
- @thmasq made their first contribution in #241
- @anriha made their first contribution in #274
- @PatchMixolydic made their first contribution in #278
- @jo-so gave me a few diffs in the matrix that ended up in b8502f4 and 9ff28fc
Full Changelog: https://github.com/pinnacle-comp/pinnacle/commits/v0.1.0-alpha.1

