Changelog
Version 0.3
June 23 2026
Playbit.app
- Made installing new toolchain and examples more robust
- Fixed text selection being incorrect after clearing the log
Web Runtime
- Introduced playbit.js technology preview
- Intended to allow running unmodified apps with the Playbit runtime running on the web
- Visit https://playbit.app/ for a demo
C API
- Added new UI library
UI3- See new
playbit/ui3.h
- See new
- Added new multiplayer sync-ed data library
- See new
playbit/multiplayer.h
- See new
- Added APIs for interacting with Human-Interface Devices (HID) such as gamepads
- See
PBGamepadAxisandPBGamepadEventinplaybit/event.h - See new
playbit/hid.h
- See
- Added
PBNetChannelDirecttoplaybit/net.h - Added generic TCP/UDP networking
PBNetTransport- See new
PBNetTransportOpeninplaybit/net.h - See new
PBNetTransportOpenStreaminplaybit/net.h - See new
PBNetTransportOpenExinplaybit/net.h - See new
PBNetTransportOpenStreamExinplaybit/net.h - See new
PBNetTransportSetKeepAliveinplaybit/net.h
- See new
- Improved the correctness of
PBArenaPush - Added
PBDrawTextAligntoplaybit/draw.h - Added
PBDrawSetBackgroundColortoplaybit/draw.h - Added various functions for querying a window's mouse and keyboard state
- See new
PBWindowGetMousePositioninplaybit/window.h - See new
PBKeyPressedinplaybit/window.h - See new
PBKeyReleasedinplaybit/window.h - See new
PBKeyRepeatedinplaybit/window.h - See new
PBKeyRepeatedinplaybit/window.h - See new
PBMousePressedinplaybit/window.h - See new
PBMouseReleasedinplaybit/window.h - See new
PBMouseDowninplaybit/window.h - See new
PBWindowProcessEventsinplaybit/window.h - See new
PBWindowEndFrameinplaybit/window.h
- See new
- Added
PBPanicvtoplaybit/base.h - Fixed compilation error with
PBBufSlice - Added various
PBStrindex finding functions- See new
PBStrIndexOfStrinplaybit/string.h - See new
PBStrLastIndexOfStrinplaybit/string.h - See new
PBStrIndexOfByteinplaybit/string.h - See new
PBStrLastIndexOfByteinplaybit/string.h
- See new
- Added various
PBStrnumeric parsing functions- See new
PBStrSliceParseIntinplaybit/string.h - See new
PBStrSliceParseUIntinplaybit/string.h - See new
PBIntOfStrinplaybit/string.h
- See new
- Added various
PBStrtrimming functions- See new
PBStrSliceTriminplaybit/string.h - See new
PBStrSliceTrimStartinplaybit/string.h - See new
PBStrSliceTrimEndinplaybit/string.h
- See new
- Added various
PBMemFindfunctions- See new
PBMemFindByteinplaybit/mem.h - See new
PBMemFindLastByteinplaybit/mem.h - See new
PBMemFindSegmentinplaybit/mem.h - See new
PBMemFindLastSegmentinplaybit/mem.h
- See new
- Fixed compilation error with
PBCheckStrEq - Fixed potential compilation error with
PB_UNREACHABLE - Improved the correctness of
PBWindowGetMousePosition - Improved potential link error with some math functions in
playbit/math.h - Improved logging behavior to be defined as always logging one full complete message at a time
- Renamed
PB_GUI_ENABLEDdefine toPB_NO_GUIwith approriate behavior change
Runtime
- Improved rendering latency and frame pacing
- Fixed an issue where popping the root render clip region did not clear clipping
- Fixed an issue where
SysWindowFrameSyncEnablewould not enforce rights control - Fixed an issue where the frame sync signal could continue to fire even after the guest does not want it
- Fixed an issue where the runtime event loop could get confused and idle forever
- Fixed an issue where unreasonable window sizes could cause a crash
- Improved window resize signal to not fire when macOS reported a resize but the window was the same size
- Added
PBTextPlanLayoutFlagsenum to specify already supported text layout flags - Added
PBSysWindowSetCursorand various associated types - Added various syscalls for handling window fullscreen state
- See new
PBSysWindowFullScreenGetinplaybit/sys/syscalls/window.h - See new
PBSysWindowFullScreenSetinplaybit/sys/syscalls/window.h
- See new
- Added various syscalls and associated types for handling GUI presentation
- See new
PBSysGuiPresentationGetinplaybit/sys/syscalls/gui.h - See new
PBSysGuiPresentationSetinplaybit/sys/syscalls/gui.h
- See new
- Added various syscalls for Human-Interface Devices (HID) such as gamepads
- See new
playbit/sys/syscalls/hid.h - See new
PBSysGamepadButtonandPBSysGamepadEventinplaybit/sys/syscalls/event.h
- See new
- Added various syscalls for
PBNetTransport- See new
PBSysNetTransportOpenStreaminplaybit/sys/syscalls/net_transport.h - See new
PBSysNetTransportSetKeepAliveinplaybit/sys/syscalls/net_transport.h
- See new
- Added
PBSysTextureFormat_BGRA8 - Added syscalls for getting a texture's size
- See new
PBSysTextureGetWidthinplaybit/sys/syscalls/texture.h - See new
PBSysTextureGetHeightinplaybit/sys/syscalls/texture.h
- See new
- Added syscall for opening file panels (dialogs)
- See new
playbit/sys/syscalls/file_panel.h - See new
PBFilePanelEventinplaybit/sys/syscalls/event.h
- See new
- Added new
PBSysFileOpenFlag_TRUNCATEandPBSysFileOpenFlag_EXCLUSIVE - Added new
PBSysFileOpenFlag_MODE_USER_RW,PBSysFileOpenFlag_MODE_GROUP_RW, andPBSysFileOpenFlag_MODE_OTHER_RW - Added various syscalls and associated types specifically for creating files:
- See new
PBFileCreateinplaybit/sys/syscalls/file.h - See new
PBFileCreateOrPanicinplaybit/sys/syscalls/file.h - See new
PBFileCreateOrTruncateOrPanicinplaybit/sys/syscalls/file.h
- See new
- Added new helper functions for converting flag open/create types
- See new
PBFileModeOfFlagsinplaybit/sys/syscalls/file.h - See new
PBFileOpenFlagsOfModeinplaybit/sys/syscalls/file.h
- See new
- Fixed an issue where a network connection could fail to reconnect
- Fixed an issue where a guest thread could hang upon a network disconnect
- Fixed an issue where a connection was not properly disconnected on app exit
- Fixed an issue where network messages could be become corrupted and unable to decode
- Added PEM-encoded root certificate fields
certPemandcertPemLentoPBSysNetTransportConfig - Renamed
PBSysNetTransportOpenFlagstoPBSysNetTransportStreamFlags - Added
PBSysNetTransportFlagstoPBSysNetTransportConfig - Added
PBSysThreadReadRandomtoplaybit/sys/syscalls/thread.h - Improved no-gui codepaths to shut down faster than before
- Enabled use of WASM's expection-handling extension in guest programs
- Removed unused
PBSysRight_GET_PROPERTYandPBSysRight_SET_PROPERTY - Fixed a case where updating an observer could cause it to miss a signal
- Improved
SysWindowTextplanCreateto accept a null pointer when len is zero
Developer tools
- Improved logging around failure to launch Playbit.app
- Fixed an issue where launched Playbit.app would never exit after no-gui program exits
- Improved detail in
pb run --helpmessage - Fixed an issue where building an app with
--no-guiwould not be noted in the built app's manifest - Added
--colorsflag for controlling ANSI color output
Examples
- Added notes example
- Added sync1 and sync2 examples
- Added jump-game example
- Fixed an incorrect comment in
renderer-package - Improved styling and simplified
hello - Slightly simplified
game-of-life
Version 0.2
May 7 2026
Errata
A previous version of the 0.2 changelog erroniously said that a new library UI3 had been released. This was incorrect, and this library was instead later released in 0.3.
C API
- Added APIs for retrieving resources embedded into your wasm-compiled app
- See
PBAppResourceWithNameandPBAppResourceAtIndexinplaybit/app.h
- See
- Added
PBAppNametoplaybit/app.h - Added
PBAppIdtoplaybit/app.h - Renamed
printlntoprint- Use
PBPrintffor formatted printing without automatic newline
- Use
- Added APIs for interacting with various window properties
- See
playbit/window.h
- See
- Changed
UIBoxIsClickto be calledUIBoxOnClick - Improved initial window presentation behavior
- Added
PBStrLitfor makingPBStrSlicefrom c-string literals - Deprecated previous catch-all
PB_STRhelper macro- For usage not covered by
PBStrLittryPBStrSliceOf
- For usage not covered by
- Added
PBStr_FMTandPBStr_FMT_ARGmacros for easier println formatting of strings - Added new
PBDrawRectWithStrokefunction to the drawing API - Added new
PBDrawTextWithPlanfunction to the drawing API - Added new
PBDrawTexturedRectExtandPBDrawTexturedRectExt2functions to the drawing API - Added new
PBDrawTextLineandPBDrawTextMultilinefunctions to the drawing API - Improved
PBDrawBeginFrameto auto-allocate a draw API context if one is not set - Improved implicit cached text drawing cache implementation in the drawing API
- Fixed an issue where usage of the
PBArrayAllocAtmacro would not compile - Improved
PBAnyArrayFreeto now makePBArraygo into a "null" statevbecomesNULL,lenandcapbecome0
- Fixed
PBArenaFromAllocatorignoring size paramter - Introduced new
PBSemaphore- See new
playbit/semaphore.h
- See new
- Added
PBRGBandPBRGBAhelper macros for creatingPBColorvalues - Added new
PBColorToRGBA8function - Fixed an issue where
PBDateFormatcould format a date's month incorrectly - Added new
PBDateComponentsfunction - Added new
PBTimeZoneUTCOffset2function - Added new
PBRectangleOfRectandPBRectangleOfSizefunctions
Runtime
- Fixed various underlying thread correctness issues on macOS
- Fixed a rare deadlock when rendering during a window resize
- Improved the situation around some renderer setup race conditions
- Added various syscalls for audio playback
playbit/sys/syscalls/audio.h
- Added various syscalls for filesystem access
- See new
playbit/sys/syscalls/file.h - See new
playbit/sys/syscalls/file_list.h
- See new
- Added clipboard access syscalls to the window object
- Syscall:
PBSysWindowClipboardWriteText - Syscall:
PBSysWindowClipboardReadText - See
playbit/sys/syscalls/window.h
- Syscall:
- Added texture creation and modification syscalls
- See new
playbit/sys/syscalls/texture.h - See
playbit/sys/syscalls/window.h
- See new
- Added various syscalls for Playbit network access
- See new
playbit/sys/syscalls/net.h - See new
playbit/sys/syscalls/net_session.h
- See new
- Removed "scene graph" rendering syscalls
- Fixed floating point value handling of
PBSysWindowSetRect - Fixed monotonic clock not advancing when system is asleep on macOS
Playbit.app
- Improved display of recent apps to be sorted
- Added release notes to log shown on startup
- Fixed a bug which could cause some log messages to crash the app
Developer tools
- Increased default wasm stack size to 512 KiB
- Added command line flag
--stack-size