augen 1.4.0 copy "augen: ^1.4.0" to clipboard
augen: ^1.4.0 copied to clipboard

A Flutter plugin for building AR applications using ARCore on Android and RealityKit on iOS. Enables pure Dart AR development without native code.

Changelog #

All notable changes to this project will be documented in this file.

1.4.0 - 2026-06-03 #

Minor release: the lighting and occlusion method channels are now fully implemented on iOS and Android. Calls that previously slipped past the support checks and then threw MissingPluginException now return real, platform-truthful data.

Added #

  • Lighting native handlers (iOS + Android). getLightingCapabilities(), setLightingConfig(), addLight(), removeLight(), and updateLight() are now handled natively. iOS creates real RealityKit DirectionalLight / PointLight / SpotLight entities; both platforms report a truthful lighting capability map (maxLights, shadowQuality, light-estimation flags).
  • Occlusion native handlers (iOS + Android). getOcclusionCapabilities(), setOcclusionConfig(), setOcclusionEnabled(), and isOcclusionEnabled() are now handled natively. iOS toggles people-occlusion frame semantics (personSegmentation, plus personSegmentationWithDepth on LiDAR devices); Android toggles the ARCore Depth API (Config.DepthMode.AUTOMATIC) on supported devices. Capabilities are reported from real device queries rather than hard-coded values.

Fixed #

  • MissingPluginException on getLightingCapabilities and setOcclusionConfig (and the rest of the lighting/occlusion surface). These methods previously had no native handler, so once a device reported isLightingSupported == true / isOcclusionSupported == true, the follow-up capability and config calls crashed the demo. They now answer truthfully and degrade gracefully (return empty / no-op) on older OS versions or when no session is running.

Changed (non-breaking) #

  • All new handlers degrade gracefully instead of throwing: iOS guards behind #available and a running ARWorldTrackingConfiguration; Android guards behind ARCore depth-support checks and an initialized session.

Note: On Android the renderer does not yet draw added lights or placed nodes (ARCore here renders the camera background and plane detection only). These handlers stop the crashes and report honest capabilities; full scene-graph rendering on Android remains future work.

1.3.0 - 2026-05-31 #

Minor release: environmental-probe capabilities are now implemented on iOS, the web pipeline is WebAssembly-ready, and the example app is verified stable across iOS, Android, and Web.

Added #

  • getEnvironmentalProbesCapabilities() implemented on iOS. The native handler reports real ARKit/RealityKit environment-texturing capabilities (supported resolutions, max active probes, automatic/manual placement) instead of returning MissingPluginException.
  • WebAssembly readiness. The web camera service no longer performs a JS-interop runtime type check that was incompatible with dart2wasm; the web build now passes the wasm dry-run cleanly.

Fixed #

  • getEnvironmentalProbesCapabilities() and the environmental-probe configuration path degrade gracefully (return empty / no-op) when a native handler is absent, instead of surfacing MissingPluginException in the UI.
  • Example app: replaced the stale generated widget test (which always failed) with a real smoke test, and wrapped optional environmental-probe setup so a missing native handler no longer prints an error to the status overlay.

Changed (non-breaking) #

  • Example app verified to build and run on iOS, Android, and Web; the whole package passes flutter analyze with no issues and all 611 tests green.

1.2.1 - 2026-05-27 #

Bug-fix release focused on iOS demo crashes reported by early adopters. The plugin now degrades gracefully when a capability is missing on the running platform or when the controller has been disposed.

Fixed #

  • MissingPluginException on iOSisEnvironmentalProbesSupported, isCloudAnchorsSupported, isOcclusionSupported, and the other support checks no longer crash when the native side has no handler. They now return false and log a debug-only warning.
  • Bad state: Controller is disposedsetImageTrackingEnabled and setFaceTrackingEnabled no longer throw when fired during tab switches or widget rebuilds. They return false and push a user-friendly message to errorStream instead.
  • iOS native handlers — added explicit support-check handlers in AugenARView.swift using real ARKit capability APIs (ARImageTrackingConfiguration.isSupported, ARFaceTrackingConfiguration.isSupported, supportsFrameSemantics(.personSegmentation), etc.) instead of hard-coded true. Cloud anchors and multi-user honestly report false because no backend ships with Augen.
  • Android native handlers — mirrored the new support-check method names so the channel contract matches across platforms.
  • iOS Podspec — bumped from 0.1.0 to 1.2.1, fixed placeholder author / homepage metadata, and aligned the iOS deployment target.
  • Example Podfile — uncommented platform :ios, '13.0' so the demo app builds against the documented minimum iOS version.

Added #

  • AugenController.isDisposed — public getter so callers can guard before invoking mutation methods (which still throw StateError after dispose by design).

Changed (non-breaking) #

  • setImageTrackingEnabled and setFaceTrackingEnabled now return Future<bool> instead of Future<void>. Existing await call sites continue to compile without changes; new code can use the return value to drive UI state.

Tests #

  • +13 new tests covering MissingPluginException, PlatformException, and UnsupportedError paths for all 7 support checks and both toggle methods, plus isDisposed getter behavior and dispose idempotency.

1.2.0 - 2026-05-21 #

Augen now runs on three platforms — Android (ARCore), iOS (RealityKit/ARKit), and Web (WebAssembly + getUserMedia). Marker-based AR works in the browser with an image-template detector that matches a PNG/JPG marker against the live camera feed.

