SDK feature parity
Compare which Permit.io features each SDK supports before you choose an SDK or plan a migration between languages. This reference is for developers who call Permit from application code.
SDKs in the feature parity table
The feature parity table covers six SDKs and the Terraform provider. Each quickstart installs the SDK and runs a first permission check.
The table doesn't cover the PHP, Kotlin, Erlang, and C++ SDKs, which are API clients generated from the Permit API specification.
Package versions this table reflects
The feature support table was compared against these released packages. SDK releases add features over time, so a row can lag behind the release you install.
| Language | Package | Version |
|---|---|---|
| Node.js | permitio on npm | 2.7.6 |
| Go | github.com/permitio/permit-golang | v1.2.8 |
| .NET | Permit on NuGet | 1.8.0 |
| Java | io.permit:permit-sdk-java on Maven Central | 2.2.5 |
| Python | permit on PyPI | 2.8.3 |
| Ruby | permit-sdk on RubyGems | 0.0.4 |
| Terraform | permitio/permit-io in the Terraform Registry | 0.0.25 |
Before you depend on a feature, check the version you install and the SDK's source repository or reference documentation.
Feature support by SDK
| Mark | Meaning |
|---|---|
| ✅ | Full support. |
| 🟡 | Partial support. |
| 🔴 | Missing. The SDK doesn't implement the feature. |
| 🟤 | Not compatible. The feature can't be implemented in the tool because of the tool's design. |
| Feature | Node.js | Go | .NET | Java | Python | Ruby | Terraform |
|---|---|---|---|---|---|---|---|
| Check | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 🟤 |
| Check All Tenants | ✅ | ✅ | 🔴 | ✅ | 🔴 | 🔴 | 🟤 |
| Get User Permission | ✅ | ✅ | ✅ | ✅ | ✅ | 🔴 | 🟤 |
| Get User Permission (ABAC) | 🔴 | 🔴 | 🔴 | ✅ | 🔴 | 🔴 | 🟤 |
| Get User Tenant | 🔴 | 🔴 | 🔴 | ✅ | 🔴 | 🔴 | 🟤 |
| List Role Assignments from PDP | 🔴 | 🔴 | 🔴 | 🔴 | ✅ | 🔴 | 🟤 |
| Get Authorized Users | 🔴 | 🔴 | 🔴 | 🔴 | ✅ | 🔴 | 🟤 |
| Get Authorized Users (ABAC) | 🔴 | 🔴 | 🔴 | 🔴 | ✅ | 🔴 | 🟤 |
| Check URL | 🔴 | 🔴 | 🔴 | ✅ | 🔴 | 🔴 | 🟤 |
| Sync User | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 🟤 |
| Create User | ✅ | ✅ | ✅ | ✅ | ✅ | 🟡 | 🟤 |
| Create User + Assign Roles | 🔴 | 🔴 | ✅ | ✅ | 🔴 | 🔴 | 🟤 |
| Users | ✅ | ✅ | ✅ | ✅ | ✅ | 🟡 | ✅ |
| Groups | 🔴 | 🔴 | 🔴 | 🟡 | 🔴 | 🔴 | 🔴 |
| Resources | ✅ | ✅ | ✅ | ✅ | ✅ | 🟡 | ✅ |
| Tenants | ✅ | ✅ | ✅ | ✅ | ✅ | 🟡 | ✅ |
| Projects | ✅ | ✅ | 🔴 | ✅ | ✅ | 🔴 | 🔴 |
| Environments | ✅ | ✅ | 🔴 | ✅ | ✅ | 🔴 | 🔴 |
| Roles | ✅ | ✅ | ✅ | ✅ | ✅ | 🔴 | ✅ |
| Role Assignments | ✅ | ✅ | ✅ | ✅ | ✅ | 🔴 | 🔴 |
| Condition Sets | ✅ | ✅ | 🔴 | ✅ | ✅ | 🔴 | ✅ |
| Condition Set Rules | ✅ | ✅ | 🔴 | ✅ | ✅ | 🔴 | ✅ |
| Relationship Tuples | ✅ | ✅ | ✅ | ✅ | ✅ | 🔴 | 🔴 |
| Resource Relations | ✅ | ✅ | ✅ | ✅ | ✅ | 🔴 | ✅ |
| Role Derivations | 🔴 | ✅ | 🔴 | ✅ | 🔴 | 🔴 | ✅ |
| Resource Instances | ✅ | ✅ | ✅ | ✅ | ✅ | 🔴 | 🔴 |
| Resource Roles | ✅ | ✅ | ✅ | ✅ | ✅ | 🔴 | 🔴 |
| Resource Actions | ✅ | ✅ | ✅ | ✅ | ✅ | 🔴 | ✅ |
| Resource Action Groups | ✅ | ✅ | 🔴 | ✅ | ✅ | 🔴 | 🔴 |
| Resource Attributes | ✅ | ✅ | 🔴 | ✅ | ✅ | 🔴 | ✅ |
| Bulk Check | ✅ | ✅ | ✅ | ✅ | ✅ | 🔴 | 🟤 |
| Elements Login | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | 🟤 |
| Bulk Users | ✅ | 🔴 | 🔴 | 🔴 | ✅ | 🔴 | 🟤 |
| Bulk Relationship Tuples | ✅ | ✅ | 🔴 | 🔴 | ✅ | 🔴 | 🟤 |
| Bulk Role Assignments | ✅ | ✅ | 🔴 | ✅ | ✅ | 🔴 | 🟤 |
| Bulk Tenants | 🔴 | 🔴 | 🔴 | 🔴 | ✅ | 🔴 | 🟤 |
| Bulk Resource Instances | 🔴 | 🔴 | 🔴 | 🔴 | ✅ | 🔴 | 🟤 |
| Proxy Facts via PDP | ✅ | ✅ | 🔴 | ✅ | ✅ | 🔴 | 🟤 |
Ruby partial support (🟡) means the permit-sdk gem exposes only part of the feature:
| Feature | What the Ruby SDK has |
|---|---|
| Create User | permit.sync_user(user), which creates the user when no user has that key. The gem has no separate create call. |
| Users | permit.api.users.get(user_key) and permit.api.users.sync_user(user). No list, update, or delete. |
| Resources | permit.api.resources.get(resource_key) only. |
| Tenants | permit.api.tenants.get(tenant_key) only. |
Feature names and SDK method names
The feature names in the table are Permit feature names, not method names. The request-time features map to these methods:
| Feature | What the call asks the PDP | Node.js | Python |
|---|---|---|---|
| Check | Whether one user can perform one action on one resource. | permit.check() | permit.check() |
| Bulk Check | Many checks in one PDP request. | permit.bulkCheck() | permit.bulk_check() |
| Check All Tenants | In which tenants a user can perform an action. | permit.checkAllTenants() | Not implemented |
| Get User Permission | The permissions a user has, grouped by tenant. | permit.getUserPermissions() | permit.get_user_permissions() |
| Get Authorized Users | Which users can perform an action on a resource. | Not implemented | permit.authorized_users() |
| List Role Assignments from PDP | The role assignments the PDP holds. | Not implemented | permit.pdp_api.role_assignments.list() |
| Get User Permission (ABAC), Get User Tenant, Check URL | See the Java SDK, the only SDK that implements these features. | Not implemented | Not implemented |
Each SDK follows the naming convention of its language: permit.check() in Node.js and Python, permit.Check() in .NET, and permitClient.Check() in Go, where the all-tenants check is named AllTenantsCheck().
The management features in the table (Users, Resources, Tenants, Roles, Condition Sets, and the rest) are API objects, and each SDK groups them under an API client: permit.api.users.create() in Node.js, permit.api.users.create() in Python, and permitClient.Api.Users.Create() in Go. For each call, see the SDK reference section of the language you use.
Terraform provider support
The Terraform provider is not a full SDK. The Terraform provider manages Permit.io policy objects, such as resources, roles, and condition sets, as Terraform resources. Features that run at request time, such as permission checks, don't fit the Terraform model, so the table marks them as not compatible (🟤).