Bike Outliner 2 Releases
Bike 2 is in preview stage
-
Bike 2.0 (Preview) (311)
Added right-to-left and mixed-direction editing.
Each row takes its direction from its first strong character. Outline guides and controls flip sides. Use Format > Writing Direction to set a row’s or a selection’s direction yourself.
- Added Format > Writing Direction for rows and selections
- Added ⌥Return to split text into a new body row
- Added ⌘I for Document Info
- Added type carry-over when pasting into an empty quote or list row
- Changed New Indented Row to ⌥⌘Return
- Changed ⇧⌘Return to insert a row above
- Changed Expand Selection to climb through parent branches
- Changed some command IDs (update custom keybindings)
- Fixed newlines in attribute values breaking Markdown files
- Fixed joining rows in “selected rows only” mode moving children
- Fixed copying a horizontal rule’s text as a stray embed
- Fixed differently spelled keybindings not replacing each other
- Fixed Commands Explorer showing extension keys over yours
For extension authors: extensions can now be localized and follow right-to-left layout (API 0.76.1).
- Added
bike.localizeandlocales/for extension strings - Added
bike.layoutDirection; panels get<html dir>andlang - Added
StyleContext.isRightToLeftandOutlineEditor.isRightToLeft(row) - Added
SymbolConfiguration.withLayoutDirection
-
Bike 2.0 (Preview) (310)
Added Settings > General > Move, copy & delete.
Your options are whole branches (outline style) or selected rows only (text editor style). In both modes you still have access to alternate structural commands, but the default behavior is configured for your main use, without you having to set up a bunch of custom keybindings. In “whole branches” mode a block selection now also shows its secondary selection rows.
- Added Back/Forward with mouse side buttons and swipes
- Added double-click a bracket or quote to select its pair
- Added Transpose, Transpose Words, and Complete
- Added Page Up/Down caret movement
- Changed some command IDs (update custom keybindings)
- Changed Promote Children to ⌃⌥⇧←
- Changed Demote Siblings to ⌃⌥⇧→
- Fixed typing after a link (⌥→ or paste) extending it
- Fixed Duplicate and Save To copies sharing a document ID
- Fixed several problems with
bike mcp - Fixed a crash in Scroll Line Up/Down
-
Bike 2.0 (Preview) (309)
- Added badge highlighting for filters that test attributes
- Added filter highlighting for
matches,beginswith,endswithtext - Added pasting copied attachments as images/files in other apps
- Fixed typing after a paste picking up the pasted text’s style
- Fixed breadcrumbs showing half of a quote or bracket pair
- Fixed a sheet sometimes opening on the wrong document window
-
Bike 2.0 (Preview) (308)
- Fixed breadcrumbs dropping punctuation at end of row text
-
Bike 2.0 (Preview) (307)
- Fixed typing stalls in fullscreen on ProMotion displays
-
Bike 2.0 (Preview) (306)
- Added Calendar extension option for date row insert order
- Fixed clipped row type hint text
-
Bike 2.0 (Preview) (305)
Pasting a file from the Finder now attaches it.
Use Paste as Link to have the old file paste behavior.
- Split Move To into Move (caret follows) and Send (Control, caret stays)
- Fixed cross-row extend in single extend from a caret at a row edge
- Fixed “Prompt to send crash reports” not prompting
-
Bike 2.0 (Preview) (302)
- Added Attachment: Filename, Thumb, and Actual Size commands
- Added Appearance ▸ Editor ▸ Default attachment style (thumb)
- Added
go:focus-out-by-levelto focus the current focus’s parent - Changed Row
ensuredLog,ensuredPersistentId,urlto methods
-
Bike 2.0 (Preview) (301)
- Changed to keep unused attachments (see File > Document Info)
- Changed Text Delete to remove selected rows
- Changed Text Delete to leave caret on the row taking their place
- Changed overdue due dates to a solid red badge, not an outline
- Fixed a crash opening Markdown with a
{ }table cell
-
Bike 2.0 (Preview) (300)
- Added Shortcuts actions to set, remove, and get row attributes
- Added an attributes parameter to the Create Row shortcut action
- Fixed SVG attachments showing a file chip instead of a preview
- Fixed empty row type hint drawing through badges and focus arrow
- Fixed HTML documents becoming
.biked, not.htmld, on attach
-
Bike 2.0 (Preview) (299)
- Added option to hide “Done” badge on completed tasks
- Added
bike.reconcileAPI for deriving changes from other changes - Changed API to report error when setting reserved attribute names
- Fixed IME invisible placeholder after deleting unfinished codes
- Fixed crash opening the View ▸ Typewriter/Focus Mode submenus
-
Bike 2.0 (Preview) (298)
- Added ordering/hiding of Index, Pinned, and Queries sections
- Renamed “Attributes Palette” to “Attributes Editor”
- Improved Extension Settings > Attributes UI
- Removed day designator (21日, 21일) for Chinese calendar
- Fixed attachments with percent-encoded names
-
Bike 2.0 (Preview) (297)
Changed task tracking from @done to @status.
Previously a task’s “done” state was tracked with a @done attribute and associated date. Now it is tracked with a @status attribute with possible values of todo, started, canceled, done.
Outlines using the old @done attribute will need to be migrated to use @status. You will be prompted when opening the document in the latest Bike. Queries that reference @done will need to be updated to use the new open() and closed() path functions. So where before you said
//task not @doneyou can now say//task not closed().- Added optional row log (e.g., to track attribute change dates)
- Added Settings › Extensions › Attributes (per-attribute setup)
- Changed Row: Text Delete to leave an empty row with the caret
- Fixed the context menu system shortcut not working
-
Bike 2.0 (Preview) (296)
- Added archive-done commands to the tasks extension
- Changed Document Info to name file types like Save As does
- Fixed blurry attachments
- Fixed attachments in print, PDF, Quick Look, Finder thumbnails
- Fixed Save As between bundles leaving inner file in old format
-
Bike 2.0 (Preview) (295)
Font.resolvenow reportsfamily,synthesizedBold,synthesizedObliqueandsubstitutedMonospace, so a stylesheet can pick something better than a fake.- Added a Default Badge Exclusions setting
- Added calendar structure week rows options
- Added generated bold and italic font variants when missing
- Added system monospace fallback for
@coderuns when missing - Added
RadioGroupDOM component - Added
familyand synthesized/substituted flags toFont.resolve - Improved Settings > Extensions in various ways
- Improved resource use of QuickLook and thumbnail Finder extensions
- Fixed badges only updating in whichever window you switched to
-
Bike 2.0 (Preview) (294)
- Added row links by persistent id, session id, or row number
- Changed “Hide outline controls when typing” into three checkboxes
- Moved the editor toggles from General to Appearance settings
- Fixed attachment animation when deleting the character before it
- Fixed stale Autocorrect checkboxes after Reset settings
- Fixed Save As freezing on OPML documents
- Fixed modifier keys getting stuck
-
Bike 2.0 (Preview) (293)
- Added Copy Row Link ⌘L
- Added Copy View Link ⌥⌘L
- Added Copy Document Link ⌥⇧⌘L
- Changed pasting rows with attachments to import their files
- Renamed
AttributeValueOptiontoAttributeChoice - Fixed “row was not found” for row links copied before saving
- Fixed “Cannot find name”
setTimeoutandclearTimeoutwarnings
-
Bike 2.0 (Preview) (292)
Added built-in attributes for done, due, priority, estimate, flagged, and progress.
Decided I needed to really build a bunch to help drive API design.
The Calendar extension changed in quite a few ways. Default behavior is now to filter. Drag to filter multiple days. Double-click or Return for the old behavior of creating a day for selected row(s).
- Added the new Attribute Palette
- Added value pickers, including a calendar
- Added Actual Size attachment display mode
- Added attachment management to Document Info
- Added a message in the editor when a filter matches nothing
- Improved scrolling speed in big documents
- Improved spell checking to stay out of the way
- Fixed typing in big documents slowing as the window gets taller
- Fixed a performance issue with Japanese and other IME input
- Fixed unused attachment files to move to the Trash on close
- Fixed a long filter query overflowing the toolbar
- Fixed selection not covering a badge wrapped onto its own line
- Fixed lone badge on a wrapped line sitting low and growing row
For extension authors: lots of changes in attributes, badges, summary, menu, and picker APIs. They all interact and as I implemented the built in attributes I kept finding changes to make. Likely still some loose ends, but I’m using these APIs to implement all the built in attributes, and generally they seem to be working well. Biggest change from previous API is menu is now much simpler. No embedded calendar or other elements, just plain menu items. Instead there is a new picker API that allows picking specific values, such as dates or durations.
-
Bike 2.0 (Preview) (291)
- Added menu to progress badge
- Added @due dates integrated with Calendar
- Added QuickLook previews and thumbnails for attachment formats
- Changed badges to fade along with the row under writing focus
- Removed priority extension (in example-extensions if you want it)
- Fixed bad results when applying a filter over an active one
- Fixed saved sidebar queries with
<or&writing invalid XML - Fixed crash on ⌘Z caused by a stale caret-animation range
- Fixed various attachment alignment & drawing issues
For extension authors: badge, summary, attachment, and drag API changes.
- Added
bike.attachmentURL()for<img>andfetch()in DOM context - Added accepting dragged rows in DOM extensions via
bike:rowdrag*events - Added
Image.withBackground,Font.withScale, and OpenType feature builders - Added option for providing label when setting outline editor filter
- Added reading attachment metadata and bytes from app context
- Changed
bike.badge, including extracting menu toeditor.showMenu - Changed, improved, and generalized the summary API
- Fixed a script returning a Promise to resolve it before serializing
- Fixed a CLI/MCP promise that never settles to time out after 60s
-
Bike 2.0 (Preview) (290)
Add a file attachment with Format > Add File Attachment, or drag and drop. Right-click an attachment for other options. Format > Row Attributes is a generic UI to view and edit row attributes. Row badges and summaries let you create custom UIs to view and edit branch state.
- Added file attachments
- Added Format > Row Attributes
- Added row badges and summaries
- Added new date functions to use in outline paths
- Fixed a Quick Look thumbnail crash on macOS 26
- Fixed background work stalling while CLI/MCP connected
- Fixed two ⌘Z crashes undoing after a row was removed
- Fixed ⌘K sometimes failing to edit or remove a link’s URL
For extension authors: three new API groups. They all need a documentation and API pass, but I don’t expect big functional changes.
- Added
input.d.tsto react to user’s typing + autocompletions - Added
badges.d.tsto add custom UI for branch state to rows - Added
summaries.d.tsto maintain branch summary values efficiently
-
Bike 2.0 (Preview) (289)
- Improved accessibility (fully accessible outline? Maybe?)
- Improved support for Edit > Writing Tools
- Changed autolink to apply to link text pasted at row start
- Fixed a ⌘Z crash after extension commands inserted/moved rows
- Fixed
bike://links to rows with slashes in their ids - Fixed
bike://links not activating Bike
-
Bike 2.0 (Preview) (288)
- Added VoiceOver support (needs testing, good enough for Cotypist)
- Added themes back (for the 3rd, and I think final, time)
- Added ⌘-click in sidebar to select row and focus its parent
- Added ⌘-click in “Go To…” to select row and focus its parent
- Changed selection to stay on-screen after focusing out
For extension authors: a few more consistency tweaks and documentation shortening for extensions and the CLI. Think I’m done messing now, but I may have said that last release also.
-
Bike 2.0 (Preview) (287)
- Changed filter field cancel button to highlight on mouse over
- Changed yellow find/filter highlight to hide in focused editor
- Reverted (
@done) strikethrough formatting - Fixed rows briefly going blank when typing/returning quickly
- Fixed document windows not being released after closing
- Fixed filtered (hidden) rows showing when printing
For extension authors: new lifecycle hooks and observe streams, and some breaking API changes. I’m trying to keep
bike -h,man bikeandsession.d.tsdocumentation minimal to avoid drift and duplication.- Added lifecycle hooks:
window.onClose,document.onClose,outline.onClose - Added Session/CLI observe streams:
observeOutlineEditorandobserveEditors - Added session automation docs to cover
bikecli and DOM contextsession.d.ts - Changed
getCommands(),evaluateScript(), andobserveOutline()(breaking)
-
Bike 2.0 (Preview) (286)
- Added user keybindings to menus
- Added Settings > General > Editor > Sort completed tasks
- Added ⌘Return to commit a filter, keeping folds and selection
- Changed @done rows to dim instead of crossing out
- Changed Code format keybinding to ⇧⌘C
- Changed Return/⇧Return to step through each filter match range
- Fixed animation glitches entering/leaving full window
- Fixed titlebar menu reappearing after choosing an item from it
- Fixed editor automation commands targeting the wrong window
For extension authors: new abilities for the
bikecommand-line tool and extension APIs.- Added
bike observe outline changesto thebikecommand-line tool - Added reading/writing outline files without opening Bike to the
bikecommand-line tool - Added targeting specific rows, not just selection, to
performCommands - Added streaming response bodies and more web standard API to
fetch
-
Bike 2.0 (Preview) (285)
- Added new filtering behavior
- Added new newline selection interaction
- Added new animation behavior for “far” animations
- Added a “View” menu to the titlebar
- Added Settings window restore on relaunch
- Added invisibles dot in text selections
- Added caret bounce when an editor gains keyboard focus
- Added ⌃Tab focus cycling in the Find and Spell Check panels
- Added ⌥-drag on sidebar/inspector divider to mirror widths
- Added View > Auto-Hide Toolbar (shows only while filtering)
- Added configurable titlebar buttons (Interface Explorer)
- Fixed slow pasting of many rows
For extension authors: new APIs and outline path predicates, plus command permissions and buttons.
- Added
bike.sessionAPI for DOM extension scripts - Added bare function predicates in outline paths, e.g.
//* parent() - Added the ability for extensions to place default buttons in the UI when declaring commands
- Changed extensions to only perform commands they have permissions for
- Changed CLI/automation
observeto follow the frontmost outline
-
Bike 2.0 (Preview) (284)
- Added arrow to Calendar extension format previews in settings
- Added Bike 1 AppleScript name
selected textforselection text - Changed script and extension dates to follow language and region
- Fixed a crash when undoing after a document reloaded
- Fixed a crash running certain menu commands from automation
-
Bike 2.0 (Preview) (283)
Row dates are now optional.
Created and modified row dates are off by default in new documents. Configure them for new documents in Settings > Document (per file format), and for existing documents in File > Document Options.
Installing the
bikecommand-line tool no longer requiressudoin Terminal on first install. It is still required when you move Bike and need to reinstall.- Added File > Document Options…
- Added print theme popup in the print panel
- Added document spell-check language (Check panel or Options)
- Added Calendar options in Settings > Extensions (thanks, coignard!)
- Added Box container component (
Runtime/common.{js,css}) - Changed first
bikeCLI install to not requiresudo - Changed untyped
format:'markdown'inserts to parse a marker - Fixed connection handling in the Row: Text Delete command
- Fixed a crash right after renewing your license
- Fixed Korean/CJK input breaking on rows with links or highlights
- Fixed outdenting rows that span multiple top-level rows
- Fixed outdenting rows that include folded children
-
Bike 2.0 (Preview) (282)
- Added JSON outline format
- Added
man bikefor high level orientation - Added MCP tool to help you create outline paths
- Changed OPML format to use Markdown text formatting
- Changed revert autocorrect popups to close after 10 seconds
- Changed Commands Explorer override alert to be less alerting
- Improved the
bikeCLI with lots of work and polish
-
Bike 2.0 (Preview) (281)
Added Bike > Install Command Line Tool…
Use the installed
bikecommand in Terminal to automate Bike.app. Usebike mcpto start a Model Context Protocol server for AI agents.- Added text move menu items and shortcuts (hold ⌥ to see)
- Improved text move commands
- Fixed some text move animations
-
Bike 2.0 (Preview) (280)
Changed how extension permissions and enabled state are tracked.
Previously, Bike tracked this by modifying extension metadata files. It now tracks these states through user defaults instead. One result is that disabled core extensions, such as the Calendar extension, now remain disabled across launches. Permission tracking and related alerts have also been updated.
- Improved row text move commands
- Changed Commands Explorer to accept comma-separated keybindings
- Changed row text delete to preserve selection mode
- Changed multi-row paste to splice into caret and text selections
- Changed empty body row paste to adopt first pasted row’s type
- Removed heading numbers from the default style
-
Bike 2.0 (Preview) (279)
- Added window layout options in Settings > Document
- Added many theme options for configuring window appearance
- Added Settings > Hide editor toolbars and panels when typing
- Added auto-hiding glass controls in View > Enter Full Window
- Added sidebar ⌘↑/⌘↓ and ⌥↑/⌥↓ to jump between groups
- Added toggle behavior to Go To Sidebar/Editor/Inspector
- Added
"indent"attribute for Bike 1.x/TaskPaper over-indenting - Expanded sidebar drag and drop to and from most locations
- Changed new documents to start with one empty row
- Changed Collapse Row to fold only selection-cover rows
- Improved default theme (see it as an example of new options)
- Improved row text move and delete commands
- Improved per-window state restoration (more state, more accurate)
- Fixed IME issues, including Korean input (and likely others)
- Fixed ordered list numbering across viewport gaps
- Fixed Go To when the sidebar hadn’t been shown yet
- Fixed pasted rows appearing in a broken collapsed state
- Fixed fold state restoration for rows without a persistent ID
For extension authors: new screen and frame APIs, and
StyleContextchanges.- Added
Screeninterface;screensandmainScreenon the global - Added
StyleContext.viewportContentInsets - Changed
Window.frame,Window.screen, andPanelHandle.frameto read/write - Replaced
showPanelx/y/width/height/screenoptions withshowPanel({ frame }) - Renamed
StyleContext.isInterfaceHiddentoStyleContext.isFullWindow - Replaced
StyleContext.orderedIndexwithconsecutivePath: number[](ordered and heading runs)
-
Bike 2.0 (Preview) (278)
Refined “Go To…” and “Move To…”.
Both can now target any row, not just sidebar items. Prefix the filter with
-to search across all rows. In “Go To…”, prefix with>to execute commands.- Added menu items that insert these prefixes automatically
- Added relative color syntax for use in theme files
- Restored a broader set of built-in themes
- Changed ChoiceBox API (breaking)
- Changed and added to Color API (breaking)
- Improved performance of
moveTextin large outlines - Fixed word drag losing track of the original word
- Fixed link hover showing URLs when pointer isn’t over text
- Fixed sidebar leaf chevron color/alpha to match its row label
- Fixed caret to return to search anchor after a failed search
Building your extension should type-check it to indicate needed changes.
-
Bike 2.0 (Preview) (277)
- Added
activateto bike, Document, Window, Editor, and Panel - Added
prepareRowrequirement to Sidebar LocationItem - Added
light-dark(<light>, <dark>)theme color expressions - Changed
Go To…to include all sidebar locations - Changed
Move To…to include sidebar locations except queries - Improved menu organization and consistency
- Changed default and Solarized theme colors
- Fixed crash on quit
- Added
-
Bike 2.0 (Preview) (276)
- Added opening
#ROWIDlinks - Added “Disable animations in Low Power Mode” setting
- Added Go > Sidebar (⌘1), Editor (⌘2), Inspector (⌘3)
- Added
Window.subtitleread/write access - Added
Outline.resolveLinkfor resolving URLs and#ROWID - Updated to Swift 6
- Fixed hang when closing an outline with an active filter
- Fixed word-drag selection losing track of the start word
- Fixed brief “flash” of dragged rows at their origin on drop
- Fixed round-tripping indented blank lines in Bike Markdown
- Fixed clicks on fold/focus decorations sometimes being ignored
- Added opening
-
Bike 2.0 (Preview) (275)
- Added setting to disable animations in Low Power Mode
- Added JSRowRun bridge so the
run::axis works from JS extensions - Improved breadcrumb trimming to respect word boundaries
- Fixed paste crash when inserting empty text
- Fixed link button being unclickable due to style
- Fixed hang when closing document with active filter
- Fixed
parent::axis returning grandparent when evaluated from a run
-
Bike 2.0 (Preview) (274)
- Added button to show/hide inspector
- Added Restore All Settings in General preferences
- Changed breadcrumb to compress redundant text (calendar days)
- Fixed word drag selection losing the double-clicked word
- Fixed font size slider changing line height
- Fixed font family popup resetting size to 13pt
- Fixed window opening with zero height after Restore All Settings
For extension authors: one AppleScript change and fixes to
showAlertandbike.defaults.- Replaced AppleScript
resolvewithget rowcommand - Fixed
showAlertfields being silently dropped - Fixed
bike.defaults.observenever firing in app context - Fixed shared Settings/Inspector
bike.defaults
-
Bike 2.0 (Preview) (273)
- Changed to optional persistent ids
- Fixed link IDs not being remapped on import
- Fixed threading issue when deallocating editor
- Fixed memory leaks in JavaScript extension runtime
-
Bike 2.0 (Preview) (272)
- Added external file change detection
- Changed unfocused editors to show the caret line (if enabled)
- Fixed spelling marks breaking typing slide animation
- Fixed block delete dropping selection when all siblings deleted
- Fixed formatting palette staying open when ⌘Return steals focus
- Fixed Esc toggle restoring whole row, not prior text selection
- Fixed imported markdown documents not restoring after relaunch
- Fixed regex replace crash with non-participating capture group
- Fixed wrong markdown from nested inline formatting sort order
- Fixed
.txtfiles loading as Markdown - Fixed crash accessing
bike.windowsin some cases
-
Bike 2.0 (Preview) (271)
- Fixed ordered list number alignment with row text
- Fixed hide interface re-entrancy issue on macOS 26.4
- Fixed imported markdown handling in pasteboard decoding
- Fixed crash on quit when drag pasteboard had promises
- Fixed links in inspector/settings/sheets not opening in browser
For extension authors: new Keychain and settings APIs, and namespaced globals.
- Added Keychain API for secure password/token storage
- Added Extension settings API (Bike > Settings > Extensions)
- Namespaced globals (such as
extensionURL) tobike.extensionURL, etc. - Fixed
rowIndexFromcharacter index conversion with multi-byte characters
-
Bike 2.0 (Preview) (270)
- Added Help menu items
- Added new system fill colors for extensions
- Improved Commands Explorer UI
- Improved drag and drop performance in sidebar and editor
- Fixed sidebar selection drawing
- Fixed over-escaping in Markdown export
- Fixed blank lines lost during Bike Markdown round-trip
- Fixed ordered list numbering reset after blank lines
-
Bike 2.0 (Preview) (269)
The new
extensionURLAPI generates URLs for files in an extension’s folder. The common case is showing images in a DOM context or style context.- Added titlebar indicator for logged errors
- Added Settings > General > Show/hide menu images
- Added
extensionURLfor files in an extension’s folder - Changed themes to load from extensions, without copying
- Changed control show/hide to sync with mouse cursor visibility
- Reworked file format handling (.bike vs .html, etc.)
- Improved and unified explorer windows
- Removed .bikemd format; you’ll need to rename files to .md
- Fixed path explorer to show proper ids
- Fixed text commands to work in text mode
- Fixed all known crashes (keep sending!)
-
Bike 2.0 (Preview) (268)
- Added Bike > Interface Explorer
- Added Bike > Extensions Explorer
- Added Expand All / Collapse All commands (+ By Level)
- Added
==mark==Markdown syntax for highlight/mark formatting - Added text semantics move, delete, cut, copy, paste commands
- Added more system level commands from Cocoa keybindings
- Changed inspector UI
- Changed status bar popups to a standard UI
- Changed Select All to expand immediately to document scope
- Moved Settings > Keybindings to Bike > Commands Explorer
- Moved Logs Explorer from the Window to the Bike menu
- Moved Outline Path Explorer from the Window to the Bike menu
- Fixed sorting order
- Fixed ordered list numbering
- Fixed Editor Filter context menu Cut/Copy actions
- Fixed focus out decoration action to keep scroll position
For extension authors: extension-kit has changed structure and location. It’s no longer a mono-repo that you fork and work in. Instead it’s a package that you depend on, and it now includes tooling for unit tests and releasing extensions. New location: https://github.com/bike-outliner/extension-kit
- Added panel/window API
- Added defaults and window restorable state JSONStore APIs
- Added
AttributedString.fromMarkdown()andfromHTML()APIs - Added typing to DOMScript message protocols (see example-extensions)
- Changed extension name and id to derive from folder name
- Removed manifest name and id
- Split core extensions into core-extensions
- Split example extensions into example-extensions
- Renamed !bike.bkext to bike.bkext
- Removed !startup.bkext
-
Bike 2.0 (Preview) (266)
- Added inspector tabs
- Added status bar items
- Improved performance and memory use (lots of tweaks)
For extension authors: a status bar API, plus standard styles and components for DOM contexts. For examples of new styles and components see updated Calendar and Tutorial extensions that are included in the bike-extension-kit.
- Added extension API for status bar messages
- Added lots of system styles to DOM context
common.css - Added standard components to
common.tsandcomponents.ts - Added
SFSymbolcomponent to show system symbols in DOM contexts - Changed
inspector.addItemAPI to include tab symbol - Changed
console.logto always show up in Window > Logs Explorer
-
Bike 2.0 (Preview) (265)
- Added
get()method to color themes - Changed caret and active line colors to follow selection color
- Fixed crash when pasting hierarchical (indented) text
- Fixed unnecessary Markdown escapes (still more to do)
- Added
-
Bike 2.0 (Preview) (264)
- Fixed cut/paste sometimes cutting more than selected
-
Bike 2.0 (Preview) (263)
- Added Settings > Keybindings
- Added keybindings to “Show Commands” lists
- Added “Include in new documents” option to filter queries
- Changed open URL to activate app and prompt user
- Improved performance (benchmarking and optimization)
- Fixed caret up/down movement getting stuck on same row
- Fixed autocorrect doubling apostrophes with smart quotes off
- Fixed sidebar disclosure unclickable after item gains children
- Fixed sidebar query selection not updating on back navigation
- Fixed setting font weight dropping other text styles
- Fixed word marked as misspelled while still typing it
- Fixed sidebar drag-and-drop ordering
- Fixed Copy as Bike Markdown to exclude front matter
- Fixed some BikeMarkdown encoder/decoder bugs
- Fixed crash when creating heading after joining rows
- Fixed occasional crash on extension reload
-
Bike 2.0 (Preview) (262)
- Changed sidebar selection to custom drawing without vibrancy
- Changed hide/show interface animation to not bounce
- Removed find/filter navigation from back/forward history
- Fixed scroller flash when toggling hide/show interface
- Fixed link title editing broken by paste-link-to-selection
- Fixed theme fontWeight not overriding bold fontTraits
- Fixed crash moving a row into itself via Move to Index Row
-
Bike 2.0 (Preview) (261)
- Added toggle interface button to toolbar
- Added theme-configurable separator colors
- Added navigation history for document boundary jumps
- Added navigation history for find and filter match jumps
- Added indentation detection for plain text and RTF paste/import
- Changed Save panel to prefill name from first sentence
- Improved path bar, including hover-to-expand segments
- Fixed Logs Explorer window close detection
- Fixed outline editor not first responder in new documents
- Fixed stale hover highlights when typing hides the cursor
- Fixed theme
fontFamily,fontWeight, andfontTraitsresolution - Fixed Select All scrolling to the selection head
- Fixed large selections scrolling to the selection head
-
Bike 2.0 (Preview) (260)
- Added return key icon to Create Row
- Added appearance metadata field to themes
- Added anchored incremental search to the Find panel
- Added new Logs Explorer with additional logging sources
- Added AI-generated example themes (as starting points)
- Improved sidebar selection behavior further
- Removed filter field from the focus chain when collapsed
- Applied links to selected text when pasting rich links
- Preserved trailing whitespace for TextExpander and the like
- Fixed a crash in typing animations
- Fixed a crash in Typography settings
- Fixed a crash during sidebar selection updates
- Fixed selection not scrolling into view after moving rows
- Fixed the spelling panel skipping the next misspelling
- Fixed row controls acting on cursor row instead of clicked row
-
Bike 2.0 (Preview) (259)
Added lots to themes and the Theme API.
Themes can now be used to style many common elements, see the “all features” example in
bike-extension-kit/api/theme. I think I’m done making big changes to themes. Now’s a good time to explore and report any problems you run into.- Added Add Link to Row
- Added Pin Row command (⌘Y)
- Added ChoiceBox API (see
bike.showChoiceBox()) - Improved sidebar selection logic
- Changed ChoiceBox UI to a standard flat list without preferences
- Changed Show Commands to include more outliner commands
- Changed Sidebar API
addActiontoaddLocation - Fixed NSOutlineView crash deleting multiple sidebar items
- Fixed Hookmark Mail links (empty
queryParametersadded?) - Fixed autocorrect attribute extraction with substring offsets
- Fixed autocorrect races with rapid keystrokes (I think!)
-
Bike 2.0 (Preview) (257)
- Added Sidebar (actions, index, pinned, queries)
- Added View > Hide Interface (⌘.)
- Added Outline > Move to Index Row
- Added Go > Focus Index Row
- Changed UI direction: dropped glass, added more theming
- Expanded theming (see
bike-theme.jsonin bike-extension-kit) - Removed
+shortcut for unordered list replacement (use-) - Fixed crash opening links in Hebrew text (out-of-bounds index)
For extension authors: new outline and row APIs, plus sidebar, style, and naming changes.
- Added
Outline.observeChangesto see fine grained outline changes - Added accessors to row including
Row.ancestors, etc. - Added
AttributedString.countto get character count - Renamed editor style
editor.focusModetowritingFocusMode - Limited Sidebar API to new
addActioncall - Standardized on term
levelacross AppleScript, API, and internal code - Updated
bike-extension-kitextensions to use new APIs
-
Bike 2.0 (Preview) (254)
Holiday cooking is upon me—today: 15 lb of masa into tamales.
Unfortunately, this preview release is not fully baked, but it has already been in prep far too long, so I am releasing it anyway. One major missing feature is outline filtering. Lots of other rough edges too. If you are using preview builds for real work, you may want to downgrade to build 253 after giving this version a quick try.
The biggest change in this release is the adoption of Apple’s new Liquid Glass UI in Bike. I have arrived at a design that I like, but feedback is always welcome. Hopefully it can be made even better. See the forums for discussion about why the UI is the way it is.
- Added an empty row in new documents
- Added Move Up/Down (maintain level) commands
- Added text wrapping keybindings (quotes, brackets, parentheses)
- Changed
.biketo require markup (emptytouchfiles won’t open) - Fixed Markdown code span escaping
- Fixed mouse cursor icon update issues
- Fixed keybinding prefix matching (full prefix required)
- Fixed crashes evaluating some outline paths
- Fixed pasting short (<4 char) plain text
- Fixed outline path queries with multibyte quoted chars (
"ü") - Fixed Bike Markdown escaping after numbers like
1 hello - Fixed Delete Forward on an empty line to reattach children
- Fixed outline keybindings to need Outline Editor focus
- Fixed redraw moving between displays of different resolution
For extension authors: new Row properties, transaction options and editor style functions, plus API fixes.
- Added editor style functions
selection-ancestor(),selection-descendant() - Added Row API properties (
level,prevBranch,nextBranch,isAncestor,isDescendant) - Improved transaction options (labels, spring timing)
- Updated API definitions to reflect new Row properties and transaction options
- Removed
selection-covered()editor style function - Fixed
attributedString.replaceAPI bug - Fixed multiple API crashes caused by invalid values (
null,undefined)
-
Bike 2.0 (Preview) (253)
- Added Edit > Paste > Paste and Render Markdown
- Fixed Edit > Paste > Paste and Match Style
- Fixed a memory leak; memory drops again when closing windows
- Fixed plaintext front-matter to be ignored unless
bikemd: true - Fixed default outline path search to be case-insensitive
- Fixed a crash in
RTFEncoderwhen pasting (PDF, etc.)
For extension authors: I’ve been working to make it easier for AIs to build Bike extensions. Part of that work is to show the AI how to use Bike’s AppleScript
evaluatecommand to test and debug code snippets interactively. Most of these changes are to support that effort.- Added outline metadata APIs for extensions
- Added
explainQuerytoJSOutline - Improved detail in error reporting from OSA Script
evaluatecommands - Changed
WebViewDOMScriptManagerto accept inline scripts in addition to file paths - Fixed
selectTextAPI inJSOutlineEditor
-
Bike 2.0 (Preview) (252)
- Improved attribute handling when reading/writing
.bikefiles - Fixed text files with
{"bikemd": true}to open as.bikemd
- Improved attribute handling when reading/writing
-
Bike 2.0 (Preview) (251)
- Added JSON metadata to all supported formats
- Added escaping of Markdown syntax you type in
.bikemd - Added encoding of unordered rows with
+list marker in.bikemd - Fixed focus mode paragraph
- Fixed Learn and Ignore Word
- Fixed paste into empty document
- Fixed invalid characters breaking file load
- Fixed problems in save dialog when changing file formats
- Fixed cases where autocorrect was doing the wrong thing
For extension authors: AppleScript and API changes.
- Changed AppleScript command to
evaluatescripts - Changed attributes to no longer get a
data-prefix at runtime - Changed AppleScript
select rowbehavior to match Bike 1.x - Removed outline metadata APIs (a more flexible option will be added soon)
- Fixed API bug that could include extra rows when removing or moving rows
-
Bike 2.0 (Preview) (247)
Bike Markdown is still a work in progress, but I think a lot closer to a stable format now. More details in the forums and feedback encouraged! Known bugs at moment: Problems with code spans and horizontal rules. Also no escaping is being performed yet, so if you type in Markdown syntax it will be interpreted as such on next file load.
Runtime tag names now better align with HTML standards, for example:
link → a,emphasis → em,highlight → mark,strikethrough → s, etc. This may break some things. For example those names are used in themes, so you’ll need to update any custom themes you have. Also if you have Bike Extension code that processes attributed strings, the attribute names will have changed.- Changed
.bikemdto be strictly list-based - Changed
.bikemdto hold all outline data, via Pandoc attributes - Changed runtime tag names to align with HTML standards
- Changed
-
Bike 2.0 (Preview) (246)
- Added Bike Markdown format (.bikemd)
- Added Edit > Copy > Copy as Bike Markdown
- Added to/from Markdown API
- Improved pasting links
-
Bike 2.0 (Preview) (245)
- Added opening row links
- Added Window ▸ Duplicate Tab (multiple views of an outline)
- Added Window ▸ Duplicate Tab to New Window
- Extended Keybinding active modifiers API
- Improved drag-and-drop animations
- Improved typewriter scrolling animations
- Changed Space in block mode to toggle done
- Changed dropping a branch on itself to require a modifier key
- Changed
URLAPI property names and mutability - Fixed document file extension settings
- Fixed row handle clicks sometimes not registering
- Fixed crash when opening a context menu in block-mode rows
-
Bike 2.0 (Preview) (244)
- Added drag and drop
For extension authors: also added API to support drag and drop configuration through editor styles. Including:
context.isDragSource,selection-covered(),drop-indicator(), and new decorationcapabilities. -
Bike 2.0 (Preview) (243)
Themes are currently quite limited. Goal here is to test the concept and basic implementation. I’ll add new capabilities in the future.
- Added Themes panel in Settings
- Moved Editor Style from View to Settings
- Moved Text Wrap to Settings, renamed to Line Width
- Changed
selection.rowsAPI to return only visible rows - Renamed some API items (update bike-theme-kit and rebuild)
- Fixed commands affecting collapsed or hidden rows
Extension authors: type errors will appear if your extension uses renamed items.
-
Bike 2.0 (Preview) (242)
- Fixed OPML file save/load
- Fixed restore split sizes on macOS 26 (Tahoe)
-
Bike 2.0 (Preview) (241)
- Added spelling highlights when typing
- Added find highlights when ⌘F finding
- Added search highlights when ⇧⌘F searching
- Fixed New Document from Dock menu to activate Bike
- Fixed
document.frontmostWindowAPI to not always return null
-
Bike 2.0 (Preview) (240)
- Added Format > Add Link
- Added Format > Show Formatting…
- Added context menu to outline editor
- Added text replacements (spelling, zzz, etc.) on Return
- Added highlight of the last replacement until the caret moves
- Fixed some text rendering issues with RTL text (not all)
-
Bike 2.0 (Preview) (239)
- Added crash reporter
- Changed printing to show current focus and folds
- Fixed problem saving as Plain Text
- Fixed Vietnamese (and other) text input problems
- Fixed launch problems on earlier macOS 15.x releases
-
Bike 2.0 (Preview) (238)
Implemented many settings “per editor”. If you change that setting (such as Text Wrap) then it will affect the frontmost editor and also set a new default that new editors will use. Any already open editors will keep their current value.
- Added License panel
- Added Preview release indicator
- Added text caret to empty outline
- Added View > Editor Zoom
- Added View > Editor Style (moved from Window menu)
- Added restorable state for folded rows
- Added restorable state for View > Text Wrap, Focus, etc
- Reorganized settings panels
- Changed some of the theme and settings API
- Fixed repeat clicks (now work) on decoration buttons
- Fixed some broken caches; performance is a bit better
- Fixed broken scroll correction, scroll to end of document, etc
-
Bike 2.0 (Preview) (237)
- Fixed to embed latest “Bike (default)” style
-
Bike 2.0 (Preview) (236)
I had said I would get settings connected this release. Didn’t quite make it, but I did get lots of other features implemented and bugs fixed.
- Added ⌥-click on row handle to expand/collapse completely
- Added View > Text Wrap menu
- Added View > Focus Mode menu
- Added View > Typewriter Mode menu
- Added
bike.keybindings.activeModifiersAPI - Added hiding API commands from palette with a
.name prefix - Fixed ⌃O to split line
- Fixed Hide Statusbar menu item label
- Fixed crash when deleting focused row
- Fixed crash when undoing deleted rows in some cases
- Fixed crash when opening completely empty .bike/.opml files
- Fixed Keybindings API initial state in new documents
- Fixed unit tests (not in release, but it’s been a while :)
-
Bike 2.0 (Preview) (235)
Lots of work on styling internals that enables new rounded styles for block selection and blockquote rows. Also refined decoration animations to stay in better sync with text content.
- Improved block quote styling
- Improved block selection styling
- Changed
mergeDistancestyle property tomergable - Fixed crash on ⌥Return in a line with spaces
- Fixed
editor.transactionAPI to return result of passed closure - Fixed block selection to show all rows, not just the ends
-
Bike 2.0 (Preview) (234)
Added
mergeDistanceto decoration style.When
mergeDistanceis set similar decorations (equal style & nearby frames) are merged together into an irregular shape. This makes it possible to draw nice exterior borders and rounded corners around decorations that span multiple runs. In a future release I hope to make this work for text and row decorations too.- Added blur behind moving rows
- Renamed
OutlineStyletoEditorStylein API
-
Bike 2.0 (Preview) (233)
- Added click focus to focus in/out
- Added click handle to expand/collapse
- Added click link button to open link
For extension authors: decorations can now run commands.
- Added API to add commands to decorations
- Added CommandContext to CommandAction in API
- Added commandName to Decoration style
- Removed action from Decoration style
- Fixed effectiveRange parameter in AttributedString API
-
Bike 2.0 (Preview) (232)
Animation polish this release.
- Added row and caret bounce on split/join (souring on it)
- Changed removed rows to no longer fade
- Changed caret to snap when text wrap changes
- Improved focus in/out animations
- Improved scale animations (used during filtering)
- Fixed decoration sizes when zoomed out
-
Bike 2.0 (Preview) (231)
Includes the changes from build 230.
- Added printing
- Added Finder Preview
- Added Finder Thumbnails
- Fixed clipboard read/write text APIs
- Fixed crashes when reading some Unicode
-
Bike 2.0 (Preview) (229)
- Added back Find Count
- Added back Text Checking
-
Bike 2.0 (Preview) (228)
- Added back Sort Rows
- Added back Group Rows
- Added back Delete Rows
- Added back Duplicate Rows
- Added back Find & Replace
-
Bike 2.0 (Preview) (227)
Lots of porting Bike 1 code to Bike 2 this release.
I’ve ported Shortcuts and AppleScript support from Bike 1.x. Generally same features, but with a few wrinkles. For example Bike 2 doesn’t have hoisted rows, so that API is removed. Also Bike 2 adds run script commands to run Javascript code in extension app context.
- Added back Shortcuts
- Added back AppleScript
- Added back Copy/Paste of rich text
- Added back Go > Back / Forward navigation
-
Bike 2.0 (Preview) (226)
Finished user guide documentation for the updated extension system. Also finished related screencasts: Setup & Build, Creating Extensions, App Context Extensions, DOM Context Extensions, and Style Context Extensions.
- Fixed crash when opening Window > Outline Path Explorer
-
Bike 2.0 (Preview) (225)
One step back, two steps forward.
Lots of changes to the extension system. Lots of internal changes to style and layout systems. Likely introduced some new bugs in the process, but cleaned up a lot and will get to fixing visual bugs next.
- Added new documentation and tutorials to explain it all
- Changed styles to be part of the extension system
- Changed themes to be called outline styles
- Removed automatic extension builds; use the Bike Extension Kit
-
Bike 2.0 (Preview) (224)
- Added
Outline.getRowById - Removed
sourceparam from Keybindings and Commands APIs - Fixed Outline Path Explorer window to update
- Added
-
Bike 2.0 (Preview) (223)
To use the
fetchAPI your extension needs thefetchpermission, and the fetched URL needs to match one of the patterns in the newhost_permissionsmanifest key.- Added
AttributedString.toHTML() - Added
host_permissionsmanifest key - Fixed some memory leaks
- Fixed spelling of
AttributedString.subsringmethod
- Added
-
Bike 2.0 (Preview) (222)
- Added Window > Log Explorer for extension developers
- Changed postMessage/onMessage API to use JSON, not strings
-
Bike 2.0 (Preview) (221)
For extension authors: improvements to building, documenting and sharing extensions.
- Added
orderingsupport to sidebar items - Added a GitHub repository to share Bike extensions
- Changed base
tsconfig.jsonsettings to be more relaxed - Improved extension error logging
- Updated Creating Extensions documentation
- Added
-
Bike 2.0 (Preview) (220)
For extension authors: debugging helpers and keybinding fixes.
- Added bike.commands.toString for debugging
- Added bike.keybindings.toString for debugging
- Added
valueto all cases of OutlinePathValue - Fixed keybindings to again recognize modifiers
- Fixed keybindings documentation to use - as separator
-
Bike 2.0 (Preview) (219)
For extension authors: this release adds a
fetchAPI and new observe APIs.I have added an example inspector item to the @Bike extension that puts these changes together. To try it out fully select a word in your outline. You should see a list of synonyms show in the inspector. Dig into the @Bike extension to see how it works… but the basic idea is
fetchhappens in the app context. It requires thefetchpermission. It sends results to the DOMScript context.Questions welcome!
- Added
fetch(fetchpermission) API - Added
outlineEditor.observeSelectionAPI - Added
window.observeFrontmostOutlineEditorAPI - Added more editor API for folding and focus testing
- Changed some fields in
outlineEditor.selection - Removed network access in DOMScripts (fetch should always fail)
- Added
-
Bike 2.0 (Preview) (218)
New release! Big effort this time around is giving extensions the ability to display their own UI in WebViews. Along the way I also managed to reorganize a bunch of things. Please see discussion in the forums.
- Improved zoom animations when filtering
- Changed filtering to show selected rows at full scale
- Fixed sidebar clicks when multiple windows are open
For extension authors: extensions can now show their own UI, plus new alert, URL and clipboard APIs.
- Added
bike.showAlertAPI - Added
window.presentSheet(domScriptpermission) API - Added
window.inspector.addItem(domScriptpermission) API - Added URL open method and other URL (
openURLpermission) API - Added type parameters to clipboard API
- Moved Bike-provided extension code from @Startup to @Bike
- Fixed
console.logoutput to show in Safari inspector
-
Bike 2.0 (Preview) (216)
- Added
setMetadataandgetMetadatato outline API - Fixed memory leaks and reloading extensions after code change
- Fixed extension keybindings that use modifier keys
- Fixed root row (
<ul>) attributes round-tripping in Bike format
- Added
-
Bike 2.0 (Preview) (215)
Added sidebar live queries.
Sidebar queries are configured by the extension API. If you have run a previous version of Bike 2, a @Startup extension is installed that doesn’t use that API, so you won’t see live queries. To fix this, choose Bike > Extensions…, delete the @Startup extension in the Finder window that opens, and restart Bike. A new @Startup extension will be created that uses the new API.
Now when you create a heading in your outline it should show in the sidebar under “Headings” (you might have to expand “Headings” to see it). You can modify your @Startup extension to create your own live queries.
- Fixed layout bugs (more remain)
- Fixed some memory leaks
-
Bike 2.0 (Preview) (214)
- Added ability to provide an ID for new rows
- Added extension API tutorial
-
Bike 2.0 (Preview) (213)
- Added extension API for row text
- Added extension API to create outline from query
- Changed extension API import/export options
- Fixed filtering to select first match in block mode
- Fixed pasting when in text mode (e.g. Raycast emojis)
- Fixed keybindings breaking after ⌘Tab away from Bike
- Fixed named keys (such as
spaceordownarrow) in keybindings
-
Bike 2.0 (Preview) (212)
For extension authors: extension API changes.
- Added
Outline.insertRows,Outline.moveRows,Outline.removeRows - Added
Outline.query,Outline.scheduleQuery,Outline.streamQuery - Added
Outline.importRows,Outline.exportRows - Fixed
console.logto show in Safari inspector and Console.app - Fixed Outline Path Explorer to always show frontmost outline view state
- Fixed live reload of @Startup extension
- Added
-
Bike 2.0 (Preview) (211)
- Added filtering (⇧⌘F)
- Added extension API: Commands, keybindings, sidebar items
- Simplified Outline > Folding
-
Bike 2.0 (Preview) (210)
Automatic software update is broken for this version. Fixed for next… I think! You’ll need to download and install manually.
The focus of this release is on themes and outline paths. Themes have changed a lot since the previous preview release.
Learn more:
- Watch theme building tutorial
- Read in progress Bike 2 Guide
-
Bike 2.0 (Preview) (209)
- Added software update
- Added app infrastructure, including settings (much unconnected)
- Polished the selection model
- Started outline search/filtering (work in progress)