Skip to content

Releases: KiwiCanopy/KiwiDesk

KiwiDesk 1.4.0

Choose a tag to compare

@github-actions github-actions released this 16 Sep 23:13
d2b411d

KiwiDesk is built in free time and is free to use for everyone.
If it has earned a place on your Mac — a star on GitHub, a word to
someone who tiles, or a coffee through
GitHub Sponsors or
Ko-fi — every one of those keeps
it fruity.

Highlights

KiwiDesk 1.4.0 makes ultrawide screens comfortable — a Scrolling
Space says how many windows it shows, and the anchors put the
focused window where they say — and brings profiles and macOS
Desktops into step, with one profile per screen count and windows
returning in the order you left them. Beside that, a card flip
when focus moves in a Monocle Space, and a round of fixes.

Desktops and profiles

  • A Desktop can hold one profile per screen count — bind a
    one-screen and a two-screen profile to the same Desktop and the
    one matching the screens connected loads when you dock or undock.
    The Desktops card groups its rows by screen count and names the
    screen under each Desktop.
  • Switching to another Desktop and back keeps your windows in
    order
    , and a Track Space keeps its columns.

Windows and layouts

  • A focus change in a Monocle Space flips a card instead of
    cutting straight to the next window: the windows blur and a card
    turns from the outgoing app's icon to the incoming one's. On by
    default — Flip between windows and Flip duration are under
    Layout Defaults ▸ Monocle, and macOS's Reduce Motion keeps it off.
  • A Scrolling slot of 50% is exactly two windows, gaps included,
    and a Windows on screen stepper under the slot size sets the
    count directly; the split ratios gain ¼ ⅓ ½ ⅔ ¾ presets. A saved
    slot size moves by less than one gap.
  • The Left, Right, Top, Bottom and Center anchors now mean what
    they say:
    the focused window rests at that position even when
    the row is shorter than the screen, so the rest of the row can
    hang off the edge. If you'd rather have the screen always filled
    with windows, use Follow — it's unchanged, and still the default.
  • If one window, fill the screen is a new toggle for Scrolling
    and Stack, on by default. Off, a lone window keeps its slot size
    or master zone and the rest of the screen stays empty.
  • In Track, a window with a fixed size no longer hogs the width
    — the leftover goes to the columns beside it, which you can resize
    again, and switching Spaces and back keeps the arrangement.

Borders and gaps

  • The unfocused border is visible again on the dark palettes
    six of the built-in palettes drew it too dark to see over dark
    wallpaper, and each takes a lighter grey now.
  • Fit layout gaps makes room for the glow, so a focused
    window's glow no longer bleeds onto its neighbour, and the button
    now lives in the Gaps card.

Settings and shortcuts

  • ⌃⌥, opens Settings on a new setup, beside ⌃⌥K. An existing
    setup gets it through Shortcuts ▸ Restore Defaults…
  • The gap sliders and the Desktop binding rows stay live — the
    sliders while the per-edge values differ (a value there sets all
    of them), the rows while you edit a stored profile, and Save keeps
    the binding.
  • Rows with no effect are greyed and say why — Auto Glow Size
    with the glow off, Liquid Glass while Reduce transparency is on.
  • The icon picker for Spaces and layers opens on Symbols rather
    than on whichever tab you left it. Furthermore, the picker's
    search is cleared when it's closed.
  • On macOS 27, Settings' dropdowns keep their text grey — the
    new OS tinted every pop-up's label green while Settings was the
    front window.

