You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Adds MVP SVG support to image preloading on iOS and Android by rasterizing SVG input into PNG data before storing it in the existing preloaded image cache.
Adds inline SVG preload input via svg, width, and height
Detects remote SVG responses in the existing URL preload path
Rasterizes SVGs with WebKit on iOS and AndroidSVG on Android
Keeps widgets using the existing Voltra.Image / preloaded asset rendering path
Updates iOS and Android examples with SVG widget test controls
Updates public docs and package types
Adds Android unit coverage for inline SVG preloading
Validation
git diff --check
npm run format:check
npm run typecheck --workspace voltra
npm run typecheck --workspace @use-voltra/ios
npm run typecheck --workspace @use-voltra/android
npm run test:kotlin --workspace voltra
Manual iOS example app widget test
Manual Android example app widget test
Notes
The iOS implementation uses WebKit for runtime SVG rasterization, so the podspec now links WebKit. SVG inputs require explicit positive width and height for predictable raster output.
Good work! I have a couple of ideas for improving code structure.
Split URL and SVG preload paths
The current preload implementation mixes two different concerns in the same native function: downloading from URL and processing inline SVGs. This makes the control flow harder to follow and maintain.
Recommendation:
Keep one public JS API, but split native handling into separate URL and SVG-specific functions. JS can dispatch internally so the user still sees a single preloadImages(...) API.
Preserve the current JS ergonomics
There is no need to expose two APIs publicly. The public API can remain a single function, with the JS layer choosing the proper native path based on whether an item contains url or svg.
Extract Android image cache/storage responsibilities
On Android, storage concerns are mixed into VoltraImageManager. The class currently handles:
fetching/downloading
SVG detection/rasterization
cache directory lifecycle
file writes
URI generation
SharedPreferences index management
stale file cleanup
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #132.
Summary
Adds MVP SVG support to image preloading on iOS and Android by rasterizing SVG input into PNG data before storing it in the existing preloaded image cache.
svg,width, andheightVoltra.Image/ preloaded asset rendering pathValidation
git diff --checknpm run format:checknpm run typecheck --workspace voltranpm run typecheck --workspace @use-voltra/iosnpm run typecheck --workspace @use-voltra/androidnpm run test:kotlin --workspace voltraNotes
The iOS implementation uses WebKit for runtime SVG rasterization, so the podspec now links WebKit. SVG inputs require explicit positive width and height for predictable raster output.
Preview
iOS

Android

