Introduction to the Twingate Javascript CLI | Twingate
Introduction to the Twingate Javascript CLI
The Twingate Javascript CLI is a fully featured CLI tool utilising the Twingate GraphQL APIs.
It is open-source and written in JavaScript so Node or Deno developers can extend or customise for their own use cases. Pre-built binaries are provided for all major platforms. Users familiar with Python development may prefer the Python CLI.
Open Source contribution
The tg CLI tool is an Open Source project developed and maintained outside of our product engineering teams. For support regarding this tool please visit the GitHub issues page.
Getting Started
Download binaries for Windows, Mac or Linux from our release page on GitHub.
Unzip the package and insert the following in your terminal:
# ./tg --help
Usage: tg
Version: CLI Version: LATEST | TwingateApiClient Version: 0.1.0
Description:
CLI for Twingate
Options:
-h, --help - Show this help.
-V, --version - Show the version number for this program.
-a, --account-name <string> - Twingate account name
-l, --log-level [logLevel] - Log level (Default: "INFO", Values: "TRACE", "DEBUG", "INFO", "WARN",
"ERROR", "SEVERE", "FATAL", "QUIET", "SILENT")
Commands:
export - Export from account to various formats
import - Import from excel file to a Twingate account
resource - Twingate resources
group - Twingate groups
user - Twingate users
network - Twingate networks
connector - Twingate connectors
device - Twingate devices
service - Twingate services
The tg CLI tool asks for Twingate Account and API Key whenever a command is called and the option to save the Twingate Account and API key is also given. See the example below.
# ./tg export
? Enter Twingate account: › exampleAccount
? Enter API key: › **************************************************************************************************************************************
? Save account and API key to file? › Yes
[INFO] Configuration file saved.
[SUCCESS] Export to 'exampleAccount-2022-06-08_16-57-01.xlsx' completed.
User Command
The user command provides the ability to list all users.
# ./tg user --help
Usage: tg user
Version: CLI Version: LATEST | TwingateApiClient Version: 0.1.0
Description:
Twingate users
Options:
-h, --help - Show this help.
-a, --account-name <string> - Twingate account name
-l, --log-level [logLevel] - Log level (Default: "INFO")
Commands:
list - Get list of users
List All Users
# ./tg user list
[INFO] Using Twingate account: 'exampleAccount'
┌──────────────────┬───────────┬───────────┬───────────┬──────────┬───────────────────────┬────────────────────────────────────────────────────────────────────────────────────────┬─────────┬─────────┬─────────────────┐
│ id │ createdAt │ updatedAt │ firstName │ lastName │ email │ avatarUrl │ isAdmin │ state │ groups │
├──────────────────┼───────────┼───────────┼───────────┼──────────┼───────────────────────┼────────────────────────────────────────────────────────────────────────────────────────┼─────────┼─────────┼─────────────────┤
│ VXNlcjoxMzY3Ng== │ 6/7/22 │ 6/9/22 │ │ │ xxxx.xxxxxx@gmail.com │ │ FALSE │ Pending │ Everyone, test1 │
├──────────────────┼───────────┼───────────┼───────────┼──────────┼───────────────────────┼────────────────────────────────────────────────────────────────────────────────────────┼─────────┼─────────┼─────────────────┤
│ VXNlcjoxMzYxMA== │ 5/23/22 │ 6/10/22 │ aaaa │ bbbbbb │ xxxx@twingate.com │ │ TRUE │ Active │ Everyone, test1 │
└──────────────────┴───────────┴───────────┴───────────┴──────────┴───────────────────────┴────────────────────────────────────────────────────────────────────────────────────────┴─────────┴─────────┴─────────────────┘
Group Command
The group command provides the ability to list, create, remove and copy groups as well as add users and resources to a group.
# ./tg group --help
Usage: tg group
Version: CLI Version: LATEST | TwingateApiClient Version: 0.1.0
Description:
Twingate groups
Options:
-h, --help - Show this help.
-a, --account-name <string> - Twingate account name
-l, --log-level [logLevel] - Log level (Default: "INFO")
Commands:
list - Get list of groups
create <name> [UserIds...] - Create a group
remove <id> - Remove a group
remove_bulk [groupIds...] - Remove groups bulk
add_user <groupNameOrId> [userIds...] - Add users to a group
remove_user <groupNameOrId> [userIds...] - Remove users to a group
remove_resource <groupNameOrId> [resourceNamesOrIds...] - Add resources to a group
add_resource <groupNameOrId> [resourceNamesOrIds...] - Add resources to a group
set_policy <groupNameOrId> <securityPolicyNameOrId> - Set group security policy
copy <source> <destination> - Copy a group
List All Groups
# ./tg group list
[INFO] Using Twingate account: 'exampleAccount'
┌──────────────────┬───────────┬───────────┬──────────────┬──────────┬────────┐
│ id │ createdAt │ updatedAt │ name │ isActive │ type │
├──────────────────┼───────────┼───────────┼──────────────┼──────────┼────────┤
│ R3JvdXA6MzE1OTY= │ 5/4/22 │ 5/4/22 │ Everyone │ TRUE │ System │
├──────────────────┼───────────┼───────────┼──────────────┼──────────┼────────┤
│ R3JvdXA6MzQ2NTE= │ 6/8/22 │ 6/8/22 │ exampleGroup │ TRUE │ Manual │
├──────────────────┼───────────┼───────────┼──────────────┼──────────┼────────┤
│ R3JvdXA6MzI4ODM= │ 5/17/22 │ 5/17/22 │ test_group │ TRUE │ Manual │
└──────────────────┴───────────┴───────────┴──────────────┴──────────┴────────┘
... (omitted for brevity) ...
Add Resources To A Service Account
The resources must already exist in Twingate.
# ./tg service add_resource "U2VydmljZUFjY291bnQ6MzYyNDNiMDQtZGE1ZC00Y2IyLThjOGYtYmExYzE2NWQxZTFj" "myResource1" "myResource2"
[INFO] Using Twingate account: 'exampleAccount'
[SUCCESS] Added resources 'myResource1: UmVzb3VyY2U6MzU5NDg2' 'myResource2: UmVzb3VyY2U6MzU5NDg3' to service 'myNewServiceAccount: U2VydmljZUFjY291bnQ6Zjc3MDI4OTktMmJlNC00MTdlLWE5ZDctZGYyMmJlZDJiZmIx'