appplayer_secure
AppPlayer security library (merged) — domain-neutral primitives (SIGN/STORE/CRYPTO/TRUST/AUDIT/MAUTH/BIO) + AppPlayer domain layer (roles/events/facade).
0.1.3
174 downloads/mo
#1464 most downloaded on pub.dev
app-appplayer/appplayer_secure
What this package is like to depend on
Last release 23 days ago
01 Aug 2026
Ships fairly regularly
a new release about every 3 weeks
Nearly every release is documented
notes for 4 of 4 stable releases
Nothing withdrawn
no release was ever pulled
2 months old
4 releases · first in 2026
4 releases in the last 12 months
see the full history below
Release timeline
4 releases · Jun 2026 to Aug 2026Releases
latest 4-
0.1.301 Aug 2026Release notes
Open source →SecureStorage.listKeysfailed on macOS witherrSecParam(-50) on every call, whileread/write/delete/existson the same vault worked. Reported from live Studio QA, wheresecret.listhad never once succeeded.Cause. Enumeration went through the plugin's
readAll, which asks the keychain forkSecMatchLimitAlltogether withkSecReturnData. A file-based keychain rejects that combination; only the data-protection keychain accepts it. This backend runs on the file-based login keychain by choice —MacOsOptions(useDataProtectionKeyChain: false), so an ad-hoc signed dev build can use the keychain without a paid signing identity. The limitation is therefore permanent for this backend, not a transient plugin bug. Single-key operations never touch that query shape, which is why only listing broke.wipeNamespaceused the same call and was broken the same way. Nothing had exercised it.Fix. The backend keeps its own index of the keys it has written.
listKeysandwipeNamespaceread the index; neither callsreadAllany more. Listing also stops asking for far more than it needs — it used to pull every stored plaintext to return a list of names, which on macOS can raise a per-item ACL prompt even where the query succeeds.Added
FlutterSecureStorageBackend.keyIndexSeeded— whether the index was seeded from the store's own contents. False means enumeration was unavailable when the index was first needed, so entries written by an earlier version are not listed. A caller that must not act on a partial view (a migration, a reset that reports what it will delete) should check it rather than treatlistKeysas exhaustive. It sits on the concrete backend, not on theSecureStorageport: adding a member to the port would break every existing implementation, and the property describes this platform binding.
Upgrading
On macOS, keys written before this version cannot be adopted into the index — reading their names is the very call that fails — so they will not appear in
listKeys. Everything written from this version on is listed.wipeAll()also makes the index exhaustive again. On every other platform the index is seeded from the existing store on first use and nothing is lost. -
0.1.201 Aug 2026Release notes
Open source →No public API change. Every name keeps its spelling and its call form;
import 'package:appplayer_secure/appplayer_secure.dart'still resolves all of them. Existing consumers upgrade with no code edit.Changed
-
The domain-neutral primitives (
SIGN·STORE·CRYPTO·TRUST·AUDIT·MAUTH·BIO, shared types and errors, role enums, event catalog, both sealers) moved to the new pure-Dart packageappplayer_secure_core, which this package depends on and re-exports.This package keeps what needs Flutter:
FlutterSecureStorageBackend,DefaultBiometricAdapter,AppPlayerRootCAs(includingfromAsset) and theAppPlayerSecurefacade.The split exists so a headless host can use the primitives. This package declares
flutter,flutter_secure_storageandlocal_auth, which a Dart-only image cannot resolve — and no arrangement of entry points changes that, because resolution follows the pubspec, not the imports.
Added
UnavailableBiometricAdapter(via the core) — reports biometrics as unavailable and refuses every authentication.
-
-
0.1.128 Jun 2026Release notes
Open source →Added
PassphraseSealer— seals/unseals aMap<String, String>under an operator passphrase (PBKDF2-HMAC-SHA256, 210k iterations → ChaCha20-Poly1305 AEAD), producing a portable, opaque base64 blob with the KDF salt + AEAD nonce embedded. UnlikeAtRestSealer— whose symmetric key lives only in the machine keychain and cannot leave the device — the key is derived purely from the passphrase, so a sealed blob can be migrated to another machine and reopened with the same passphrase (e.g. operational-credential portability). Exported from the barrel. Additive — no existing surface changed.
-
0.1.018 Jun 2026Release notes
Open source →Added
- Domain-neutral security primitives:
signature·secure_storage·cryptography·trust_chain·audit·mutual_auth·biometric, plus sharedtypes/error. - AppPlayer domain layer:
roles(SignerRole / TrustRole + MakeMind Root CA registry),events(AuditEvent catalog),AppPlayerSecurefacade. - First publish — merges the former
secureprimitives andappplayer_securedomain wrapper into one package.
- Domain-neutral security primitives: