dart:ffi. It targets Dart ≥ 3.5. The current loader supports Windows, Linux and macOS desktop library names; this guide does not provide an Android or iOS Flutter build procedure.
1. Get the binding
The package lives in the public everabyte/crypto-sdk repository —pub supports git dependencies with a subdirectory:
dart:ffi wrapper over the native core (bindings/dart/rust). You need that native library on each platform you ship:
EVB_E2EE_LIB and then searches the package’s Rust target directory for those desktop library names. Do not assume it automatically loads a Flutter plugin asset. Android needs a separately cross-compiled .so for each supported ABI and an Android-aware loader/integration; iOS needs a compatible static/framework integration. Those mobile build and packaging steps are not documented or supported by this quickstart.
2. Generate the account key (UMK) — on device
flutter_secure_storage (or your platform keychain). Register the chain with the same POST /e2ee/keys/register call as the TypeScript quickstart:
3. Encrypt before upload
4. Upload and attach — same REST contract
POST /files/upload/{bucketId}— multipart, file part namedwireName(the opaque alias).POST /e2ee/files/by-path/envelope—{ bucketId, fileName: wireName, encryptedName, ...envelope }.
GET /e2ee/files/{fileId}/envelope. After a confirmed failure, find the uploaded row by bucket and opaque wire name, confirm it has no envelope, and hard-delete it through the file API as required by the E2EE upload contract. Handle retention blocks explicitly.
5. Download and decrypt
Next steps
- SDK API reference — the full Dart surface alongside Rust and TypeScript.
- Wire protocol reference — formats, versioning and interop rules.