Releases
v0.1.0
Compare
Sorry, something went wrong.
No results found
0.1.0 (2026-11-02)
⚠ BREAKING CHANGES
image: Image takes a source; TgfxImage is the handle-taking host tag (#245)
camera: TgfxViewMethods.drawCameraFrame is removed. It drew the
frame and blurred a polygon list without replaying the scene, so no child of
the React tree was drawn on a camera canvas. Use
inside a normal ; contours stay in frame pixels either way.
android: Vulkan is the default backend; TgfxVulkan=OFF falls back to GL (#252)
Features
adb-driven memory-leak gate (#258 ) (3daa970 )
add 3D transforms and preserve3d to Group (3c85c10 )
add Fill and useClock (#114 ) (43b5985 )
android: experimental Vulkan backend + registry-wake regression fix (#218 ) (b4eb393 )
android: Vulkan is the default backend; TgfxVulkan=OFF falls back to GL (#252 ) (73b94a4 )
animate shader uniforms on the UI thread (#113 ) (19bcc78 )
atlas: draw many sprites from one image in a single op (#199 ) (27655b0 )
Blend and ColorShader shaders, and composing filters (468216c )
camera: a native frame-processor plugin, and a C++ export contract for it (#149 ) (#154 ) (dc89078 )
camera: camera frames as a scene input via (#148 ) (bb3dc94 )
camera: useCameraFrame owns the buffer lifetime (#149 ) (#152 ) (65d0b80 )
Canvas.snapshot() and Canvas.save() without stalling the render loop (#137 ) (9e9c324 )
canvas: a fonts prop that registers faces and gates children (#244 ) (2987433 )
canvas: a SharedValue viewport, driven from the UI thread (#235 ) (756b0fa ), references #234
color: accept CSS Color 4 color(display-p3 ...) syntax (#208 ) (6d860c8 )
color: draw on a display-p3 surface and tag snapshots with its space (#209 ) (f43c2c1 )
compiler: workletize the compile graph (#246 ) (8aa90b7 )
composite prop to choose SurfaceView or TextureView on Android (d5623b0 )
docs: add an animated figure to the overview page (b01ceb6 )
docs: add animated figures to the drawing, effects and motion pages (926561f )
docs: add per-page Open Graph images (f24b94d )
docs: port the VisionCamera docs design with a purple accent (c46c751 )
effects: film grain over a group, from tgfx's NoiseStyle (#229 ) (45506d2 )
example: add a 3D cube screen (5277836 )
example: add physics screen (88227b0 )
example: camera effects screen with a neon-edge runtime shader (885b09c )
filters: an alpha threshold, and a colour filter that can follow an image filter (#228 ) (1eb2016 )
fromPixels and setPixels for decoded RGBA (738a0d8 )
getCacheInfo and purgeCaches — cache introspection and an immediate purge (#259 ) (8800cb4 )
glass: expose the light, and make the whole material animate (#225 ) (b7aa8c7 )
Group clip, invertClip and layer (856f515 )
headless: callable forms for the clock, video pump, camera sink, buffers and press dispatch (#241 ) (ea2f53e )
hittest: report which nodes are under a canvas point (#205 ) (bb0c142 )
image: draw SVG documents as image sources (9065e8f )
image: draw SVG documents as image sources (#169 ) (5b9bad6 )
image: encode to bytes and save to disk from any image handle (#239 ) (8e9285c )
image: Image takes a source; TgfxImage is the handle-taking host tag (#245 ) (0f9bb59 )
image: native image handles, hardware buffers, and Skia-parity + (#136 ) (472d471 )
image: subset, scaled, oriented and blurred handles that share the parent decode (#202 ) (4b7cafb )
imperative: colour, transform and uniform slots, plus an imperative docs page (#161 ) (63f567a )
imperative: node handles that change a mounted scene without React (#155 ) (#156 ) (0c6ddaa )
imperative: slot coverage for the whole surface — text, path, image, gradients, filters, enums, visibility, shared buffers (#213 ) (7a0af16 ), closes #204
inner shadow, Luma and AlphaThreshold filters (8fdb652 )
JS path utilities — boolean ops, bounds, contains, transform, measure (b969f08 )
offscreen: a retained GPU surface with the view's scene contract (#240 ) (327fcd4 )
offscreen: render a scene to an image without mounting a canvas (#201 ) (84657b3 )
offscreen: scene inputs for export, and a React-free module split (#238 ) (1e14b7f )
opaque prop for a canvas that composites without an alpha channel (06a1460 )
path effects — dash, corner, trim and fillType (e4f832b )
pdf: export a scene to a vector PDF (#206 ) (6fd95df )
picture: record a static group once and replay it every frame (#203 ) (272b67a )
prewarm the GPU device and font table at launch (#263 ) (41b9264 )
react-native-tgfx — declarative GPU 2D canvas via Nitro + tgfx (f0adb4f )
scene: colour filters, blend modes and image filters as paint children (#140 ) (acecacd )
scene: element factories and a React-free Scene container (#237 ) (f9b0248 )
scene: save, toImage, toSvg and toPdf straight off the scene (5945184 )
scene: scenes built and mutated on worklet runtimes (#247 ) (f9bd05f )
shaders: child shaders — uniform shader, .eval() and sample() (#147 ) (b5e810f )
shaders: support helper functions in SkSL sources (#138 ) (aab52b9 ), references #136
strokeMiter, fauxBold and fauxItalic props (1f4605d )
svg: draw whole SVG documents, from a file or from markup (#223 ) (718dffe )
svg: export a scene to SVG markup (#207 ) (4cf8848 )
text: a caret from a coordinate, and the boxes a range occupies (#231 ) (8a6db33 )
text: bidi reordering and complex-script shaping through HarfBuzz (#232 ) (9bb16f5 )
text: font manager, weight/style, paragraphs, measurement and (#142 ) (1ab6581 ), references #140
text: styled runs, per-line metrics, textPath() and (#145 ) (#159 ) (21c2f79 )
vertices: triangle meshes with per-vertex colours and texture coordinates (#200 ) (101d5e6 )
video: play videos into a native image handle (8dd424a )
viewport: a root zoom/pan the renderer owns, so a pinch costs no recommit (#221 ) (0066a7a )
Bug Fixes
3d: keep clip, layer and grain under preserve3d, compose 3D hit tests, cache static plane rasters (0035063 )
address the full-repo audit findings in #162 (#163 ) (c66a042 )
align example app deps and drop the absolute-path thor dependency (4b639f0 )
android: build every ABI, not just arm64-v8a (#166 ) (6822352 )
android: convert Vulkan camera frames to RGB via immutable YCbCr conversion samplers (1d7a326 )
android: decode images in-process so EXIF orientation survives (#151 ) (#158 ) (bce74e1 )
android: guard nativePtr against release racing the staging calls (#56 ) (54a21dd )
android: preserve planar video on API 26-28 (e308d95 )
android: read video planes through a CPU lock, not the reported geometry (4ae9f46 )
android: route a SurfaceView size change to surfaceResized instead of a rebind (#63 ) (b6eeed9 )
android: set the tgfx JavaVM in JNI_OnLoad (#150 ) (643f865 )
android: warn about a missing hardware buffer only when no frame was produced (cd41f55 )
animate strokeWidth instead of snapshotting it (#72 ) (cd5c4de ), references #49
apply an inherited opacity once through a layer, and keep clipPath off every node (3817d97 )
apply the tgfx CONFIG_DIR change from patches/ instead of rewriting the submodule (#83 ) (65d0586 )
atomic pixelRatio, constexpr base64 table, bounded scene recursion (#46 ) (#79 ) (07773a9 )
backdrop: frosted and liquid-glass panels that read the scene beneath them (#214 ) (1e0932f )
bench: fail the gate when no frame was captured, and reclaim leaked device sessions (#91 ) (f7be3bc )
benchmark: make tgfx-animated measure what it claims and draw what everything else draws (#78 ) (3015fd5 )
bench: match the thread names the kernel actually reports (#99 ) (a0305fb ), references #24
camera black-forever from guest shared-value race, faster camera start (13506ee )
camera: map any producer's pixel format, not just BT.601 (f4e1356 )
ci: drop the PAT header before fetching upstream lfs (345d7b8 )
ci: fetch tgfx lfs objects from upstream (fd266c5 )
clear stale image data and fail on non-ok responses in useImage (#115 ) (f8798c6 )
clear the image and typeface caches on the render thread (#75 ) (8f1e0e0 )
color: colour-manage every surface, not just the window (#222 ) (e981034 )
crash on android (017cd7f )
deps: align react-native-worklets with reanimated's peer range (6e54dce )
docs: (9e1dfec )
docs: (415441d )
draw the canvas style's backgroundColor (#198 ) (320ca64 )
drop AlphaThreshold, whose tgfx shader never re-premultiplies (0f0b627 )
eval child shaders at the requested coordinate on GL and bind runtime shader coords at highp (e453e14 )
evict one image from the cache instead of flushing all 32 (#117 ) (e0ba861 )
faux emphasis reaches fallback faces and respects span overrides (0c11d3e )
hash the string table into the setScene dedupe key (#55 ) (0d9e764 )
hide the content when either mask side is empty, and keep the matte unshaded (de889e1 )
ios: HybridTgfxView adopts RecyclableView so prepareForRecycle() fires (#255 ) (#257 ) (f2828bb )
ios: implement drawCameraFrame (62bbbea )
keep a Blend child resolving per frame instead of baking it (431cdbe )
keep the Canvas reconciler root alive across a StrictMode remount (#70 ) (43475c6 )
keep the fill type across path effects and trim before reshaping (6858656 )
load require()d images, fonts and video in Android release builds (f2a199d )
make group, paint and image opacity actually apply (#69 ) (f886138 )
mask: seed the mask layer with Clear so DstIn spans the clip (081bb3a )
minor build issues (c354a1a )
native heap growth — slot-write serialization churn and the nitro CxxPart JNI cycle (#254 ) (#256 ) (64c1ab9 )
nest contours by outline sampling and measure every contour (3d55e48 )
offscreen: pre-drain hit tests, empty-path rejection, zero-copy encode (#243 ) (9768a36 )
pack only the tgfx sources the native build compiles (#119 ) (e9aaa8a )
pack only the tgfx sources the native build compiles (#119 ) (#122 ) (5f7cbf2 )
package: make a clean install of the published tarball build (#167 ) (4c6d10d )
real package metadata (#44 ) and non-silent color parse failures (#42 ) (#73 ) (3c3ff75 )
reanimated: make the optional peer real and stop swallowing a broken install (#53 ) (4698c9d )
reject a missing image source by name (8b0d3eb )
reject a rowBytes that is not whole pixels, which the GPU row-length uploads would shear (f630d33 )
release: keep versions on the 0.0.x prerelease line (0943e58 )
releasse (64c0417 )
releasse (c507fd9 )
render SVG elliptical arcs instead of flattening them to lines (#80 ) (2022f6d )
replace the racy iOS idle-frame counter with a wake generation (#66 ) (80ffa98 )
retain the Android camera buffer across the render hop, coalesce frames (#84 ) (7e0289d )
scene: ownership-aware reseed and quiet exports (#242 ) (e3740bb )
shader positions are points, and useClock ticks in seconds (#123 ) (9f5871a )
ship license, notice, and built entrypoints in the npm package (#116 ) (165abf2 )
stop the SVG path parser spinning on an implicit repeat of Z (#67 ) (80c2bb3 ), references #58
tests: harness's jest global put Reanimated in mock mode, killing every slot write (#233 ) (d9bf9d0 )
test: update the mixed-group golden for the post-#89 animated literal (#94 ) (9e04a99 )
validate fromPixels geometry, refuse stream handles in replaceExternal, report pixel bytes to the GC (ae79c3a )
video: decode Android frames through a SurfaceTexture, not a hardware buffer (78fe09a )
video: produce Android frames at draw time so a paused video keeps its frame (d68193d )
video: rebuild the Android frame reader across background and resume (4fad058 )
worklet: review follow-ups across colours, guards and the invariant test (#251 ) (bdd65b2 )
write an animated field's current value as its literal, not zero (#89 ) (76e0c68 )
Performance Improvements
alias drawing components to their host type instead of wrapping them (#54 ) (cc9aafb )
android: skip draws for offscreen canvases, cache decoded image handles, tighten registry dependency scan (#217 ) (f458575 )
android: trace the render thread's phases (#100 ) (5b7ce89 ), references #24
bake the static effect prefix so only moving effects re-run (73211ba )
batch adjacent paths into one draw and keep frame proxies alive — 900 rotating paths from 70 to 114 fps (#264 ) (ea90732 )
binary scene wire format, SurfaceView canvas, off-main-thread iOS rendering (978c7da )
build a node's paint, line path and font once at setScene instead of per frame (#93 ) (096fe27 )
build plain shape trees without mounting the reconciler (#101 ) (1101644 ), references #24
build the mask Luma filter once instead of per frame (701d25f )
cache parsed color strings instead of re-parsing per node per commit (#61 ) (310e8fa )
commit-time batch clustering — 20k interleaved shapes from 8fps to 53fps (#260 ) (088cd8e )
compile-once render pipeline, dirty redraw, idle loop suspension (c7a9662 )
cut per-node allocations and string dispatch in the compile path (7258f73 )
drop the per-group child filter, gradient probe, and angle closure (#71 ) (66ecb27 )
fold a static Blend without materialising its children (940743e )
fold static group matrices, elide transform-free group saves, stop the per-frame allocation under the render lock (#68 ) (2c026ec )
GPU render thread, tgfx runtime shaders, and a tgfx face-blur app (9bb25f1 )
pre-filter contour nesting by bounds and skip single-contour work (c67da0d )
redraw a canvas only for the registries its own scene reads (dfe30d3 )
seed the mask layer with a clip rect, and fill the new demo panels (75f1324 )
send the scene string table as a delta so image payloads cross once (#92 ) (4c0d643 )
shader: cache the SkSL transpile, and parse child declarations (#111 ) (e77a18c )
snapshot animating slots from a shared mirror and hold a program until its first push (#261 ) (b7d6c77 )
stop clearing the image cache when the window is released (#96 ) (610d2a9 )
Reverts
release pipeline and tarball allowlist pending verification (#121 ) (f6a1157 )
You can’t perform that action at this time.