What's Changed

  • chore(site): sync release notes and feed for v1.3.0 by @hajiboy95 in #1476
  • fix(gui): Desktop binding rows stay live under every edit target by @hajiboy95 in #1478
  • fix(gui): grey the Liquid Glass row with its reason under Reduce transparency by @hajiboy95 in #1479
  • feat(keys): seed ⌃⌥, as Open Settings by @hajiboy95 in #1480
  • fix(state): a Desktop return keeps a row's order and its track columns (#1387) by @hajiboy95 in #1477
  • fix(appearance): lift the unfocused ring to mid lightness per palette by @hajiboy95 in #1481
  • fix(gui): grey Auto Glow Size with the glow effect off by @hajiboy95 in #1482
  • fix(gui): the gap masters stay live and acknowledge while their edges differ by @hajiboy95 in #1483
  • fix(gui): the icon picker opens on Symbols in one resting shape by @hajiboy95 in #1484
  • docs: state that a macOS update cannot take KiwiDesk down by @hajiboy95 in #1486
  • site(de): an update can at most slow a fast path by @hajiboy95 in #1487
  • feat(layout): "If one window, fill the screen" toggle, default on by @hajiboy95 in #1489
  • feat(layout): center, start and end scrolling anchors are absolute by @hajiboy95 in #1491
  • fix(layout): a scrolling share is a share of the pitch (#1382 Core half) by @hajiboy95 in #1492
  • fix(borders): Fit layout gaps clears the glow, and lives in the Gaps card by @hajiboy95 in #1493
  • feat(gui): "Columns on screen" — a count stepper for the scrolling share (#1382) by @hajiboy95 in #1494
  • fix(tiling): track heal honours learned ceilings, the clamp folds like the render, a switch re-issues without probing by @hajiboy95 in #1490
  • fix(gui): the count row says "Windows on screen"; Center's caption owns the cut by @hajiboy95 in #1495
  • feat(animation): Monocle focus change flips a drawn card over a blur (#1391) by @hajiboy95 in #1496
  • feat(profiles): name the screen under each Desktop row (#1438) by @hajiboy95 in #1497
  • feat(profiles): a Desktop holds one profile per screen count (#1436) by @hajiboy95 in #1498
  • fix(build): ask for the release build's SDK stamp and read it back (#1499) by @hajiboy95 in #1503
  • fix(gui): menu-style pickers neutralise their label on macOS 27 (#1502) by @hajiboy95 in #1504
  • chore(release): stamp version 1.4.0 by @hajiboy95 in #1505

Full Changelog: v1.3.0...v1.4.0

KiwiDesk 1.3.0

Choose a tag to compare

@github-actions github-actions released this 15 Sep 02:41
d003c5d

KiwiDesk is built in free time and is free to use for everyone.
If it has earned a place on your Mac — a star on GitHub, a word to
someone who tiles, or a coffee through
GitHub Sponsors or
Ko-fi — every one of those keeps
it fruity.

Highlights

KiwiDesk 1.3.0 is the first release under the Business Source
License 1.1 — free to use for everyone, business included; only
offering it as a product or service is reserved, and each version
becomes MIT after four years. Beyond that: Liquid Glass on by
default, a Mac Checklist in Settings, windows that respect an app's
own minimum size, a swipe that stays where you sent it, and a
Settings window that comes to the front when asked.

Liquid Glass and the bars

  • Liquid Glass is on by default on macOS 26, and it honours
    Reduce transparency the moment you switch that on. A setup that
    had it off keeps it off.
  • Both bars start at 40 pt thick on a new setup, on every screen
    size, and the Thickness sliders now go down to 20 pt.
  • The Space Bar shows which shortcut layer is active, leading
    with the layer's icon while one other than the default is on —
    and scripts can hear the switch as a layer_change event.

Windows and layouts

  • An app's own minimum size is respected, and the resize pill
    says whose limit you hit.
    A split makes room for a window that
    won't go narrower instead of letting it overlap its neighbour,
    Track opens only as many tracks as fit, and This app won't go
    smaller
    names the app where Minimum window size reached still
    means the setting you can lower.
  • A double-clicked title bar or edge no longer knocks a tiled
    window out of its slot
    , nor does an app resizing itself — the
    window goes straight back, and a floating window that zooms is
    kept clear of the bars.
  • Switching a Space to Floating no longer leaves windows off
    screen or piled on top of each other
    — anything you couldn't
    reach is laid out in a grid.
  • The Track limit is the number of tracks you see. A limit of 3
    used to show four; the default is now 3, and saved configs are
    adjusted on first load so nothing moves on screen.
  • Floating windows get the unfocused border too, and clicking
    around a Floating Space no longer lifts a sticky window over the
    others.

Desktops and profiles

  • A swipe to another Desktop no longer gets pulled back a second
    later.
  • A Desktop binding fires only when its profile fits the screens
    connected.
    Bound to a one-screen profile with two screens
    plugged in, the Desktop takes the profile for that screen count
    instead, and the Desktops row says which count the binding is
    for.

Settings

  • Settings opened from the menu bar comes to the front again,
    including after you closed it once in a Scrolling Space.
  • A Mac Checklist card lists the macOS settings a tiling window
    manager fights — Stage Manager, rearranging Spaces by use, edge
    tiling — read live from your Mac, with the habits that make
    tiling stick. The guide link now lives at its foot, and the tour
    ends there.
  • Search opens the drawer a setting hides in, and finds your
    palettes by name.
  • The Track shortcuts sit behind their own drawerMove
    windows in the track layout
    , below the Desktop one — instead of
    beside shortcuts every layout uses.

What's Changed

  • chore(site): sync release notes and feed for v1.2.2 by @hajiboy95 in #1366
  • feat(bars): ship Liquid Glass on by default by @hajiboy95 in #1368
  • fix(desktops): settle never re-asserts a focus the switch removed by @hajiboy95 in #1370
  • chore(site): say open source, not free by @hajiboy95 in #1375
  • chore(license): move to the Business Source License 1.1 from 1.3.0 by @hajiboy95 in #1376
  • fix(profiles): migrate the Liquid Glass leaves the default flip left absent by @hajiboy95 in #1373
  • test: two settle-and-latch tests stop racing the runner's clock by @hajiboy95 in #1408
  • docs(user-guide): keep only what the GUI cannot answer, and add the prose budget by @hajiboy95 in #1409
  • docs(limitations): a Finder window left behind by a swipe stays in its row by @hajiboy95 in #1411
  • fix(settings): a closed Settings window reopened in scrolling takes focus by @hajiboy95 in #1412
  • chore(site): bump js-yaml from 4.3.1 to 4.3.2 in /site by @dependabot[bot] in #1372
  • feat(site): the hero trailer replaces the July demo clip in #demo by @hajiboy95 in #1415
  • build(packaging): ship the license texts in the bundle and open them from About by @hajiboy95 in #1416
  • feat(site): Terms of Service page in three locales by @hajiboy95 in #1417
  • fix(bars): honor Reduce transparency live at the glass homes by @hajiboy95 in #1419
  • test: the mouse-warp click stamps stop racing the runner's clock by @hajiboy95 in #1421
  • docs(scrolling): record that a short row does not stretch to fill its axis by @hajiboy95 in #1422
  • chore(license): the Additional Use Grant reaches every production use by @hajiboy95 in #1423
  • feat(bars): 40 pt default thickness and a slider floor derived from Core by @hajiboy95 in #1420
  • docs(license): argue the grant's line in the entry, retire the bare free on the privacy page by @hajiboy95 in #1424
  • fix(scrolling): a swap trades places on screen, panning only into view by @hajiboy95 in #1425
  • fix(commands): the Desktop raise gate asks a second compositor read by @hajiboy95 in #1426
  • fix(site): the trailer's end card no longer runs edge to edge by @hajiboy95 in #1428
  • fix(tiling): correct a resize nobody asked for on its own event by @hajiboy95 in #1429
  • fix(tiling): stamp a frame-set at enqueue so our own echo never reads as a resize by @hajiboy95 in #1432
  • fix(borders): the unfocused ring and the float-tier raise ask the effective float by @hajiboy95 in #1433
  • feat(layout): the track limit counts the overflow track, floored at 2 by @hajiboy95 in #1434
  • fix(layouts): derive Track's automatic count from learned app minimums by @hajiboy95 in #1435
  • fix(profiles): a Desktop binding fires only for its profile's screen count by @hajiboy95 in #1437
  • fix(gui): a search hit inside General ▸ Advanced opens the drawer by @hajiboy95 in #1441
  • feat(brand): the link-preview card shows the product, not the logo by @hajiboy95 in #1442
  • docs(brand): the README and the Nerd hero carry the slogan by @hajiboy95 in #1443
  • feat(gui): the Track shortcuts sit behind a drawer below the Desktop one by @hajiboy95 in #1444
  • docs: mark the Track drawer's prose unreleased by @hajiboy95 in #1446
  • feat(gui): palette names in search's Made by you group by @hajiboy95 in #1447
  • feat(events): emit layer_change on the Lua and IPC event surface by @hajiboy95 in #1448
  • feat(gui): the search field offers the Guide before you type by @hajiboy95 in #1445
  • docs(site): the Simple page's title and kicker carry the slogan by @hajiboy95 in #1452
  • test(state): an active home never drops its own sticky — #1301 closes from source by @hajiboy95 in #1453
  • fix(profiles): heal a screen the resolve left with no space by @hajiboy95 in #1454
  • chore(site): bump the site-patch-and-minor group in /site with 4 updates by @dependabot[bot] in #1449
  • fix(gui): the greyed Focused window row links its reason beneath the grid by @hajiboy95 in #1455
  • test(tiling): the echo grace runs on an injected clock, frozen for every test core by @hajiboy95 in #1457
  • feat(bars): the Space Bar leads with the active shortcut layer by @hajiboy95 in #1458
  • fix(tiling): send the corroborating second ask instead of waiting for the layout by @hajiboy95 in #1459
  • feat(tiling): gather off-screen windows when a space enters floating mode by @hajiboy95 in #1460
  • chore(app): drop a quadrupled comment in the traveler re-home by @hajiboy95 in #1461
  • fix(tiling): heal a split store to a learned floor at retile by @hajiboy95 in #1462
  • feat(tiling): a monocle stack trips the floating g...
Read more

KiwiDesk 1.2.2

Choose a tag to compare

@github-actions github-actions released this 09 Sep 23:41
f715fc7

Highlights

A one-fix release: floating windows that come back where you
left them.

Floating windows

  • A floating window no longer gets stuck in the screen corner.
    Switching spaces could lose where a floating window belonged —
    after a Desktop switch, a relaunch, or simply a slow app — and
    from then on it came back tucked into the bottom corner where
    hidden windows park. Its place now survives all three, and a
    window whose place is genuinely lost comes back centred on its
    screen instead of in the corner.

What's Changed

  • docs(agents): a highlight bullet is short, and a site fix is not news by @hajiboy95 in #1350
  • chore(site): sync release notes and feed for v1.2.1 by @hajiboy95 in #1351
  • fix(tiling): re-centre a float stranded at the stash corner by @hajiboy95 in #1361
  • chore(release): stamp version 1.2.2 by @hajiboy95 in #1363

Full Changelog: v1.2.1...v1.2.2

KiwiDesk 1.2.1

Choose a tag to compare

@github-actions github-actions released this 08 Sep 15:21
4c7608a

Highlights

A small release: Desktop switches that stay put, profiles that
keep their arrangements, and an update you can actually see.

Desktops

  • A swipe to another Desktop stays there instead of bouncing
    you back a moment later, and the swipe back keeps the window
    macOS refocused.
  • Switching Desktops no longer reads or rewrites your profile
    files.
    A hand-edited profile takes effect at the next reload
    or apply.

Profiles

  • A profile keeps the arrangement you left it with through a
    Settings save, a preset, a discard, Reset All Settings and a
    backup restore — a window parked on another Desktop included.

Updates

  • You are told when an update is waiting: an orange dot on
    the menu-bar icon and an Update Available… row, instead of a
    window opened behind everything else.

Settings and the command line

  • The Desktop shortcut drawers explain themselves with a ?
    that says what a macOS Desktop is next to a KiwiDesk Space.
  • focus_desktop and move_to_desktop_and_follow return
    switched
    , false when the Desktop was already showing.

What's Changed

  • feat(agents): a changelog-curator, and the rule it applies by @hajiboy95 in #1328
  • chore(site): sync release notes and feed for v1.2.0 by @hajiboy95 in #1329
  • feat(site): mark unreleased docs, and retire the marks at release by @hajiboy95 in #1330
  • refactor(profiles): make currentName the one live-profile authority by @hajiboy95 in #1331
  • fix(profiles): a Desktop switch reads no profile from disk by @hajiboy95 in #1333
  • fix(profiles): an away window takes the incoming profile's Space by @hajiboy95 in #1334
  • docs(site): say Schreibtisch once in the German catalog by @hajiboy95 in #1338
  • fix(site): let the compare table breathe, and label its blocks by @hajiboy95 in #1339
  • fix(site): untrack site/node_modules, and close the gap that let it in by @hajiboy95 in #1341
  • chore(issues): retire the roadmap template, unlist the collector by @hajiboy95 in #1340
  • feat(settings): say what a macOS Desktop is, once by @hajiboy95 in #1342
  • test(settings): close three escapes in the Desktop help guard by @hajiboy95 in #1344
  • feat(site): say that KiwiDesk works with native macOS Desktops by @hajiboy95 in #1343
  • fix(commands): a Desktop switch that changes nothing reports itself by @hajiboy95 in #1346
  • fix(focus): a Desktop switch is not a close, and a raise across Desktops is a switch by @hajiboy95 in #1347
  • feat(updates): a gentle reminder when a scheduled check finds an update by @hajiboy95 in #1348
  • chore(release): stamp version 1.2.1 by @hajiboy95 in #1349

Full Changelog: v1.2.0...v1.2.1

KiwiDesk 1.2.0

Choose a tag to compare

@github-actions github-actions released this 07 Sep 17:42
8c1fc61

Highlights

This release is about macOS Desktops. KiwiDesk now knows which
windows live on the Desktops you are not looking at, keeps each
Desktop's and each profile's Spaces apart, brings sticky windows
along when you switch, and puts focus back where you left it
when you come back. Around that: a keyboard preview you can
read, one honest cue for every blocked resize, and several focus
jumps that are gone — including the one that pulled you off a
fullscreen video. Liquid Glass now covers every KiwiDesk surface
from a single switch, and three long-standing translation
defects are fixed.

Desktops, done properly

  • Every profile owns its own Spaces. Two profiles' Space 1
    used to be one Space, so switching profiles and back could
    merge an arrangement away for good. Each profile now records
    what its Spaces held when you leave it and restores them when
    you return. A brand-new Desktop picks a Space no other Desktop
    is showing instead of landing on one whose windows are all
    somewhere else.
  • A Desktop keeps its identity when Mission Control renumbers
    it.
    Adding, removing or dragging a Desktop — or plugging a
    screen in — shifts every Desktop number, and everything keyed
    by number silently pointed at a different Desktop. KiwiDesk
    now stamps each Desktop with its own identifier, so profile
    bindings and remembered Spaces stay with the Desktop they were
    made on.
  • Windows on other Desktops are known, not forgotten.
    KiwiDesk reads which windows each Desktop hosts, so a window
    that vanished because you switched Desktops is reported as
    away rather than closed, keeps its Space and slot for its
    return, and Open or Focus can reach it across Desktops.
    get_state lists them under away_windows, and startup no
    longer counts parked or system windows among them.
  • The Space Bar shows the Desktop in front of you. Windows
    parked by KiwiDesk in another Space are the bar's job; windows
    sitting on another macOS Desktop are not, and no longer appear.
  • Sticky windows come with you across Desktops. A window
    marked ∞ follows you to every Desktop; one marked 📌 follows
    across its screen's Desktops. On by default and switchable with
    sticky.set_desktop_reach, with a per-window override for the
    one window you want left behind.
  • Coming back to a Desktop puts focus where you left it.
    Returning used to jump focus to the first window in the row;
    KiwiDesk now remembers each Space's last focus per Desktop and
    hands it back at that window's own return.
  • Move a window to a Desktop and into a Space in one verb.
    move_to_desktop(3, "mail") and move_to_desktop_and_follow
    take an optional Space the window joins when it lands.
  • A ∞ window entering a floating Space on another screen moves
    onto that screen
    , scaled to it, instead of staying where its
    previous Space drew it — and its ∞ mark shows on the one bar
    that actually has it.
  • A new docs page explains how screens, Desktops, profiles and
    Spaces relate
    , with a diagram — the model the app assumed you
    already had.

Liquid Glass, and the bars

  • Liquid Glass is one switch, and it covers everything. It
    used to be an App Bar setting alone. It now lives in Colors &
    Animations and lays macOS's translucent material over the
    Space Bar, the App Bar and the shortcuts panel together, with
    each bar's Fill colour tinting its own material. The shortcuts
    panel stays untinted on purpose — a large panel summoned over
    the desktop reads best as clear glass. If your three surfaces
    are set differently today, turning the switch on adopts all
    three.
  • The bars honour Reduce Motion. With the system setting on,
    a bar no longer slides or fades — it just appears where it
    belongs. The affordance stays; only the motion goes.

Focus stops jumping

  • KiwiDesk stops believing focus reports that are not yours.
    Apps announce focus changes that are not system focus changes:
    a window re-focusing itself a second after KiwiDesk places it,
    a duplicate report landing after your next keypress, a small
    panel that takes the keyboard without bringing its app
    forward. Each one moved KiwiDesk's idea of focus off the
    window you were actually on — and at worst left every focus
    shortcut refused until you clicked a window to resync. All
    three are recognised now.
  • A window that blinks out keeps its place. Some browsers
    drop their window for half a second entering and leaving
    native fullscreen, and some apps stop reporting a window
    during fast focus changes. Both read as a close, so the window
    lost its slot and focus moved to a neighbour. Leaving a
    fullscreen video now returns you to the video.
  • Clicking KiwiDesk's own Settings window focuses it. On a
    scrolling Space, clicking another window pans Settings out of
    view — and clicking it again within two seconds did nothing at
    all.

Resizing tells you why it stopped

  • Every blocked resize draws a pill, and a drawn pill may
    sound.
    A resize press in a layout with no resizing, or on an
    axis the zone does not have, used to be cued by sound alone —
    invisible with sound off. One cue now covers every refusal.
  • The pill lands on the window that cannot move. In BSP a
    refusal named the focused window as at its minimum when a
    neighbour was the one stuck, sending you to resize the wrong
    window.
  • A window alone in its zone says so. "Nothing to divide
    here — try the other axis" and "This zone has nothing to
    divide" replace six silent cases and one message that was
    false; a one-window stack no longer shows a row of "Minimum
    window size reached" pills on a window filling the screen.
  • Two more presses now answer properly. A native full-screen
    window is refused, and says so, in every layout — it used to
    be silent in one and shove its neighbours around in another.
    And a window floating because its whole Space uses the
    floating layout now resizes like one, which until now only
    windows you had floated by hand did.

Shortcuts you can read

  • The keyboard preview answers a real question now. Hover a
    key to see every action on it, chord first, with what a
    collision costs spelled out — the red key finally says which
    two bindings collide. And the board draws the layer you are
    editing, so "is this key free here" is answered for the layer
    that will actually fire rather than for all of them at once.
  • A conflict warning names the cost, not just the collision,
    and reads macOS's live shortcut settings: a system chord you
    have turned off no longer counts as a conflict, and one you
    turned on does.
  • Swap rides ⌃⌥⌘ plus an arrow; ⇧ keeps the digits. The
    three-modifier claw for swapping is gone: ⌃⌥⌘ with an arrow
    swaps with a neighbour, ⇧ with a digit sends the window to
    that Space. Fresh installs get the new defaults; a keymap you
    edited is yours and does not move.
  • Per-Desktop shortcut rows appear once you bind one. A
    dozen unbound "Go to Desktop N" rows no longer sit in the
    Focus and Move cards on every Mac with several Desktops.
  • The shortcuts panel says when it has more to show. On a
    default install the panel is taller than its ceiling and
    scrolls, and nothing said so — the rows below the fold were
    simply not there as far as you could tell.
  • Picking an app binds it, in one press. Choosing an app for
    a shortcut no longer needs a second button afterwards, which
    is how app rules have always worked.

Settings

  • Export Log… in General ▸ Advanced. Pick a time range, save
    the file, attach it to a bug report — no terminal needed.
  • Picking an app adds its rule immediately. The separate
    "Add app rule" button is gone, and with it the half-added state
    that drew no icon.
  • Keyboard navigation got shorter and quieter. Arriving in
    an area focuses the page instead of the back chip (six presses
    fewer to the first field), a segmented control costs one Tab
    stop instead of one per segment, and the focus ring appears
    only when the keyboard asked for it — mouse clicks no longer
    draw one, the Space chip included.
  • The save pill lists the screen changes the header claims.
    Clicking it opened nothing when the only unsaved change was a
    screen setup drifting from the profile.
  • The profile card's help states the rule correctly: the
    main screen's Desktop selects the profile, and all four rungs
    of the selection ladder are there.
  • "Save as new" says screen, and speaks every language. The
    message called a screen a monitor and was missing from every
    non-English catalog.
  • Bar titles default to ten characters. The bars show window
    titles, and each item is sized from the widest, so the old
    25-character default spent the bar before you chose anything.
  • And a run of smaller fixes. The hex field in Advanced
    Colors can be clicked into, the app picker finds apps in
    subfolders and both of its surfaces answer Escape alike, the
    Space chips in Monitors show they can be dragged, a profile
    card stays marked while you point at another, and Save is
    readable in light mode while Settings is inactive.

In your language

  • Switching language now changes every label. Some lists —
    the bars' Position and Alignment pickers, the shortcut
    recorder's help — kept whichever language was live the first
    time you opened that page, so the window came back part
    English and part German.
  • Track shortcut rows read as sentences. "Move window to
    next track" was assembled from a bare "next", which five
    languages cannot inflect into a sentence; each row is now
    translated whole.
  • The shortcuts panel has one name. Everything pointing at
    it said "shortcuts panel" while the panel announced itself to
    VoiceOver as "Shortcuts reference".

What's Changed

Read more

KiwiDesk 1.1.2

Choose a tag to compare

@github-actions github-actions released this 31 Aug 23:14
94b6ea0

Highlights

Switching a layout from the menu bar and then saving in Settings
used to undo the switch — that is fixed, and the menu row that
makes a switch permanent now says what it does. BSP also picks a
new default split, which changes how untouched setups tile.

Saving in Settings stopped undoing your layout

  • Save no longer puts the old layout back. Switch a Space to
    Monocle from the menu bar, then open Settings to change a gap
    and press Save: the Space used to snap back to whatever the
    profile held, and that is what got saved — the switch was
    destroyed by saving something unrelated. Save now touches only
    what you changed in Settings, so the gap is saved and the
    Monocle switch stays on screen, still temporary until you keep
    it. Changing a Space's layout in Settings itself is a real
    edit, and that one wins.
  • The menu row is now "Keep Layout in Profile ‹name›". Same
    action, honest name: a layout switched from the menu bar is
    temporary until you keep it, which is how macOS words this
    choice elsewhere.
  • That row lights up whenever any screen is on a temporary
    layout
    , not only the screen you are looking at. It writes the
    whole profile, so it used to grey itself out while another
    screen's menu said the layout was unsaved.
  • Settings no longer narrates temporary layouts at all. The
    menu bar's "not saved to profile" line is now the single place
    a temporary layout is announced — and Revert went back to being
    just "discard my edits".

BSP splits alternately now

  • New windows alternate horizontally, then vertically, as they
    nest.
    That alternation is what most people mean by BSP; the
    old default cut each area's longer side, which read as the
    layout misbehaving rather than as a choice. Both options are
    still there, in BSP's settings and in bsp.set_strategy.
  • This changes how you tile if you never picked a strategy.
    If you did pick one — in Settings or in your config — it is
    stored and nothing moves. Fresh installs and untouched setups
    get the new default.

Floating spaces respect your bars

  • A window in a Floating space is now pushed clear of the App
    Bar and the Space Bar
    , the same as a window you floated by
    hand. It could previously sit underneath one with its title bar
    covered, and nothing ever moved it back out.

Smaller things

  • Settings shows just the version number. The build hash moved to
    kiwidesk --version, which is where support asks for it.
  • Release plumbing: the release notes and the update feed publish
    themselves again, without a hand on the wheel.

What's Changed

  • chore(site): sync release notes and feed for v1.1.1 by @github-actions[bot] in #1153
  • chore(scripts): make lint's soft file-size warnings opt-in by @hajiboy95 in #1156
  • chore(comments): trim settings and UI components to §2.8 budget (batch 6) by @hajiboy95 in #1155
  • chore(comments): trim core and settings to §2.8 budget (batch 8) by @hajiboy95 in #1159
  • chore(comments): trim core and gui components to §2.8 budget (batch 7) by @hajiboy95 in #1158
  • chore(site): bump the site-patch-and-minor group in /site with 4 updates by @dependabot[bot] in #1160
  • chore(comments): trim core and settings to §2.8 budget (batch 9) by @hajiboy95 in #1162
  • chore(comments): trim codebase to §2.8 budget (batch 10) by @hajiboy95 in #1165
  • docs(readme): add Settings screenshot and scrolling demo loop by @hajiboy95 in #1166
  • chore(bar): re-vendor app font v2.0.83 by @github-actions[bot] in #1164
  • chore(comments): trim core and gui to §2.8 budget (batch 11) by @hajiboy95 in #1167
  • docs(readme): reshoot the Settings screenshot at a narrower width by @hajiboy95 in #1180
  • chore(comments): trim core and gui to §2.8 budget (batch 12) by @hajiboy95 in #1182
  • ci: let the release sync PR start its own CI and land by @hajiboy95 in #1183
  • fix(tiling): clamp floating-MODE members clear of the bars by @hajiboy95 in #1186
  • chore(comments): trim remaining files to §2.8 budget (batch 13) by @hajiboy95 in #1185
  • fix(settings): Save commits the draft, temporary layouts stay temporary by @hajiboy95 in #1187
  • feat(layout): default the BSP split strategy to alternating by @hajiboy95 in #1188
  • feat(gui): show the semantic version only in Settings by @hajiboy95 in #1189
  • chore(release): stamp version 1.1.2 by @hajiboy95 in #1190

Full Changelog: v1.1.1...v1.1.2

KiwiDesk 1.1.1

Choose a tag to compare

@github-actions github-actions released this 30 Aug 20:22
ee3f773

Highlights

A small patch about focus: one fix for the moment your Mac
wakes, one for the keyboard path in Settings. The rest is
housekeeping — the site now names the sticky feature what
Settings names it, a localization tool refuses a half-redirect
it once obeyed silently, and a broad comment trim landed across
the Settings tree.

Waking up

  • Shortcuts work right after your Mac wakes. Waking or
    unlocking used to restore your focused window on screen —
    ring, bars, everything — while macOS quietly kept another app
    in front, so every shortcut was denied until a rescue click
    produced a real focus change. The wake restore now actually
    hands that window the focus (and when it is gone, the window
    genuinely in front), and if macOS refuses the handoff, the
    first key press heals it instead of dying.

The Settings keyboard path

  • Jumping between areas keeps the keyboard with you.
    Following a cross-reference link, or picking a search result
    that lives in another area, left keyboard focus stranded at
    the top of the window. It now lands on the ← Home chip,
    exactly as opening an area from Home always did, so Tab keeps
    walking from where you are. (As before, full keyboard access
    needs System Settings ▸ Keyboard ▸ Keyboard navigation turned
    on.)

What's Changed

  • chore(site): sync release notes and feed for v1.1.0 by @github-actions[bot] in #1124
  • feat(site): the comparison page, and the site work it surfaced (#975) by @hajiboy95 in #1128
  • docs(agents): add the §2 comment budget by @hajiboy95 in #1129
  • chore(comments): trim gui to the §2.8 budget (batch 1) by @hajiboy95 in #1131
  • chore: drop the local-gate checkbox from the PR template by @hajiboy95 in #1133
  • fix(core): pay the wake restore's focus for real by @hajiboy95 in #1135
  • ci: run the required checks on merge-group refs by @hajiboy95 in #1138
  • chore(comments): trim onboarding and settings census to §2.8 budget by @hajiboy95 in #1132
  • chore(comments): trim settings census and components (batch 3) by @hajiboy95 in #1134
  • chore(comments): trim bars and colors settings (batch 4) by @hajiboy95 in #1136
  • docs(agents): land PRs through the merge queue by @hajiboy95 in #1137
  • chore: quiet the local test gate by @hajiboy95 in #1141
  • docs(site): call sticky "Sticky", the word Settings already uses by @hajiboy95 in #1143
  • fix(localization): refuse merge-keys under any extract override by @hajiboy95 in #1142
  • chore(comments): trim settings components to §2.8 budget (batch 5) by @hajiboy95 in #1139
  • fix(gui): state a focus destination on area→area navigation by @hajiboy95 in #1144
  • docs(site): rule the dashboard-held build watch paths by @hajiboy95 in #1151
  • chore(release): stamp version 1.1.1 by @hajiboy95 in #1152

Full Changelog: v1.1.0...v1.1.1

KiwiDesk 1.1.0

Choose a tag to compare

@github-actions github-actions released this 29 Aug 18:51
de6a524

Highlights

The release where resizing a window started telling you the truth, and where the keys got out of your way. Most of what changed you will notice without looking for it. It gets more technical as you read down — and four things need a minute of your attention, marked where they come up.

Resizing, made honest

This got the most attention of anything in the release, because nearly every complaint about it turned out to be the same thing: KiwiDesk was resizing something other than what you asked, or refusing for a reason that did not exist.

  • A resize press acts on the focused window, measured from the size it is actually drawn at. Before, the first several presses could do nothing visible, or silently resize every neighbour instead.
  • Holding the chord resizes continuously, at your display's refresh rate, rather than stepping along a key-repeat timer that got slower the longer you held it.
  • A floating window grows and shrinks from both edges, keeps working when it is parked against the edge of the screen, and will not grow underneath a bar. Held resizing on a floating window now travels the whole distance you asked for — with Reduce Motion on, it used to deliver under a third of it.
  • When an app refuses to go smaller or larger, you are told on the first press. "Maximum window size reached" is a message now, in your language, instead of ten silent presses followed by the window snapping back.
  • Resizing stopped stalling. A pass that froze for up to two seconds and then jumped now runs clean; in the measured session, forty-two stalls became one.
  • Scrolling spaces stopped sliding. Resizing no longer drags the focused window toward the leading edge, a slot cannot be grown past what is drawn, and a window resting against the trailing border keeps that border.
  • Apps that fight back are handled. The Android emulator and its kind used to send tiling into an endless expand-and-snap loop about once a second. Now there is one adjustment when the window appears, and then the row settles.

A keyboard layout that gets out of the way — and how to take it up

The shipped shortcuts were re-measured against what macOS and common apps actually claim, and moved accordingly.

  • Resizing has its own layer, ⌥⌘, on digits rather than arrows — ⌥⌘1/⌥⌘2 for width, ⌥⌘4/⌥⌘5 for height. Arrows were rejected because ⌥⌘ with arrows is next and previous tab in most browsers and terminals, and those have no menu to fall back on.
  • means one thing again. Sticky moved to ⌃⌥S for everywhere and ⌃⌥P for this screen only.
  • The numeric keypad works. Keypad digits fire the same bindings as their number-row twins — so if you already have space shortcuts on ⌃⌥1 through ⌃⌥9, they start answering the keypad the moment you upgrade, with nothing to configure.
  • Worth knowing: none of the other shortcut changes reach an existing install by themselves. The shipped set is seeded only into a configuration that has no shortcuts at all, so it never overwrites anything you or your Lua wrote. If you have been using KiwiDesk, your keys are exactly where you left them.
  • Restore Defaults… is how you take them up, at the top of Settings ▸ Shortcuts. It puts back the set a fresh install would get — for your Desktops and your resize step, not a fixed list — including defaults added since you installed. Your own shortcuts are kept. The one exception is a shortcut of yours sitting on a key a default needs, which cannot stay without putting two bindings on one key; the confirmation counts those before you agree, and says so plainly when the answer is none. Settings search finds it under "restore", "defaults" or "reset".
  • The guide now teaches how to choose a shortcut of your own — what makes a chord safe, why ⌃⌥ is the quiet corner, and the one thing worth doing before you commit to a new one. In English, German and Japanese.

Reduce Motion and VoiceOver

  • Reduce Motion is honoured across Settings. Layout previews arrive instead of springing, and fifty-one animation sites that ignored the system setting now stand down with it.
  • Starting VoiceOver no longer steals your focus to a different app a few seconds later.
  • Drawer headers behave as one thing across fifteen drawers, and all of them join the VoiceOver headings rotor.

Start at login does one job now

  • The switch installs the login item and nothing else. Crash supervision used to ride along with it, unasked. It is still available, deliberately, as kiwidesk service from the command line.
  • If you relied on that supervision, turn it on explicitly after upgrading. Nothing else changes for you.
  • Turning Start at login on while KiwiDesk is running no longer steals focus every ten seconds, indefinitely.
  • The update prompt comes to the front when it is ready to install and restart, instead of waiting behind every other window where it could not be found.

KiwiDesk can move around macOS's Desktops

  • Switching Desktops and sending windows between them now works — on stock macOS, with System Integrity Protection on. This was listed as impossible for most of KiwiDesk's life. Two new commands, focus_desktop and move_to_desktop, and the Space Bar and shortcut editor speak them like anything else.
  • A switch KiwiDesk drives performs the real transition, instead of leaving two Desktops drawn on top of each other for a moment.
  • Moving a window to another Desktop and following it lands your keyboard focus on that window, every time, rather than most of the time.
  • A window sent to a Desktop on another screen stays there instead of springing back to where it came from.
  • Switching Desktops settles immediately. It used to take five to ten seconds to stop rearranging, even switching to an empty one.

Scripting

  • Every command describes itself. kiwidesk list_commands now documents all 262 — group, typed arguments, and a one-line summary each. kiwidesk help <command> works, and list_commands <group> filters instead of returning everything.
  • Output is readable at a terminal and unchanged in a pipe. Pretty-printed when you are looking at it, the same compact line when a script is reading it. Keys are sorted either way.
  • One rename needs your hand: animations.set_scroll_speed is now animations.set_scroll_duration. It always was the duration — raising it made scrolling slower — and the setting is renamed in the interface to match. Your stored configuration is migrated for you. Lua is not, on purpose: if your init.lua or one of your keybindings calls set_scroll_speed, it will fail loudly at the moment you press it, which is better than failing silently. Rewrite it once and it is done.

Also

  • New installs open in Scrolling on every screen but the smallest, with a deliberate slot width instead of an automatic one. Existing setups are untouched.
  • One word per concept, in every language. Width, floating, the Track unit, and "make it bigger" each had two words in at least one language and now have one. Japanese and Korean can now tell Go to Space from Move to Space, and German and Korean can tell the shortcuts a profile inherits from the ones KiwiDesk ships.
  • The Restore Defaults confirmation speaks your language. It was English everywhere but English — at the one moment it is telling you what you are about to lose.
  • Your profiles move to a newer format the first time this version saves one, which means 1.0.1 cannot read them afterwards. Nothing to worry about: kiwis only grow, they never shrink back. 🥝

What's Changed

  • chore(site): sync release notes and feed for v1.0.1 by @github-actions[bot] in #999
  • chore(site): sync release notes and feed for v1.0.1 by @github-actions[bot] in #1001
  • chore: weekly dependency PRs, and the VoiceOver limitation from #961 by @hajiboy95 in #993
  • fix(ci): remove prerelease flag from release draft creation by @hajiboy95 in #1002
  • ci: bump actions/upload-artifact from 6 to 7 by @dependabot[bot] in #1005
  • fix(i18n): remove obsolete vat section from imprint by @hajiboy95 in #1006
  • ci: bump actions/setup-node from 6 to 7 by @dependabot[bot] in #1004
  • feat(commands): drive macOS Desktops — focus_desktop and move_to_desktop by @hajiboy95 in #1008
  • fix(state): a window keeps the Desktop it was sent to across screens (#1010) by @hajiboy95 in #1012
  • fix(updates): bring the install-and-restart prompt forward by @hajiboy95 in #1014
  • ci: bump actions/checkout from 6 to 7 by @dependabot[bot] in #1003
  • fix(test): await the dwell and settle timelines instead of polling a clock by @hajiboy95 in #1024
  • feat(profiles): a fresh install opens in Scrolling on every screen but the smallest by @hajiboy95 in #1025
  • fix(gui): a Settings drawer header reads as one by @hajiboy95 in #1026
  • test: a scanning guard pins the shape, never the value by @hajiboy95 in #1027
  • feat(onboarding): the tour names the keys it teaches, and the app points at the guide by @hajiboy95 in #1029
  • fix(commands): perform the Desktop switch's missing transition by @hajiboy95 in #1031
  • chore(github): let the org's default carry the sponsor button by @hajiboy95 in https://github.com/KiwiCanopy/KiwiDes...
Read more

KiwiDesk 1.0.1

Choose a tag to compare

@github-actions github-actions released this 25 Aug 11:26
555d8a9

Highlights

A small release with one thing to know if you script KiwiDesk. Nothing about how your windows behave changes.

One word for macOS Desktops, everywhere

  • native_space is now desktop on the wire. The copy has said Desktop for macOS's desktops and Space for KiwiDesk's own since 0.9.7; the commands and events now say the same. If your init.lua binds profiles to Desktops, or a script listens for the switch event, update the spelling — the old names are gone, not aliased: KiwiDesk.bind_profile_to_native_space(n, profile) is now KiwiDesk.bind_profile_to_desktop(n, profile), the native_space_change event is now desktop_change, and kiwidesk get_state reports desktop instead of native_space.
  • Bindings made in the Settings window need nothing from you. They live in KiwiDesk's own settings file, not in init.lua, and keep working as they are.

What's Changed

  • chore(site): sync release notes and feed for v1.0.0 by @github-actions[bot] in #981
  • feat(site): the changelog's download says which version it hands you by @hajiboy95 in #982
  • feat(site): retire the beta framing now that 1.0 has shipped by @hajiboy95 in #983
  • feat(docs): add GitHub Sponsors badge and refine version dot glow by @hajiboy95 in #984
  • fix(test): await reveal timelines instead of polling a clock by @hajiboy95 in #986
  • chore(site): refresh the npm tree and clear its four advisories by @hajiboy95 in #987
  • feat(os): add the WMBridge wrapper for SkyLight's operation classes by @hajiboy95 in #990
  • refactor: say Desktop on the whole macOS-Desktop wire by @hajiboy95 in #992
  • chore(release): stamp version 1.0.1 by @hajiboy95 in #995

Full Changelog: v1.0.0...v1.0.1

KiwiDesk 1.0.0

Choose a tag to compare

@github-actions github-actions released this 24 Aug 21:25
14ff44d

Highlights

The Kiwi is ripe. KiwiDesk is 1.0. 🥝

Ready is the headline

  • 1.0 is not a feature dump, it is a verdict. Seven layouts, Lua configuration, profiles, per-Desktop setups, the App and Space Bars, and a Settings window you can drive end to end from the keyboard — all of it has been carrying real desks through the beta. Nothing about how your windows behave changes today, and that is exactly what a 1.0 should feel like: the boring release, arrived at on purpose.

Just download it already

  • Homebrew is no longer the price of entry. Take the signed, notarized disk image from the KiwiDesk site, drag the kiwi into your Applications folder, and you are done. No terminal, no tap, no incantation.
  • Same app whichever way you get it. Homebrew keeps one perk — it puts the kiwidesk command on your PATH — and from then on KiwiDesk quietly keeps itself up to date either way.

Also

  • The site now argues for KiwiDesk the way the people using it do, by naming the everyday Mac annoyances it takes off your hands. It also says out loud that Settings can be driven entirely by VoiceOver and the keyboard, and the release-notes page no longer sprawls to the window edge.

What's Changed

  • chore(site): sync release notes and feed for v0.9.10 by @github-actions[bot] in #974
  • feat(site): promote the direct download and argue from the papercuts (#904, #962, #970, #971) by @hajiboy95 in #976
  • chore(release): stamp version 1.0.0 by @hajiboy95 in #980

Full Changelog: v0.9.10...v1.0.0