Skip to content
The Buoy logo

Buoy

A modern cross-platform, compiled programming language and UI framework with BASIC-like syntax.

Prerelease downloads and bug reporting are available here.

Compiled and native

Buoy lowers your source to machine code through an LLVM backend and links real native binaries — .app bundles on macOS, .exe on Windows, ELF executables on Linux. No interpreter, no bundled VM.

Readable, BASIC-like syntax

Familiar Sub / Function / Dim structure, with modern conveniences like Var and type inference.

One source tree, every platform

A “project” is just a folder of .bui files. There is no project manifest to maintain or merge.

True cross-compilation

Any host can target any platform. Build a macOS app from Linux, or a Windows .exe from a Mac — no target-platform SDK required on your machine.

First-class tooling

A Language Server (LSP) drives completion, hover, go-to-definition, and live diagnostics in any LSP-capable editor. A VSCode extension and DAP-based remote debugger are part of the toolchain.

AI-assistant ready

Buoy is too new to be in AI training data, so every install ships a kit that fixes that: buoy ai init sets up your project so Claude Code, Copilot, Cursor, or any MCP-capable assistant writes real Buoy — verified against the actual compiler and the locally installed docs, not guessed from other BASIC dialects.

Xojo migration path

Buoy’s syntax is Xojo-inspired and aims for source compatibility as a migration route, while deliberately departing from Xojo where its design choices have proven to be friction points.

Sub Main()
Var name As String = "world"
Print "Hello, " + name + "!"
End Sub

Variable declaration uses Dim or Var (they are exact synonyms), with type inference when an initializer is present:

Dim count As Integer = 0
Var total = 0.0 ' inferred as Double
Var label = "Untitled" ' inferred as String

Documentation comments use a triple apostrophe and attach to the declaration that follows:

''' Returns the area of a circle with the given radius.
Function Area(r As Double) As Double
Return Math.Pi * r * r
End Function

Optional chaining lets you guard member access without an explicit nil check:

Var name = user?.Profile?.DisplayName ' Nil if user or Profile is Nil

Buoy produces and runs applications on:

PlatformMinimum targetNative UI toolkit
macOSmacOS 12 (Monterey), Apple Silicon or IntelAppKit
WindowsWindows 10, x64 or ARM64comctl v6
LinuxA distro providing GTK 4 (e.g. Ubuntu 22.04, Fedora 38, Debian 12)GTK 4

Universal macOS binaries (Apple Silicon + Intel in one bundle) are supported. On Windows and Linux, ARM64 and x64 are shipped as separate builds.