Added — Web platform #

  • Web marker-based AR with package:web + dart:js_interop (no dart:html, dart:js, dart:js_util, or package:js)
  • ARMarkerTarget, ARTrackedMarker, ARMarkerDetectionOptions, Vector2 models
  • imagePath field on ARMarkerTarget for PNG/JPG markers
  • ARSessionConfig.markerTracking and ARSessionConfig.markerDetectionOptions
  • Marker tracking API on AugenControlleraddMarkerTarget, removeMarkerTarget, setMarkerTrackingEnabled, setMarkerDetectionOptions, addNodeToTrackedMarker, removeNodeFromTrackedMarker, plus markerTargetsStream and trackedMarkersStream
  • AugenWebPlugin registration with platform-view factory for augen_ar_view
  • WebCameraService with getUserMedia, soft facingMode hint, automatic fallback to any camera, bounded permission timeout, typed exceptions for NotAllowedError / NotFoundError / OverconstrainedError / SecurityError
  • WasmMarkerDetector running on requestAnimationFrame with FPS gate, frame-in-flight guard, visibilitychange listener (pauses when tab is hidden), and errorStream
  • WebSceneRenderer with pooled Float64List transform buffer and typed JSFloat64Array JS interop
  • WebMarkerAnchorManager skips updates for markers with no attached nodes
  • WebAssetLoader with static Completer race guard, window.AugenWebAR auto-detection, and path-injection validation
  • JS bridge web/augen_web_ar.js — multi-scale normalized cross-correlation (NCC) template matching against PNG/JPG markers, with pose estimation from apparent marker size and configured physical width
  • Conditional imports for web/mobile separation (dart.library.io / dart.library.js_interop)
  • Standalone web demo project example/web_marker_ar/ runnable with flutter run -d chrome --wasm
  • New "Web Marker AR" tab in the main example app

Added — Tests #

  • +103 new tests (487 → 590 total)
  • Marker model coverage: ARMarkerTarget, ARTrackedMarker, ARMarkerDetectionOptions, Vector2, updated ARSessionConfig
  • Platform-backend abstraction tests
  • Marker stream fast-path / slow-path tests
  • Asset cache tests
  • Plane normalization tests (onPlanesUpdated shape)
  • E2E integration tests for the web example app via flutter drive + Chrome (example/web_marker_ar/integration_test/)

Changed — Architecture #

  • AugenController now routes through AugenPlatformBackend instead of using MethodChannel directly
  • AugenView uses conditional imports for platform-specific implementations
  • 103 controller call sites converted from generic invokeMethod to typed backend methods (failing fast on unsupported platforms instead of MissingPluginException)
  • Animation method stubs on Android/iOS now return FlutterMethodNotImplemented instead of silently succeeding
  • Asset loading cached via static LRU (50 MB budget) — repeated addNode(modelPath:) no longer re-reads the bundle

Performance #

  • Web render loop: Timer.periodicrequestAnimationFrame (vsync-aligned)
  • Web frame allocations: pooled List<double>/List<Vector2> in _convertResult, single DateTime.now() per batch instead of per marker
  • Web transform interop: pre-allocated Float64List reused per updateMarkerTransform; JSArray<JSNumber>JSFloat64Array typed array
  • Web fast path: List<ARTrackedMarker> passes directly from web backend to controller, skipping the toMap/fromMap round-trip
  • Android plane events: throttled from 60 Hz → 10 Hz with dirty-flag suppression of unchanged states
  • Skip empty anchors: marker transforms with no attached nodes don't traverse the renderer

Fixed — Mobile critical bugs #

  • iOS memory leak: added deinit releasing ARSession, anchors, planes, channel handler, and Combine subscriptions
  • Android hitTest GL race: session.update() + frame.hitTest() now run on the GL thread via glSurfaceView.queueEvent, results returned on the UI thread (fixes sporadic SessionPausedException and frame-state corruption)
  • Android plane event name mismatch: native side emitted onPlanesDetected, Dart listened for onPlanesUpdated (silently dropped events) — both platforms now agree on onPlanesUpdated
  • Android plane payload mismatch with iOS: payload normalized to {center: {x,y,z}, extent: {x,y,z}, type: "horizontal"|"vertical"}
  • iOS channel calls from delegate thread: notifyPlanesUpdated and didFailWithError now dispatch to main via DispatchQueue.main.async
  • Android arSession data race: marked @Volatile
  • Android dispose ordering: anchors detached, planes/nodes cleared, session paused before close — prevents resource leaks on hot-restart
  • iOS dispose clears scene anchors and nils the session delegate

Fixed — Web stability #

  • ARSessionConfig.markerTracking now auto-enables marker tracking on web during initialize() (previously had to call setMarkerTrackingEnabled(true) manually)
  • Stream subscription is set up before the detection loop starts (prevents dropped events on broadcast streams)
  • _processFrame guards against adding to a closed stream controller
  • Detector frame errors surfaced via errorStream instead of being silently swallowed
  • Pattern/binary asset path injection prevented (assets/ prefix, no .., no absolute URLs)
  • isSecureContext check before getUserMedia with clear HTTPS error
  • Typed exceptions for camera errors: web_camera_permission_denied, web_camera_unavailable, web_camera_overconstrained, web_camera_permission_pending, web_camera_play_timeout, web_camera_fallback
  • Camera-constraint fallback: if facingMode: 'environment' fails, retry with {video: true} (fixes desktops with only a front camera)
  • Bounded timeouts on getUserMedia (10s) and video.play() (5s) — never hangs indefinitely
  • Video element appended to container before getUserMedia (Safari requires attached element for play() to resolve)
  • pause()/resume() on web also pause/resume the video element
  • _disposed flag on web backend prevents operations after disposal
  • maxDetectionFps clamped to minimum 1 with assertion
  • loadBridgeScript race condition prevented with static Completer
  • Bridge auto-detection: skips loading if window.AugenWebAR is already defined (e.g. via <script> in index.html)
  • videoWidth === 0 and readyState < 2 guard in _processFrame
  • Tab visibility listener pauses/resumes detection loop when tab is backgrounded
  • dispose() idempotent on controller (safe to call twice)
  • AugenWebPlugin.viewRegistry cleared on backend disposal (no leak)
  • addLight / addEnvironmentalProbe return types aligned with backend interface

