New Buoy releases

v0.30.0

Highlights

  1. The VSCode layout editor is coming along! It’s not pretty but quite functional now. Once you’ve written a Window block into a .bui file, a link will appear for switching to the layout editor. There’s a shortcut key in the lower left to help understand how to set positions and anchors. Locks are available in the individual control property lists.

    Please note: the layout solver only runs when you resize the window to avoid the jumpiness that occurs in other layout tools. Please exercise this feature and let us know how it works.

  2. info.plist files are now embedded in macOS console apps.

  3. Added a “container control”

  4. Added an attribute/decorator for converting classes into data marshalling layouts for databases. See @DatabaseRecord in the docs and examples for more info.

New Features

  • Add hotkey legend to layout editor palette

  • Disambiguate layout editor between multiple Window/View blocks in one file

  • Resizable window, multi-select drag, and working snap in layout editor

  • Embed Info.plist in the buoy binary and console-mode macOS executables

  • Add declarative View blocks for “container controls”

  • Add @DatabaseRecord attribute for compile-time database marshaling

Bug Fixes

  • Index Window/View/Control/Constraints as indent-openers in the formatter

  • Correctly update all governing anchors in constraint drag steady-state

  • Only run the solver when resizing the window/view

v0.31.0

Highlights

  1. This release includes the first version of the SQLite plugin with our proposed public database API attached.

    After much discussion, we are aiming at not referring to SQL in the commands that do queries for the express reason that not all data sources are going to be sql-based with the hope that the common adopted language calls will make it easier to move among sql, nosql and other formats.

  2. In VSCode there’s a new Build Config view available for determining what happens when you do a build from within. When you have a .bui file selected, look at the bottom-right of the window, next to the language selection. There’s a new Gear icon there that will let you access those settings. They are stored in a .vscode directory, next to the main()file in your project.

New Features

  • Add Call statement keyword

  • Rewrite database package as SQLiteDatabase backend of stdlib base

  • Backend-agnostic abstract Database base layer in stdlib

  • Per-project VSCode build config for multi-target Buoy compiles

Bug Fixes

  • Don’t let an Abstract method’s optional End consume the enclosing End Class

  • Make layout editor control borders visible in dark themes

  • Stop a stray .buoy/ dir from poisoning project-root detection

  • Relocate and package Linux crt0.o for installed toolchains

  • Defer window close callback off AppKit’s synchronous teardown to stop close-button crash

  • Copy Windows runtime DLLs correctly when -o has no directory component

  • Alphabetize the control lists in the layout editor

  • Reject Optional =/<> comparison in Sema instead of crashing codegen

  • Default uninitialized Array Of T property to empty array

v0.32.0

Lots of requested items in today’s release… XML and PostgreSQL plugins, localization for dates and numbers, etc.

New Features

  • AI coding kit — buoy ai init, MCP docs search, VSCode setup command

  • Add XML package (Xerces-C+±backed DOM core)

  • Suggest event names after Handle in VSCode completion

  • Locale-aware Number/Currency formatting via Locale.FormatNumber/FormatCurrency

  • Flesh out FileSystemItem + FileSystemDrive / System drive enumeration

  • Locale-aware DateTime.ToString

  • Update Zip package’s API in ZipReader/ZipWriter

  • Add System.Folders (SpecialFolder) known-folder resolver

  • Add inline If(condition, trueValue, falseValue) conditional expression

  • Add cross-platform DateTimePicker control

  • Add UDP broadcast and multicast support to UDPSocket

  • Port TLS shim (runtime/tls/TlsC.cpp) from Botan to OpenSSL

  • Port Crypto package native shim from Botan to OpenSSL

  • Add PostgreSQL package (PostgreSQL backend for Database abstract class)

