Radish Core is the open-source Swift privacy and household-sync layer behind Radish, the iPhone app that turns grocery receipts into editable household spending insights. See App Store availability, or email hello@radish.money for product support.
It contains the security-sensitive code that seals saved record bytes, authenticates household sync bundles, preserves corrections and deletions, and validates the QR pairing payload shared between devices. Publishing this narrow layer makes those behaviors and their tests inspectable without publishing the complete app.
RadishPrivacyKitexposes the transport-agnosticSecureSyncStorecontract and anInMemorySecureSyncStoreimplementation for sealed records, authenticated bundles, and the local event ledger.RadishPairingencodes and validates the versioned QR payload used to share household key material with another device.
For bytes explicitly passed through these APIs, the implementation and tests cover four important properties:
- record bytes and ledger event bodies are sealed with AES-256-GCM;
- current sync bundles are bounded, authenticated, and fully checked before state is changed;
- deletion tombstones prevent stale devices from restoring removed records; and
- decoded pairing payloads reject expired codes and non-32-byte secrets.
The exact assumptions and limits are documented in THREAT_MODEL.md.
Requirements: Swift 6.1 or newer and Gitleaks 8.30.1 or newer for complete
repository verification, with macOS 14 or iOS 18 as the minimum Apple platform
when integrating the libraries. Set GITLEAKS_BIN when the executable is not
available on PATH.
On macOS, select Xcode's developer directory before running Swift commands. The
Makefile defaults to /Applications/Xcode.app/Contents/Developer; set
DEVELOPER_DIR if Xcode is installed elsewhere.
swift test
swift test -c releaseOn macOS, run the complete repository verification. It scans the current tree and complete reachable Git history for secrets before running package tests:
make verifyCI runs debug and release tests on macOS and Linux. The package uses Foundation
and Apple's swift-crypto library.
Use the repository URL and a tagged semantic version, then select the product your target needs:
.package(
url: "https://github.com/IvGolovach/radish-core.git",
from: "0.2.0"
)The compiled
PublicAPIUsageTests
show a complete sealed-record and sync round trip. Public APIs are documented
in source.
This repository is the core package, not the complete Radish application. It does not contain receipt capture, OCR or provider processing, application UI, cloud transport configuration, subscriptions, analytics, or App Store build attestation. The package contains no network client and cannot prove how an integrating app handles data outside these APIs.
Read PRIVACY.md for the precise data boundary and THREAT_MODEL.md for security assumptions. Report suspected vulnerabilities privately according to SECURITY.md.
Radish Core is published from Radish's private integration repository so every package change can also be exercised against the app. Public pull requests are welcome as proposals; CONTRIBUTING.md explains the mirror workflow. AI coding agents should also read AGENTS.md.
The package follows semantic versioning. See CHANGELOG.md for security and compatibility changes.
Radish Core is licensed under the Apache License 2.0. See LICENSE and NOTICE.