Bonsai 2.8
This is the first release in the 2.8 series and one of the most significant in the last couple of years.
Critical parts of the compiler, IDE and bootstrapper have been rewritten to allow evolving the infrastructure into the new cross-platform .NET core. We have made the editor and language learning experience more accessible by providing support for rich rendering of Markdown annotations and embedded documentation for all operators. Finally, we have established the Bonsai Foundation, an independent organization to support our commitment to a free and open-source future, and to the benefit of our growing community.
Embedded code annotations and documentation
Code comments are an essential part of any programming language, and Bonsai is no exception. As the complexity of projects increases, and knowledge needs to be transferred across generations of scientists, it becomes more important to have effective ways of sharing information about how the internals of specific workflows work.
This release introduces a new Annotation
operator, which can be placed on its own or attached to any node, and where you can write your own development notes or operating instructions in Markdown to be saved with the workflow. Being a visual language, we think that having the ability to write-down rich HTML annotations, potentially with images or schematics, will be an important feature of Bonsai code comments. Markdown provides a great compromise between ease-of-use, flexibility and rich HTML support, which is leveraged by the new built-in browser panel which has also been co-opted to display embedded documentation.
Fully-featured Linux editor
We've been progressively cleaning up the kinks in cross-platform support of the current Bonsai editor (Mono .NET framework) and we now can run the editor with full-functionality (i.e. cameras, OpenGL, sound, serial ports) in latest Ubuntu, Arch Linux and Raspberry Pi. By taking advantage of VS Code on Linux it even becomes possible to use C# scripting directly.
We have documented the installation steps in detail and removed most crippling crashes and painful limitations around Bonsai on Mono. All the functionality required to run our tutorials and learning materials should now be available to any Linux system.
Announcing the Bonsai Foundation
We are welcoming our first new code contributors (@bruno-f-cruz), and announcing the Bonsai Foundation as part of our commitment to make Bonsai a free, open-source, and sustainable community-driven project. The primary role of the Foundation is to organize the development of the Bonsai ecosystem, and facilitate the sharing of contributions between individuals and organizations who want to volunteer their work for community projects. We hope that by establishing clear contribution guidelines, and improving access to freely available teaching materials, documentation, conferences and summer courses, we can empower current and future generations of scientists anywhere in the world to use this free and open-source programming language.
We hope you will join us in our journey!
What's Changed
- Add dotnet template for creating a new bonsai environment by @glopesdev in #1251
- Increase default max number of significant digits for floating-point values in CsvWriter by @glopesdev in #1261
- Reuse top-level prefix for all extension base types with explicit XML type declarations by @glopesdev in #1072
- Allow generic type resolution of TypeMapping values outside the core namespace by @glopesdev in #1279
- Allow overload inference for polymorphic operators by @glopesdev in #1291
- Ensure unique XML namespace prefix declarations by @glopesdev in #1292
- Avoid throwing on ResourceSubject dispose if source sequence terminated exceptionally by @glopesdev in #1293
- Ensure priority of base non-polymorphic properties by @glopesdev in #1306
- Add support for adding rich annotations to the workflow by @glopesdev in #1311
- Add support for dynamic keyword and dynamic object binding in C# scripts by @glopesdev in #1258
- Ensure single subscription to Gate opening events by @glopesdev in #1315
- Optimized workflow reordering and insert at cursor by @glopesdev in #1324
- Add support for in-editor docs browser by @glopesdev in #1359
- Improved support for editing annotations by @glopesdev in #1361
- Add support for the HasFlag operator by @glopesdev in #1364
- Add support for polymorphic operator docs by @glopesdev in #1369
- Ensure replaced nodes keep the same index by @glopesdev in #1371
- Add support for using System.Numerics namespace in local scripts by @glopesdev in #1373
- Limit group context menu to core nested operators by @glopesdev in #1376
- Allow derived IO writer classes to specify base path by @glopesdev in #1377
- Add tags to project templates by @glopesdev in #1382
- Regression testing for sorting and editor changes by @glopesdev in #1393
- Rewrite bootstrapper logic to avoid relying on AppDomain by @glopesdev in #1392
- Mono compatibility improvements by @glopesdev in #1407
- Redirect headless exceptions to stderr by @glopesdev in #1411
- Add assembly reference for data serialization by @glopesdev in #1413
- Fixes and improvements to workflow sort order by @glopesdev in #1414
- Cache configuration parameters for each async call in LoadImage operator by @glopesdev in #1421
- Bump NuGet.Protocol from 6.3.1 to 6.6.1 by @glopesdev in #1422
- Add keyboard shortcut for changing history length by @glopesdev in #1423
- Early error checking and file name generation for FileSink by @glopesdev in #1430
- Improve support for high-frequency visualizers by @glopesdev in #1415
- Allow lazy initialization of webview panel by @glopesdev in #1432
- Simplify qualified name for workflow element icons by @glopesdev in #1433
- Avoid returning resources declared inside disabled nodes by @glopesdev in #1439
- Update package template debug settings for new bootstrapper by @glopesdev in #1442
- Avoid deadlock when disposing serial connection by @glopesdev in #1443
- Refactor default serial port implementation to avoid event callbacks by @glopesdev in #1444
- Refactor arduino interface to avoid event callback by @glopesdev in #1445
- Refactor text visualizer to use buffered updates by @glopesdev in #1446
- Add net6.0 build target to player project by @glopesdev in #1447
- Update package dependencies by @glopesdev in #1448
- Add item templates for dotnet new by @glopesdev in #1449
- Add community code of conduct by @glopesdev in #1450
- Remove XML serialization properties from public API by @glopesdev in #1451
- Add tie-break for method overloads in derived classes by @glopesdev in #1452
- Add operators for reading and writing binary data from a serial port by @glopesdev in #959
- Improve information contrast for obsolete operators by @glopesdev in #1455
- Add support for streaming binary serial read buffers by @glopesdev in #1456
- Ensure output of Normalize is bounded between zero and one by @bruno-f-cruz in #1400
- Add operator to query an environment variable by @bruno-f-cruz in #1232
- Require user defined conversion when multicasting to subject with non-matching type by @glopesdev in #1459
- Refactor matrix and spike visualizers to use buffered updates by @glopesdev in #1460
- Allow starting editor session on a specified folder by @glopesdev in #1464
- Add citation file by @glopesdev in #1466
- Ensure VideoWriter frame size is cached per subscription by @glopesdev in #1468
- Ensure single row display for text visualizer by @glopesdev in #1470
- Improve cursor selection when clicking in editor empty space by @glopesdev in #1471
- Ensure restored bounds are at least in one screen by @glopesdev in #1472
- Pack player project as a dotnet tool by @glopesdev in #1479
- Update bootstrapper to .NET 4.8 by @glopesdev in #1481
- Disable caret selection from text visualizer by @glopesdev in #1485
- Clear text visualizer on right double-click by @glopesdev in #1487
- Add ReadAllText and WriteAllText operators by @glopesdev in #1492
- Allow TypeMapping extension types by @glopesdev in #1497
- Allow filtering which types to include in CollectionEditor by @glopesdev in #1498
- Enter the Bonsai Foundation by @glopesdev in #1480
New Contributors
- @bruno-f-cruz made their first contribution in #1400
Full Changelog: 2.7.2...2.8.0