Show HN: Bike – macOS Native Outliner (hogbaysoftware.com)

513 points by jessegrosjean ↗ HN
Bike’s most original feature is the “fluid” text editing. Lots of text editors have animated some interactions (cursor movement, insert newline, etc), but I think Bike is the first designed from the ground up to support fluid editing.

Give it a try, it feels different. (movie on home page if you don't have Mac)

Other Features:

• In text mode Bike works like a normal text editor. In outline mode rows are constrained to outline hierarchy.

• .bike file format is HTML subset, so files are easy to parse and manipulate. Bike also supports .opml and .txt.

• Scriptable via AppleScript. Javascript plugin API also expected in future, though no timing on that.

• Architecture needed to support fluid editing also makes Bike faster/more scalable than most (all?) outliners and many text editors. I test performance using the Moby Dick Workout[^1].

Implementation Notes:

• View is built using CALayers[^2].

• Animations are performed by Core animation and Motion[^3] lib.

• View performance is determined by visible text, not document size.

Model representation is interesting in that it’s just a flat list of rows. Each row has a `level` property, outline structure is determined dynamically. View implementation requires that each row has a unique ID.

I’m using OrderedDictionary from Swift Collections[^4] to store rows. This is Bike’s performance bottleneck for large outlines. Eventually I may change to augmented b+tree and then should be able to work with gigabytes worth of outline. That will be fun, but not sure it’s actually needed. Already probably fast enough for 99% of use cases as is.

Hope you find Bike interesting. I’m happy to answer any questions.

[^1]: https://www.hogbaysoftware.com/posts/moby-dick-workout/

[^2]: https://developer.apple.com/documentation/quartzcore/calayer

[^3]: https://github.com/b3ll/Motion

[^4]: https://github.com/apple/swift-collections

242 comments

[ 3.8 ms ] story [ 260 ms ] thread
If this supported multi-user synchronous editing Google-docs style I'd be thrilled.
Sorry that's not likely. I'm a single developer, not ready to run a server. More likely (though still have many more basic features on roadmap) is automatic merging support when a Bike file is stored on something like Dropbox.

In fact that would be a pretty great service (for someone else to develop). "Dropbox", but for strutted data (xml, json, whatever) that knows how to merge trees and make use if unique ids. Maybe it wouldn't work, each merge situation needs a special case solution. But for Bike files at least I think it might work pretty well.

Did you have a look at [y-js](https://github.com/yjs/yjs)? They claim to be suitable for p2p collaborative editing and they have bindings for other languages as well.
Which other languages?
I think you could encode a “shelf” last-write-wins CRDT into your HTML using data attributes without exploding your file size. You would need to add a data-version attribute, and if you want to support hand-editing or editing by programs that don’t understand the CRDT, a CRC32 or other parity as data-parity so your loader can tell when a user might have edited a row without updating data-version.

Shelf is really simple - the JS implementation is tiny (https://github.com/dglittle/shelf) and a walkthrough of the algorithm here is a quick read: https://bartoszsypytkowski.com/shelf-crdt/amp/

It wouldn’t handle character level sync - but would let you merge documents at a rows/items/blocks level.

Thanks for the tip, I'll keep a reference to this. I will say that it's still unlikely that I tackle this myself anytime soon. I'm a single programmer, and not all that fast at that. Lots of more basic stuff to do on Bike, and iOS version... going to keep me busy for a while.
Simplenote survived the Moby Dick workout. It lags a little after paste, and hangs momentarily on redo. It may work better with more structured data. (I used the markdown file in the webapp; didn't test native/mobile versions.)

So https://www.simperium.com/overview/ might be a low-effort option to add syncing without managing your own server.

> - Data transparently moves across mobile, web, and desktop versions of your app

> - Your users can read and write data even when they're offline

> - Multiple users can collaborate with the same data at the same time

> Simperium persists your data for you in buckets... Every Simperium object is JSON data that is stored in a bucket.

> Simperium does some basic conflict resolution for you automatically... When two edits are made for the same field though, Simperium supports automatic resolution for strings (currently) and will merge the two edits together.

First, I use and love TaskPaper so I'm interested in what you've got going on. But on its surface, I don't see the differentiation between the two products right now other than Bike having slicker rendering and TaskPaper having more utility. It seems like TaskPaper is a competent outliner that supports focus and other features just fine. Can you comment to what the goals are that separate them?
I've written about Bike's relationship to TaskPaper here:

https://support.hogbaysoftware.com/t/how-does-bike-relate-to...

I think core summary is:

1. Wanted to control own text editor. Building off NSTextView was limiting 2. Wanted to use structured document format. Plain text was limiting

Interesting, thanks. It does sound like there's a lot to build on there so I'll be interested in seeing where it goes. Some of my best "productivity" memories are with the "free" copy of OmniOutliner that came on my first Macs, and I think you have the bones to bring that to the 2020s.
Workflowy and Logseq already provide these features. Am I missing something?
As the post title says, it's a macOS native app, focusing on fluidity.
Mac native I get. But what is "fluidity"? The other two are just as "fluid".
"fluidity" is a made up marketing term (by me) to mean animation.

But I think this animation is important. Bike is a "tool for thought". I think the way that it "feels/animation" is important. Bike's build built from the ground up to support this. Check out the movie or better yet try the download. Typing feels a bit smoother, text slides into place.

And yes it can be turned off. And no it doesn't slow you down, animations are canceled if you type again before they finish.

> text slides into place

I don't have a Mac to try this on, but slides into place sounds like what Microsoft does in Outlook and I ended up turning it off.

Maybe it's not the same thing though. In Outlook (and some other Office programs) as you type the text seems to appear a little more slowly and the cursor glides to the right. To me, it always felt laggy and so I turned it off.

They both provide many great features, but Bike provides some unique features too. I think they are pretty well listed on Bike's home page (features), but I'll add some notes here:

1. "Fluid" (smoothly animated) editing. You could argue it's not important, but this is something new and unique to Bike. Bike is a "tool for thought". I think how the app feels is an important aspect.

2. macOS native app, of course this is a plus and minus. But if you are on a Mac Bike will generally us a lot less resources then those apps and integrate better with the rest of the system.

3. Local files in open formats. Logseq has this of Course, but I think there's something pretty nice about having your outline just be simple HTML. Easy to parse, easy to work with, should be able to view and make sense of as long as web's around.

4. Faster. Bike is designed to work on somewhat big outlines. Moby Dick has been my test file. It opens instantly. I've just pasted that into Logseq and my computer is working hard a few minutes later. Not sure how workflowy does because it puts me over quotas.

Bike has a pretty unique foundation compared to other outliner apps. It's also missing a lot of higher level features that I plan to build out over time.

The one user interface element I'd suggest is adding the ability to promote/demote nodes w/ the right-click menu when interacting w/ nodes (you could show the keyboard shortcut then to make it discoverable) --- also an option to delete (maybe only if empty?)

Also, when dragging-dropping, I found it way too easy to make empty nodes which was disconcerting.

I'm in Dynalist camp!
Does Dynalist support OPML? Nice thing about OPML is you can be in all camps at once. Or use Dynalist as iOS solution. I'm still looking for best outliner to recommend for Bike files on iOS until I get my act together and make iOS version of Bike.
I honestly don't understand comments like this, you know it's ok to competition in this space?
Counterpoint, I very much enjoy when commenters surface competitors, because it makes the creator summarize exactly what distinguishes their product.
For sure, I have nothing against competition. Usually though, there are some really unique product features which sometimes get lost in the marketing speak, so if there is a product that I am interested in, like this one, I like to verify that since I didn't quite get that from the product page.
Yeah, I read a dismissive tone in your comment but that's on me, your question prompted some good discussion.
I've looked at (and discarded) Workflowy before. I hadn't heard of Logseq before, so thank you for that.

However, I am looking at it now, and while it's a nice little app, it's not an outliner and I am not sure if I am going to be able to find any use for it.

Outliners are explained here: http://outliners.scripting.com/

Why are you comparing Logseq to one?

Nice!

Do you think you could add support for pandoc to export to other formats and import things?

Another option --- possible to set it up so that each node is a text file (or other file format, see pandoc above) and they are grouped using file directories? The nifty Tombo notepad worked thus, and I found it really nice for keeping notes --- for bonus points, multiple files in a directory which have the same name would show as a single node, but have a toggle at the top to select which file extension one is viewing, w/ an option for "all" which expands them so that one can see all of them.

> Do you think you could add support for pandoc to export to other formats and import things?

Maybe, but not likely soon. Bike does already provide read/write support for .bike (html subset), .opml, and .txt. I think best route is to work from those file formats.

> Another option --- possible to set it up so that each node is a text file (or other file format, see pandoc above) and they are grouped using file directories?

I've long wanted to try something like that. It would be very fun, but I don't expect Bike will do this.

Well, you could just work up a pandoc file to get to/from the .bike format, then you'd get it all by supporting pandoc.

If you do the Tombo.exe type thing, please let me know --- I'd be delighted to have something like that on MacOS.

Why would I buy this over Obsidian or Logseq, both of which are free and support more platforms?
If you want a super-fast, Mac-native quality app.
It's super-fast, and Mac native, but quite basic.
For many of us, that's a positive.
Could be, for not for $37.

There are other, equally basic for $0 or $10.

None equally integrated into the macOS system for that price though. Omnioutliner (the typical go-to native Mac outliner) is more than double.
Bike is usable forever (opening, editing, saving) without paying anything.

You only need to pay if you want to change some of the settings or use applescripts.

If you need to run it on something other than a Mac, you wouldn't.
Because you're looking for a native application which is a classic outliner. The apps you mentioned are much more than outliners.
I think the quote on the app page says it all: bikes, not aircraft carriers. I use Obsidian, and really like it, but it’s an aircraft carrier. Bike is, well, a bike.

I might, after using it, find that it’s just too simple and I need an aircraft carrier after all, but my impression right now is that the Obsidian-vs-Bike comparison is not 1:1 enough to be fair.

but it’s an aircraft carrier.

A cargo bike perhaps, but if you call Obsidian an aircraft carrier already then there aren't much metaphores left for software which does way more and is (feels) slower than Obsidian.

Very cool and congrats on what you’ve built! This is something I’ve been looking for. Any plans to do iCloud syncing and maybe a mobile app?
I think basic iCloud syncing between Macs should already work, just as part of the fact that Bike saves your outlines to some Mac OS file (not database). I know I need to do iOS support, as long as I stay financially viable I will do iOS support. But I still need to work on a few more basics in the macOS app first.

Bike will also read/write .opml files. You should be able to share with iOS outliner that way I think.

Very well done. An iOS app would be great, since people often do outlining/thinking in the nature.
Are there any limits to the unlicensed mode? Is it a shareware or more in line with Sublime Text style?
There are some editor preferences that need a license and AppleScript support requires a license. Going forward I expect most new features will also require a license. For example I hope to add rich text support next and that will require a license. (same license will unlock all new features)
This is great. It feels very fast, focused, native, and lightweight like all of HogBay's offerings.

Is there any way to change the font? As a developer, non-monospace fonts feel foreign for composing text.

Thanks, sorry not yet font option. I expect to add TaskPaper like stylesheets in the medium future, then there will be many style options.
A simple font selector would be nice. I have some seriously impaired vision w/o correction and monospaced fonts really help when I have to look at a screen that way.

That and ability to zoom in/out or increase/decrease font size.

Note that Bike does support changing font size already.

I'm getting a lot of request for also adding changing the underlying font. Will likely add that sooner then later now since lots of people seem to need.

Finally! So many outliners think of each node as a separate text field and add node movements on top. This one gets it. Great work, Jesse!
Thanks, that's also a pretty key aspect of Bike. Maybe more important than "fluid animation", but I expect hyping up the fluid animation will get more clicks and people can discover the unconstrained text editor after using it.
(comment deleted)
This is a great outliner. I'm quite impressed by how fluid it is. Great work!

quick question: why you chose to go with HTML instead of making OPML the default file format? I'm not judging, I'm just curious.

I want more structure in the file format. OPML is perfect for plain text outliners. But if you want to support rich text then you need to encode the HTML as plain text. This means it's all of the sudden harder to process with web tools like xpath.

Also (not sure this will happen, but I plan to try) I expect to add different node types. For example right now every node is a paragraph. In future might have ... A HEADING (innovation I know). Again that maps really well to HTML, not as well to OPML.

Plus I just like the fact that .bike files are HTML. Makes me confident that they will live and be readable far into the future.

Have you considered using the org format? I'm not saying it'll be good (I've not seen an implementation outside emacs that really gets it) but org-mode has been the best outliner I've personally used.
I haven't looked too much into it. If someone really wanted it and was motivated to help write I would (might, contact me first) support, but generally the existing formats are what I will focus on.
Why not to use markdown formatting?

For example, Dynalist use this idea for their files

And node itself is heading, while when they need paragraph with heading they create _note="" attribute into <outline> element

Markdown is great and I build another app, FoldingText, around it.

But for my own use I over time realized that was a mistake. All the parsing and formatting adds complexity. I think rich text (which to be clear Bike does not yet have, though I will add soon) is a simpler way to work from user perspective. Just issue commands instead of remember and see formatting rules. It's cleaner and simpler for my uses.

I understand, thanks for sharing. I've seen some outliners using node attributes to change how the content is interpreted in OPML and thus being able to use them for things beyond plain-text. I'm quite partial to OPML, but HTML is cool too and easier to reuse.

Anyway, congratulations on the impressive first public release. The more outliners the better in my opinion.

Wow - this so closely aligns with how I already think and organize my thoughts with notes. Definitely going to give it a try. Beautiful and fun demo video too.
Off topic and meta to HN: I had no idea you could do both a URL and a text submission, is this a recent change?

I think this format is fantastic for Show HN threads.

I believe this changed a few months ago or so, and it's only available for Show HN submissions afaik. It's a small change but definitely a great improvement over the old way where you'd post a link and then add a comment.
(comment deleted)
I like that you described some of the underlying APIs you used and picked something to try and do well, and it seems like you did. I also like macOS native software.

I do struggle to understand the value proposition though. I've been using Bear for outlining, admittedly smallish lists. It's macOS native, supports things like pasting in images, video, markdown, checkboxes, etc.. and is supported by a tiny subscription fee or free. I've never run into performance problems.

Some people just want to work on massive outlines with either text or links and nothing else, move those list items around frequently, and to those people $30 might be cheap. As a product it seems tricky to me, but I'd love to hear from anyone who's the perfect customer, and how this hits the mark for you. As in, what the hell do you plan day-to-day?

Also I quite like the icon, and the nature of it being incredibly simple. In a sense, it reminds me of the first version of IA Writer.

I think Bike is more "tool for thought" than it is tool for notes. It's more like a text editor with some magic features, then it is like a directory of text files.

So value proposition... It's a unique surface for your ideas. The way that it "feels" is important and different than any other app. If that helps you think then Bike might be fore you.

In another comment I said Fluid = Animation... and it does, but there's another aspect of fluid with Bike. If you try most any outliner there are pretty rigid tools. A little hard to explain, but they don't feel "fluid" like a text editor. There are limits and constraints. Bike is different in that it has all the capabilities of an outliner, but it also has all the freedom of a text editor. You can select over multiple lines, cursor moves like a text editor.

Not sure that I've explained that last bit well... but try a good outliner like Workflowy. Then try Bike, beyond the animations (they can be turned off in preferences) Bikes core editing commands feel different.

Any chance you’ll be releasing this on SetApp too (like TaskPaper)?
Maybe, I'll have to see how it goes. My main goal is to sell enough copies so I can keep working on it. Last few years I've had to spend a bunch of time contracting. Hoping this will get me back to full time independent.
This looks cool. I just started using MindNode yesterday [0] which is a similar tool (although it takes a very different approach - it's more visual). I wasn't sure of the effectiveness of these sort of tools as I usually just use text files + Notability sketches but I have to say they are very useful in helping to structure thoughts better. I'm interested to try this.

[0] https://www.mindnode.com/

It would be interesting to see MindNode approach applied to PKM-style backlinks like in Reflect [1]. So not only visualize connections between pages, but also the outline inside each page.

[1] https://reflect.app

How does Reflect compare to Noteplan 3? They both look similar.
Nice think about Mindnode and Bike is copy/paste between the two works quite well.
Bonus is that Mindnode has a built in outliner view as well. I use Mindnode for this type of thing 99% of the time.
Another long time MindNode user here. I know the nested lists and map views are essentially two visualizations of the same structured data but my brain just finds the maps less thought-constraining. I end up with more creative paths in map view when I use it to plan.

Horses for courses I guess.

Bike looks neat though.

I'm generally in agreement, but when I need to share something, the outline tends to be easiest to share with others. I'm really happy it's there. Maps for me, outline for others.
Oh cool, I've been looking for a mindmap app. Oh wait - it is a subscription? Why? That makes zero sense.

<spews out vitriol>

Ah I didn't realise. I have it through SetApp, which itself is a subscription, albeit an easier subscription to swallow as you get access to a number of great apps.
Yup - without SetApp there are a number of apps I wouldn't otherwise be able to justify spending on individually; but as a group I get more than enough value.

It's a tough balance. Software doesn't age like fine wine sitting on a shelf - it lives in a dynamic environment. It's more akin to produce that will rot over time. Even if no new features are added, it still requires maintenance - by someone.

While I’m sympathetic to that, I’ve (somewhat) come around on the notion of “subscription apps” if the developers are responsible with it. I’ve found that in most cases, new features that would probably be held for major version releases (e.g., “this is a feature that would entice you to pay for the upgrade”) just come out when they’re ready; it’s essentially shifting the app to a rolling release model. The traditional commercial model of “buy the new major version and get free updates until the next major version that makes you buy it again, hopefully at a discount” does always give you the option of not upgrading if you don’t want the new features, to be sure, but if you are a regular user and tend to buy upgrades as they come out, the price difference tends to be minimal.

Having said that, I’m not sure a subscription model makes sense for an app like MindNode, since I’d bet a majority of its users only work on mind maps sporadically That’s conjecture on my part, of course, and I could be absolutely wrong, but I suspect people who do everything with mind maps are fairly few and far between. Paying annually for Ulysses, a writing app I really do use every day, is one thing; paying for MindNode, which I use maybe once a quarter, is a big ask.

Yes, sporadic use is a major issue on top of the fact that this is not SaaS and nothing lives in the cloud (which of course I don't want of a document creation tool anyway).

I am all for layers of features that cost money to unlock, but never ever ever on a subscription basis. It's like every developer out there heard that SaaS is where the money is at and decided that applied to their project out of dogma rather than a well reasoned business case.

I've been using the free version for years. Never needed any of the premium features to create a useful mindmap.
I will never invest my time into an app that I might need to pay for later if paying for it will require a subscription and it is not an SaaS or cloud based app.
I've been refraining myself to upgrade to MacOSX 11 in order to not mess with my dev environment. Are you planning to release it for MaxOSX 10.14 or lower?
Sorry I don't. So much still to do on Bike, I think my time is better spent building up the app feature set.
Please do at least put the minimum required version on the homepage (maybe in small text below the "Download" button or something).
Is this available on the App Store ? (Not a super big deal if not. Just like to manage all my subscriptions/purchases in one place. So makes updating easier along with the privacy report that makes recommending to friends easier)
It is available here:

https://apps.apple.com/us/app/bike-outliner/id1588292384?mt=...

Mac App Store version is subscription based. I know many people don't like that, that's why my direct download version is not subscription based... but for Mac App Store upgrades are a pain/impossible. So subscription.

This is excellent . When I searched for it on the App Store via “bike” I was unable to find it. I’ll subscribe if it means you can maybe buy App Store ads for keywords like bike for better visibility.
Yeah, Bike's not a very good name for searches, but it's a good name for what the app intends to be.
Yeah, I wouldn’t have considered this for a second if it was subscription-only. The pay-once-and-pay-for-upgrades model is very fair; I’d impulse-buy something for $30 once, but I don’t impulse-buy recurring payments.

This is a very cool idea. Might make note-taking a lot easier. I’m looking forward to trying it out.

Congratulations on the release! It’s cool to see more outliners with multi-item text selection. The “fluid” animations look really delightful — I’m jealous! I know you’ve shared some details about the animation implementation, but I’m curious about how much system stuff you take advantage of. Is your view accessible through VoiceOver? What parts of the Cocoa text system do you use (or, what do you use instead for layout and shaping)? (https://developer.apple.com/library/archive/documentation/Te...)

I think you started working on this around the time I was working on multi-block text selection in Notion. I remember seeing a preview tweet in a Andy Matuschak thread and thinking “great minds!”. When I started working on it, I was so surprised that no outliner I tested had multi-item text selection! It’s a unique fusion. I’m curious about how you handled deletions across different indent levels… Do you know of any other outliners with it besides Bike and Notion?

Thanks!

Bike's editor is pretty much:

OutlinerLayer RowLayers LineFragmentLayers

I use CoreText to line break and render into each LineFragmentLayer. A whole new level of performance is possible if I knew more metal/opengl, but right now rendering text on CPU and sending as line fragments to CoreAnimation.

> Do you know of any other outliners with it besides Bike and Notion?

It's hard to define "outliner". This has been a main feature of TaskPaper for a long time... but TaskPaper is maybe a bit more "text editor" than outliner. Also tools like orgmode and probably lots more are pretty much outliners and also have all text editor features.

But yeah, for tools that feel more like an outliner it's not a common feature. In particular Bike even allows you too over indent and movies lines around without moving children. I think that's pretty unique, and goes together with multiline selection in Bike's case.

I imagine then you would had to reimplement behaviour for text selection from scratch? Impressive stuff!
Yes, all the basic needed to be implemented. Impressive or dumb or maybe just persistent.
I watched the movie on the linked website, but I really don't get what "fluid" editing is supposed to be and what problem it solves? (I've been using OmniOutliner for years and never missed something like described there)
If you don't see how that's fluid and why it's valuable then that feature isn't for you. But it's certainly unquestionably fluid unlike a lot of other trash apps.
Not recognizing what the word is supposed to mean in this context doesn't imply any of those things.
It most certainly does, lol. There's a lot of programmers who have literally zero design aesthetic. I bet 99% of the people who don't understand what "fluid" means in this context fall into that category. Anyone with even a remote sense of aesthetics and design will immediately recognize the fluidness of the navigation/animation/flow
What a great non answer
I made a tiny screencast showing the big difference: https://imgur.com/a/u1QTns6

OmniOutliner feels like it has a separate text field for each node. Bike feels like a text editor when you're editing a document with nodes, which to me is more natural.

I'd recommend using KeyCastr to show the keystrokes while recording.
Yeah, sorry for the lack of keystokes. I usually use ScreenFlow which also has this feature, but for this one I used LICEcap.
Thanks! So this is more about seemless navigation than about the actual editing, I guess. I've always used OmniOutliner as a sort of "Excel with Tree" (multicolumn outline), so having separate cells is kind of an obvious default or even main feature for me. I can see now how purely longform-text cases might profit from this version.
Can someone combine this concept with a task management/todo app? That would be perfect.
TaskPaper turns each item into a todo that you can check off.
That's the plan among other things. Get a license ;)
I use Taskpaper everyday, both for To-do:s and to take notes. I’ll gladly switch to Bike the day it can do most of the thing Taskpaper can do. I’ll eagerly follow the development of it.
We're working on an outline app with task management/planning functionality. With end-to-end encryption and multiuser/teams support (you can see other users type like Google Docs). Early beta signup at https://thymer.com
> We're working on

Just quickly clicking around makes it look like you are not working on it. It's explained, but it would be better to change some things around so it doesn't look completely dead. E.g.

> You can follow our daily progress / We share our progress daily and share everything, from code to finances.

> This is today's entry (Apr 28 '22).

It also gives false hope one could see the product in two weeks (which was a week ago).

Call me a curmudgeon, but I just use an editor and markdown for the same fluid outlining. I guess this is more marketed towards people who don't also fluidly use a markup/markdown syntax.
This nice think outliners can do that editors generally can't do is Focus In / Out. Maybe not important for your thought process, but for me I really like being about to start new on a fresh "page", while still being in the same document.
Code editors can do it. It should be possible to define a syntax that would work well with this (no keywords, unquoted strings, : and TAB to define scopes).
Highlight + Tab does the trick for me. Both Atom and VSCode support collapsing Markdown. Just sayin.
I've been using workflowy.com - looks VERY similar.
Workflowy is a truly category-defining solution that inspired an entire generation of similar products.

I wanted a (preferably open-source) alternative which I could use with self-managed storage/sync without sharing any data and found Logseq to be pretty good.

You mean like Org-mode?
Umm ... I have always associated org mode with powerusers because of the implicit learning curve of emacs. Tools like workflowy/logseq are dead simple because anyone who has ever used a bullet list can instantly get productive.

I know that logseq also supports org files, but I am not well versed enough with org to comment how well it stacks up against emacs.

In particular I love these features:

- "respects your computer's memory and battery"

- "uses open file formats"

- "is scriptable"

Feels like we should also think about these kinds of things when we think about "organic" software. Kudos to the developer for these.

How much memory and battery do all the animation use?
Probably very little if it is built on top of CoreAnimation, since that set of OS APIs is extremely heavily optimized specifically to enable animation-rich UIs that are light in terms of CPU and battery use.
Indeed. As far as I know, Core Animation was originally created as part of work on the first version of iOS (née iPhoneOS), where the target device, the original iPhone, was pretty severely memory and CPU constrained.
Here’s part of the ArsTechnica article on Leopard that discussed CoreAnimation:

https://arstechnica.com/gadgets/2007/10/mac-os-x-10-5/8/

Of note:

> [The] advent of Core Animation probably means that we'll have to endure some amount of gratuitously animated software created by "overly enthusiastic" developers. But the same was true during the introduction of styled text and color graphics. Mac developers learn quickly, and Mac users are good at rewarding restraint and punishing excess.

Right, it was introduced publicly as an API in Mac OS X Leopard, but my understanding has always been that it was actually conceived as part of iPhoneOS, then ported to Mac as well. The iPhone shipped a few months before Leopard, though of course UIKit wasn’t made public until the next year when the iPhone SDK was first released.

There’s a similar story around SwiftUI. It was initially created by the Apple Watch team at Apple, then extended to all the other OSes (all this was long before it was made public).

I think the architecture needed to support them means the total package is less than most apps. For example consider scrolling:

In Bike it's fast enough that when you scroll it just updates what you can see on the screen. This means you only pay memory for visible text. For most macOS apps scrolling performance is achieved by pre-rendering before and after the visible scroll area. So you pay for that cache and you also pay for the background processing required by pre-rendering.

Also consider simple things like window resize. In Bike that only effects visible text. If you open a large document in TextEdit you will see that resize is quite slow and processor and memory intensive. (you can test with https://www.hogbaysoftware.com/posts/moby-dick-workout/). And then after that resize there's lots of background processing to refill a bunch of layout caches I guess. On the other hand resize is instant and only does work for visible text in Bike.

I don't think the animations are expensive, but it's hard to test because that work happens in Mac OS window server and I'm not an expert there. If they really are a problem and you are on battery then you can turn off animations in preferences.

CALayer is part of the OS toolkit, so probably not much. It’s the same system the OS itself uses, so probably a shared lib, and it’s heavily optimised. Similar to animating your web page with only CSS animations. It’s all baked into the existing rendering system already.
If anyone digs in and profiles Bike 1.0 you'll unfortunately find that it is wasting some CPU with a timer. This will be fixed soon and is not related to underlying architecture or animations. It's me coalescing events from user defaults with a Combine API that I didn't fully understand.
Jesse is certainly one of the patron saints of open formats in the Apple world given he invented TaskPaper.