Highlighted Features
This release introduces rank-based authorization for custom roles, refactors the sync transport layer for extensibility, and includes significant sync and runtime performance improvements.
- Rank-based authorization — The custom roles system now uses numerical ranks to determine authorization. Objects (devices, roles, labels) must outrank the objects they operate on. New APIs:
rank,change_rank,role_perms,permission_to_str. Several existing APIs changed signatures — see Breaking Changes below. (#651, #768) - Sync transport traits and performance — The syncer has been refactored to use transport traits, decoupling sync logic from the QUIC implementation and enabling connection reuse and better scheduling. Significant sync performance improvements. (#717)
- Scale testing infrastructure — New ring convergence tests and a scale testing harness exercise multi-node sync with up to 100 nodes. (#711)
- RPC trace correlation — Client-to-daemon RPC calls now carry a trace ID for end-to-end observability and debugging. (#731)
- Policy language
resulttype — The policy language now supports aresulttype for explicit error handling in policy code, replacing patterns that relied on runtime exceptions. Relevant to custom policy development. (aranya-core #498) - Label query API — New
team_labelC API function to query a label by ID, withAranyaLabelopaque type and accessors (label_get_id,label_get_name,label_get_author).label()now returnsResult<Label>instead ofResult<Option<Label>>, with a newDoesNotExisterror variant for resource-not-found errors across the API. (#771)
Coming Soon
- mTLS sync authentication — Migration from PSKs to mTLS certificates for authenticating QUIC sync connections, allowing users to leverage existing PKI infrastructure.
- Onboarding process improvements — Admins and operators can onboard devices via an onboarding service asynchronously, removing the requirement for both devices to be online at the same time. Only a passphrase needs to be exchanged, reducing the amount of data shared during onboarding.
Security Patches
- Updated
aws-lc-rsto fix 4 security vulnerabilities. (#758)
Breaking Changes
- Rank-based authorization API changes (#651):
setup_default_roles— removedowning_roleparameter, added check-size-first patternadd_device/add_device_to_team— added requiredrankparametercreate_label—managing_role_idreplaced withrankcreate_role—owning_rolereplaced withrankPermissionenum — addedChangeRank,ChangeRolePerms; removedChangeRoleManagementPerms,ChangeRoleManagingRole,ChangeLabelManagingRole- Removed:
DEFAULT_ROLES_LEN,DefaultRoles,RolesExt,RoleManagementPermission,role_owners,add_role_owner,remove_role_owner,assign_role_management_permission,revoke_role_management_permission,add_label_managing_role
RevokeLabelFromDevicenow validates device generation — Stale label revocations after a device is removed and re-added are now correctly rejected. (#746)label()returnsResult<Label>instead ofResult<Option<Label>>— Callers that handledOk(None)should now handleErr(Error::DoesNotExist). (#771)
What's Changed
- Simplify error checking in integration tests by @gknopf-aranya in #729
- chore: fix mac-only and shellcheck lints by @jdygert-spok in #739
- aranya-client: make AFC
ChannelIdan aranya-id by @jdygert-spok in #742 - custom roles: rank-based authorization by @gknopf-aranya in #651
- Standardize error handling in Rust examples by @gknopf-aranya in #733
- fix: delegate member/label operations from owner to admin and operator in example by @gknopf-aranya in #748
- tests: larger scale tests by @djohnson-spideroak in #711
- example: fix flake with sync_now by @jdygert-spok in #751
- chore: update aranya-core dependencies by @jdygert-spok in #750
- Update aws-lc-rs to fix 4 security vulnerabilities by @gknopf-aranya in #758
- tests: migrate aranya-client integration tests to unit tests by @gknopf-aranya in #756
- fix: add generation counter tests and fix RevokeLabelFromDevice by @gknopf-aranya in #746
- Refactor Sync Using Transport Traits by @nikki-aranya in #717
- fix: allow private_bounds lint on change_rank and query_rank by @gknopf-aranya in #767
- example: set env vars on child process instead of current by @jdygert-spok in #762
- client: fix new query method naming consistency by @jdygert-spok in #768
- Add Correlation ID for tracing by @jnewell-spok in #731
- capi: store
CStringinimp::Roleby @jdygert-spok in #778 - client: clean up label query API consistency by @gknopf-aranya in #771
- release: 6.0.0 by @gknopf-aranya in #766
Full Changelog: v5.0.0...v6.0.0