Limitations / Known Gaps #

  • Web marker pose estimation is a simplified template-matching implementation, not full ARToolKit Wasm — translation is derived from apparent marker size; rotation is identity. Production-quality pose requires bundling ARToolKit Wasm or OpenCV.js POSIT.
  • Web 3D rendering via Three.js is not yet integrated — the renderer maintains scene state and marker transforms but does not draw geometry. Camera overlay and marker tracking work; visible 3D content requires Three.js wiring.
  • Roughly 88% of Dart-side AR methods (cloud anchors, face tracking, occlusion, physics, multi-user, lighting, environmental probes, advanced animation, image tracking) are not yet implemented natively on Android/iOS — they correctly return FlutterMethodNotImplemented rather than silently succeeding. Planes, anchors, hit-test, basic nodes, and marker tracking (web) work end-to-end.

1.1.1 - 2026-05-18 #

Fixed #

  • iOS build error: MeshResource.generateCylinder(height:radius:) is only available in iOS 18.0+. Gated the call behind an #available(iOS 18.0, *) check with a box fallback for older deployment targets.

1.1.0 - 2026-03-26 #

Improved #

  • README — Rewrote from 940 lines to ~200 lines. Removed duplicated code examples, completed roadmap, inline changelogs, and emoji clutter. Focused on installation, platform setup, quick-start examples, and architecture overview with pointers to Documentation.md for advanced topics.
  • Documentation — Fixed broken section numbering (duplicate sections 9 and 12), removed 790 lines of stale implementation logs, outdated test counts, and README-duplicated content. Merged duplicate animation sections, promoted Multi-User AR to its own top-level section, and rewrote the table of contents to match the corrected 12-section structure.

Fixed #

  • Outdated version references in Documentation.md (was ^0.4.0, now ^1.1.0)
  • Footer version in Documentation.md (was 1.0.0)

1.0.3 - 2026-03-20 #

Fixed #

  • 🤖 Android AR Camera Not Rendering - Fixed critical issue where the AR camera feed was not displayed on Android devices
    • Added GLSurfaceView with OpenGL ES 2.0 renderer for ARCore camera background rendering
    • Added proper AR session lifecycle management (session.resume() was never called)
    • Fixed Activity context handling — ARCore requires an Activity, not applicationContext
    • Made AugenPlugin implement ActivityAware to provide the correct context
    • Fixed initialize method reading config from wrong source (creationParams instead of call.arguments)
    • Added camera background shader program for rendering the ARCore camera texture
    • Added real-time plane detection reporting back to Flutter via method channel
    • Proper GLSurfaceView lifecycle management in pause/resume/dispose

1.0.2 - 2025-01-16 #

Fixed #

  • 🎨 Enhanced TabBar - Horizontal scrolling with compact labels and better alignment
  • 🔧 UI Fixes - Fixed TabBar overflow issues and improved responsive design
  • 📱 Better UX - Improved tab navigation with icons and subtitles for all features

Improved #

  • TabBar Design - Added horizontal scrolling and compact tab labels
  • UI Responsiveness - Fixed overflow issues and improved layout on different screen sizes
  • User Experience - Better tab navigation with descriptive icons and subtitles

1.0.1 - 2025-01-16 #

Fixed #

  • 🔧 Code Formatting - Applied Dart formatter to all files for consistent code style
  • 📚 Documentation Updates - Updated README.md with latest feature implementation
  • 🧹 Code Quality - Ensured all Dart files are compliant with Dart formatter standards
  • 📝 Roadmap Updates - Marked environmental probes and reflections as completed in v1.0.0

Improved #

  • Code Consistency - All files now follow official Dart formatting standards
  • Documentation Accuracy - README now accurately reflects all implemented features
  • Project Organization - Better structured documentation and feature tracking

1.0.0 - 2025-01-16 #

Added #

  • 🌍 Environmental Probes and Reflections - Complete environmental lighting system for AR
    • Multiple probe types: spherical, box, and planar probes
    • Real-time environmental lighting capture and reflection generation
    • Configurable probe quality, update modes, and influence radius
    • Automatic and manual probe update modes
    • Environmental probe management with add, update, and remove operations

New Features #

  • AREnvironmentalProbe Model: Complete environmental probe data structure with position, rotation, scale, influence radius, quality, and capture settings
  • AREnvironmentalProbeConfig Model: Global environmental probe configuration with quality, update mode, and optimization settings
  • AREnvironmentalProbeStatus Model: Real-time status updates for environmental probe operations
  • Probe Types: Spherical, box, and planar environmental probe support
  • Probe Quality: Low, medium, high, and ultra probe quality options
  • Update Modes: Automatic and manual probe update modes
  • Environmental Probe Management: Add, update, remove, and clear environmental probes
  • Real-time Monitoring: Streams for probe updates, configuration changes, and status updates
  • Performance Optimization: Configurable texture resolution, update frequency, and active probe limits

