Privacy-first reference library for iOS and macOS

Save links, images, and notes. Organize with folders and tags. Search everything. All on your device, with optional encryption.

Features

Save anything

Web links, videos, social posts, images, and screenshots. One tap from the iOS Share Sheet or paste from the macOS menu bar.

Organize your way

Hierarchical folders with custom icons and colors. Flexible tagging. Full-text search across titles, notes, tags, and metadata.

Your data stays yours

Local-first by default. Optional AES-256-GCM encryption. No analytics, no tracking, no AI training on your data. Export anytime.

  • Share Extension — Save to RecallMate from Safari, Photos, Files, and other apps
  • Drag & drop — Drop files and URLs onto the app on macOS and iPad
  • Export — Standard formats so you can take your data elsewhere

Technical overview

Built for the Apple ecosystem with modern Swift and privacy in mind.

Stack

UISwiftUI
PersistenceSwiftData
EncryptionCryptoKit (AES-256-GCM)
KeysKeychain Services
BiometricsLocalAuthentication
NetworkingURLSession (ephemeral, metadata only)

Requirements

  • iOS 17.0+
  • macOS 14.0 (Sonoma)+
  • Xcode 15.0+
  • Swift 5.9+

Architecture

Single codebase with platform-specific views (iOS / macOS). Shared models (Item, Folder, Tag), services (Search, Thumbnail, Security, Export), and SwiftData schema. Share Extension uses an App Group and Darwin notifications to hand off pending items to the main app.

Security & privacy

Concrete choices, no buzzwords.

Encryption

AES-256-GCM (authenticated). Keys derived with HKDF-SHA256 from your passphrase. Random values from SecRandomCopyBytes. Keys live in the Keychain; data in the app sandbox.

Data handling

No telemetry or crash reporting. No upload of your library. Metadata fetches (e.g. link previews) use ephemeral URLSession; no cookies or persistent identity. Dangerous URL schemes (e.g. javascript:, data:) are blocked.

Build from source

Clone, open in Xcode, configure signing, and run.

git clone https://github.com/kaanuluer/RecallMate/RecallMate.git
cd RecallMate
open RecallMate.xcodeproj

Select the RecallMate-iOS or RecallMate-macOS scheme, set your development team under Signing & Capabilities, then build (Cmd+R). For the Share Extension, ensure the App Group group.com.recallmate.shared is enabled for both the main app and the extension.

Repository and full docs on GitHub →