This is the first release in the 2.9 series, which introduces significant changes to the language editor experience. Please give us any feedback either in the comments below or by opening a new discussion.
In Bonsai 2.9 we introduce a new workflow navigation model leveraging a flexible docking layout panel, and a nested hierarchy tree view with breadcrumbs to allow easily and quickly jumping between different parts of a complex project. The docking architecture also enabled us to start developing new editor tools such as the new find all references window.
The new workflow state watch mode provides an unprecedented level of runtime feedback about the inner workings of a reactive workflow, including when sequences are subscribed to, when they produce values, terminate, or are cancelled. We expect this mode to provide an invaluable tool for learning visual reactive programming and understanding the behavior of programs written in Bonsai.
In anticipation of new editor features, we are introducing a reorganization of the .layout files, which were previously used to store debugger visualizer settings over multiple runs. These files previously cluttered folders containing multiple workflow files, and were very hard to extend to more complex project-based settings. With this reorganization we expect to facilitate a cleaner project folder structure and introduce more clarity on the version control of workflows.
Finally, we modernized the package manager dialog and completed our migration from MyGet to NuGet. As discussed during the last MyGet outage, we urgently needed to broaden our community package deployment options. The new package manager introduces support for two new package types: BonsaiLibrary and BonsaiGallery for packages providing libraries of Bonsai operators and example workflows, respectively.
These package types will be used to curate the nuget.org feed to keep our package manager focused on libraries providing reactive operators. Currently package type filtering is only supported for the nuget.org feed, but it is turned on by default there. New packages deployed to nuget.org are expected to declare both Dependency and BonsaiLibrary as their package types for maximum discoverability.
Important
In the near future, we will move entirely out of MyGet and will archive the community feed.
What's Changed
🔮 Release Highlights
- Rewrite editor navigation model by @glopesdev in #1870
- Add editor find tool for subjects and operator types by @glopesdev in #2227
- Move layout files to workflow settings folder by @glopesdev in #1956
- Modernize package manager dialog by @glopesdev in #1969
- Add support for watching individual operator state by @glopesdev in #1975
🎉 New Features
- Allow propagation of Defer nested sequence visualizer by @glopesdev in #1931
- Rename CombineTimestamp to CreateTimestamped by @glopesdev in #1941
- Make period a nullable property of reactive timer and clarify documentation by @glopesdev in #1957
- Add MatrixWriter overload for sequences of unmanaged types by @glopesdev in #2110
- Improve consistency of visualizer context menu by @glopesdev in #2158
- Save workflow settings when closing the editor by @glopesdev in #2156
- Allow selecting output menu items using keyboard by @glopesdev in #2173
- Add multiline string editor for string properties by @glopesdev in #2192
- Improve editor experience when manipulating visualizer mappings by @glopesdev in #2195
- Use workflow filename as default export image name by @glopesdev in #2204
- Add obsolete message to operator descriptions by @glopesdev in #2208
- Expose texture array interface on texture sequence by @glopesdev in #2205
- Add support for Prepend and Append operators by @glopesdev in #2264
- Make package source configuration dialog a true modal window by @glopesdev in #2297
- Allow multi-channel data when reading whole files using MatrixReader by @glopesdev in #2301
- Improved gallery package builder dialog by @glopesdev in #2269
- Add new VisualizerWindow operator by @glopesdev in #2240
- Replace MyGet with NuGet as default package source by @glopesdev in #2285
- Update package template to introduce recommended repository structure by @glopesdev in #2306
- Add command for creating a new environment by @glopesdev in #2316
- Automatically use workflow local environment on double-click by @glopesdev in #2315
🐞 Bug Fixes
- Avoid launching editor during image export by @glopesdev in #2124
- Remove idempotent operations from the undo history by @glopesdev in #2157
- Ensure ordering before removing ungrouped nodes by @glopesdev in #2164
- Improve navigation behavior when no tabs are open by @glopesdev in #2166
- Ensure topological sort before deletion by @glopesdev in #2169
- Ensure visualizer mapping build state is cleared by @glopesdev in #2172
- Ensure OSC message format is culture invariant by @glopesdev in #2193
- Fallback to base url when no docs are found by @glopesdev in #2197
- Prune all fully disabled branches during build by @glopesdev in #2178
- Clear annotation panel on new workflow creation by @glopesdev in #2199
- Ensure property mapping and member selector operators prefer derived properties by @glopesdev in #2201
- Ensure any workflow errors are cleared on open by @glopesdev in #2203
- Avoid loading visualizer layout on mismatched type name by @glopesdev in #2213
- Avoid multiple shutdown paths out of StartWorkflow by @glopesdev in #2212
- Ensure editor workflow is not set until validation by @glopesdev in #2231
- Avoid corrupting editor state when loading workflow with circular includes by @glopesdev in #2235
- Disable confusing editor actions on disabled nodes by @glopesdev in #2239
- Await initialization before loading layout by @glopesdev in #2232
- Avoid setting minimum size on text visualizer by @glopesdev in #2253
- Initialize editor layout after workflow validation by @glopesdev in #2255
- Await asynchronous workflow initialization on editor load by @glopesdev in #2258
- Fix various issues with
Extensions.csprojhandling and add unit testing for it by @PathogenDavid in #2180 - Ensure workflow does not contain unknown types when exporting to an image from the CLI by @glopesdev in #2267
- Ensure visualizer predecessor search can extend to nested scopes by @glopesdev in #2268
- Add missing null guard in SelectPackageDetails by @glopesdev in #2290
🚀 Performance Improvements
- Replace uses of WebRequest with HttpClient by @glopesdev in #1937
🔧 Engineering
- Update launch settings to target artifacts folder by @glopesdev in #1923
- Update ScintillaNET to support modern .NET by @glopesdev in #1924
- Allow building workflows as typed sequences by @glopesdev in #1942
- Target netcore on editor and bootstrapper projects by @glopesdev in #1907
- Configure tests to run on .NET 8 by @PathogenDavid in #1952
- Fix test target framework issues by @PathogenDavid in #1958
- Exclude build dependencies when counting inputs to new nested node by @glopesdev in #1946
- Use deployment key in CI for manipulating Git repository by @PathogenDavid in #1985
- Add support for sorting test workflows by @glopesdev in #1964
- Add support for long paths on Windows by @glopesdev in #2016
- Keep Linux builds on Ubuntu 22.04 for now by @PathogenDavid in #2079
- Consolidate shared menu icons in global resources by @glopesdev in #1989
- Deprecate obsolete visualizer operators by @glopesdev in #2206
- Improve support for workflow property assignment by @glopesdev in #2263
- Set user agent string used for NuGet network calls by @glopesdev in #2266
- Replace visualizer dialog terminology with visualizer window by @glopesdev in #2259
- Ensure node argument range indicator is displayed by @glopesdev in #2284
- Account for variable length parameters correctly by @glopesdev in #2282
- Avoid collapsing WinForms designer files in the PR review UI by @PathogenDavid in #2299
- Update upstream dependencies by @glopesdev in #2308
Full Changelog: 2.8.5...2.9.0