Controller Methods #

  • isEnvironmentalProbesSupported() - Check if environmental probes are supported
  • getEnvironmentalProbesCapabilities() - Get environmental probe capabilities
  • addEnvironmentalProbe(probe) - Add a new environmental probe
  • removeEnvironmentalProbe(probeId) - Remove a specific environmental probe
  • updateEnvironmentalProbe(probe) - Update an existing environmental probe
  • getEnvironmentalProbes() - Get all environmental probes
  • getEnvironmentalProbe(probeId) - Get a specific environmental probe
  • setEnvironmentalProbeConfig(config) - Set global environmental probe configuration
  • getEnvironmentalProbeConfig() - Get current environmental probe configuration
  • updateEnvironmentalProbePosition(probeId, position) - Update probe position
  • updateEnvironmentalProbeRotation(probeId, rotation) - Update probe rotation
  • updateEnvironmentalProbeInfluenceRadius(probeId, radius) - Update influence radius
  • updateEnvironmentalProbeQuality(probeId, quality) - Update probe quality
  • setEnvironmentalProbeEnabled(probeId, enabled) - Enable/disable probe
  • updateEnvironmentalProbeCaptureSettings(probeId, settings) - Update capture settings
  • forceEnvironmentalProbeUpdate(probeId) - Force probe update
  • clearEnvironmentalProbes() - Clear all environmental probes

Streams #

  • probesStream - Stream of environmental probe updates
  • probeConfigStream - Stream of environmental probe configuration updates
  • probeStatusStream - Stream of environmental probe status updates

Example App Updates #

  • Added Environmental Probes tab with comprehensive controls
  • Spherical, box, and planar probe creation examples
  • Environmental probe management and monitoring
  • Integration tests for environmental probe functionality

Documentation #

  • Complete Environmental Probes and Reflections section in Documentation.md
  • API reference for all environmental probe models and methods
  • Best practices for environmental probe placement and optimization
  • Complete example implementation with environmental probe management

Testing #

  • Comprehensive unit tests for environmental probe models and controller methods
  • Integration tests for environmental probe functionality
  • Example app integration tests covering all environmental probe features

0.11.0 - 2025-01-16 #

Added #

  • 💡 Real-time Lighting and Shadows - Complete lighting system for AR
    • Multiple light types: directional, point, spot, and ambient lights
    • Dynamic shadow casting and receiving with configurable quality
    • Global shadow settings with quality and filtering options
    • Ambient lighting for realistic global illumination
    • Real-time light management with add, update, and remove operations

New Features #

  • ARLight Model: Complete light data structure with position, rotation, intensity, color, and shadow settings
  • ARLightingConfig Model: Global lighting configuration with shadow quality and ambient settings
  • ARLightingStatus Model: Real-time status updates for lighting operations
  • Light Types: Directional, point, spot, and ambient light support
  • Shadow Quality: Low, medium, high, and ultra shadow quality options
  • Shadow Filtering: None, soft, and PCF shadow filtering modes
  • Light Intensity Units: Lumen, lux, and candela intensity units

Enhanced Controller #

  • Lighting Methods: Complete lighting API with 15+ new methods
    • isLightingSupported() - Check lighting support
    • getLightingCapabilities() - Get device lighting capabilities
    • addLight() - Add new light to scene
    • removeLight() - Remove light from scene
    • updateLight() - Update existing light properties
    • getLights() - Get all lights in scene
    • getLight() - Get specific light by ID
    • setLightingConfig() - Configure global lighting settings
    • getLightingConfig() - Get current lighting configuration
    • setShadowsEnabled() - Enable/disable shadows globally
    • setShadowQuality() - Set shadow quality level
    • setAmbientLighting() - Set global ambient lighting
    • updateLightPosition() - Update light position
    • updateLightRotation() - Update light rotation
    • updateLightIntensity() - Update light intensity
    • updateLightColor() - Update light color
    • setLightEnabled() - Enable/disable specific light
    • setLightCastShadows() - Control shadow casting per light
    • clearLights() - Remove all lights from scene

New Streams #

  • lightsStream: Real-time updates for all lights in scene
  • lightingConfigStream: Updates for lighting configuration changes
  • lightingStatusStream: Status updates for lighting operations

Testing & Quality #

  • Unit Tests: Comprehensive unit tests for all lighting models and enums
  • Controller Tests: Full test coverage for all lighting methods and streams
  • Integration Tests: Complete integration tests for lighting functionality
  • Example App: Full lighting demonstration with UI controls
  • Documentation: Complete lighting documentation with examples

Performance & Optimization #

  • Efficient Rendering: Optimized shadow rendering for mobile devices
  • Performance Controls: Configurable shadow quality and distance settings
  • Battery Optimization: Efficient lighting calculations for better battery life
  • Thermal Management: Consideration for device thermal constraints
  • Quality Settings: Adaptive quality based on device capabilities

Documentation Updates #

  • Lighting Guide: Complete lighting and shadows documentation
  • API Reference: Updated with all new lighting methods and models
  • Examples: Comprehensive lighting examples and best practices
  • Best Practices: Performance optimization and mobile considerations
  • Complete Example: Full working example with lighting controls

0.10.1 - 2025-01-16 #

Fixed #

  • 🔧 Code Formatting - Applied Dart formatter to all files
  • 🧹 Code Cleanup - Removed unused variables and fixed BuildContext usage
  • 📝 Documentation - Updated README with latest features and improvements

Improvements #

  • Zero Linting Issues - All code now follows Dart formatting standards
  • Clean Codebase - Removed unused multi-user variables from example app
  • Better Error Handling - Fixed BuildContext usage across async gaps
  • Production Ready - Code is now fully formatted and lint-free

0.10.0 - 2025-01-16 #

