Releases: lynx-family/skity
v1.1.0-alpha.1
Skity v1.1.0-alpha.1 Release Note
What's Changed Since v1.1.0-alpha.0
🚀 Vulkan Backend Enhancements
Fill in missing GPUContextVK interface implementations:
- Added GPUBackendTextureInfoVK struct for wrapping external Vulkan textures
- Implemented GPUContextVK::OnWrapTexture to wrap external textures as Skity texture objects
- Implemented GPUContextVK::OnCreateRenderTarget to create render targets from non-owning wrapped textures
- Implemented GPUContextVK::OnReadPixels via vkCmdCopyImageToBuffer with a host-visible staging buffer
- Added PFN_vkCmdCopyImageToBuffer to the Vulkan device function proc table
- Added 13 new unit tests covering all three APIs
Stub functions when Vulkan backend is disabled:
- When SKITY_VK_BACKEND is OFF, provide empty stub implementations for CreateGPUContextVK and CreateGPUNativeWindowVK that return nullptr
- Prevents link errors and runtime SO loading failures for users who conditionally reference these symbols
🐛 Bug Fixes
- std140 uniform buffer layout alignment fix: Corrected std140 struct alignment rule (rule 9: struct alignment must be rounded up to vec4 / 16 bytes) in IR layer GetLayoutInfo and
runtime StructDefinition, ensuring CPU-side buffer size matches GPU-side std140 uniform block size - Android bcp47 font fallback priority fix: Adjusted bcp47 language tag font fallback matching priority on Android
1.1.0-alpha.0
Skity v1.1.0-alpha.1 Release Note
⚠️ Alpha Warning
This is an early alpha release of Skity v1.1.0. It contains significant new features and architectural changes that are still under active development. Users should expect:
- Potential bugs and instability — some features have not been fully validated across all platforms
- API changes — public APIs introduced in this release may be modified or removed before the stable release
- Not recommended for production use — this release is intended for early testing and feedback
Highlights
Vulkan Backend Support
Skity now supports Vulkan as a GPU rendering backend alongside the existing OpenGL backend. This enables better performance and broader device coverage, especially on Android devices where Vulkan drivers are widely available.
Key capabilities:
- Full Vulkan render pipeline integration with SPIR-V shader compilation via the WGX module
- Support for user-provided or engine-managed Vulkan instance and device
- Swapchain-based presentation with native window support (Android, Win32, Wayland, XCB/Xlib, macOS)
- Texture copy operations including texture-to-texture blit
- Runtime backend availability query via
IsGPUBackendSupported()— allows applications to decide at startup whether to attempt Vulkan initialization
Advanced Blending
Added programmable blending support via framebuffer fetch (GL_EXT_shader_framebuffer_fetch), enabling advanced blending modes that were previously not possible with standard OpenGL blending operations. This improves rendering fidelity for compositing and filter effects.
GPU Backend Query API
New function IsGPUBackendSupported(GPUBackendType) allows applications to query at runtime which GPU backends are compiled into the current build:
#include <skity/gpu/gpu_context.hpp>
if (skity::IsGPUBackendSupported(skity::GPUBackendType::kVulkan)) {
auto ctx = skity::CreateGPUContextVK(proc_addr);
// ...
}New Features
- Vulkan backend: Complete GPU backend implementation with pipeline, surface, presenter, and texture support
- WGSL-to-SPIRV pipeline: New WGX module compilation path for generating Vulkan-compatible SPIR-V shaders
- Advanced blending: Programmable blending via framebuffer fetch for improved compositing
- Texture descriptor API: New
CreateTextureWithDesc()API with mipmap configuration controls - Backend query:
IsGPUBackendSupported()for runtime backend availability check - DisplayList R-tree: R-tree and region-based spatial indexing for DisplayList, improving rendering performance for complex scenes
- Text improvements:
- Font hinting configuration API
- CoreText optical sizing preservation on Darwin platforms
- Color V0 font support
- Fake bold support on Darwin
- Direct use of Darwin UI framework instead of
dlsym
Breaking Changes
The following deprecated APIs have been removed:
- Removed FXAA surface creation API
- Removed partial FBO surface in OpenGL backend
- Removed deprecated APIs from
Canvas - Removed dynamic shader switching API
- Removed texture size power-of-2 alignment API
- Removed combined texture-sampler binding path
Other Improvements
- Render target cache can now be disabled per-context
- Improved OpenGL shader error handling and logging
- Failed pipeline compilations are now skipped within the same frame to avoid repeated errors
- Performance tracing integration with Perfetto SDK for benchmarks
- Android Khmer variable font weight mapping fix for Android 16
- Blur filter bounds handling fix after downsampling
- Various WGX compiler and GLSL/MSL/SPIR-V backend fixes
v1.0.0
v1.0.0
This is the first official release of skity.
Before this release, the project went through internal testing, and the API is now relatively stable for production integration and ongoing iteration.
✨ Release Highlights
- First generally available (GA) release
- API has entered a relatively stable stage
- Includes a set of cleanup and fixes focused on stability and consistency
- Optimized command buffer and render command encoder creation in GPU backend
⚠️ Breaking Changes
- Remove deprecated API from
Canvas(#275) - Remove partial fbo surface in OpenGL backend
📦 Mobile Artifacts
Along with this release, we will publish mobile artifacts for both Android (Maven) and iOS (CocoaPods).
- Android (Maven):
implementation "org.1ynxsdk.lynx:skity-native:1.0.+" - iOS (CocoaPods):
pod "skity", "~>1.0.0"
📋 Changelog
🚀 Features
- (canvas) [breaking] Remove deprecated API from
Canvas(#275) - (gpu) [breaking] Remove partial fbo surface in OpenGL backend
🐛 Bug Fixes
- (text) Adjust spacing between glyphs (#269)
- (text) Adjust spacing between glyphs (#272)
- (text) Apply additional fixes to adjust spacing between glyphs (#274)
💼 Other
- Hide symbols from thirdparty libraries
- (gpu) Refactor: Merge to use single GPUCommandBuffer
- Refactor: Optimize the actual MTLRenderCommandEncoder creation
v1.0.0-alpha.1
[1.0.0-alpha.1] - 2026-02-05
🐛 Bug Fixes
- (text) Fix rendering of glyphs with sizes smaller than 1 (#249)
- (codec) Fix crash issue when creating codec in multi-threaded mode
- (text) Modify the font matching logic (#252)
- (text) Align text to pixel boundaries (#254)
Integration
- Android
implementation "org.1ynxsdk.lynx:skity-native:1.0.0-alpha.1- iOS & MacOS
pod "skity", "1.0.0-alpha.1"v1.0.0-alpha.0
[1.0.0-alpha.0] - 2026-01-27
Starting from this version, we also provide Maven and CocoaPods release artifacts:
- Android:
implementation "org.1ynxsdk.lynx:skity-native:1.0.0-alpha.0- iOS / MacOS
pod "skity", "1.0.0-alpha.0"🚀 Features
🐛 Bug Fixes
- (windows) Fallback to use wuffs 0.3
🧪 Testing
- (text) Remove a false positive case of tsan from Linux CI
Full Changelog: v1.0.0-beta.6...v1.0.0-alpha.0
v1.0.0-beta.6
ci(iOS): support publish skity to cocoapods
Test publish workflow
v1.0.0-beta.5 ci(iOS): support publish skity to cocoapods
v1.0.0-beta.4
ci(iOS): support publish skity to cocoapods
v1.0.0-beta.3
test release tag
v1.0.0-beta.2
(2026-01-07)
Features
- codec: Add a special codec implementation for Apple platform (2a60113)
- hw: Add batch capability for simple pipeline (#188) (1ea93ac)
- hw: Improve text batching implementation to use instance draw (#193) (8253441)
- io: Implement conversion from SVG Path String to Skity Path (#203) (4bd206e)
- log: disable
LOGIandLOGDin release build (d7bb3fb) - path: Introduce 'Path::GetSegmentMasks' for segment type checking (#186) (305a520)
- text: fonts with non-hundred weight values can be matched (#199) (705ceef)
Bug Fixes
- example: The Frame example renders icons using custom fonts (297f8a0)
- hw: Fix issue about uninitialized max texture size caused layer … (#192) (52c7f83)
- hw: Update the shader to avoid invalid implicit type conversions… (#197) (52e44fb)
- hw: Upload index buffer data only if it is not empty (#206) (bf633f3)
- io: return empty data if malloc fails (#194) (5ced820)