Skip to main content

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.

LanguageQuickstartSource repository
Node.jsCheck permissions with the Node.js SDKpermitio/permit-node
GoCheck permissions with the Go SDKpermitio/permit-golang
.NETCheck permissions with the .NET SDKpermitio/permit-dotnet
JavaCheck permissions with the Java SDKpermitio/permit-java
PythonCheck permissions with the Python SDK (asyncio), Check permissions with the Python SDK (sync)permitio/permit-python
RubyCheck permissions with the Ruby SDKpermitio/permit-ruby
TerraformTerraform providerNot an SDK. See Terraform provider support.

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.

LanguagePackageVersion
Node.jspermitio on npm2.7.6
Gogithub.com/permitio/permit-golangv1.2.8
.NETPermit on NuGet1.8.0
Javaio.permit:permit-sdk-java on Maven Central2.2.5
Pythonpermit on PyPI2.8.3
Rubypermit-sdk on RubyGems0.0.4
Terraformpermitio/permit-io in the Terraform Registry0.0.25
Check the SDK source for the latest support

Before you depend on a feature, check the version you install and the SDK's source repository or reference documentation.

Feature support by SDK

MarkMeaning
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.
FeatureNode.jsGo.NETJavaPythonRubyTerraform
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:

FeatureWhat the Ruby SDK has
Create Userpermit.sync_user(user), which creates the user when no user has that key. The gem has no separate create call.
Userspermit.api.users.get(user_key) and permit.api.users.sync_user(user). No list, update, or delete.
Resourcespermit.api.resources.get(resource_key) only.
Tenantspermit.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:

FeatureWhat the call asks the PDPNode.jsPython
CheckWhether one user can perform one action on one resource.permit.check()permit.check()
Bulk CheckMany checks in one PDP request.permit.bulkCheck()permit.bulk_check()
Check All TenantsIn which tenants a user can perform an action.permit.checkAllTenants()Not implemented
Get User PermissionThe permissions a user has, grouped by tenant.permit.getUserPermissions()permit.get_user_permissions()
Get Authorized UsersWhich users can perform an action on a resource.Not implementedpermit.authorized_users()
List Role Assignments from PDPThe role assignments the PDP holds.Not implementedpermit.pdp_api.role_assignments.list()
Get User Permission (ABAC), Get User Tenant, Check URLSee the Java SDK, the only SDK that implements these features.Not implementedNot 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 (🟤).