Added #

  • 👥 Multi-User AR Experiences - Complete shared AR system
    • Real-time collaborative AR sessions with multiple participants
    • Session management with create, join, leave operations
    • Participant management with roles (host, participant, observer) and permissions
    • Object synchronization across all participants in a session
    • Real-time participant position and rotation tracking
    • Session capabilities (spatial sharing, object sync, real-time collaboration, voice chat, gesture sharing, avatar display)
    • Private sessions with password protection
    • Configurable maximum participants per session

New Features #

  • ARMultiUserSession Model: Complete session data structure with participants, capabilities, and state
  • MultiUserParticipant Model: Participant information with position, rotation, role, and status
  • MultiUserSharedObject Model: Synchronized object data across all session participants
  • MultiUserSessionStatus Model: Real-time status updates for multi-user operations
  • MultiUserConnectionState Enum: Connection states (disconnected, connecting, connected, reconnecting, failed)
  • MultiUserRole Enum: Participant roles (host, participant, observer)
  • MultiUserCapability Enum: Session capabilities for different multi-user features

Enhanced Controller #

  • Multi-User Methods: Complete multi-user API with 10+ new methods
    • isMultiUserSupported() - Check multi-user support
    • createMultiUserSession() - Create new shared AR session
    • joinMultiUserSession() - Join existing session
    • leaveMultiUserSession() - Leave current session
    • getMultiUserSession() - Get current session info
    • getMultiUserParticipants() - Get all participants
    • shareObject() - Share AR object with all participants
    • unshareObject() - Remove shared object
    • updateSharedObject() - Update shared object properties
    • getMultiUserSharedObjects() - Get all shared objects
    • setParticipantRole() - Change participant role
    • kickParticipant() - Remove participant from session
    • updateParticipantDisplayName() - Update participant name

New Streams #

  • multiUserSessionStream: Real-time session updates
  • multiUserParticipantsStream: Real-time participant updates
  • multiUserSharedObjectsStream: Real-time shared object updates
  • multiUserSessionStatusStream: Real-time multi-user status updates

Enhanced Documentation #

  • Multi-User AR Section: Complete guide in Documentation.md
    • Session setup and configuration
    • Creating and joining sessions
    • Managing participants and roles
    • Sharing and synchronizing objects
    • Monitoring session status
    • Best practices and examples

Testing #

  • 37 New Unit Tests: Comprehensive test coverage for all multi-user features
  • Total Tests: 368 passing tests (increased from 331)
  • Test Coverage: 100% coverage maintained
  • Multi-User Integration Tests: Ready for device testing

Documentation Updates #

  • Added Multi-User AR section to complete documentation
  • Updated README.md with multi-user features
  • Added multi-user examples and best practices
  • Updated API reference with all new methods

0.9.0 - 2025-01-15 #

Added #

  • ⚛️ Physics Simulation for AR Objects - Complete physics system
    • Dynamic, static, and kinematic physics bodies with realistic interactions
    • Physics materials with density, friction, restitution, and damping properties
    • Physics constraints including hinge, ball socket, fixed, slider, cone twist, and 6DOF joints
    • Physics world configuration with gravity, time step, and collision settings
    • Real-time physics body and constraint monitoring via streams
    • Cross-platform physics support (ARCore/ARKit)
    • Physics status tracking and error handling

New Features #

  • ARPhysicsBody Model: Complete physics body data structure with position, rotation, velocity, mass, and material properties
  • PhysicsMaterial Model: Configurable material properties for realistic physics interactions
  • PhysicsConstraint Model: Joint and constraint system for connecting physics bodies
  • PhysicsWorldConfig Model: Physics world configuration with gravity, time step, and collision settings
  • PhysicsStatus Model: Real-time status updates for physics operations
  • PhysicsBodyType Enum: Support for static, dynamic, and kinematic body types
  • PhysicsConstraintType Enum: Support for various constraint types (hinge, ball socket, fixed, slider, cone twist, 6DOF)

Enhanced Controller #

  • Physics Methods: Complete physics API with 15+ new methods
    • isPhysicsSupported() - Check physics support
    • initializePhysics(config) - Initialize physics world
    • startPhysics() / stopPhysics() / pausePhysics() / resumePhysics() - Physics control
    • createPhysicsBody() / removePhysicsBody() - Body management
    • applyForce() / applyImpulse() - Force application
    • setVelocity() / setAngularVelocity() - Velocity control
    • createPhysicsConstraint() / removePhysicsConstraint() - Constraint management
    • getPhysicsBodies() / getPhysicsConstraints() - Data retrieval
    • getPhysicsWorldConfig() / updatePhysicsWorldConfig() - Configuration management

New Streams #

  • physicsBodiesStream: Real-time physics body updates
  • physicsConstraintsStream: Real-time constraint updates
  • physicsStatusStream: Real-time physics status updates

Enhanced Example App #

  • Physics Tab: Complete physics demonstration interface
  • Physics Controls: Support checking, physics toggling, body creation, force application
  • Real-time Monitoring: Live physics body and constraint display
  • Physics Information: Educational content about physics body types and materials
  • Status Integration: Physics status in main status view

Enhanced Integration Tests #

  • Physics Integration Test: Complete physics workflow testing
  • Physics Support Detection: Automatic physics capability testing
  • Physics World Initialization: Configuration and startup testing
  • Physics Body Creation: Dynamic body creation and management testing
  • Physics Force Application: Force and impulse application testing
  • Physics Stream Monitoring: Real-time physics data stream testing
  • Physics Control Testing: Start, pause, resume physics testing

