3 days ago
react-native

0.88.0-rc.0

Breaking

  • Touchable: The Touchable root export (undocumented) is removed. If you are extending Touchable as a type, please use ViewProps instead. (0015d1e4f9 by @huntie)

iOS specific

  • TurboModules: Add RCTArrayBuffer, the ObjC representation of a JS ArrayBuffer for TurboModules, with an explicit byte-ownership contract (11f9a7f449 by Kamil Paradowski)

Added

  • C++: Add <React/FeatureFlags.h> umbrella header as the public entry point for react/featureflags (f970054a8a by @j-piasecki)
  • C++: Add <React/RendererBridging.h> umbrella header as the public entry point for react/renderer/bridging (5b680c5f9f by @j-piasecki)
  • C++: Add <React/Timing.h> umbrella header as the public entry point for react/timing (70f172d29f by @j-piasecki)
  • C++: Added missing mutex include in HostTarget.h (3f8f5c216a by @etodanik)
  • Feature Flags: Add enableImageTransparentTintColor feature flag (c5bd054983 by @coado)
  • JavaScript API: Deprecate 'react-native/Libraries/Core/InitializeCore'. Use 'react-native/setup-env' instead. (554baba159 by @huntie)
  • PlatformColor: Support a lazy raw color fallback for PlatformColor when native tokens fail to resolve (65008fcdd0 by @Abbondanzo)
  • React Native DevTools: Experimental performance screenshots support and Page.captureScreenshot is added to the EXPERIMENTAL channel (4be68ef785 by @huntie)
  • React Native DevTools: Support for inspecting WebSocket events in the Network panel is added to the CANARY channel (713ae6b1b9 by @huntie)
  • React Native DevTools: Users and agents can now capture app screenshots via the Page.captureScreenshot command (00efc0a440 by @huntie)
  • Text: Add object syntax for fontVariationSettings (376b99ff14 by @evankatz14)
  • TypeScript: Add isInstalled() and clearAllLogs() to the LogBox TypeScript declarations (a69badd468 by @Abbondanzo)
  • TypeScript: Add missing strictMode prop to FlatList TypeScript types (3e2403327c by @drhops)
  • TypeScript: Add TypeScript declarations for requestIdleCallback and cancelIdleCallback (c086431a4b by @Critteros)
  • VirtualizedList: Add missing ListItemComponent type to VirtualizedList props (5306e9229c by @aravi365)

Android specific

  • Feature Flags: Add enableMountingCoordinatorPullModelAndroid feature flag (ece0efe837 by @coado)
  • Network Inspection: Expose network event reporting to third-party networking stacks as an unstable API (83d0be8958 by @huntie)
  • Networking: Send app name and version as the default User-Agent header for network requests, matching iOS (04e50d540d by Calvin Liu)
  • Renderer: Add inert Java plumbing (PullTransactionMountItem, FabricUIManager.onTransactionAvailable) for the pull model (6515647d94 by @coado)
  • Renderer: Wire the pull-model mounting path in C++ behind enableMountingCoordinatorPullModelAndroid (9da1a01153 by @coado)
  • Text: Add fontVariationSettings support for <Text> (19f7d144b9 by @evankatz14)
  • TextInput: Add fontVariationSettings support for TextInput (a688608090 by @evankatz14)
  • TurboModules: Add ArrayBuffer, the Java representation of a JS ArrayBuffer for TurboModules, with an explicit byte-ownership contract (5bb9639594 by Kamil Paradowski)
  • TurboModules: Add ArrayBuffer support to Java TurboModules (5fb3ebce1a by Kamil Paradowski)

iOS specific

  • Assets: Use asset catalog for ios images (26769a00b2 by @janicduplessis)
  • CocoaPods: Add a React-cxxstableapi dependency to third-party New Architecture pods so they can resolve React Native's C++ API guard headers (d3daf111e0 by @coado)
  • Legacy Architecture: Allow consumers to opt into RCT_REMOVE_LEGACY_MODULE_INTEROP and RCT_REMOVE_LEGACY_COMPONENT_INTEROP from CocoaPods and SwiftPM. Both default to off and will become the default in a future release (b933d18177 by @christophpurrer)
  • SceneDelegate: Add SceneDelegate lifecycle support (7bfe32fd33 by @artus9033)
  • Styles: Print warning advice when using shadow* styles without providing a solid background color (eb4d3892ab by @hannojg)
  • SwiftPM: npx react-native spm command + SwiftPM package-generation tooling (opt-in; CocoaPods stays supported) (47fad096a4 by @chrfalch)
  • TurboModules: Reject ArrayBuffer as a TurboModule EventEmitter payload on all platforms (ab2ea649e6 by @christophpurrer)

