Loading video...

Video Failed to Load

Go Home

Work-in-progress: a new split layout framework for nearly all Apple platforms (macOS, iOS, etc.). A mix of SwiftUI and raw CoreAnimation. The goal is "every frame perfect" animation. Still very wip, but getting there! Goal is to bring it back to Ghostty eventually.

341,610 views • 3 months ago •via X (Twitter)

57 Comments

maria's profile picture
maria3 months ago

all of this because macos doesnt let you do window management

Jake 🎉's profile picture
Jake 🎉3 months ago

have you checked out BonSplit?

Mitchell Hashimoto's profile picture
Mitchell Hashimoto3 months ago

Al worked on this with me :) @almonk

Mitchell Hashimoto's profile picture
Mitchell Hashimoto3 months ago

@almonk To be clear, BonSplit is awesome. This lib serves a slight diff need, simpler in some ways (no tabs) and more complex in others (multi platform).

moreward (moreboxed.com)'s profile picture
moreward (moreboxed.com)3 months ago

Looks very nice. Really smooth. But when you said "tmux" experiment, I was hoping for a "keep terminal running" feature. Not the panes part 😬

Mitchell Hashimoto's profile picture
Mitchell Hashimoto3 months ago

Haha fear not

Mark's profile picture
Mark3 months ago

@morew4rd Unless on Linux? Or will Linux get some love too

Mitchell Hashimoto's profile picture
Mitchell Hashimoto3 months ago

@morew4rd Web client for Linux initially or plop down into a TUI in ghostty or wherever. Not as feature rich

Mark's profile picture
Mark3 months ago

@morew4rd Ok, how come not as feature rich? Is Linux a pita to develop these things on? I genuinely don't know

Mitchell Hashimoto's profile picture
Mitchell Hashimoto3 months ago

@morew4rd Terminals just support the features I want

Junsong Li's profile picture
Junsong Li3 months ago

Oh no, not factorial spiral again. Instead of trying to be hyprland, I believe trying to be niri makes more sense in window management. Niri + the native overview is way more productive than the factorial spiral window management in my day to day experience.

Mitchell Hashimoto's profile picture
Mitchell Hashimoto3 months ago

Well first this is macOS

Junsong Li's profile picture
Junsong Li3 months ago

My point is this: creating a new window using a split layout sacrifices the wrong thing. I always find that a half-split weakens the content in the old window in some way: creating a bottom window makes the existing one jump, sometimes pushing content out of the viewport. Creating a right window causes the text in the left window to wrap awkwardly. When the user creates a new window, the existing window’s size shouldn’t change at all. Don’t make the user wonder whether the view of the existing window will be compressed. It simply shouldn’t. IMO, this is where Niri makes a much better design choice: none of the existing windows are squeezed/resized, so my content stays exactly the same.

Reza Karegaran's profile picture
Reza Karegaran3 months ago

is this your tmux experiment?

Mitchell Hashimoto's profile picture
Mitchell Hashimoto3 months ago

This is just a library, but it will be used for the native app for my multiplexer yes.

Reza Karegaran's profile picture
Reza Karegaran3 months ago

🙌

Jakub Kozłowski's profile picture
Jakub Kozłowski3 months ago

New variant of 2048 dropped

Josh's profile picture
Josh3 months ago

Can we save these so they can be restored?

Mitchell Hashimoto's profile picture
Mitchell Hashimoto3 months ago

That's a library user concern. The actual split layout is a caller-provided immutable data structure they can choose to make Codable (the Apple encoding protocol) if they want.

Josh's profile picture
Josh3 months ago

That is actually a better answer than I was hoping for. I use this to manage my tmux sessions and I think I can swap tmux out for your codable protocol.

Sebastien-console_buche 🪵's profile picture
Sebastien-console_buche 🪵3 months ago

I NEED THIS. Actually, I need this in my terminal, but I also need this as a proper window manager on MacOS. The Hyprland vibe is perfect.

Moody's profile picture
Moody3 months ago

Tree data structure?

Mitchell Hashimoto's profile picture
Mitchell Hashimoto3 months ago

Tree data structure but rasterized down to a 2D absolute layout so the view hierarchy is actually flat.

Ajey Gore's profile picture
Ajey Gore3 months ago

Love it.

Dominik Roszkowski's profile picture
Dominik Roszkowski3 months ago

Really cool! It's getting more interesting when you add multiple windows and the ability to drag things out and in