Bug Fixes

  • Ship only cleaned learning chapters

  • Deliver fluenticons as a single compressed .buipkg instead of ~6,238 loose files

  • Default long-form local Array Of T to empty array (urgent segfault)

  • Regression guard + close-loop for macOS window close-box crash (buoy-releases#39)

  • Create Windows named pipe synchronously in ServerSocket.Listen() to close Mode.IPC race

  • Harden DateTimePicker Linux backend against null-deref and floating-ref misuse

  • Call ExitProcess explicitly on Windows so Winsock worker threads can’t block exit

  • Extend Linux libc/libpthread stubs for OpenSSL’s fuller libc surface

  • Disable OpenSSL async/QUIC, fix Linux atexit versioning, extend macOS libc stubs

Two releases today:

v0.33.0

New Features

  • Add System.Microseconds() monotonic elapsed-time counter

  • Add Inline function/method modifier for LLVM alwaysinline

Bug Fixes

  • Claim ownership of array-typed elements in array literal codegen

  • Wrap buoy --help output to 75 columns

v0.34.0

New Features

  • Chained array indexing over nested arrays (theArray(i)(j))

  • Add Locale.ParseNumber for locale-aware string-to-number conversion

  • Add Array.Shuffle in-place shuffle method

Bug Fixes

  • DateTime.MillisFrom1970/SecondsFrom1970 lose all sub-second precision

  • Linux native .so links leak build-machine’s absolute cache path into DT_NEEDED

  • Dedupe vendored license files in packaging scripts

  • Claim ownership of array-typed elements in ARC retain/release loops

  • Flush stdio on Linux exit by calling libc exit() from crt0

  • Claim ownership of array-typed Structure/Record fields in ARC

  • Claim array-typed collection ownership in For Each codegen

  • Claim ownership of array-typed elements in IndexAssign/Append/Insert

Buoy v0.35.0

New Features

  • ByRef works on arrays and every other reference type
  • leak detector reports per-object detail instead of just a count

Bug Fixes

  • retain by-value object/array parameters so reassigning one doesn’t free the caller’s object
  • debugger shows array and composite values instead of empty rows
  • Linux .so SONAME/f + regex packages; WindowsCRT time exports

Something of note…

V0.35.0 is the first version of Buoy where we built the compiler for Linux in parallel with the macOS version. Windows is proving a little more challenging, but we are getting there.

Please make sure to categorize your bug reports in case the issues are Linux specific.

v0.37.0

New Features

  • Windows installers for both Intel and ARM
  • Exit For / Continue For loop-variable
  • For…Downto descending-loop shorthand

Bug Fixes

  • Return loop frame by value from resolveLoopFrame to avoid dangling pointer
  • Guard Exit/Continue loop-variable rejection on recognized operand

Note: Just in case you think you’re missing something, there was no 0.36.0 build. We had a minor glitch in our release workflows that caused us to skip directly from 0.35.0 to 0.36.1 which was all internal changes anyway.

v0.38.0

New Features

  • BuoyScript — embeddable Buoy JIT (LLVM ORCv2)
  • Value-returning Event/Handle/RaiseEvent + HTMLView.CancelLoad
  • Add Application.Executable As FileSystemItem
  • Add WindowType, Window.Close(), and Window.ShowModally
  • Autosave Project Build Settings webview
  • Add System.Log / LogLevels
  • Add System.EnvironmentVariable (get/set)
  • Add System.CPUCount
  • Bare Import falls back to a same-named installed package

Bug Fixes

  • Resolve each library in a multi-library package to its own file
  • Bump brace-expansion to 5.0.8 (alert #27)
  • Nest LogLevels inside Class System
  • Include Windows installer exes in published release assets
  • EmitTryUnwind reverse-iterator invalidated by nested Try in a Finally body
  • Stop false-positive property/method name-collision warning on TimeZone.OffsetFromUtc
  • Release Shared Property object slots at exit, stopping false-positive leak reports

I can confirm this has stopped now.. no more error

v0.39.0

New Features

  • Native .deb/.rpm packages for Linux; switch Linux zip to .tgz
  • Expand Package to whole-package imports, add packages-src fallback
  • Fold Module dots in class-method mangling
  • Resolve Module-qualified classes, enums and calls
  • Resolve flattened Package symbols and report collisions
  • Parse Package and Module declarations
  • Add PackageDecl plus Module nsPrefix/flatten fields
  • Reserve ‘Package’ and ‘Module’ keywords

Bug Fixes

  • Socket background thread racing process-exit teardown of SocketDispatchable.mLock
  • StreamSocket/TCPSocket/ServerSocket leak their OS sockets when dropped without Close()
  • –debug builds segfault destroying a Thread or Task
  • UDPSocket leaks its OS socket when dropped without Close()
  • Windows SCM console-redirect crash was a CRT link-order bug, not Session-0-specific
  • Preserve Event/Operator declarations through generic-class monomorphization
  • Package-qualified module identity for same-named package modules
  • Throw/Try/RaiseEvent silently dropped from generic-class method bodies
  • Emit //, /* */, and #If highlighting rules in VSCode grammar generator
  • VSCode Run button breaks on Windows (PowerShell &&, missing .exe)
  • Constructor throw leaks partially-constructed object
  • Treat a bare ‘Package’ declaration as a dependency in forEntry()
  • One canonical shadow predicate for Module/namespace qualification
  • Instance fields/Properties shadow Module and namespace names
  • Guard namespace-qualified call dispatch against shadowing locals
  • Guard Module dotted-receiver collapse against shadowing locals
  • Move duplicate-class file attribution to PartialClassMerge
  • Accept soft-keyword class names (Set/Get) in New’s dotted-segment loop

v0.39.1

Bug Fixes

  • Cross-link TCPSocket/ServerSocket/TLS for x86_64-darwin
  • Add raise/ldiv to the Linux libc cross-link stub
  • GTK4 Linux controls no longer fire change-events for programmatic sets
  • Export Block-runtime symbols in the x86_64 macOS libSystem.tbd stub
  • Allow unqualified nested-enum references in a Property’s default initializer
  • Abstract method with a body no longer desyncs the parser’s class scope
  • Export ___exp10/_exp2 in macOS libSystem.tbd stubs for optimized Math.Pow builds

v0.40.0

New Features

  • Add yaml package (YamlItem, mirroring JSONItem’s API)
  • Add Alignment (TextAlignment) property to Label/TextField/TextArea
  • Add Array.LastIndex(arr) as sugar for Count(arr) - 1
  • Add Stepper control to the Buoy UI stdlib

Bug Fixes

  • TextField(FieldType.Number) doesn’t restrict input on any platform
  • Reject Window-block control names that collide with a synthesized hook
  • Optional.Or(literal) fails LLVM IR verification
  • Random.RandomInteger/Currency.FromInteger/FromMinorUnits/Sleep reject sized ints
  • Array.Count/.Count/Array.LastIndex segfault on a nil array element
  • Uncaught runtime traps print a diagnostic before aborting
  • Assignment through a member on an indexed/call statement head
  • Vendor AppKit.tbd so Declare … Lib “AppKit” actually links
  • Array-property element write through a dotted/Me receiver
  • Minizip-ng Windows package build — undefined snprintf
  • Identifier-form Import resolves against the importing file’s own directory
  • Verify DateTime/TimeZone sized-int args, close stale bug report
  • Mark Export’ed functions dllexport so Windows --library builds actually export symbols
  • Reject compound-assign/read through bare-name Assigns setter with a clear diagnostic
  • Rename regex package’s Match consumers to RegexMatch
  • Gate tests/streams.bui and samples/streams.bui tmp paths for Windows
  • Link Windows targets against ucrtbase before msvcrt (cross-CRT crash)
  • Attribute structural diagnostics to the user’s file, not stdlib:UI
  • Allow zero-arg bare-name Assigns setter dispatch (c() = 5)
  • Move _ftelli64 from msvcrt to ucrtbase in Windows stub
  • Skip resolution for already-loaded prelude imports (E209 regression)

doh! behind again!

v0.41.0

New Features

  • Implement Set algebra (Union, Intersect, Difference, IsSubsetOf, IsSupersetOf)
  • Allow Structure members to declare inline default values

Bug Fixes

  • Linux .rpm build crashes stripping bundled Windows import-lib stubs
  • Discord release notification errors fail the release, cap math can exceed 2000 chars

v0.42.0

New Features

  • Add Application.Windows/WindowCount
  • Add MenuBar.Menus/FindMenuByName/FindMenuByTag

Bug Fixes

  • Shared Property crashes - non-constant initializers and instance access
  • Application-level menu dispatch dropped when a Window shares a MenuBar

v0.43.0

New Features

  • Add SelectFolderDialog and expand file dialog properties

Bug Fixes

  • Create missing output directory before linking, on all targets
  • Enable AES crypto backend for zip package on Linux
  • Parse explicitly-typed structure literals as call arguments
  • Resolve class-nested enum unqualified in its own method signatures
  • Stop generic Of-list parsing from consuming a following parameter’s comma
  • Stop GTK Window teardown from freeing already-destroyed child widgets
  • Sink floating GTK4 widget refs before unref on Linux
  • Universal-darwin desktop .app bundles no longer fail at lipo
  • Add getenv/_putenv_s to Windows ucrtbase stub, fixing System.EnvironmentVariable setter link failure
  • Bound WinHTTP connect/DNS-resolve timeouts on Windows
  • Stop buoy_system.dll implicitly importing iphlpapi.dll on Windows
  • Bump brace-expansion to patched versions (alerts #28, #29)
  • Export bui_message_box_show from Windows Buoy_ui.def

v0.44.0

New Features

  • Add constructor-argument syntax to Window/View/Control block declares

Bug Fixes

  • Complete Handle MenuSelected As Boolean migration in stale samples/tests/docs
  • Flush buffered stdio before StdOut/StdErr raw write() calls
  • Substitute generic type parameter in CType/TryCast/IsA cast targets
  • Import real ucrtbase log2 instead of double-rounding on Windows
  • Restore sticky IRBuilder debug location after Block/Lambda body emission
  • Reject loop control inside a Lambda targeting an outer loop instead of crashing codegen
  • Merge Windows AppIcon and version resources into one COFF object
  • Make package payload verification O(N) instead of O(N^2)
  • Link libraries referenced only by method-scoped Declares
  • Resolve bare array-element write to instance Property instead of erroring undefined variable
  • Resolve bare array-typed instance Property access instead of erroring undefined function
  • Rebuild Linux x86-64 libbuoy_picture.so with lunasvg, harden build scripts against silent stub fallback
  • Stage Resources/ on remote-test uploads; sanitize fluenticons digest path on Windows
  • Stop attaching .zip/.tgz staging payloads to published releases

# v0.45.0

New Features

  • Basic Import flattens by default, opt out with As or selective list
  • Implicit conversion on Dim initializer and plain reassignment
  • Hide underscore-prefixed names from LSP autocomplete
  • Enforce Public/Private on package declares/*.bui, default Private to the package
  • Add Prefs.SetSecure/GetSecure/HasSecure/DeleteSecure and PrefsException
  • Implement Linux libsecret+OpenSSL-fallback backend for secure Prefs
  • Add FileSystemItem.CreateFolder
  • Implement Windows Credential Manager backend for secure Prefs
  • Implement macOS Keychain backend for secure Prefs
  • Declare secure Prefs C ABI in PrefsC.h
  • Add .Name pseudo-property on enum-typed values
  • Resolve Enum.Values Of T to a synthesized Array Of T literal
  • Parse Enum.Values Of T as a namespace call with a type argument

Bug Fixes

  • Retain accepted ServerSocket connection past ConnectionRequest
  • RunLoop dispatch-queue init race in --library builds
  • Address final-review findings — extend implicit conversion to member writes and Shared/Lazy Property initializers, ship docs/plan/tests
  • Extend implicit conversion fallback to class field initializers
  • Reject @-attributes placed on a declaration that doesn’t accept one
  • Validate @Aligned is a power of two >= 8, not just an Integer
  • Create the Linux fallback .enc file 0600, not umask-default
  • Apply the code changes described in 06c6971a
  • Address final whole-branch review findings
  • Use SECRET_SERVICE_OPEN_SESSION for the reachability probe
  • Distinguish libsecret loadable from Secret Service reachable
  • Address code review findings in Linux secure-Prefs backend
  • Array.Append/Insert require exact element type, breaking Liskov substitution
  • Correct DeleteSecureDomain partial-failure and enumerate-error handling
  • Address code review findings in macOS Keychain secure-prefs backend
  • Close RunLoop dispatch queue’s lazy check-then-init race
  • Populate TCPSocket.LocalPort via getsockname(), stopgap StreamSocket.Timeout default
  • Close Shell resource leaks on error/teardown paths
  • Reject trailing args on Enum.Values Of T, fix docs and stale comment
  • Update stale EnumEntry doc comment, dedupe .Name codegen branch emission
  • Bare access to own Shared members inside a Shared method; ship Assigns shared-receiver coverage

v0.46.0

New Features

  • Add Build/Debug buttons to editor toolbar and context menu
  • Add buoy.debug command

Bug Fixes

  • Default uninitialized String properties/fields to “” instead of null
  • Apply real C-ABI coercion to FFI struct-by-value returns
  • Add ldiv to Windows CRT stubs, fix LDivT LP64/LLP64 mismatch
  • ListBox.RowAt/ColumnAt silently double-scale under real Windows DPI
  • Floor p2l() toward negative infinity instead of truncating toward zero
  • Gate ffi_localtime_r worked example for Windows
  • Unary Not on Integer/Flags Enum produces valid bitwise complement
  • Enforce StreamSocket.Timeout on Connect and Write
  • Resolve Package <name> declarations in LSP document analysis
  • Embed asInvoker Windows manifest in every binary Buoy produces
  • Scope workspace/symbol to the whole program’s import closure, not just the forward closure
  • Use strtoll instead of strtol for Integer.Parse on Windows
  • Use OS temp dir instead of hardcoded /tmp in http-server test
  • Mangle generic-class Enum type arguments correctly instead of “$Unknown”
  • ServerSocket accept thread never exits on Linux Close(), plus StreamSocket fd leak
  • Type-check Shared Property const-foldable initializers in Sema
  • Remote test harness never closes launched process’s stdin, hanging stdin-reading tests
  • Clean stale temp .app bundle before VSCode Run/Debug compile
  • Linux clipboard async read deadlocks on self-owned content (no timeout escape hatch)
  • Rebuild zip package’s stale Windows minizip-ng.dll (snprintf + strdup)
  • @Aligned class allocation crashes Windows at load (STATUS_ENTRYPOINT_NOT_FOUND)
  • Cstring test’s user-facing strdup declare crashes Windows at load
  • Windows binaries using String.RegexMatch/RegexReplace crash at load (STATUS_ENTRYPOINT_NOT_FOUND)

v0.46.1

Bug Fixes

  • Tests/zip.bui hardcodes POSIX /tmp paths, fails first assertion on Windows
  • Windows ServerSocket Mode.IPC aliases listening pipe as accepted connection, double-closes it
  • Run-remote-test.sh can silently run a stale binary on extract failure
  • Syntax to call a Shared method/property on a generic-class instantiation
  • Fileservice-buoy GET /help crashes with NilObjectException
  • Drop invalid static-local capture in PrefsLinux.cpp std::call_once
  • Bui_picture_to_png passes libpng row_stride in components, not pixels

v0.47.0

New Features

  • Add cross-platform accessibility to UIControl
  • Add Application.UnhandledException crash-reporting hook
  • Add Open Build Graph button to Project Build Settings
  • Add right-click Add/Edit/Delete menus and schema-driven forms
  • Absolute-position, draggable, linkable nodes in the build graph webview
  • Walk the upstream chain when running a build graph node
  • Add node/edge CRUD and persistence to the build graph panel
  • Add custom-step task kind to the build graph task provider
  • Extend build graph postMessage protocol for editable nodes/edges
  • Add build-graph-file persistence (load/save)
  • Add upstream-chain resolution with runMode filtering
  • Add cycle detection for build graph edges
  • Add step-type registry
  • Add Sign step type
  • Add step-type framework, unit test harness, Copy Resources step
  • Add Build Graph panel (v1) - read-only target status board

Bug Fixes

  • Edge lines anchor to measured connector-dot positions, not guessed math
  • Node stays “running” forever on an early error path
  • Copy Resources hang, wrong-folder targeting, dark-mode borders; add Stop
  • Address live-testing feedback on the build graph webview
  • Sync-guard Shell cross-thread state and close DataAvailable notify race
  • Address final-review findings (shell quoting, copy idempotency, listener leak, test wiring)
  • Suppress post-drag click and reset stale pointer-drag state on re-render
  • Set running status synchronously to close re-entrancy race window
  • Guard against re-entrant node execution and handle executeTask failures
  • Prune edges referencing deleted nodes on rebuild
  • Clean out/test before rebuilding in test:unit script
  • Bump hono to 4.13.1 in editors/mcp (alerts #34, #41, #42, #43)
  • Bump fast-uri override to 3.1.5 in editors/mcp (alert #30)
  • Bump ip-address to 10.4.0 in editors/mcp (alerts #31, #32, #33)
  • Bump fast-uri override to 3.1.5 in editors/vscode (alert #35)
  • Bump js-yaml to 4.3.1 in editors/vscode (alert #44)
  • Bump undici to 7.29.0 in editors/vscode (alerts #36, #37, #38, #39, #40)

v0.48.0

Synthesized a Toolbar for Windows & Linux

New Features

  • Add Run Script step type to build graph editor
  • Widen Toolbar to TargetLinux, refresh docs/sample for Windows+Linux rendering
  • Linux toolbar overflow chevron + CustomView/Separator/Space/FlexibleSpace
  • Linux toolbar Group/MenuButton/SearchField item kinds
  • Linux toolbar backend skeleton - Button/ToggleButton with DisplayMode
  • Windows toolbar overflow chevron for items that don’t fit the band width
  • Windows toolbar MenuButton chevron indicator, confirm Group icon rendering
  • Windows toolbar Button/ToggleButton owner-draw icon+DisplayMode rendering
  • Add Picture.FromSystemIcon(String) and Toolbar icon-as-String overloads