Changed

  • Accessibility: Automatically set accessible prop when role prop is set (except none/presentation) (4043e818f1 by @mdjastrzebski)
  • Babel: Platform.OS and Platform.select(...) inlining in react-native/babel-preset now requires the inlinePlatform option in addition to platform (f63b2a1cb5 by @robhogan)
  • Babel: Inline Platform.OS and Platform.select(...) for React Native Platform imports during the Babel preset, covering some cases that were previously left un-inlined. (40c06121a1 by @robhogan)
  • Build: Add React Native Maven pull-through cache fallback for prebuilt artifacts. (3bfb277fec by @coado)
  • Hermes: Bump hermes-v1 to 260318099.0.1 (b113cf5864 by @fabriziocucci)
  • Legacy Architecture: Core components (ActivityIndicatorView, ModalHostView, PullToRefreshView, SafeAreaView, Switch) no longer report legacy RCT-prefixed names in their view configs (904812016f by @christophpurrer)
  • Metro: Bump Metro to 0.87.0 (fe511aba7c by @robhogan)
  • React Native DevTools: When using the fallback flow for launching DevTools (desktop app fails to launch), Microsoft Edge will not be attempted. DevTools will open as a standard window in the default browser. (9efcdfc2b4 by @huntie)
  • Runtime: RuntimeScheduler now clears pending tasks and rendering updates when a task throws (14184ec643 by @javache)
  • Runtime: Async CallInvoker work is now buffered alongside callable module calls, so it no longer runs before the JS bundle has finished evaluating (3ca6ea3eca by @javache)
  • Styles: Remove experimental_ prefix from backgroundSize, backgroundPosition and backgroundRepeat (7844386bbd by @intergalacticspacehighway)
  • UIManager: UIManager::startSurface and UIManager::setSurfaceProps now take moduleName and props by value (85a81818c6 by @javache)

Android specific

  • Dev Server: Removed FileIoHandler packager message handlers (e3598fac12 by @javache)
  • Image: ImageProps make tintColor an std::optional to support color transparent (0) with props 2.0 (f535c97904 by @hannojg)
  • New Architecture: Deprecate fabricEnabled on ReactFragment (c7d62a125c by @javache)

iOS specific

  • Build: Prebuilt artifacts: ReactNativeHeaders is pure-RN; third-party deps headers ship in the new ReactNativeDependenciesHeaders.xcframework sidecar (and the ReactNativeDependencies pod), published standalone to Maven (6aa147f6c9 by @chrfalch)
  • CocoaPods: Cache Maven repository requests (artifact existence probes, nightly metadata) during pod install to avoid re-issuing identical requests on every podspec evaluation (88feed55c0 by @coado)
  • Dev Server: Declare RCTBundleURLProviderAllowPackagerServerAccess unconditionally (no-op when packager support is compiled out) (54656471a5 by @ramonclaudio)
  • Dev Server: Make iOS preserve dev bundle as a temp file on par with Android implementation (e2a4c68449 by @tjzel)
  • Legacy Architecture: Compile out RCTGetModuleClasses/RCTRegisterModule and skip static module registration when both RCT_REMOVE_LEGACY_MODULE_INTEROP and RCT_REMOVE_LEGACY_COMPONENT_INTEROP are defined (5d62ca4296 by @christophpurrer)
  • RNTester: Update RNTester and HelloWorld for SceneDelegate lifecycle behavior (609bdddabf by @artus9033)
  • StatusBar: Downgrade RCTStatusBarManager error to a warning when UIViewControllerBasedStatusBarAppearance is YES (9e71c443ac by @shwanton)
  • SwiftPM: Download SwiftPM prebuilt artifacts from the React Native Maven mirror first, with Maven Central as fallback (c2dac6abcc by @coado)
  • TextInput: Adds localization for Text Input default return key types (507023622b by @cipolleschi)

Deprecated

Android specific