Steve Trefethen's profile picture
Steve Trefethen3 months ago

We built demos _exactly_ like this for/in Delphi in something like 2007 if not before that. I find it funny how often software repeats itself. The IDE and VCL had docking that worked just like this.

Mitchell Hashimoto's profile picture
Mitchell Hashimoto3 months ago

The concept is ancient. I’ve been shopping production split layouts for years myself. The new part here is the focus on every frame perfect animations.

Andy Matthews's profile picture
Andy Matthews3 months ago

I’ve been using a Mac app that does this called Divvy for like 10+ years. It’s one of the first things in install on any new Mac.

Mitchell Hashimoto's profile picture
Mitchell Hashimoto3 months ago

Yeah divvy is great. This isn’t a window manager. This is a reusable embedded lib for apps. Also not a new concept (I’ve shipped a diff one for 3 years to millions of daily users. This is the 6th I’ve built across platforms.). The newness is the every frame perfect animation goal

Adam's profile picture
Adam3 months ago

very cool

Evert Junior's profile picture
Evert Junior3 months ago

At that point just use @maestriapp

Matthew Sanabria's profile picture
Matthew Sanabria3 months ago

Can the panes only run processes that this application launched? I see how this would be useful in Ghostty but I want to put all my macOS windows in there and have some tiling window manager experience.

Maciej Gajewski's profile picture
Maciej Gajewski3 months ago

We had responsive GUIs in the 2000s. Now, 25 years later, this became a lost technology, living only as artisanal hobby projects.

Christian Alares's profile picture
Christian Alares3 months ago

This is almost identical as how panes work in

Hieu 🚀's profile picture
Hieu 🚀3 months ago

You know you'll never use it but this is cool as hell

Raffi's profile picture
Raffi3 months ago

🔥

Kevin's profile picture
Kevin3 months ago

Add tabs in panes and you've got me.

Vito Botta's profile picture
Vito Botta3 months ago

Every-frame-perfect animation on Apple platforms is painful. SwiftUI still has rough edges with scroll performance.

Mitchell Hashimoto's profile picture
Mitchell Hashimoto3 months ago

Ironically pretty darn easy with plain CA though

vish's profile picture
vish3 months ago

Is this going to come down to libghostty?

Mitchell Hashimoto's profile picture
Mitchell Hashimoto3 months ago

No that’s not UI

linkarzu's profile picture
linkarzu3 months ago

macOS 4 life 💪

Blacktop's profile picture
Blacktop3 months ago

🥀for tmux (am so pump to have a better solution)

Mitchell Hashimoto's profile picture
Mitchell Hashimoto3 months ago

well, this is also the split framework my multiplexer is going to use... (it works in TUI too, but there is a native app, and web app, and mobile app...)

Landon's profile picture
Landon3 months ago

This is so dope

Toby 🇪🇺🇺🇦's profile picture
Toby 🇪🇺🇺🇦3 months ago

Okay, this is awesome. I love that you're making the things you create into proper frameworks. Allows all of us to reuse and potentially also feed back improvements ofc.

Sam Kerr's profile picture
Sam Kerr3 months ago

Will this be just for ghostty or can we build other apps on top of it? I was looking for something like this a while ago and ended up having to do something custom

Mitchell Hashimoto's profile picture
Mitchell Hashimoto3 months ago

Generic framework

spacy's profile picture
spacy3 months ago

any chance we'll get background sessions bascially asking for gmux

PhaseOne(Atin)'s profile picture
PhaseOne(Atin)3 months ago

Wow, would love to collab or use this with c11, our agent optimized terminal multiplexer

Schappi's profile picture
Schappi3 months ago

I got inspired and made a JS version

Jihoon's profile picture
Jihoon3 months ago

Nice! We need a better cmux

Seanghay's profile picture
Seanghay3 months ago

Looks nice

rusa's profile picture
rusa1 month ago

the every-frame-perfect goal is exactly why you drop out of swiftui for the transitions. its layout pass can re-measure mid-animation and you get a hitch you can't chase down. driving CA directly is the only way to own the timeline.

asd's profile picture
asd3 months ago

nice! suggestion: would be good to include a reduce motion or no animation setting

Mitchell Hashimoto's profile picture
Mitchell Hashimoto3 months ago

thats a macOS setting. if you set reduce motion on macOS it doesn't animate at all, we respect it.

asd's profile picture
asd3 months ago

perfect!

Related Videos