HyperbasisHyperbasisDocs
Home

Changelog

All notable changes to Hyperbasis will be documented here.

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


[1.1.0] - 2024-XX-XX

Added

  • Versioning - Event-based history tracking for anchors
    • HBAnchorEvent - Immutable record of anchor changes
    • HBTimeline - Navigate through space history
    • HBDiff - Compare two points in time
  • New HBStorage methods:
    • timeline(spaceId:) - Get full timeline for a space
    • anchorsAt(spaceId:date:) - Reconstruct state at any date
    • diff(spaceId:from:to:) - Generate change diff
    • history(anchorId:) - Get event history for anchor
    • rollback(anchorId:toVersion:) - Restore previous version
  • New errors:
    • versionNotFound - Requested version doesn't exist
    • reconstructionFailed - Could not rebuild anchor from events
    • eventLogCorrupted - Event log is malformed

Changed

  • save(_ anchor:) now records events automatically
  • Existing anchors are migrated on first save (seeded with created event)

Migration

No action required. Existing anchors are automatically migrated when first saved.


[1.0.0] - 2024-XX-XX

Added

  • HBSpace - Container for ARWorldMap data with serialization/deserialization
  • HBAnchor - Placed objects with 3D transforms and flexible metadata
  • HBStorage - Main persistence API for spaces and anchors
  • AnyCodableValue - Type-erased Codable enum for metadata values
  • Local storage - File-based persistence in app's Documents directory
  • Cloud sync - Optional Supabase integration for cross-device sync
  • Compression - ~40% size reduction for world map data using zlib
  • Soft delete - Anchors can be deleted and later restored or purged

Features

  • Column-major transform storage matching simd_float4x4 memory layout
  • Automatic compression/decompression of world map data
  • Offline-first architecture with pending operation queue
  • Configurable sync strategies (manual or on-save)
  • Typed metadata accessors (string, int, bool, etc.)

Requirements

  • iOS 17.0+
  • Swift 5.9+
  • Xcode 15.0+
  • ARKit-compatible device

Upcoming

Features planned for future releases:

[1.2.0] - Planned

  • Batch anchor operations for improved performance
  • Anchor filtering by metadata
  • Change notifications via Combine publishers
  • Event compaction (reduce old event storage)

[1.3.0] - Planned

  • Custom conflict resolution strategies
  • Partial/selective sync
  • Additional cloud backend support

Migration Notes

Migrating to 1.0.0

If you're coming from a custom ARWorldMap persistence implementation:

  1. Replace NSKeyedArchiver calls with HBSpace(worldMap:)
  2. Replace transform serialization with HBAnchor - transforms are automatically flattened
  3. Replace FileManager operations with HBStorage save/load methods
  4. Convert metadata to [String: AnyCodableValue] format
// Before (custom implementation)
let data = try NSKeyedArchiver.archivedData(withRootObject: worldMap, requiringSecureCoding: true)
try data.write(to: fileURL)

// After (Hyperbasis)
let space = try HBSpace(worldMap: worldMap)
try await storage.save(space)

Version Support

VersioniOSSwiftStatus
1.1.x17.0+5.9+Current
1.0.x17.0+5.9+Supported

Reporting Issues

Found a bug or have a feature request?

When reporting issues, please include:

  • Hyperbasis version
  • iOS version
  • Device model
  • Steps to reproduce
  • Error messages (if any)