Fixed

  • Accessibility: Fix accessibility list role conversion in C++. (aa96fa64d1 by @Abbondanzo)
  • Animated: addListener fires again for natively driven Animated values derived with add/subtract/multiply/divide/modulo/diffClamp/interpolate (ce621bbd5b by @dennytosp)
  • Animated: Add ReactRevisionMerge source to the AnimationBackendCommitHook (ca53751780 by Bartlomiej Bloniarz)
  • Animated: Perform AnimationEndSync commits on the React revision (7d855222cd by @j-piasecki)
  • Babel: Apply normal preset defaults when invoked without a Babel API or options object. (9ad8c830bd by @OskarEichler)
  • Babel: Detect trivia-separated React.createClass calls in optimized preset configuration. (619c8aed24 by @OskarEichler)
  • Babel: Inline the last duplicate key from static Platform.select object literals. (bbdeb7dc1d by @OskarEichler)
  • Babel: Keep private class transforms enabled for profiles that lower classes. (0c0e9f0840 by @OskarEichler)
  • Blob: Retain Blob reference in FileReader during pending native reads to prevent premature deallocation by BlobCollector (568eaa6b69 by heecheolman)
  • C++: Fixed MSVC compilation of NativeDOM.cpp by removing backticks (e979b0ef8d by @etodanik)
  • Codegen: Codegen no longer hangs on type aliases that shadow CodegenTypes member names (42be7452d5 by @sbaiahmed1)
  • Codegen: pass the target platform when generating schemas so platform-specific sources (e.g. NativeModule.ios.ts) resolve correctly (f46ace878a by @Gregoirevda)
  • Codegen: React-native-codegen build.sh on AppleVirtIOFS volumes (27b5f761b1 by @etodanik)
  • Codegen: Run native component codegen when Flow type arguments are separated by trivia. (0d64c9a13a by @OskarEichler)
  • DeviceInfo: Refresh DeviceInfo constants on each read (9d10e39d32 by @artus9033)
  • DOM API: Resolve native EventTarget names that overlap Object prototype properties. (621ced78e9 by @OskarEichler)
  • EventEmitter: Support EventEmitter event names that overlap Object prototype properties. (790289c1d6 by @OskarEichler)
  • FileReader: Fire loadstart, throw InvalidStateError on overlapping reads, and expose FileReader.error as a DOMException. (544141efab by @Abbondanzo)
  • FileReader: Keep FileReader in the correct state after aborting a read. (e92816c5a5 by @fallintoplace)
  • Gradients: Fix radial-gradient at <position> being ignored (and corrupting the size) when it follows an explicit size (66f27eb93e by @Titozzz)
  • Gradients: Reject percentage radii for circle radial gradients, matching web behavior (5821fcaf5d by @Titozzz)
  • Image: Preserve Image source headers when using crossOrigin or referrerPolicy (08c7781e5a by @mfkrause)
  • IntersectionObserver: Sort IntersectionObserver threshold arrays numerically. (ee32dfc8b9 by @OskarEichler)
  • JavaScript API: Additional Props/Style types are now defined as interface, fixing compatibility with certain DefinitelyTyped packages (593ae0258d by @huntie)
  • JavaScript API: Fix requestIdleCallback timeout option being ignored (0a1a06c5ea by @pakerwreah)
  • Networking: Fix XMLHttpRequest.setRequestHeader to append duplicate headers per spec (58bf844967 by @zmunm)
  • Networking: Preserve buffered and empty Cxx WebSocket frames and serialize writes. (92cd588a5c by @OskarEichler)
  • Performance: Round instead of truncate when converting a DOMHighResTimeStamp back to nanoseconds, so HighResTimeStamp and HighResDuration round trips are exact (c467843ed0 by @GijsWeterings)
  • ScrollView: Fix maintainVisibleContentPosition with rapid data updates (https://github.com/react/react-native/issues/53542) (5cb65244dc by @kulkarni-rohan)
  • Styles: Fix transformOrigin string parsing for decimal percentage and pixel values. (0a60ec9dea by @MayankSharma-2812)
  • Styles: Preserve negative values in transformOrigin strings. (4501979c1a by @fallintoplace)
  • StyleSheet: Use cached results for already normalised colors (092734772a by @riteshshukla04)
  • Text: Fix Text truncation when string contains NULL character \u0000 (https://github.com/react/react-native/issues/24129) (5906cfb060 by @kulkarni-rohan)
  • Text: Prevent Text from mutating the accessibilityState prop (c300f84f2c by @mfkrause)
  • TextInput: blur focused input before unregistering it on unmount, fixing the Android soft keyboard staying open after navigating away from a focused input (d13d2b0a5f by @sidorchukandrew)
  • TurboModules: TurboModule event emitters no longer throw when an event is emitted before the emitter callback is installed (4bf5575490 by @christophpurrer)
  • TypeScript: Fix TS2883 when building declaration files for libraries that use codegenNativeComponent due to unreachable NativeComponentType<T> (391723e869 by @artus9033)
  • VirtualizedList: Ignore stale viewability updates while enforcing minimum view time (1c4a46f4e3 by @cipolleschi)
  • VirtualizedList: Invalidate list content length when orientation changes. (e59a1d252c by @fallintoplace)
  • VirtualizedList: Prevent zero-sized lists from reporting viewable items (c057b1fa01 by @Abbondanzo)

Android specific

  • Accessibility: Fix crash when accessibilityRole="tabbar" is used on Android (a4733b1ca1 by @aravi365)
  • Build: Export jserrorhandler headers in the reactnative prefab so external consumers of cxxreact/ErrorUtils.h can build. (f2a6db9fce by @alanjhughes)
  • Dev Menu: Persist Change Bundle Location debug server host changes (d2ac190411 by @Phecda)
  • Dev Server: Stop dev server WebSockets from throttling bundle downloads and other dev server requests (cc5dd59742 by @javache)
  • Gradle: Use the JVM temp dir instead of a hardcoded /tmp for the build-from-source container project dirs, fixing Gradle configuration on Windows (908872a68e by @kraenhansen)
  • i18n: Detect RTL from the active locale instead of an arbitrary installed one (e46189e1e1 by @zoontek)
  • Image: Deprecate the String? overloads of ReactImageManager#setDefaultSource and ReactImageManager#setLoadingIndicatorSource (3a95e0e93c by @hannojg)
  • Image: Fix Image.getSize() and Image.getSizeWithHeaders() rejecting data: URIs (8cfde6d083 by Cole Huntley)
  • Image: Fix crash when setting a percentage borderRadius on Image (f2a250ad89 by @sbaiahmed1)
  • Renderer: Fix IllegalStateException in SurfaceMountingManager.removeViewAt (3f553d76bc by @cortinico)
  • Renderer: Pull model mounting is now deferred until the root attaches (2f5a8332cf by Bartlomiej Bloniarz)
  • Runtime: Prevent a startup crash when the WindowMetrics API is missing on an inconsistent Android runtime (3f9cc72309 by @gooddev97)
  • Runtime: Report a fatal JS error instead of aborting the process when reading the error's extra data fails (41b375eb04 by generatedunixname1608173377072046)
  • Styles: Fix crashes when outlineColor is provided as a numeric color value (53b933feca by HURRAEY)
  • Text: Fix Text with adjustsFontSizeToFit being clipped when container height decreases dynamically (63064687e2 by @imsankalp)
  • Text: Keep inline views inside Text from shrinking with Android system font scale (551d12a787 by @TorinAsakura)
  • TextInput: Ellipsize long single-line TextInput placeholders to match iOS (7f18ad0f84 by @kosmydel)
  • TextInput: Show the soft keyboard when a long-press starts text selection in TextInput (9195e52706 by @idoyana)
  • TurboModules: TurboModule methods taking or returning an ArrayBuffer (d84c13d511 by @christophpurrer)
  • View: Resetting border widths no longer clips children in rounded overflow-hidden views. (146aaac7ee by @RealBhupesh)
  • ViewManagers: Fix Double prop defaults being rounded to float precision in generated ViewManager delegates (2c4278d83b by @dennytosp)
  • ViewManagers: Fix RuntimeException: Unrecognized type: class com.facebook.yoga.YogaValue when a ViewManager implements a DimensionValue prop with ReactProp (091ac613ce by @dennytosp)
  • ViewManagers: Fix RuntimeException: Unrecognized type: class java.lang.Float when a ViewManager implements a nullable float prop (WithDefault<Float, null>) with ReactProp (8d23b14da6 by @dennytosp)
  • VirtualizedList: Fix ListMetricsAggregator cell metrics not clearing on orientation change and guard against divide-by-zero (3b90423076 by @aarononeal)

iOS specific

  • Accessibility: Views with checkbox, radio, combobox, dropdownlist, menuitem, spinbutton, tab, option, searchbox, slider and treeitem roles are now reachable via Full Keyboard Access (05b97de823 by @fkgozali)
  • Accessibility: VoiceOver text readout when changing elements asynchronously (082d787a1e by @coolsoftwaretyler)
  • Appearance: RCTAppearance.setColorScheme() no longer crashes CarPlay apps when connectedScenes contains a non-UIWindowScene (00a5aa9223 by @SnowingFox)
  • Assets: Asset catalog imagesets paired wrong files for assets with non-standard scales (74b984729b by @janicduplessis)
  • Blob: Fix intermittent native crash (CoreServices/UTType XPC) in RCTBlobManager when deriving blob names for network responses (671705dfb1 by @1337mus)
  • Codegen: Codegen now discovers third-party component libraries without an iOS configuration. (917d97eb12 by @RealBhupesh)
  • Codegen: Fixed intermittent "Cycle in dependencies between targets 'ReactCodegen' and ..." Xcode build error that occurred on incremental iOS builds when an app's codegenConfig.jsSrcsDir contained no Native*/*NativeComponent spec files. (0b0eb8d012 by @Levin-nik)
  • Dev Server: Create the RCTDevSettings packager connection in initWithDataSource so instances built that way also receive packager commands (e71fc4e32f by @alanjhughes)
  • DeviceInfo: Refresh DeviceInfo constants after interface dimension changes (b743a8a35b by @artus9033)
  • Hermes: Set always_out_of_date on hermes-engine's Replace Hermes script phase (d89c432659 by @ramonclaudio)
  • i18n: Align text to the right by default in RTL when textAlign is not set, matching Android (1b92b02f99 by @zoontek)
  • Image: aria-* state props are no longer ignored when accessibilityState is also present (c3caea9b5e by @mdjastrzebski)
  • LogBox: Prevent RedBox auto-retry from reloading while backgrounded (b587763f40 by @Abbondanzo)
  • PushNotificationIOS: Fix main-thread watchdog hang in PushNotificationIOS.setApplicationIconBadgeNumber (6f6efed3e7 by @christophpurrer)
  • ReactHost: Forward host:didInitializeRuntime: callback to user delegate in RCTReactNativeFactory (98dc7d6423 by @zhongwuzw)
  • Renderer: Log missing native component registrations on iOS and Android (ef28a2c9d5 by @alanleedev)
  • Renderer: Report a RCTViewComponentView child-index mismatch instead of raising NSRangeException while formatting the assert message (1291d7ce8e by @dongdongbh)
  • Renderer: Reset EmptyLayoutMetrics in RCTViewComponentView prepareForRecycle so recycled views clear UIView.hidden (711a9a5e07 by @kosmydel)
  • Runtime: Avoid an unhandled exception in bridgeless ReactInstance::registerSegment when an on-demand JS segment file is missing from the cache at lazy-load time (fff4994af8 by generatedunixname1608173377072046)
  • ScrollView: Prevent recycled ScrollViews from retaining automatic keyboard inset behavior. (e0aa7a8b0a by @stareezy-1)
  • ScrollView: Programmatic (non-user-initiated) scrolls no longer cancel active touches in enclosing scroll views (06eb1fefab by @tjzel)
  • Styles: Render outlineStyle: 'dotted' and 'dashed' on views without border radii (9f31d5ae9f by @neutronm)
  • SwiftPM: stop baking an absolute, machine-specific HERMES_CLI_PATH into the app's pbxproj; resolve hermesc at build time instead (fcbeda1109 by @chrfalch)
  • Switch: Restore paperComponentName: 'RCTSwitch' to fix testing-library/react-native queries (38fd9d57df by @christophpurrer)
  • Text: Correctly classify extralight fonts as UIFontWeightUltraLight in RCTGetFontWeight (3b5d0a6526 by @vonovak)
  • Text: Prevent the final line or trailing glyph of text from being clipped due to pixel-grid rounding precision loss (5e40a1771e by @fabriziocucci)
  • TextInput: Preserve TextInput selection color when changing multiline. (56c284e152 by @fallintoplace)
  • TextInput: update the keyboard when keyboardType/returnKeyType change while the input is focused (new architecture parity with the legacy architecture) (0f1bdddfb3 by @NoahDorfman00)
  • Touch Handling: Fix debug-only crash in RCTSurfaceTouchHandler from UITextView text-selection gestures on iOS 17+ (433e79d2f4 by @hryhoriiK97)
  • TurboModules: Include the module and method name in exceptions rethrown from async and void TurboModule calls (253a84c8d1 by @christophpurrer)
  • TurboModules: Pass a top-level JS null TurboModule argument to Objective-C as nil instead of NSNull when enableModuleArgumentNSNullConversionIOS is enabled (ea291d7422 by @christophpurrer)

Security


Hermes V1 dSYMS:

ReactNativeDependencies dSYMs:

ReactNative Core dSYMs:


You can file issues or pick requests against this release here.


To help you upgrade to this version, you can use the Upgrade Helper ⚛️.


View the whole changelog in the CHANGELOG.md file.

7 days ago
ImageToolbox

4.2.0

What's Changed

New Features

  • Added support for AV2-based AVIF images
  • Added chroma subsampling selection for AVIF and HEIC formats
  • Added VVC encoding support for HEIF format
  • Added Batch Rename tool
  • Added ability to cancel loading in spot heal draw mode by #2944
  • Added ability to use slices in original name filename pattern by #2951
  • Added new filename patterns: Parent Folder, UUID
  • Added ability to move and customize markup layers menu by #2941
  • Added Auto White Balance filter by #2953
  • Added LSB and FD modes for hidden watermarks
  • Added settings to control the cache limit and automatic clearing interval
  • Added ability to make crop overlay undraggable
  • Added a GIF merging tool
  • Added ability to select a folder as an image source by #2961
  • Added the Duplicate Finder tool
  • Added long-press reset for editable slider values
  • Added more formats for color copying
  • Added natural filename sorting, reverse order, and shuffle options to sort button
  • Added quick actions to move items to the start or end of reorder lists
  • Added ability to save custom aspect ratios by #2968
  • Added ability to export barcodes to SVG format by #2978
  • Added 74 new procedural textures to the texture generator
  • Added search, categories and favorites to texture generation tool
  • Added ability to choose deletion presets in Delete EXIF tool
  • Added panorama image stitching mode by #2988
  • Added ability to preview AI Tool results before saving
  • Added customizable RAW development settings
  • Added G’MIC filter engine
  • Added 167 new filters based on new engine
  • Added Gradient Map filter
  • Added ability to toggle nested scroll for sheets by #2997
  • Added ability to save images that are already below the size limit in the Resize by Weight tool
  • Added 3 new scale modes by #2999
    • Magic Kernel
    • Magic Kernel Sharp 2013
    • Magic Kernel Sharp 2021
  • Added an option to return after saving external edits by #3003
  • Added ability to write ImageToolbox processing information into image metadata by #3004
  • Added EXIF read/write support for HEIC, AVIF, JXL, TIFF and JP2
  • Added EXIF 3.1 support
  • Added Jixel encoder for JXL format
  • Added support for REVIEW intent actions by #3014
  • Added 9 new tone curves for color adjustment
    • CMYK
    • Lab
    • Hue vs Sat
    • Hue vs Hue
    • Hue vs Luma
    • Luma vs Sat
    • Luma vs Hue
    • Sat vs Sat
    • Color Wheels
  • Added separate Tone Curves tool
  • Added ability to view waveform and vector scope in Tone Curves
  • Added undo/redo options to crop tool by #3032
  • Added 4 style transfer AI models by #3034
  • Added ability to export/import tone presets in Tone Curves tool by #3031
  • Added 61 built-in export profiles for social networks
  • Added 7 new PDF tools:
    • Contact Sheet
    • Compare
    • Resize
    • Sanitize
    • Palette Export
    • Dark Mode
    • Comic to PDF
  • Added screenshot mode to Image Stitching tool
  • Added 3 new filter groups: Frames, Enhancement, Artistic
  • Added a Photomosaic tool
  • Added a Multi-frame fusion tool
  • Added 14 depth AI models to create depth map and smart effects
  • Added Compression Lab tool to compare formats, optimize quality and file size
  • Added Recent Tools in Share Sheet by #3054
  • Added ability to specify defaults in settings for text markup layers by #3061
  • Added 11 AI image detector models by #3063
  • Added ability to import palettes to gradient maker tool by #3068
  • Added 9 conversion tools by #3071 and #3073
    • GIF to APNG
    • WEBP to GIF
    • APNG to GIF
    • APNG to WEBP
    • WEBP to APNG
    • WEBP to JXL
    • JXL to GIF
    • JXL to APNG
    • JXL to WEBP
  • Added 3 merge tools
    • Merge APNG
    • Merge WEBP
    • Merge JXL
  • Added Archive Tools with 32 archive creation options and broad extraction support
  • Added Code Preview Generator tool
  • Added precise selection of threshold to pixel by pixel comparison mode by #3091
  • Added a Gallery Viewer tool for browsing and previewing images in formats unsupported by system galleries by #3090
  • Added .CLRS palette format support by #3103
  • Added Template Filters manager by #3096
  • Added Fractals tool to generate 75 different types of fractals by #3105
  • Added 75 built-in gradient palettes
  • Added gradient palette presets to Gradient Maker and Texture Generation
  • Added ability to undo/redo to Gradient Maker tool

Improvements

  • Improved AVIF and HEIC encoding/decoding performance
  • Improved original filename and sequence filename patterns
  • Improved overall cropping experience by #2942
  • Improved and optimized hidden watermark encoding and detection
  • Improved hidden watermark detection feedback and result handling
  • Improved multilingual text handling in PDF files by #2964
  • Improved usability of long-press save menu
  • Improved resource download process by #2985
  • Improved file encryption with secure key derivation and unique nonces by #2990
  • Improved RAW decoding with LibRaw and enhanced TIFF support
  • Improved pixel-by-pixel comparison metrics and added score display
  • Improved tone curves editor with flexible control points and per-channel histograms by #3018
  • Improved row and column count in Image Stitching tool by #3027
  • Improved images folder picker speed
  • Improved ICO export with multiple embedded sizes: 16, 32, 48, 64, 128, and 256 px
  • Improved UI and interactions

Fixes

  • Fixed rotation buttons for RTL languages by #2946
  • Fixed compare slider lag by #2945
  • Fixed GIF encoder transparency
  • Fixed progress service issues by #2977
  • Fixed “All files access” prompts appearing when the permission cannot be requested by #2982
  • Fixed Resize & Convert ignoring the “Always clear EXIF” setting for single images by #2989
  • Fixed saving to the original folder and overwriting files
  • Fixed an issue where a combination of three settings could lead to file loss by #3002
  • Fixed draw tool for text brush by #3010
  • Fixed mesh gradient rendering on some devices by #3017
  • Fixed split PDF tool by #3037
  • Fixed crop with aspect ratio output by #3048
  • Fixed swipes on image container by #3051
  • Fixed GIF conversion issues
  • Fixed AI tools processing cancellation by #3076
  • Fixed crash in PDF signature tool by #3086
  • Fixed sharing to other apps by #3087
  • Fixed nearest scale mode by #3089
  • Fixed JXL tools bypass when overwrite files enabled by #3088
  • Fixed animated images preview in preview modes by #3097
  • Fixed Spanish translation by #3111
  • Fixed undo redo for template filters by #3114
  • Other minor bug fixes

Full Changelog: https://github.com/T8RIN/ImageToolbox/compare/4.1.0...4.2.0

13 days ago
Balloon

2.0.0

Balloon 2.0.0 is a full rewrite on Compose Multiplatform. One artifact now runs on Android, iOS, Desktop and Web, and the API is composables and state instead of Context, View and XML.

If you need the View implementation, it stays available at 1.7.6 and is documented separately. Nothing about 1.x is going away.

Supported platforms

Target Artifact
Android balloon-android
Desktop (JVM) balloon-desktop
iOS (arm64) balloon-iosarm64
iOS (simulator, arm64) balloon-iossimulatorarm64
iOS (x64) balloon-iosx64
Web (Wasm) balloon-wasm-js

Gradle picks the right one. Depend on com.github.skydoves:balloon and nothing else.

Installation

Compose Multiplatform:

kotlin {
    sourceSets {
        commonMain.dependencies {
            implementation("com.github.skydoves:balloon:2.0.0")
        }
    }
}

Android only:

dependencies {
    implementation("com.github.skydoves:balloon:2.0.0")
}

balloon-compose is gone. It is folded into balloon.

Quick start

val style = rememberBalloonBuilder {
    setArrowSize(10.dp)
    setPadding(12.dp)
    setCornerRadius(8.dp)
    setBackgroundColor(Color(0xFF785EF0))
    setBalloonAnimation(BalloonAnimation.ELASTIC)
}
val balloonState = rememberBalloonState(style)

Balloon(
    state = balloonState,
    balloonContent = { Text(text = "Now you can edit your profile!", color = Color.White) },
) {
    Button(onClick = { balloonState.showAlignTop() }) {
        Text(text = "Edit profile")
    }
}

Wrap your screen in BalloonHost { ... } once, at the root, and every balloon inside it works.

What changed from 1.7.6

1.7.6 2.0.0
Artifacts balloon, balloon-compose balloon
Platforms Android Android, iOS, Desktop (JVM), Web (Wasm)
Rendering PopupWindow plus Android views Compose Popup and a Compose Shape
Package com.skydoves.balloon, com.skydoves.balloon.compose com.skydoves.balloon
Content setText, TextForm, IconForm, setLayout a @Composable slot
Anchoring you pass a View to every show call BalloonState knows its own anchor
Lifecycle setLifecycleOwner, manual disposal composition disposal

There is no Context, no View, no Drawable, no Typeface and no XML anywhere in the API.

What is new

  • Two ways to attach a balloon. Wrap an anchor with Balloon(...), or decorate one in place with Modifier.balloon(...).
  • A composable body. The balloon content is a slot, so you build it like any other UI. Interactive children work: a tap a child consumes never reaches the balloon's own handler.
  • Coroutine friendly. Every show has a suspend twin. awaitAlignBottom() returns when the balloon closes, so a sequence of tips reads as straight line code.
  • Restyle in place. rememberBalloonState re-applies the style on every recomposition, so an animated style updates a balloon that is already showing without hiding it.
  • derive. base.derive { setBackgroundColor(Color.Red) } makes a variant of an existing style using the same builder block.
  • Placement that flips. When the requested side has no room and the opposite side has some, the balloon moves and the arrow follows it.
  • A baseline profile ships in the Android artifact.

Every 1.x builder setter that has a multiplatform meaning is present, with the same name and the same defaults, so most builder blocks port across unchanged.

Deliberate differences

These behave differently from 1.7.6 on purpose. Each was found by rendering both implementations and diffing the result pixel by pixel.

  1. A hidden arrow takes no space. setIsVisibleArrow(false) puts the body flush against the anchor. 1.x left an arrowHeight - 1px gap.
  2. The arrow points at the anchor by default. In 1.x arrowOrientation defaulted to BOTTOM, so showAlignStart() on a default builder left the arrow pointing down.
  3. Balloons flip instead of clamping. 1.x only flipped vertically, and horizontally it slid the balloon along the window edge until it overlapped its own anchor.
  4. setBalloonStroke draws the thickness you asked for, around the arrow too.
  5. No drop shadow. elevation reserves its space and drives the width math, but the shadow is not drawn: Compose can only cast a shadow from a convex outline, and a balloon with an arrow notch is not convex. Use Modifier.shadow(...) inside the slot if you need one.
  6. BalloonOverlayShape.Circle and RoundRect take Dp, where 1.x took raw pixels. Convert deliberately.
  7. The arrow never enters a rounded corner. Its base is clamped cornerRadius + arrowWidth / 2 in from each end.
  8. setAutoDismissDuration(0L) means "never". 1.x used -1L as the disabled sentinel and treated 0L as "dismiss immediately".
  9. BalloonHighlightAnimation.ROTATE animates out of the box. In 1.x it did nothing without an explicit setBalloonRotationAnimation.

Everything else matches to the pixel.

Not carried over

Mostly Android only surface with no multiplatform equivalent:

  • setText, TextForm, IconForm, setLayout, and everything taking a resource id. Use the composable slot.
  • setOnBalloonTouchListener and setOnBalloonOutsideTouchListener. MotionEvent is Android only. Use Modifier.pointerInput inside the slot.
  • setPreferenceName, setShowCounts, runIfReachedShowCounts. No multiplatform key value store is assumed. Gate show() with your own storage.
  • setLifecycleOwner, setDismissWhenLifecycleOnPause, setLifecycleObserver. Composition disposal dismisses the balloon.
  • setIsStatusBarVisible, setIsAttachedInDecor, setIsClippingEnabled, setRtlSupports. PopupWindow specific, or handled by LocalLayoutDirection.

Listeners moved from the builder onto the state: balloonState.onBalloonClick, onDismiss and onOverlayClick.

Migrating

The migration guide maps every 1.x setter to its 2.0.0 counterpart, including the ones that were dropped and what to use instead.

Documentation

Staying on 1.7.6

The View implementation is unchanged and still published. Keep using it with:

implementation("com.github.skydoves:balloon:1.7.6")
implementation("com.github.skydoves:balloon-compose:1.7.6")

2.0.0 does not replace it in place. It is a different API under the same coordinates, so pin the version you want.

16 days ago
react-native

0.87.1

Added

iOS specific

  • SwiftPM: Added hard fail and clear error message when an autolinking plugin host is referenced as a dependency (90a539c92d by @chrfalch)

Changed

Fixed

  • Animated: Animated.Value.addListener() types its callback payload as {value: number} rather than any (3eab03df4c by @huntie)
  • Animated: Animated.event() is typed as an event handler rather than any (3eb330a365 by @huntie)

iOS specific

  • Cocoapods: Keep the quotes on header search paths containing spaces in add_rn_third_party_dependencies (71c6bfbfdc by @Kudo)
  • SwiftPM: Reject colliding or invalid spm.modules names instead of silently dropping a module from the build (39cd1dfc4c by @chrfalch)
  • SwiftPM: Resolve Swift manifest naming collisions (962aeec5e5 by @chrfalch)
  • SwiftPM: Fixed not reading spm.name from react-native.config.js when scaffolding the Swift manifest (482acee824 by @chrfalch)
  • SwiftPM: Removed unused field spm.modules.publicHeaderFiles from react-native.config.js's spm section (5168f5f831 by Christian Falch)
  • SwiftPM: SwiftPM pipeline now reads react-native.config.js with default exports correctly (ed76640ba6 by @chrfalch)
  • SwiftPM: Created constants for internal SwiftPM packages so that we can create guards to avoid collisions (d36aa4961d by @chrfalch)
  • SwiftPM: Set SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG when injecting SPM (4433cdbe62 by @radoslawrolka)
  • SwiftPM: Recover React-Core-prebuilt configuration swaps that were interrupted before the marker was updated (a772a7ca16 by @adityasingh2400)
  • SwiftPM: Fix Hermes runtime/compiler version mismatch causing "Wrong bytecode version" crashes in SwiftPM Release builds (ead93778a1 by @nduaarte)

Hermes V1 dSYMS:

ReactNativeDependencies dSYMs:

ReactNative Core dSYMs:


You can file issues or pick requests against this release here.


To help you upgrade to this version, you can use the Upgrade Helper ⚛️.


View the whole changelog in the CHANGELOG.md file.

18 days ago
react-native

0.86.3

  • Hermes: Bump hermes-v1 to 250829098.0.17 (3fd71f07c3 by @cipolleschi)
  • EventEmitter: Fix use-after-free data race in EventEmitter.cpp (fdb26edfe7)
  • Modal: Fix parentNode/parentElement returning the document instead of the containing element for <Modal> and other nested root host views, which severed capture/bubble event propagation to ancestors rendered above them (6e3f0e8f9f by rubennorte)
  • Cocoapods: Make Podfile.lock SPEC CHECKSUMS deterministic across machines by sorting Dir.glob results in Yoga.podspec and using a dynamically computed Pods-relative path in hermes-engine.podspec (6e3f0e8f9f by IsaacIsrael)
  • Runtime: Fix ConcurrentModificationException when getInitialURL re-enters during onHostResume (20d04aefa1 by @nickcernera)
  • Font: Custom fonts with an explicit fontWeight no longer render at the heaviest weight on the New Architecture (918fb15bfe by @jensdev)

Hermes dSYMS:

Hermes V1 dSYMS:

ReactNativeDependencies dSYMs:

ReactNative Core dSYMs:


You can file issues or pick requests against this release here.


To help you upgrade to this version, you can use the Upgrade Helper ⚛️.


View the whole changelog in the CHANGELOG.md file.

25 days ago
ImageToolbox

4.2.0-rc10

What's Changed

  • Added a Multi-frame fusion tool
  • Fixed swipe gestures on the image container by #3051
  • Added 14 depth AI models to create depth maps and smart effects
  • Added a Compression Lab tool to compare formats, optimize quality and file size
  • Added Recent Tools to the Share Sheet by #3054
  • Added ability to load auxiliary images into GMIC filters by #3053
  • Added ability to specify defaults for text markup layers in settings by #3061
  • Added an option to collapse groups in fullscreen settings by #3062
  • Fixed a regression when saving to the original folder by #3042
  • Added 9 AI image detector models by #3063

Full Changelog: https://github.com/T8RIN/ImageToolbox/compare/4.2.0-rc09...4.2.0-rc10

2026-08-12 19:39:44
AestheticDialogs

Aesthetic Dialogs v3.0.0

What's Changed

Full Changelog: https://github.com/gabriel-TheCode/AestheticDialogs/compare/2.0.0...3.0.0

2026-08-12 02:31:53
ImageToolbox

4.2.0-rc09

What's Changed

  • Added 61 built-in export profiles for social networks
  • Added screenshot mode to Image Stitching tool
  • Added 4 new PDF tools:
    • Contact Sheet
    • Compare
    • Resize
    • Sanitize
  • Fixed crop with aspect ratio output by #3048
  • Added 59 new filters from GMIC
  • Added 3 new filter groups: Frames, Enhancement, Artistic
  • Improved images folder picker speed
  • Added a Photomosaic tool
  • Added GMIC commands info by #3050

Full Changelog: https://github.com/T8RIN/ImageToolbox/compare/4.2.0-rc08...4.2.0-rc09