Documentation Updates #

  • Physics Simulation Section: Complete physics guide in Documentation.md
  • Physics API Reference: Detailed physics method documentation
  • Physics Examples: Comprehensive physics usage examples
  • Physics Best Practices: Performance and implementation guidelines
  • Physics Tutorial: Step-by-step physics setup and usage guide

Testing #

  • 51 New Unit Tests: Complete physics model and controller testing
  • Physics Model Tests: ARPhysicsBody, PhysicsMaterial, PhysicsConstraint, PhysicsWorldConfig, PhysicsStatus testing
  • Physics Controller Tests: All physics methods and streams testing
  • Physics Integration Tests: End-to-end physics workflow testing
  • Test Coverage: 100% coverage maintained with 331 total tests

Performance Improvements #

  • Efficient Physics Updates: Optimized physics body and constraint streaming
  • Physics Status Monitoring: Real-time physics operation tracking
  • Memory Management: Proper physics resource cleanup and disposal
  • Cross-Platform Optimization: Platform-specific physics optimizations

Breaking Changes #

  • None

Bug Fixes #

  • Fixed velocity magnitude calculation in example app
  • Fixed physics stream subscription management
  • Fixed physics body creation parameter validation
  • Fixed physics constraint anchor handling

Dependencies #

  • No new dependencies added
  • All existing dependencies maintained

0.8.0 - 2025-01-14 #

Added #

  • 👁️ Occlusion for Realistic Rendering - Complete occlusion system
    • Depth-based occlusion using depth maps for realistic object hiding
    • Person occlusion using person segmentation for human-aware AR
    • Plane occlusion using detected planes for surface-aware AR
    • Real-time occlusion status monitoring and management
    • Cross-platform occlusion support (ARCore/ARKit)
    • Occlusion configuration and capabilities detection
    • Comprehensive occlusion data models and streams

New Features #

  • AROcclusion Model: Complete occlusion data structure with position, rotation, scale, confidence, and metadata
  • OcclusionType Enum: Support for depth, person, plane, and none occlusion types
  • OcclusionStatus Model: Real-time status updates for occlusion operations
  • Occlusion Methods: Full CRUD operations for occlusion management
  • Occlusion Streams: Real-time updates for active occlusions and status changes
  • Occlusion Configuration: Flexible setup for different occlusion types
  • Occlusion Capabilities: Device capability detection and reporting

Enhanced Examples #

  • Occlusion Tab: Complete occlusion demonstration in example app
  • Occlusion Controls: Enable/disable occlusion with visual feedback
  • Occlusion Management: Create, monitor, and manage active occlusions
  • Occlusion Statistics: Real-time occlusion count and status display
  • Occlusion Integration Tests: Comprehensive test coverage for occlusion features

Documentation Updates #

  • Occlusion Guide: Complete documentation with examples and best practices
  • Occlusion API Reference: Detailed method and model documentation
  • Occlusion Examples: Code samples for all occlusion features
  • Occlusion Best Practices: Performance optimization and error handling guides

Testing #

  • 50 New Unit Tests: Comprehensive test coverage for all occlusion features
  • Occlusion Integration Tests: Full integration test suite for occlusion functionality
  • 280 Total Tests: All tests passing with 100% coverage
  • Occlusion Model Tests: Complete serialization, deserialization, and equality testing
  • Occlusion Controller Tests: Full method and stream testing

Technical Improvements #

  • Occlusion Stream Management: Proper subscription handling and cleanup
  • Occlusion Error Handling: Comprehensive error management and user feedback
  • Occlusion Type Safety: Full type safety for all occlusion operations
  • Occlusion Performance: Optimized occlusion operations and memory management
  • Occlusion Documentation: Complete inline documentation and examples

0.7.1 - 2025-01-14 #

Fixed #

  • Fixed Dart formatting issues in core files
  • Improved code formatting consistency across the package
  • Updated example app formatting
  • Enhanced test file formatting

Technical Improvements #

  • Applied dart format to all source files
  • Maintained 255 passing tests after formatting
  • Improved code readability and maintainability
  • Ensured consistent code style across the entire codebase

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

0.7.0 - 2025-01-14 #

Added #

  • ☁️ Cloud Anchors for Persistent AR - Complete cloud anchor system
    • Create persistent AR experiences that survive app restarts
    • Share AR experiences between multiple users
    • Cross-platform cloud anchor support (ARCore/ARKit)
    • Real-time cloud anchor status monitoring
    • Session-based cloud anchor sharing
    • Automatic cloud anchor resolution and tracking

New Cloud Anchor Models

  • ARCloudAnchor - Represents cloud anchors with position, rotation, scale, and state
  • CloudAnchorState - Enum for cloud anchor states (creating, created, resolving, resolved, failed, expired)
  • CloudAnchorStatus - Real-time status updates for cloud anchor operations

New Cloud Anchor Methods

  • createCloudAnchor(String localAnchorId) - Convert local anchor to cloud anchor
  • resolveCloudAnchor(String cloudAnchorId) - Resolve cloud anchor by ID
  • getCloudAnchors() - Get all cloud anchors in current session
  • getCloudAnchor(String cloudAnchorId) - Get specific cloud anchor by ID
  • deleteCloudAnchor(String cloudAnchorId) - Delete cloud anchor
  • isCloudAnchorsSupported() - Check if cloud anchors are supported
  • setCloudAnchorConfig() - Configure cloud anchor settings
  • shareCloudAnchor(String cloudAnchorId) - Share cloud anchor session
  • joinCloudAnchorSession(String sessionId) - Join shared session
  • leaveCloudAnchorSession() - Leave current session

