OpenFGA CLI
A cross-platform CLI to interact with an OpenFGA server

Table of Contents
About
OpenFGA is an open source Fine-Grained Authorization solution inspired by Google's Zanzibar paper. It was created by the FGA team at Auth0 based on Auth0 Fine-Grained Authorization (FGA), available under a permissive license (Apache-2) and welcomes community contributions.
OpenFGA is designed to make it easy for application builders to model their permission layer, and to add and integrate fine-grained authorization into their applications. OpenFGA’s design is optimized for reliability and low latency at a high scale.
Resources
Installation
:TODO:
Building from Source
Make sure you have Go 1.20 or later installed. See the Go downloads page.
-
Clone the repo to a local directory, and navigate to that directory:
git clone https://github.com/openfga/cli.git && cd cli
-
Then use the build command:
go build -o ./fga main.go
or if you have make installed, just run:
make build
-
Run the OpenFGA CLI with:
./fga
Usage
Configuration
For any command that interacts with an OpenFGA server, these configuration values can be passed (where applicable)
| Name |
Flag |
CLI |
| Server Url |
--server-url |
FGA_SERVER_URL |
| Shared Secret |
--api-token |
FGA_API_TOKEN |
| Client ID |
--client-id |
FGA_CLIENT_ID |
| Client Secret |
--client-secret |
FGA_CLIENT_SECRET |
| Token Issuer |
--api-token-issuer |
FGA_API_TOKEN_ISSUER |
| Token Audience |
--api-audience |
FGA_API_AUDIENCE |
| Store ID |
--store-id |
FGA_STORE_ID |
| Authorization Model ID |
--model-id |
FGA_MODEL_ID |
Commands
Stores
| Description |
command |
parameters |
example |
| Create a Store |
create |
--name |
fga store create --name="FGA Demo Store" |
| List Stores |
list |
|
fga store list |
| Get a Store |
get |
--store-id |
fga store get --store-id=01H0H015178Y2V4CX10C2KGHF4 |
| Delete a Store |
delete |
--store-id |
fga store delete --store-id=01H0H015178Y2V4CX10C2KGHF4 |
Create Store
Command
fga store create
Parameters
--name: Specifies the name of the store to be created
Example
fga store create --name "FGA Demo Store"
JSON Response
{
"id": "01H0H015178Y2V4CX10C2KGHF4",
"name": "FGA Demo Store",
"created_at": "2023-05-19T16:10:07.637585677Z",
"updated_at": "2023-05-19T16:10:07.637585677Z"
}
List Stores
Command
fga store list
Parameters
--max-pages: Max number of pages to retrieve (default: 20)
Example
fga store list
JSON Response
{
"stores": [{
"id": "..",
"name": "..",
"created_at": "",
"updated_at": "",
"deleted_at": ""
}, { .. }]
}
Get Store
Command
fga store get
Parameters
--store-id: Specifies the store id to get
Example
fga store get --store-id=01H0H015178Y2V4CX10C2KGHF4
JSON Response
{
"id": "01H0H015178Y2V4CX10C2KGHF4",
"name": "FGA Demo Store",
"created_at": "2023-05-19T16:10:07.637585677Z",
"updated_at": "2023-05-19T16:10:07.637585677Z"
}
Delete Store
Command
fga store delete
Parameters
--store-id: Specifies the store id to delete
Example
fga store delete --store-id=01H0H015178Y2V4CX10C2KGHF4
JSON Response
{}
Authorization Models
Read Authorization Models
Command
fga model list
Parameters
--store-id: Specifies the store id
--max-pages: Max number of pages to retrieve (default: 20)
Example
fga model list --store-id=01H0H015178Y2V4CX10C2KGHF4
JSON Response
[{
"schema_version": "1.1",
"id": "01GXSA8YR785C4FYS3C0RTG7B1",
"type_definitions": [
{"type": "user"},
// { ... }
],
},
// { ... }
]
Write Authorization Model
Command
fga model write
Parameters
--store-id: Specifies the store id
--file: Specifies the file containing the model in JSON format
Example
fga model write --store-id=01H0H015178Y2V4CX10C2KGHF4 --file=model.json
fga model write --store-id=01H0H015178Y2V4CX10C2KGHF4 '{"type_definitions": [ { "type": "user" }, { "type": "document", "relations": { "can_view": { "this": {} } }, "metadata": { "relations": { "can_view": { "directly_related_user_types": [ { "type": "user" } ] }}}} ], "schema_version": "1.1"}'
JSON Response
{
"authorization_model_id":"01GXSA8YR785C4FYS3C0RTG7B1"
}
Read a Single Authorization Model
Command
fga model get
Parameters
--store-id: Specifies the store id
--model-id: Specifies the model id
Example
fga model get --store-id=01H0H015178Y2V4CX10C2KGHF4 --model-id=01GXSA8YR785C4FYS3C0RTG7B1
JSON Response
{
"schema_version": "1.1",
"id": "01GXSA8YR785C4FYS3C0RTG7B1",
"type_definitions": [
{"type": "user"},
// { ... }
],
}
Read the Latest Authorization Model
If model-id is not specified when using the get command, the latest authorization model will be returned.
Command
fga model get
Parameters
--store-id: Specifies the store id
Example
fga model get --store-id=01H0H015178Y2V4CX10C2KGHF4
JSON Response
{
"schema_version": "1.1",
"id": "01GXSA8YR785C4FYS3C0RTG7B1",
"type_definitions": [
{"type": "user"},
// { ... }
],
}
Validate an Authorization Model
Command
fga model validate
Parameters
Example
fga model validate '{"schema_version":"1.1,"type_definitions":[{"type":"user"}]}'
JSON Response
{"id":"01GPGWB8R33HWXS3KK6YG4ETGH","created_at":"2023-01-11T16:59:22Z","is_valid":true}
- Valid model without an ID
{"is_valid":true}
{"id":"01GPGTVEH5NYTQ19RYFQKE0Q4Z","created_at":"2023-01-11T16:33:15Z","is_valid":false,"error":"invalid schema version"}
- Invalid model without an ID
{"is_valid":false,"error":"the relation type 'employee' on 'member' in object type 'group' is not valid"}
Relationship Tuples
| Description |
command |
parameters |
example |
| Write Relationship Tuples |
write |
--store-id, --model-id |
fga tuple write --store-id=01H0H015178Y2V4CX10C2KGHF4 '{"schema_version":"1.1","type_definitions":[...]}' |
| Delete Relationship Tuples |
delete |
--store-id, --model-id |
fga tuple delete --store-id=01H0H015178Y2V4CX10C2KGHF4 |
| Read Relationship Tuples |
read |
--store-id, --model-id |
fga tuple read --store-id=01H0H015178Y2V4CX10C2KGHF4 --model-id=01GXSA8YR785C4FYS3C0RTG7B1 |
| Read Relationship Tuple Changes (Watch) |
changes |
--store-id, --model-id |
fga tuple changes --store-id=01H0H015178Y2V4CX10C2KGHF4 --model-id=01GXSA8YR785C4FYS3C0RTG7B1 |
| Import Relationship Tuples |
import |
--store-id, --model-id, --file |
fga tuple import --store-id=01H0H015178Y2V4CX10C2KGHF4 --model-id=01GXSA8YR785C4FYS3C0RTG7B1 --file=tuples.json |
Write Relationship Tuples
Command
fga tuple write