Архітектура
bae — це одне Rust-ядро в чотирьох нативних застосунках. Усе, що визначає продукт, модель бібліотеки, імпорт, відтворення, синхронізацію й шифрування, живе в Rust і поводиться однаково на кожній платформі; кожен застосунок є тонким нативним інтерфейсом над ним.
bae-core: продукт. Модель бібліотеки й метаданих, конвеєри імпорту й ідентифікації, рушій відтворення FFmpeg, аналіз гучності, експорт та інтеграція з coven нижче. Імпорт та ідентифікація збираються лише для настільних систем; мобільні збірки є клієнтами синхронізації й відтворення.- coven: шар даних, окрема бібліотека. coven володіє SQLite-з’єднанням, фіксує кожну зміну, яку записує bae, і синхронізує ці зміни end-to-end зашифрованими через хмарне сховище користувача. Він також володіє blob-сховищем (байти аудіо, обкладинки), локальним кешем, ключами ідентичності й участю. bae закріплює точну ревізію coven і вшиває її в кожен бінарний файл; вона визначає покоління сумісності синхронізації між збірками.
bae-bridge: межа UniFFI. Типи мосту визначаються один раз у 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: каталог, кредити, специфікації відтворення config.yaml # локальні налаштування пристрою, ніколи не синхронізуються storage/ local/ # blobs, якими володіє цей пристрій (обкладинки, зображення виконавців) cache/ # витіснювані копії cloud blobs pinned/ # копії, закріплені для офлайну, ніколи не витіснюютьсяБаза даних відкривається лише через coven, який додає власні таблиці обліку (курсори синхронізації, вихідна черга, стан blobs) поруч зі схемою bae і запускає міграції bae. Аудіофайли, імпортовані некеровано, взагалі не лежать під ~/.bae: база даних посилається на них за шляхами, звідки їх імпортували.
Секрети ніколи не живуть у цих файлах. Ключі ідентичності, ключ шифрування бібліотеки, хмарні облікові дані й API tokens живуть у сховищі ключів OS (Keychain на платформах Apple, синхронізований через iCloud Keychain; платформні відповідники деінде).
Редакції
Посилання на цей розділНа кожній платформі існують дві редакції часу збірки. bae компілює OAuth-провайдерів (Google Drive, Dropbox, OneDrive), CloudKit і телеметрію. baeium компілює все це назовні: лише S3-сумісне сховище й без телеметрії, нічого власницького в дереві залежностей. Редакції мають одне джерело й одне ядро; feature flag визначає список провайдерів і підключення діагностики.
Версії
Посилання на цей розділЗастосунки версіонуються як MAJOR.MINOR для кожної платформи. Major — це ера сумісності, спільна для кожного застосунку: пристрої з тим самим major можуть синхронізувати бібліотеку. Вона збільшується лише тоді, коли ламається wire-формат або формат на диску, найчастіше через закріплену ревізію coven. Minors рахують релізи для окремого застосунку й не порівнюються між платформами.