New Cloud Anchor Streams

  • cloudAnchorsStream - Stream of cloud anchor updates
  • cloudAnchorStatusStream - Stream of cloud anchor status updates

Enhanced Example App

  • Added Cloud Anchors tab with full cloud anchor management
  • Cloud anchor support detection and configuration
  • Create, share, and join cloud anchor sessions
  • Real-time cloud anchor status monitoring
  • Cloud anchor list with state information
  • Session management UI

Updated Documentation

  • Added comprehensive Cloud Anchors section to Documentation.md
  • Complete cloud anchor setup and usage guide
  • Best practices for cloud anchor implementation
  • Example code for all cloud anchor features
  • Updated README.md with cloud anchor features and examples

Testing

  • Added 13 new cloud anchor unit tests
  • Comprehensive testing of all cloud anchor models and methods
  • Updated integration tests to include cloud anchor workflows
  • Total test count: 243 passing tests

Technical Details #

  • Cloud anchors enable persistent AR experiences across app sessions
  • Multi-user AR support through session sharing
  • Real-time status monitoring for cloud anchor operations
  • Cross-platform compatibility with ARCore and ARKit
  • Automatic cloud anchor resolution and tracking
  • Session-based sharing for collaborative AR experiences

0.6.0 - 2025-01-14 #

Added #

  • 👤 Face Tracking and Recognition - Complete face tracking system
    • Real-time detection and tracking of human faces
    • Multiple simultaneous face tracking support
    • High accuracy position, rotation, and scale tracking
    • Confidence scoring for tracking reliability
    • Automatic content anchoring to tracked faces
    • Cross-platform support (ARCore/ARKit)

New Face Tracking Models

  • ARFace - Represents tracked faces with position, rotation, scale, and landmarks
  • FaceLandmark - Represents specific facial feature points (eyes, nose, mouth, etc.)
  • FaceTrackingState - Enum for face tracking states (tracked, notTracked, paused, failed)

New Face Tracking Methods

  • setFaceTrackingEnabled(bool enabled) - Enable/disable face tracking
  • isFaceTrackingEnabled() - Check if face tracking is enabled
  • getTrackedFaces() - Get all currently tracked faces
  • addNodeToTrackedFace(String nodeId, String faceId, ARNode node) - Add content to tracked face
  • removeNodeFromTrackedFace(String nodeId, String faceId) - Remove content from tracked face
  • getFaceLandmarks(String faceId) - Get facial landmarks for a specific face
  • setFaceTrackingConfig(...) - Configure face tracking parameters

New Face Tracking Streams

  • facesStream - Stream of tracked faces with real-time updates

Enhanced Example App

  • Added comprehensive face tracking demonstration
  • Interactive face tracking controls
  • Real-time face tracking statistics
  • Face landmark visualization
  • Content anchoring to faces

Enhanced Documentation

  • Complete face tracking guide in Documentation.md
  • Face tracking API reference
  • Face tracking best practices
  • Face tracking examples and use cases

Enhanced #

  • Example App: Added face tracking tab with full feature demonstration
  • Integration Tests: Added comprehensive face tracking integration tests
  • Documentation: Updated with face tracking features and examples
  • Test Coverage: Added 14 new face tracking tests (230 total tests)

Technical Details #

  • Face tracking uses ARCore's face detection on Android
  • Face tracking uses ARKit's face tracking on iOS
  • Supports multiple faces simultaneously
  • Provides detailed facial landmarks (eyes, nose, mouth, ears, etc.)
  • Real-time confidence scoring for tracking reliability
  • Automatic content positioning relative to face features

0.5.0 - 2025-01-14 #

Added #

  • 🖼️ Image Tracking and Recognition - Complete image tracking system
    • Real-time detection and tracking of specific images
    • Multiple simultaneous image target support
    • High accuracy position and orientation tracking
    • Confidence scoring for tracking reliability
    • Automatic content anchoring to tracked images
    • Cross-platform support (ARCore/ARKit)

New Image Tracking Models

  • ARImageTarget - Represents image targets for tracking
  • ARTrackedImage - Represents currently tracked images
  • ImageTargetSize - Physical dimensions of image targets
  • ImageTrackingState - Tracking state enumeration

New Controller Methods

  • addImageTarget() - Register image targets for tracking
  • removeImageTarget() - Remove image targets
  • getImageTargets() - Get all registered targets
  • getTrackedImages() - Get currently tracked images
  • setImageTrackingEnabled() - Enable/disable image tracking
  • isImageTrackingEnabled() - Check tracking status
  • addNodeToTrackedImage() - Anchor content to tracked images
  • removeNodeFromTrackedImage() - Remove anchored content

New Streams

  • imageTargetsStream - Real-time image target updates
  • trackedImagesStream - Real-time tracked image updates

Testing

  • 21 new image tracking model tests
  • 10 new controller method tests
  • 2 new stream tests
  • Total test count: 208 tests (all passing)

Documentation

  • Complete Image Tracking section in Documentation.md
  • API reference for all new methods and models
  • Best practices and performance optimization guide
  • Real-world examples and usage patterns
  • Updated README with image tracking features

Changed #

  • Updated test count from 177 to 208 tests
  • Enhanced documentation with comprehensive image tracking guide

0.4.0 - 2025-10-14 #

Added #

  • 🚀 Advanced Animation Blending and Transitions - Professional-grade animation system
    • Animation blending with weighted combinations
    • Smooth crossfade transitions with customizable curves
    • Animation state machines with conditional transitions
    • Blend trees (1D, 2D, conditional, selector nodes)
    • Layered and additive animations
    • Bone masking for selective animation
    • Real-time transition and state machine status updates

