The Cobalt team has published Cobalt 27 RC3 (Release Candidate 3) including Starboard API version 18 to the 27.lts branch with tag 27.lts.3 (27.lts.3.1040907).
Corresponding Evergreen binaries are available on GitHub at the 27.lts.3 Release tag
Cobalt Core can be updated via the Evergreen static channel (27lts3).
Please migrate and rebase your RC1/RC2 integrations to RC3 to get the latest fixes and improvements below.
The Cobalt team strongly encourages external contribution to fix issues and improvements.
- Please see the Cobalt Contribution guidelines for additional details
Available Reference Ports:
- Desktop Linux
- RDK (
starboard/contrib/rdk) - Android (AOSP) (
starboard/aosp)- [Docs] cobalt/site/docs/development/setup-aosp.md
- NOTE: This is still work-in-progress. Basic functionality is working though there may still be general issues. Please report any issues that surface on your platform.
Migration guide from Cobalt 25 to Cobalt 27 is available here:
- For the latest changes, the code at tip in the 27.lts branch is always available, but is under development and may be unstable.
Cobalt Changes
See comprehensive list of changes in cobalt/CHANGELOG.md and baseline release notes for Cobalt 27 RC on developers.google.com/youtube/cobalt.
Memory Reductions & Performance Improvements
- Evergreen Memory Mapping Documentation: Added guidance to configure memory map to trade storage space for lower memory usage using
CobaltExtensionMemoryMappedFileApiand the--loader_use_mmap_filelaunch flag. (#12245)- NOTE: For memory map configurations, please use the uncompressed Cobalt Core binaries on GitHub (they do not have “compressed” in the file name).
- V8 Heap & HTTP Cache Tuning: Reduced default initial V8 old space from 64MB to 16MB (
--v8-initial-old-space-size=16) saving startup heap, and added CLI and Android switches to configure V8 heap limits and HTTP cache size/type. (#11670, #11669, #11695, #11683, #11688) - Default V8 Code Cache Scaling: Increased default V8 code cache size from 3MB to 5MB to accelerate application startup latency. (#11950)
- Background GPU Memory Release: Releases all GPU channels, EGL contexts, and surfaces on background suspend to minimize background memory consumption. (#11796)
- Live Memory Diagnostics: Added real-time Cobalt memory breakdown metrics to Chrome DevTools Protocol (
Performance.getMetrics) for interactive profiling and diagnostics. (#11676, #11679) - Media Buffering & Binary Size Reductions: Enabled dynamic video memory budgeting based on display resolution, stripped unused Chromium components (media muxers, fenced frames, IP protection) to reduce binary size, and added options to force dual audio/video decoder threads. (#11704, #11596, #11352, #11509, #11507, #11696)
- Performance Memory APIs: Added
measureSystemMemoryInfo,measureUsedGpuMemory, andMeasureApplicationUsageMemoryweb performance APIs to allow web applications to monitor system, GPU, and app memory usage accurately. (#12310, #12066, #11838, #12130) - Rendering Performance & JIT Tuning: Implemented zero-copy in-process direct raster for faster graphics throughput, enabled Peak RSS tracking, and added an Android switch to disable the Sparkplug compiler to save memory on constrained devices. (#12134, #12138, #12307, #11867, #12153)
Critical Bug Fixes
- Graphics Context Stability: Resolved EGL/GL context initialization crashes on GLES 3+, increased max texture units limit to 96, and fixed compositor callback leaks. (#10934)
- Renderer & Player Teardown Stability: Resolved teardown crashes and use-after-free errors in the renderer and media player, canceled pending sample jobs during player destruction, and fixed on-screen keyboard disconnect handling. (#11597, #11681, #11656)
- Background Freeze Compliance: Reverted the delay following
visibilityChangeevents to restore immediate background freeze behavior. (#11675) - Media Pipeline Cleanup: Downgraded noisy false-positive media log warnings (including unknown EOTF warnings), simplified player initialization, and removed dead frame-tracking code. (#11709, #11678, #11710, #11583, #11599)
- Process Lifecycle & HangWatcher Stability: Prevented exit segmentation faults in ElfLoader, resolved shutdown aborts and startup
DCHECKcrashes inHangWatcher, and fixed race conditions during stream flushing. (#12386, #12303, #12164, #12255, #12050) - Sync Starboard Window Resizing: Fixed window size desynchronization between Starboard and Chromium, enabling dynamic compositor swapchain updates and proper surface resizing on window resize events. (#12032)
Android
- Native NDK Audio: Introduced native NDK audio track support (
AAudio,OpenSL ES, nativeAudioTrack) to reduce JNI bridging overhead and lower audio latency. (#11022) - Direct Window Rendering: Added support for direct rendering to the activity window surface via the
DirectWindowRenderingswitch, handled asynchronous native startup, and cleaned up legacy window size APIs. (#11538, #11691, #11652, #11634) - Font Handling & Platform Services: Added AOSP font directory path support in
SbSystemGetPath, stabilized font resolution fallback, and improved error propagation from Java to JavaScript inPlatformService. (#11582, #11714, #11336, #11355) - Android Build & Test Infrastructure: Resolved
android-arm_debugcompilation, streamlined test harness activity lifecycle, and managed the ExoPlayerSbPlayerevaluation cycle. (#11653, #11572, #11577, #11723, #5899, #11690) - Video Playback & AOSP Windowing: Prevented false-positive post-seek frame drop counts in media playback, added native window creation and input handling for AOSP targets, and modernized JNI bindings. (#11377, #11813, #12354)
- GPU Suspend/Resume Stability: Resolved crashes and driver segfaults during EGL context teardown and restore on Android suspend/resume. (#12453)
RDK
- Crashpad, Certification & Test Filters: Fixed binary path resolution for Crashpad crash reporting, enabled
kSbSystemPropertyCertificationScopereading from/etc/device.properties, and updated NPLB test filters for passing graphics, media, and video tests. (#11661, #11407, #11490)
Testing & Verification
- Native Stability Diagnostics: Added web interface support (
getPendingReports()) bridging renderer services with the StarboardNativeStabilityextension for platform crash and hang diagnostics. (#11561)
Updates and Enhancements
- Networking, Splash Screen & CLI Features: Added support for
--proxy-serverCLI flag, migrated splash screen configuration from legacy switches to Chromiumbase::Featureflags with early startup checks, and modernizedCommandLinePreprocessor. (#11747, #11595, #11639, #11409)
Starboard Changes
See comprehensive list of changes in starboard/CHANGELOG.md and baseline release notes for Cobalt 27 RC on developers.google.com/youtube/cobalt.
- Player Settings & Experimental Features: Consolidated player settings extensions into a unified
dev.cobalt.extension.PlayerSettingsextension, added default fallbacks toExperimentalFeatureKey, and introducedMedia.ForceDualThreadsto enable dual decoder threads on multi-core platforms. (#11748, #11763, #11696) - Alignment & Event Architecture: Standardized memory alignment across media decoders and audio sinks, and modularized
SbEventHandleinto a dedicated library target. (#11635, #11593) - Modernized the
SbDrmSystemPrivateinterface and strengthened thread safety during subsystem initialization. (#12106, #12235, #12304, #12404)
New & Updated Starboard Extensions
- Low Memory Kill Detection - LowMemoryKill
- Cobalt is now able to detect low memory kill events on startup. (#12256)
- The platform should continue to simply wire up the provided, shared implementation of the extension at:
Contact Points
Please contact our support channels if you have any problems, questions, or feedback.