at_commons
A library of Dart and Flutter utility classes that are used across other components of the atPlatform.
5.16.0
20K downloads/mo
#2211 most downloaded on pub.dev
atsign-foundation/at_client_sdk
What this package is like to depend on
Last release 2 days ago
21 Aug 2026
Release timing varies
gaps range from 8 days to 3 months
Nearly every release is documented
notes for 110 of 111 stable releases
3 versions withdrawn
withdrawn after publishing
6 years old
114 releases · first in 2020
11 releases in the last 12 months
see the full history below
Release timeline
114 releases · Oct 2020 to Aug 2026Releases
latest 60 of 114-
5.16.021 Aug 2026Release notes
Open source →-
feat: add
AtNetworkTimeouts.defaultResponseBudget(90s) — the overall budget for one complete response, as distinct fromdefaultTimeout, which bounds the wait for the next bytes and restarts every time a chunk arrives. A large response is many such waits in a row, and only this budget bounds their sum, so a peer that trickles bytes indefinitely is caught by this and by nothing else. Deliberately not passed throughcap: it bounds an aggregate rather than a single operation, and its own default already exceeds the 60s ceiling. Nothing reads it yet. -
docs:
signingAlgosays plainly that it names the APKAM authentication key's algorithm — the key that signs thefrom:challenge — and not the algorithm an enrollment signs documents with. The name invites the second reading and the two are deliberately different algorithms from rollout 1 onward. Stated onEnrollParams,EnrollVerbBuilderandPkamVerbBuilder, which all declare the field and previously said this in two forms and none. -
feat: add
EnrollVerbBuilder.apkamPublicKeySignature, threading the existingEnrollParams.apkamPublicKeySignaturethrough to the built command. The field had no route to the wire, so anenroll:updatecould not carry the proof of possession the atServer requires before it installs a newapkamPublicKey— which made the rotation the field exists for unsendable. -
feat: add
Metadata.copy()— a field-for-field copy, so callers handing metadata from one object to another stop hand-rolling the field list. A hand-rolled copier silently drops any field added toMetadatalater: the value still round-trips and only the missing field is absent at the far end, which is howimmutableandappMetadatawent astray on several paths inat_client. A caller that must not carry a field clears it after copying, so the exception is written where it applies rather than being the default.
-
-
5.15.012 Aug 2026Release notes
Open source →- feat: add
EnrollVerbBuilder.apsk, threading the existingEnrollParams.apskthrough to the built command. The field had no route to the wire, so nothing could send the value the atServer publishes verbatim. - feat: add
EnrollParams.apskLegacyand the matchingEnrollVerbBuilderfield, carrying the bare RSA_apskstring an enrollment publishes verbatim. Every deployed_apskconsumer base64-decodes the value as an RSA key, so a plain-legacy enrollment must be able to publish that shape through the same verb every other enrollment uses. A separate field rather than wideningapskto two types, which would have been source-breaking on a published field. The atServer writes it as-is — not JSON-encoded, since a quoted string is not what a bare-RSA parser reads — and refuses a request carrying both fields, which would disagree about one record with no basis for choosing between them. - fix:
EnrollParams.apsk's entrystatusisactiveorretired, notverifyOnlyas 5.14.0 documented, and the entry carries akidlike every other key entry in the protocol.retiredis use-neutral — "retained, not for new operations" — becauseusealready names the operation a key serves: a retired signing key still verifies old envelopes, and a retired encapsulation key still opens records already sealed to it. Documentation only; the atServer stores the value verbatim, so no record carries either spelling.
- feat: add
-
5.14.011 Aug 2026Release notes
Open source →-
feat: add
EnrollParams.apsk— the value a client composes for its ownpublic:_apsk.<enrollmentId>.a.__e@<atSign>signing key, carried onenroll:requestand stored verbatim on the enrollment record. AMap<String, dynamic>likemetadata, opaque to the atServer, capped there at 20KB encoded.It exists so the atServer can stop composing that value from
(apkamPublicKey, signingAlgo). PKAM verification is record-authoritative and reads the enrollment record, so_apskis a client-side artefact the server has no use for and no business knowing the format of — it was publishing one only because the record's rightful writer, the enrollee, does not exist yet at approval. Sending the value moves the format back to the side that owns it, and a new signing-key shape stops needing a server release. Absent means no_apskis published at all.The form the client composes is a versioned array of signing keys —
{"v":1,"keys":[{"use","alg","pub","status"}]}— spelled asKeyPackage's keys are, so one vocabulary covers every "list of keys with algorithms" in the protocol. An entry whosestatusisverifyOnlyhas stopped signing but is retained: envelopes are stored durably and re-verified later, so removing a key would retroactively unverify everything ever signed with it. -
feat: add
EnrollOperationEnum.updateand the matchingenroll:updatealternation in theenrollgrammar — an approved enrollment amending its own record'sapkamPublicKey,signingAlgo,apskandmetadata. Self-only: the connection's enrollment id must equal the target's. It never reachesnamespacesor the approval state, because an operation an enrollment can invoke on itself must not be able to widen its own grant.This is what lets an enrollment replace its APKAM authentication keypair while keeping its id, rather than the replacement being a new enrollment.
-
feat: add
EnrollParams.apkamPublicKeySignature— base64 of a signature by the new APKAM private key over<enrollmentId>|<apkamPublicKey>|<signingAlgo>, required on anenroll:updatethat changesapkamPublicKey.The connection proves possession of the enrollment's current key and nothing else proves possession of the new one, so without this a compromised-but-authenticated client can install a public key whose private half is held by someone else — locking out the legitimate holder while the record still looks valid.
-
-
5.13.017 Jul 2026Release notes
Open source →- feat: add
AtNetworkTimeouts— the process-wide network-timeout policy:defaultTimeout(30s, the per-attempt default),maxAllowed(60s hard cap on any single network operation),defaultOnboardingTimeout(5 min — the poll budget for waiting on a newly-registered atSign to be provisioned, deliberately longer than the per-op cap), andcap(). The single place to set the SDK's network timeouts (#1909). - feat: add
SecureSocketConfig.connectTimeoutso a connect deadline can be threaded through toSecureSocket.connect.
- feat: add
-
5.12.004 Jul 2026Release notes
Open source →- feat: add the
enroll:listns:<listNamespace>operation to the enroll verb grammar (the gated per-namespace enrollment-discovery verb), ordered beforelistin the operation alternation so it is not prefix-shadowed. - feat: add
EnrollParams.metadata(opaqueMap<String, dynamic>, stored verbatim on the enrollment record and returned from discovery) andEnrollParams.signingAlgo(rsa2048|mldsa65), with the matchingEnrollVerbBuilderfields; an emptymetadatamap is dropped from the built command. - feat: widen the
pkamverbsigningAlgoliteral to acceptmldsa65(post-quantum ML-DSA APKAM authentication).
- feat: add the
-
5.11.016 Jun 2026Release notes
Open source →- feat: add
Metadata.appMetadata(AppMetadata{providerId, additional}), emitted on the wire as:appMetadata:(base64-encoded JSON) on theupdate,update:metaandnotifyverbs and parsed back by the verb builders.providerIdroutes pluggable-crypto decryption;additionalis provider-owned opaque metadata.providerIdmust be a non-empty string (aFormatExceptionis thrown otherwise).
- feat: add
-
5.10.012 May 2026Release notes
Open source →- feat: add
:clflag to thescanverb syntax, plusScanVerbBuilder.commitLog - feat: add
:nc(no-commit) flag to theupdate,update:meta,update:jsonanddeleteverb syntaxes, plusUpdateVerbBuilder.noCommitandDeleteVerbBuilder.noCommit - feat: add
:dAt(deletedAt) timestamp to thedeleteverb syntax, plusDeleteVerbBuilder.deletedAt - feat: emit
Metadata.createdAt/updatedAt/expiresAt/availableAton the wire as:cAt:/:uAt:/:eAt:/:aAt:(used byupdate,update:metaandnotify) - feat: timestamp wire format is ISO 8601 UTC with 6 fractional-second digits,
e.g.
2026-05-05T11:59:44.123456Z; helper atVerbUtil.formatIso8601Micros
- feat: add
-
5.9.030 Apr 2026Release notes
Open source →- feat: add
AtKey.fullKeygetter — key name including its namespace - feat: add
AtKey.fullKeyAndOwnergetter —fullKeycombined with the owning atSign - feat: add equals method for
AtBytes
- feat: add
-
5.8.015 Jan 2026 -
5.7.007 Jan 2026 -
5.6.205 Nov 2025 -
5.6.127 Aug 2025 -
5.6.027 Aug 2025 withdrawn -
5.5.007 Aug 2025 -
5.4.106 Jul 2025Release notes
Open source →- fix:
NotifyVerbBuilder.buildCommand()usesAtKey.toString()instead of doing its own thing.
- fix:
-
5.4.006 Jun 2025Release notes
Open source →- feat: add
EnrollmentConstants. Contains various patterns and regular expressions for enrollment-related data
- feat: add
-
5.3.010 Mar 2025Release notes
Open source →- feat: add
immutableflag toMetadataandforceflag to the DeleteVerbBuilder. Immutable records may not be updated once the immutable flag has been set, and may not be deleted unless theforceflag has been set in the delete command.
- feat: add
-
5.2.025 Feb 2025Release notes
Open source →- feat: add Atsign string extensions
- feat: add AtServerEvent interface and AtSignPKChangedEvent class
-
5.1.216 Dec 2024Release notes
Open source →- fix: remove isPaginated check in SyncVerbBuilder and always set from: and limit: since sync:from verb expects these params to be set.
-
5.1.106 Dec 2024 -
5.1.003 Dec 2024 -
5.0.220 Nov 2024Release notes
Open source →- fix: Add "publicKeyHash" and "hashingAlgo" type to metadata.
- build[deps]: Upgraded the following package:
- json_annotation to v4.9.0
- meta to v1.16.0
- build_runner to v2.4.13
- json_serializable to v6.9.0
- lints to v5.0.0
- test to v1.25.8
- test_process to v2.1.0
-
5.0.116 Oct 2024 -
5.0.027 Sep 2024Release notes
Open source →- [Breaking Change]feat: Emit the isEncrypted value in the metadata if it is false
- fix: update pkam regex to accept sha512 as hashing algo
-
4.1.213 Sep 2024Release notes
Open source →- feat: Add "expiry" enroll params to support apkam keys to auto expiry after specified time duration
-
4.1.112 Sep 2024Release notes
Open source →- feat: Add "delete" operation to the enroll verb to allow deletion of denied enrollments
-
4.1.012 Sep 2024Release notes
Open source →- feat: Add "unrevoke" operation to the enroll verb to restore revoked APKAM keys
- fix: Add isEncrypted flag to notify command for both true and false
-
4.0.1125 Jul 2024Release notes
Open source →- chore: deprecate MessageTypeEnum.text
- fix: remove deprecated annotation from Metadata.pubKeyCS
-
4.0.1029 May 2024Release notes
Open source →- fix: Add a "force" variable to enroll_verb_builder to propagate enroll:revoke:force value
- fix: Deprecate apkam in PkamAuthMode enum
-
4.0.901 May 2024Release notes
Open source →- feat: enroll verb syntax change for enroll:revoke:force and added new exception AtEnrollmentRevokeException
-
4.0.828 Apr 2024 -
4.0.725 Apr 2024 -
4.0.611 Apr 2024Release notes
Open source →- fix: max key length validation changes
- fix: PublicKey toString method should return 'cached:' when isCached is set in metadata
-
4.0.526 Mar 2024Release notes
Open source →- feat: Enhance enroll:list to enable filtering based on enrollment status
-
4.0.421 Mar 2024 withdrawnNothing published for this version
-
4.0.327 Feb 2024 -
4.0.221 Feb 2024 withdrawnRelease notes
Open source →- feat: changes to replace md5 checksum - deprecated pubKeyCS in AtKey and introduced new class PublicKeyHash
-
4.0.125 Jan 2024Release notes
Open source →- fix: Add "InvalidPinException" which is thrown when an invalid Semi Permanent Passcode is submitted.
-
4.0.013 Dec 2023Release notes
Open source →- [Breaking Change] fix: Updated regex for Reserved keys (Internal keys used by the server)
- fix: Add "put" operation to OTP verb to store semi-permanent pass codes
- Remove attributes related to AtKey and metadata in verb builders. Instead, use AtKey instance.
-
3.0.5823 Nov 2023Release notes
Open source →- fix: Deprecate encryptedDefaultEncryptedPrivateKey in EnrollParams and introduce encryptedDefaultEncryptedPrivateKey for readability
- fix: Replace encryptedDefaultEncryptedPrivateKey with encryptedDefaultEncryptionPrivateKey in EnrollVerbBuilder
-
3.0.5717 Oct 2023 -
3.0.5604 Oct 2023Release notes
Open source →- feat: Introduce "AtInvalidEnrollmentException" which is thrown when an enrollment is expired or invalid
- feat: Introduce error code 'AT0030' for Invalid Enrollment Status
- chore: Deprecated all variables in
src/at_constants.dart, useAtConstants.<variable-name>instead
-
3.0.5508 Sep 2023Release notes
Open source →- feat: Introduce "AtThrottleLimitExceeded" exception which is thrown when enrollment request exceeds the limit
- feat: Introduce new error codes for apkam enrollments
-
3.0.5431 Aug 2023Release notes
Open source →- fix: Modify "totp" verb regex to include alphanumeric characters
- feat: Introduce "EnrollResponse" class which represents the enrollment response.
-
3.0.5304 Aug 2023Release notes
Open source →What's Changed
- build(deps): bump github/codeql-action from 2.1.37 to 2.1.38 by @dependabot in #881
- build(deps): bump actions/setup-python from 4.4.0 to 4.5.0 by @dependabot in #882
- build(deps): bump requests from 2.28.1 to 2.28.2 in /tools by @dependabot in #883
- feat: Introduce AtServiceFactory to make AtClientManager more reusable and more testable by @gkc in #885
- build(deps): bump dnspython from 2.2.1 to 2.3.0 in /tools by @dependabot in #886
- feat: Inject AtChops instance (if any) so that it is available everywhere that it can be used by @gkc in #887
- build(deps): bump dart-lang/setup-dart from 1.3 to 1.4 by @dependabot in #889
- build(deps): bump github/codeql-action from 2.1.38 to 2.1.39 by @dependabot in #890
- feat: client commit log compaction by @sitaram-kalluri in #855
- chore: update at_persistence_secondary_server version and remove depe… by @sitaram-kalluri in #896
- build(deps): bump github/codeql-action from 2.1.39 to 2.2.0 by @dependabot in #897
- fix: add atChops as optional argument in AtServiceFactory.atClient by @sitaram-kalluri in #898
- build(deps): bump github/codeql-action from 2.2.0 to 2.2.1 by @dependabot in #901
Full Changelog: v3.0.51...v3.0.53
Release notes
Open source →- feat: Modify "enroll" verb regex.
- feat: Introduce "EnrollParams" class to encapsulate enrollment attributes.
-
3.0.5222 Jul 2023Release notes
Open source →- fix: Add revoke and list operations to "enroll" verb
- fix: Modify "keys" verb regex and verb builder
-
3.0.5107 Jul 2023Release notes
Open source →What's Changed
- fix: git#865 - fixes notifying the switch atSign event multiple times by @sitaram-kalluri in #867
- fix: Switch atsign bug by @murali-shris in #864
- feat: Add atSign to AtSignLoggers' names when feasible. Some code simplification and refactoring by @gkc in #870
- fix: reverted async,path to older versions by @purnimavenkatasubbu in #879
Full Changelog: v3.0.50...v3.0.51
-
3.0.5005 Jul 2023Release notes
Open source →What's Changed
- feat: initial commit for at_chops uptake by @murali-shris in #809
- fix: Fix pub score by @purnimavenkatasubbu in #876
-
3.0.4903 Jul 2023Release notes
Open source →- feat: added syntax and verb builder for keys verb
- feat: introduced verb builder for enroll and pkam verbs
- chore: Moved this package to a new repo & updated repository URL
-
3.0.4820 Jun 2023 -
3.0.4723 May 2023Release notes
Open source →- fix: Enhance stats verb to allow regex for stats:15
- feat: Add syntax and verb builder for APKAM enroll verb
-
3.0.4619 May 2023 -
3.0.4528 Apr 2023 -
3.0.4406 Apr 2023 -
3.0.4315 Mar 2023Release notes
Open source →- feat: Enhanced the monitor verb syntax
- added
strictflag to allow client to request that only regex-matching notifications are sent - e.g. do not send other 'control' type notifications like the 'statsNotifications' - added
multiplexedflag to allow client to indicate that this socket is also being used for request-response interactions
- added
- feat: Enhanced the monitor verb syntax
-
3.0.4211 Mar 2023Release notes
Open source →- fix: Tightened the validation of 'public' key names. Keys like this:
public:@bob:foo.bar@alicewill now correctly be identified as not being valid.
- fix: Tightened the validation of 'public' key names. Keys like this:
-
3.0.4111 Mar 2023Release notes
Open source →- fix: Add 'configkey' to list of reserved keys for key validation purposes
-
3.0.4010 Mar 2023 -
3.0.3928 Feb 2023 -
3.0.3820 Feb 2023