New Animation Models

  • AnimationBlend and AnimationBlendSet - Complex animation blending
  • AnimationTransition and CrossfadeTransition - Smooth transitions
  • AnimationStateMachine and AnimationState - State-based animation workflow
  • AnimationBlendTree and various blend tree nodes - Parameter-driven animation
  • TransitionStatus and StateMachineStatus - Real-time status tracking

New Controller Methods

  • Blending: playBlendSet(), updateBlendWeights(), blendAnimations()
  • Transitions: startCrossfadeTransition(), crossfadeToAnimation()
  • State Machines: startStateMachine(), updateStateMachineParameters()
  • Blend Trees: startBlendTree(), updateBlendTreeParameters()
  • Layered: playAdditiveAnimation(), setAnimationLayerWeight(), getBoneHierarchy()

New Streams

  • transitionStatusStream - Monitor transition progress
  • stateMachineStatusStream - Monitor state machine updates

Comprehensive Testing

  • 90 new tests for animation blending features
  • Total test count increased from 87 to 177 tests
  • 100% test coverage maintained

Documentation

  • Complete Documentation.md consolidating all guides (3,500+ lines)
  • Advanced animation blending guide with real-world examples
  • Performance tips and best practices
  • Troubleshooting guide

Changed #

  • AugenController extended with 18 new animation methods
  • Enhanced ARNode support for complex animation workflows
  • Updated README.md with v0.4.0 and consolidated documentation links
  • Fixed BuildContext across async gaps in example app (8 fixes)

Merged Documentation #

  • All individual documentation files merged into single Documentation.md
  • Improved navigation with comprehensive table of contents
  • Consolidated examples and best practices

Platform Support #

  • Animation blending API ready for native implementation
  • Data structures optimized for ARCore Filament and RealityKit

0.3.1 - 2025-10-14 #

Changed #

  • Updated README.md dependency version to ^0.3.0
  • Added comprehensive community feedback section in README
  • Added bug reporting, testing feedback, and feature request links
  • Improved call-to-action for community involvement

0.3.0 - 2025-10-14 #

Added #

  • 🎬 Model Animation and Skeletal Animation Support
    • Full animation playback control
    • Skeletal (bone-based) animations
    • Morph target animations
    • Multiple animations per model
  • New animation control methods:
    • playAnimation() - Play animations with speed and loop mode control
    • pauseAnimation() - Pause animation playback
    • stopAnimation() - Stop and reset animation
    • resumeAnimation() - Resume paused animation
    • seekAnimation() - Jump to specific time in animation
    • getAvailableAnimations() - Query available animations
    • setAnimationSpeed() - Change playback speed dynamically
  • New ARAnimation model class with full configuration
  • New AnimationStatus class for animation state tracking
  • New enums: AnimationState, AnimationLoopMode
  • animationStatusStream for real-time animation updates
  • Comprehensive animation tests (25 new tests)
  • ANIMATIONS_GUIDE.md - Complete animation documentation

Changed #

  • ARNode now supports animations parameter
  • ARNode.fromModel() accepts animations list
  • Updated Android implementation with animation methods
  • Updated iOS implementation with RealityKit animation support
  • Test count increased from 62 to 87 tests
  • Enhanced README with animation examples

Platform Support #

  • Android: Skeletal animations via Filament Animator
  • iOS: Native animation support via RealityKit AnimationResource

0.2.1 - 2025-10-14 #

Fixed #

  • Formatted all Dart files to match Dart formatter standards
  • Fixed formatting issues in augen_method_channel.dart
  • Fixed formatting issues in ar_node.dart

0.2.0 - 2025-10-13 #

Added #

  • Custom 3D model loading support
    • Load models from Flutter assets
    • Load models from URLs
    • Support for GLTF, GLB, OBJ, and USDZ formats
    • Auto-detection of model format from file extension
    • ARNode.fromModel() factory constructor
    • addModelFromAsset() and addModelFromUrl() helper methods
  • New ModelFormat enum (gltf, glb, obj, usdz)
  • Comprehensive test coverage for model loading (10 new tests)
  • CUSTOM_MODELS_GUIDE.md comprehensive documentation
  • Enhanced README with model loading examples

Changed #

  • ARNode now supports modelPath and modelFormat parameters
  • Updated Android (Kotlin) implementation for custom 3D models
  • Updated iOS (Swift) implementation for custom 3D models
  • Test count increased from 52 to 62 tests
  • Version bumped to 0.1.1
  • Updated all documentation with model loading information

Fixed #

  • Unused variable lint in example app
  • Import issues in controller tests

0.1.0 - 2025-10-13 #

Added #

  • Initial release of Augen AR plugin
  • AR session management (initialize, pause, resume, reset)
  • Plane detection (horizontal and vertical)
  • 3D object rendering (sphere, cube, cylinder)
  • AR anchors management
  • Hit testing for surface detection
  • Light estimation
  • Depth data support
  • Auto-focus capability
  • Cross-platform support (Android ARCore and iOS RealityKit)
  • Comprehensive documentation and examples
  • Full test coverage (52 tests)

Platform Support #

  • Android: ARCore (API level 24+)
  • iOS: RealityKit and ARKit (iOS 13.0+)

For more details about each release, visit the GitHub releases page.

7
likes
150
points
703
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

A Flutter plugin for building AR applications using ARCore on Android and RealityKit on iOS. Enables pure Dart AR development without native code.

Repository (GitHub)
View/report issues
Contributing

License

MIT (license)

Dependencies

flutter, flutter_web_plugins, plugin_platform_interface, web

More

Packages that depend on augen

Packages that implement augen