Архитектура
bae е едно Rust ядро с четири нативни приложения около него. Всичко, което определя продукта, модела на библиотеката, импортирането, възпроизвеждането, синхронизирането и шифроването, живее в Rust и се държи еднакво на всяка платформа; всяко приложение е тънък нативен интерфейс върху него.
Слоевете
Връзка към този разделbae-core: продуктът. Моделът на библиотеката и метаданните, пътищата за импортиране и идентифициране, двигателят за възпроизвеждане с FFmpeg, анализът на силата на звука, експортът и интеграцията с coven под него. Импортирането и идентифицирането се компилират само за настолни системи; мобилните компилации са клиенти за синхронизиране и възпроизвеждане.- coven: слоят за данни, отделна библиотека. coven притежава SQLite връзката, улавя всяка промяна, която bae записва, и синхронизира тези промени с шифроване от край до край през облачното хранилище на потребителя. Той притежава и blob съхранението (аудио байтове, изображения), локалния кеш, ключовете за идентичност и членството. bae фиксира точна ревизия на coven и я записва във всяка компилация; тя определя поколението за съвместимост на синхронизирането между компилации.
bae-bridge: границата с UniFFI. Bridge типовете се дефинират веднъж в Rust и се генерират в Swift и Kotlin при изграждане.- Приложенията: SwiftUI на macOS и iOS, Jetpack Compose на Android и нативно Windows приложение. Всяко реализира и платформените части, които ядрото изисква: аудио изход, разпознаване на текст в обложки, медийно управление, достъп до keychain, отчети за сривове.
До приложенията стоят bae-mcp (MCP сървърът), bae-cli (командният ред) и bae-automation (споделеният слой с инструменти, който и двата използват).
Една библиотека на диска
Връзка към този разделБиблиотеката живее в ~/.bae/libraries/<library-id>/ (платформена директория за данни на мобилни устройства):
~/.bae/libraries/<id>/ library.db # SQLite: catalog, credits, playback specs config.yaml # device-local settings, never synced storage/ local/ # blobs this device owns (covers, artist images) cache/ # evictable copies of cloud blobs pinned/ # pinned-for-offline copies, never evictedБазата данни се отваря само през coven, който поставя собствените си служебни таблици (курсори за синхронизиране, изходяща опашка, състояние на blob-ове) до схемата на bae и изпълнява миграциите на bae. Аудио файловете, импортирани като неуправлявани, изобщо не са под ~/.bae: базата данни сочи към пътищата, от които са импортирани.
Тайните никога не живеят в тези файлове. Ключовете за идентичност, ключът за шифроване на библиотеката, облачните идентификационни данни и API токените живеят в ключодържателя на операционната система (Keychain на Apple платформи, синхронизиран през iCloud Keychain; платформените съответствия другаде).
Издания
Връзка към този разделНа всяка платформа съществуват две издания, избрани при изграждане. bae компилира OAuth доставчиците (Google Drive, Dropbox, OneDrive), CloudKit и телеметрията. baeium компилира всичко това извън приложението: само съвместимо със S3 хранилище, без телеметрия и без собственически зависимости. Изданията са от един и същ изходен код и едно и също ядро; флаг за функция решава списъка с доставчици и свързването на диагностиката.
Версиониране
Връзка към този разделПриложенията се версионират като MAJOR.MINOR за всяка платформа. Основната версия е ерата на съвместимост, споделена от всяко приложение: устройства със същата основна версия могат да синхронизират библиотека. Тя се увеличава само когато се счупи формат по мрежата или на диска, най-често фиксираната ревизия на coven. Второстепенната версия брои изданията за всяко приложение и не е сравнима между платформи.