{"id":41587083,"url":"https://github.com/gadget-inc/ggt","last_synced_at":"2026-01-24T09:08:06.087Z","repository":{"id":57750702,"uuid":"520986725","full_name":"gadget-inc/ggt","owner":"gadget-inc","description":"The command-line interface for Gadget","archived":false,"fork":false,"pushed_at":"2026-01-13T00:07:27.000Z","size":24108,"stargazers_count":18,"open_issues_count":18,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-13T04:13:48.084Z","etag":null,"topics":["cli"],"latest_commit_sha":null,"homepage":"https://docs.gadget.dev/reference/ggt","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gadget-inc.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-08-03T18:13:46.000Z","updated_at":"2026-01-13T00:06:19.000Z","dependencies_parsed_at":"2023-09-22T03:18:21.732Z","dependency_job_id":"94013d58-2ede-470d-b451-491a16716365","html_url":"https://github.com/gadget-inc/ggt","commit_stats":{"total_commits":331,"total_committers":5,"mean_commits":66.2,"dds":0.540785498489426,"last_synced_commit":"136d6c81e491d79bc0f2c86d8a17b8a961769a94"},"previous_names":[],"tags_count":77,"template":false,"template_full_name":null,"purl":"pkg:github/gadget-inc/ggt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gadget-inc%2Fggt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gadget-inc%2Fggt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gadget-inc%2Fggt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gadget-inc%2Fggt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gadget-inc","download_url":"https://codeload.github.com/gadget-inc/ggt/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gadget-inc%2Fggt/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28722130,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-24T08:27:05.734Z","status":"ssl_error","status_checked_at":"2026-01-24T08:27:01.197Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli"],"created_at":"2026-01-24T09:08:05.416Z","updated_at":"2026-01-24T09:08:06.079Z","avatar_url":"https://github.com/gadget-inc.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ch1\u003eggt\u003c/h1\u003e\n  The command-line interface for \u003ca href=\"https://gadget.dev\"\u003eGadget\u003c/a\u003e\n\n\u003cbr\u003e\n\u003cbr\u003e\n\n[![ci/cd workflow status](https://github.com/gadget-inc/ggt/actions/workflows/cd.yml/badge.svg)](https://github.com/gadget-inc/ggt/actions/workflows/cd.yml)\n[![npm version](https://img.shields.io/npm/v/ggt)](https://www.npmjs.com/package/ggt)\n[![discord server](https://img.shields.io/discord/836317518595096598)](https://discord.gg/9d7wjGBZ6M)\n\n\u003cbr\u003e\n\u003cbr\u003e\n\n\u003c/div\u003e\n\n## Table of Contents\n\n- [Intro](#intro)\n- [Quick Start](#quick-start)\n- [Usage](#usage)\n- [Commands](#commands)\n  - [`ggt dev`](#ggt-dev)\n  - [`ggt deploy`](#ggt-deploy)\n  - [`ggt status`](#ggt-status)\n  - [`ggt push`](#ggt-push)\n  - [`ggt pull`](#ggt-pull)\n  - [`ggt add`](#ggt-add)\n  - [`ggt open`](#ggt-open)\n  - [`ggt list`](#ggt-list)\n  - [`ggt login`](#ggt-login)\n  - [`ggt logout`](#ggt-logout)\n  - [`ggt logs`](#ggt-logs)\n  - [`ggt debugger`](#ggt-debugger)\n  - [`ggt whoami`](#ggt-whoami)\n  - [`ggt configure`](#ggt-configure)\n  - [`ggt version`](#ggt-version)\n\n## Intro\n\n`ggt` is the command line interface for the Gadget platform, providing additional functionality for working with your Gadget applications using your existing tools on your machine.\n\n## Quick Start\n\nAssuming you have a Gadget application named `example`, run the following to clone your application's source code to `~/gadget/example` to begin developing:\n\n```sh\nnpx ggt@latest dev ~/gadget/example --app=example\n```\n\nWhile `ggt dev` is running, `~/gadget/example` will synchronized with your application's filesystem in Gadget's cloud. Any file changes you make locally will be immediately reflected by your application's API and actions if you re-run them.\n\n## Usage\n\n```sh-session\n$ npm install -g ggt\n$ ggt\nThe command-line interface for Gadget.\n\nUsage\n  ggt [COMMAND]\n\nCommands\n  dev              Start developing your application\n  deploy           Deploy your environment to production\n  status           Show your local and environment's file changes\n  push             Push your local files to your environment\n  pull             Pull your environment's files to your local computer\n  add              Add models, fields, actions and routes to your app\n  open             Open a Gadget location in your browser\n  list             List your available applications\n  login            Log in to your account\n  logout           Log out of your account\n  logs             Stream your environment's logs\n  debugger         Connect to the debugger for your environment\n  whoami           Print the currently logged in account\n  configure        Configure default execution options\n  version          Print this version of ggt\n\nFlags\n  -h, --help       Print how to use a command\n  -v, --verbose    Print more verbose output\n      --telemetry  Enable telemetry\n\nRun \"ggt [COMMAND] -h\" for more information about a specific command.\n```\n\n## Commands\n\n### `ggt dev`\n\n```sh-session\n$ ggt dev -h\nClones your Gadget environment's files to your local machine and keeps it in sync, in order to\nenable local development with your text editor and source code with Git.\n\nIf your app's local directory already exists, this command first performs a sync to ensure\nthat your local and environment directories match, changes are tracked since last sync. If any\nconflicts are detected, they must be resolved before development starts.\n\nUsage\n      $ ggt dev [DIRECTORY] [options]\n\n      DIRECTORY: The directory to sync files to (default: the current directory)\n\nOptions\n      -a, --app \u003capp_name\u003e        Selects the app to sync files with. Default set on \".gadget/sync.json\"\n      -e, --env \u003cenv_name\u003e        Selects the environment to sync files with. Default set on \".gadget/sync.json\"\n      --prefer \u003csource\u003e           Auto-select changes from 'local' or 'environment' source on conflict\n      --allow-unknown-directory   Syncs to any local directory with existing files, even if the \".gadget/sync.json\" file is missing\n      --allow-different-app       Syncs with a different app using the --app command, instead of the one specified in the .gadget/sync.json file\n      --log-level \u003clevel\u003e         Sets the log level for incoming application logs (default: info)\n      --no-logs                   Disables outputting application logs to the console\n      --my-logs                   Only outputs user sourced logs\n\nIgnoring files\n      ggt dev uses a .ignore file, similar to .gitignore, to exclude specific files and\n      folders from syncing. These files are always ignored:\n\n      • .DS_Store\n      • .gadget\n      • .git\n      • node_modules\n      • .shopify\n\nNotes\n      • \"ggt dev\" only works with development environments\n      • \"ggt dev\" only supports \"yarn\" v1 for installing dependencies\n      • Avoid deleting or moving all of your files while \"ggt dev\" is running\n\nExamples\n      sync an app in a custom path\n      $ ggt dev ~/myGadgetApps/myBlog --app myBlogApp\n\n      sync with a specific environment and preselect all local changes on conflicts\n      $ ggt dev --env main --prefer local\n\n      sync a custom path with a specific app, environment and preselect all changes from local on conflicts\n      $ ggt dev ~/gadget/example --app=example --env=development --prefer=local\n```\n\n### `ggt deploy`\n\n```sh-session\n$ ggt deploy -h\nDeploys your app to production.\n\nThis command first performs a sync to ensure that your local and environment directories\nmatch, changes are tracked since last sync. If any conflicts are detected, they must be\nresolved before deployment.\n\nUsage\n      $ ggt deploy [options]\n\nOptions\n      -a, --app \u003capp_name\u003e           Selects a specific app to deploy. Default set on \".gadget/sync.json\"\n      --from, -e, --env \u003cenv_name\u003e   Selects a specific environment to sync and deploy from. Default set on \".gadget/sync.json\"\n      --force                        Deploys by discarding any changes made to the environment directory since last sync\n      --allow-different-directory    Deploys from any local directory with existing files, even if the \".gadget/sync.json\" file is missing\n      --allow-different-app          Deploys a different app using the --app command, instead of the one specified in the “.gadget/sync.json” file\n      --allow-problems               Deploys despite any existing issues found in the app (gelly errors, typescript errors etc.)\n      --allow-data-delete            Deploys even if it results in the deletion of data in production\n      --allow-charges                Deploys even if it results in additional charges to your plan\n\nExamples\n      Deploys code from the staging environment of a myBlog\n      $ ggt deploy -a myBlog -from staging\n```\n\n### `ggt status`\n\n```sh-session\n$ ggt status -h\nShows file changes since last sync (e.g. $ggt dev, push, deploy etc.)\n\nUsage\n      ggt status\n```\n\n### `ggt push`\n\n```sh-session\n$ ggt push -h\nPushes your local files to your environment directory.\n\nThis command first tracks changes in your environment directory since the last sync.\nIf changes are detected, you will be prompted to discard them or abort the push.\n\nUsage\n      ggt push [options]\n\nOptions\n      -a, --app \u003capp_name\u003e           Selects the app to push local changes to. Default set on \".gadget/sync.json\"\n      -e, --env, --to \u003cenv_name\u003e     Selects the environment to push local changes to. Default set on \".gadget/sync.json\"\n      --force                        Forces a push by discarding any changes made on your environment directory since last sync\n      --allow-different-directory    Pushes changes from any local directory with existing files, even if the \".gadget/sync.json\" file is missing\n      --allow-different-app          Pushes changes to an app using --app command, instead of the one in the “.gadget/sync.json” file\n\nExamples\n      Push all local changes to the main environment by discarding any changes made on main\n      $ ggt push --env main --force\n```\n\n### `ggt pull`\n\n```sh-session\n$ ggt pull -h\nPulls your environment files to your local directory.\n\nThis command first tracks changes in your local directory since the last sync. If changes are\ndetected, you will be prompted to discard them or abort the pull.\n\nUsage\n      ggt pull [options]\n\nOptions\n      -a, --app \u003capp_name\u003e           Selects the app to pull your environment changes from. Default set on \".gadget/sync.json\"\n      -e, --env, --from \u003cenv_name\u003e   Selects the environment to pull changes from. Default set on \".gadget/sync.json\"\n      --force                        Forces a pull by discarding any changes made on your local directory since last sync\n      --allow-different-directory    Pulls changes from any environment directory, even if the \".gadget/sync.json\" file is missing\n      --allow-different-app          Pulls changes to a different app using --app command, instead of the one in the “.gadget/sync.json” file\n\nExamples\n      Pull all development environment changes by discarding any changes made locally\n      $ ggt pull --env development --force\n```\n\n### `ggt add`\n\n```sh-session\n$ ggt add -h\nAdds models, fields, actions and routes to your app.\n\nThis command first performs a sync to ensure that your local and environment directories match, changes are tracked since last sync.\nIf any conflicts are detected, they must be resolved before adding models, fields, actions or routes.\n\nUsage\n  ggt add model \u003cmodel_name\u003e [field_name:field_type ...]\n\n  ggt add action [CONTEXT]/\u003caction_name\u003e\n  CONTEXT:Specifies the kind of action. Use \"model\" for model actions otherwise use \"action\".\n\n  ggt add route \u003cHTTP_METHOD\u003e \u003croute_path\u003e\n\n  ggt add field \u003cmodel_path\u003e/\u003cfield_name\u003e:\u003cfield_type\u003e\n\nOptions\n  -e, --env \u003cenv_name\u003e Selects the environment to add to. Default set on \".gadget/sync.json\"\n\nExamples\n  Add a new model 'post' with out fields:\n  $ ggt add model modelA\n\n  Add a new model 'post' with 2 new 'string' type fields 'title' and 'body':\n  $ ggt add model post title:string body:string\n\n  Add a new 'boolean' type field 'published' to an existing model\n  ggt add field post/published:boolean\n\n  Add new action 'publish' to the 'post' model:\n  ggt add action model/post/publish\n\n  Add a new action 'audit'\n  ggt add action action/audit\n\n  Add a new route 'howdy'\n  ggt add route GET howdy\n\n  Clone the `development` environment into a new `staging` environment\n  ggt add environment staging --environment development\n```\n\n### `ggt open`\n\n```sh-session\n$ ggt open -h\nThis command opens a specific Gadget page in your browser, allowing you to directly access\nvarious parts of your application's interface such as logs, permissions, data views, or\nschemas.\n\nUsage\n      ggt open [LOCATION] [model_name] [--show-all] [options]\n\n      LOCATION: specifies the part of Gadget to open, by default it'll open the apps home page:\n\n      + logs                Opens logs\n      + permissions         Opens permissions\n      + data                Opens data editor for a specific model\n      + schema              Opens schema editor for a specific model\n\nOptions\n      -a, --app \u003capp_name\u003e   Selects the application to open in your browser. Default set on \".gadget/sync.json\"\n      -e, --env \u003cenv_name\u003e   Selects the environment to open in your browser. Default set on \".gadget/sync.json\"\n      --show-all             Shows all schema, or data options by listing your available models\n\nExamples\n      Opens editor home\n      $ ggt open\n\n      Opens logs\n      $ ggt open logs\n\n      Opens permissions\n      $ ggt open permissions\n\n      Opens data editor for the 'post' model\n      $ ggt open data post\n\n      Opens schema for 'post' model\n      $ ggt open schema post\n\n      Shows all models available in the data editor\n      $ ggt open data -show-all\n\n      Shows all models available in the schema viewer\n      $ ggt open schema --show-all\n\n      Opens data editor for 'post' model of app 'myBlog' in the 'staging' environment\n      $ ggt open data post --app myBlog --env staging\n```\n\n### `ggt list`\n\n```sh-session\n$ ggt list -h\nList the apps available to the currently logged-in user.\n\nUsage\n      ggt list\n```\n\n### `ggt login`\n\n```sh-session\n$ ggt login -h\nLog in to your account.\n\nUsage\n      ggt login\n```\n\n### `ggt logout`\n\n```sh-session\n$ ggt logout -h\nLog out of your account.\n\nUsage\n      ggt logout\n```\n\n### `ggt logs`\n\n```sh-session\n$ ggt logs -h\nStreams the logs for an application to.\n\nUsage\n      ggt logs [options]\n\nOptions\n      -ll, --log-level \u003clevel\u003e       Sets the log level for incoming application logs (default: info)\n      --my-logs                      Only outputs user sourced logs and exclude logs from the Gadget framework\n      --json                         Output logs in JSON format\n      -a, --app \u003capp_name\u003e           Selects the app to pull your environment changes from. Default set on \".gadget/sync.json\"\n      -e, --env, --from \u003cenv_name\u003e   Selects the environment to pull changes from. Default set on \".gadget/sync.json\"\n\nExamples\n      Stream all user logs from your development environment\n      $ ggt logs --env development --my-logs\n\n      Stream all logs from your production environment in JSON format\n      $ ggt logs --env production --json\n```\n\n### `ggt debugger`\n\n```sh-session\n$ ggt debugger -h\nStart a Chrome DevTools Protocol proxy server that connects to the Gadget debugger.\nThis allows you to debug your Gadget app using VS Code, Chrome DevTools, or any other\nCDP-compatible debugger client.\n\nUsage\n      $ ggt debugger [DIRECTORY] [options]\n\n      DIRECTORY: The directory containing your Gadget app (default: current directory)\n\nOptions\n      -e, --env \u003cenv_name\u003e        Selects the environment to debug. Default set on \".gadget/sync.json\"\n      -p, --port \u003cport\u003e           Local port for the inspector proxy (default: 9229)\n      --configure \u003ceditor\u003e        Configure debugger for vscode, cursor\n\nExamples\n      start debugger proxy for current environment\n      $ ggt debugger\n\n      use a custom port\n      $ ggt debugger --port 9230\n\n      debug a specific app and environment\n      $ ggt debugger --app myApp --env development\n\n      configure VS Code debugger\n      $ ggt debugger --configure vscode\n```\n\n### `ggt whoami`\n\n```sh-session\n$ ggt whoami -h\nShow the name and email address of the currently logged in user.\n\nUsage\n      ggt whoami\n```\n\n### `ggt configure`\n\n```sh-session\n$ ggt configure -h\nMake changes to the configured defaults. This allows you to set an option on every ggt command by default without\nneeding to set a flag on every command.\n\nUsage\n  ggt configure show\n\n  ggt configure change\n\n  ggt configure clear\n```\n\n### `ggt version`\n\n```sh-session\n$ ggt version -h\nPrint this version of ggt.\n\nUsage\n      ggt version\n\nUpdating ggt\n      When there is a new release of ggt, running ggt will show you a message letting you\n      know that an update is available.\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgadget-inc%2Fggt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgadget-inc%2Fggt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgadget-inc%2Fggt/lists"}