{"id":41363517,"url":"https://github.com/platform9/appctl","last_synced_at":"2026-01-23T08:10:30.170Z","repository":{"id":42573417,"uuid":"432069542","full_name":"platform9/appctl","owner":"platform9","description":"Run apps, Not Clusters. Deploy apps on kubernetes in seconds, with no clusters required","archived":false,"fork":false,"pushed_at":"2022-03-31T09:27:17.000Z","size":4861,"stargazers_count":2,"open_issues_count":3,"forks_count":0,"subscribers_count":16,"default_branch":"master","last_synced_at":"2024-06-21T14:04:37.295Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://platform9.com/appctl/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/platform9.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-11-26T05:56:08.000Z","updated_at":"2024-06-21T14:04:37.296Z","dependencies_parsed_at":"2022-09-15T20:50:20.784Z","dependency_job_id":null,"html_url":"https://github.com/platform9/appctl","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/platform9/appctl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/platform9%2Fappctl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/platform9%2Fappctl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/platform9%2Fappctl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/platform9%2Fappctl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/platform9","download_url":"https://codeload.github.com/platform9/appctl/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/platform9%2Fappctl/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28684015,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-23T05:48:07.525Z","status":"ssl_error","status_checked_at":"2026-01-23T05:48:07.129Z","response_time":59,"last_error":"SSL_read: 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":[],"created_at":"2026-01-23T08:10:29.433Z","updated_at":"2026-01-23T08:10:30.165Z","avatar_url":"https://github.com/platform9.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# appctl\n**Run apps, Not Clusters.** Deploy apps on kubernetes in seconds, with no clusters required. Check for more information at https://platform9.com/appctl/\n\n* Read the docs: [getting started with appctl](https://platform9.com/docs/appctl/getting-started)\n\n\n# Purpose\n* `appctl` is a CLI that can be installed on Windows, MacOS and Linux, which connects to a Platform9 Managed Kubernetes Cluster running in AWS and enables users to deploy containerized applications in seconds.\n\n## A better way to run apps on K8s\n*  `appctl` exposes the high value app orchestration capabilities available from Kubernetes and k-native, while hiding infrastructure complexity. \n\n* As a result, it is much faster to run apps while also running them more cost effectively in the cloud.\n\n# How `appctl` works\n![flow-diagram](images/graphic_how-appctl-works.png)\n\n# Pre-requisites\nThe CLI currently supports\n* Linux (64 bit)\n* Windows (64 bit)\n* MacOS (64 bit)\n\n\n# Installation\n- Downloading the CLI can be done from [appctl website](https://platform9.com/appctl/) and from the command line. \n\nTo install from the command line of host machine, run the following commands to download the appctl CLI and give executable permission to use it.\n\n## Linux\n```sh\ncurl -O https://pmkft-assets.s3.us-west-1.amazonaws.com/appctl/linux/appctl\n\nchmod +x appctl\n```\n\n## Mac\n```sh\ncurl -O https://pmkft-assets.s3.us-west-1.amazonaws.com/appctl/macos/appctl\n\nchmod +x appctl\n```\n\n## Windows\n```sh\ncurl -O https://pmkft-assets.s3.us-west-1.amazonaws.com/appctl/windows/appctl\n```\nAfter successfull download give the executable permission to `appctl`.\n\nOnce the CLI is successfully downloaded, run the Login command to authenticate to Platform9 and deploy applications.\n\n# Usage\n\n## Appctl Commands\nBelow are supported commands for `appctl`.\n\n```sh\n% ./appctl --help\n\nCLI to deploy \u0026 manage apps in Platform9 environment.\nLogin first using $appctl login to use available commands.\n\nUsage:\n  appctl [command]\n\nAvailable Commands:\n  delete      Delete an existing app\n  deploy      Deploy an app\n  describe    Provide detailed app information in json format\n  help        Help about any command\n  list        Show all the running apps\n  login       Login using Google account/Github account to use appctl\n  version     Current version of appctl CLI being used\n\nFlags:\n  -h, --help      help for appctl\n\nUse \"appctl [command] --help\" for more information about a command.\n```\n\n## Login \nTo appctl, first login by running ```./appctl login```\n\n```sh\n% ./appctl login --help\nLogin using Google account/Github account to use appctl\n\nUsage:\n  appctl login [flags]\n\nExamples:\n\n  # Login using Google account/Github account to use appctl.\n  appctl login\n \n\nFlags:\n  -h, --help   help for login\n\n```\n\n**Example Login**\n```sh\n% ./appctl login\nStarting login process.\nDevice verification is required to continue login.\nYour Device Confirmation code is: TX2KW-BNPW6%\n- Waiting for login to complete in browser... \n✔ Successfully Logged in!!\n```\n\n**Interactive login:** The login command requires internet access and a web browser.\n\nAppctl login is a two step process:\n\n1. Device Verification: First verify where appctl is being run.\n2. Login: Login using one of the supported federated identities (Google and Github).\n\nWhen the command ```appctl login``` is run, a browser window will automatically open and prompt for the device confirmation code.\n\nConfirm the device code displayed in the browser is identical to the code displayed by appctl, if it is correct click \"Confirm\" and the browser will redirected to _appctl log in _page.\n\n**Appctl device confirmation**\n\n![appctl_device_confirmation](images/appctl_device_confirmation.png)\n\nNext, login using **Google or Github account**\n\n![login_using_google_github](images/Login_using_google_github_account.png)\n\nNow on successful log in, appctl can be used to deploy applications.\n\n## Version\n\n  This command is used to get the current version of the CLI\n```sh\n% ./appctl version\n\nappctl version: v1.1\n\n```\n\n## Deploy\n\nTo deploy an app, run ```./appctl deploy```\n\nThe deploy command will deploy the specified container image using the provided name into Platform9 and automatically provision a fully qualified domain with a unique port to access the application.\n\n```sh\n% ./appctl deploy --help\nDeploy an app\n\nUsage:\n  appctl deploy [flags]\n\nExamples:\n\n  # Deploy an app using app-name and container image (public registry path)\n  # Assumes the container has a server that will listen on port 8080\n  appctl deploy -n \u003cappname\u003e -i gcr.io/knative-samples/helloworld-go\n  \n  # Deploy an app using app-name and container image (private registry path)\n  # Assumes the container has a server that will listen on port 8080\n  appctl deploy -n \u003cappname\u003e -i \u003cprivate registry image path\u003e -u \u003ccontainer registry username\u003e -P \u003ccontainer registry password\u003e\n\n  # Deploy an app using app-name and container image, and pass environment variables.\n  # Assumes the container has a server that will listen on port 8080\n  appctl deploy -n \u003cappname\u003e -i \u003cimage\u003e -e key1=value1 -e key2=value2\n\n  # Deploy an app using app-name, container image and pass environment variables and set port where application listens on.\n  appctl deploy -n \u003cappname\u003e -i \u003cimage\u003e -e key1=value1 -e key2=value2 -p \u003cport\u003e\n  Ex: appctl deploy -n hello -i gcr.io/knative-samples/helloworld-go -e TARGET=\"appctler\" -p 7893\n\n# Deploy an app using app-name, container image and pass environment variables through a file and set port where application listens on.\n  appctl deploy -n \u003cappname\u003e -i \u003cimage\u003e -f \u003cenv-file-path\u003e -p \u003cport\u003e\n  Ex: appctl deploy -n hello -i gcr.io/knative-samples/helloworld-go -f /Users/user/variables.env -p 7893\n\n  # Deploy an app using app-name, container image and pass environment variables through a file and pass through command line and set port where application listens on.\n  appctl deploy -n \u003cappname\u003e -i \u003cimage\u003e -f \u003cenv-file-path\u003e -e key1=value1 -e key2=value2 -p \u003cport\u003e\n  Ex: appctl deploy -n hello -i gcr.io/knative-samples/helloworld-go -f /Users/user/variables.env -e TARGET=\"appctler\" -p 7893\n\nFlags:\n  -n, --app-name string   Name of the app to be deployed \n                          (lowercase alphanumeric characters, '-' or '.', must start with alphanumeric characters only)\n  -e, --env stringArray   Environment variable to set, as key=value pair\n  -h, --help              help for deploy\n  -i, --image string      Container image of the app (public registry path)\n  -P, --password string   Password of private container registry\n  -p, --port string       The port where app server listens, set as '--port \u003cport\u003e'\n  -u, --username string   Username of private container registry\n  -f, --envPath string    Path to the environment variables file. \n                          (Values in the .env file should be formatted as a line separated Key=Value pair)\n```\n\n\n- **Example Deploy**\n```sh\n% ./appctl deploy --app-name \u003cname\u003e --image \u003cdocker-image path\u003e\n\nExample:\n/appctl deploy --app-name hello --image gcr.io/knative-samples/helloworld-go\n```\n\n\n- **Specifying Ports**\n\nIf application server listens on a specific port, then specify that while deploying the app using ```--port``` flag.\n\n```sh \n% ./appctl deploy --app-name \u003cname\u003e --image \u003cdocker-image path\u003e --port \u003cport-value\u003e\n\nExample:\n./appctl deploy --app-name hello --image gcr.io/knative-samples/helloworld-go --port 7893\n```\n\n\n- **Using Environment Variables**\n```sh\n% ./appctl deploy --app-name \u003cname\u003e --image \u003cdocker-image path\u003e --env key1=value1\n\nExample:\n./appctl deploy --app-name hello --image gcr.io/knative-samples/helloworld-go --env TARGET=appctler\n```\n\nAppctl supports multiple ```--env``` variables\n\n```sh\n% ./appctl deploy --app-name \u003cname\u003e --image \u003cdocker-image path\u003e --env key1=value1 --env key2=value2\n```\n\nAppctl supports variables passed through a env file\n\n```sh\n% ./appctl deploy --app-name \u003cname\u003e --image \u003cdocker-image path\u003e -f \u003cenv-file path\u003e\n\nExample:\n./appctl deploy -n hello -i gcr.io/knative-samples/helloworld-go -f /Users/user/variables.env\n\nA sample .env file would look like this: \nkey1=value1\nkey2=value2\n```\n\nAppctl supports variables from both envFile and from command line\n\n```sh\n% ./appctl deploy --app-name \u003cname\u003e --image \u003cdocker-image path\u003e -f \u003cenv-file path\u003e --env key1=value1 --env key2=value2\n\nExample:\n./appctl deploy -n hello -i gcr.io/knative-samples/helloworld-go -f /Users/user/variables.env --env TARGET=appctler\n```\n\n\n## List\n\nTo list all the running apps.\n\n```sh\n% ./appctl list --help \nShow all the running apps\n\nUsage:\n  appctl list [flags]\n\nExamples:\n\n  # Get all the apps deployed.\n  appctl list\n \n\nFlags:\n  -h, --help   help for list\n```\n\n- **List Example**\n```sh \n./appctl list\nNAME           URL                                                IMAGE                                       READY  CREATIONTIME  REASON\ncj-example  http://cj-example.cjones4s95lk.18.224.208.55.sslip.io  mcr.microsoft.com/dotnet/samples:aspnetapp  True  2021-12-21T21:52:58Z  nil\n```\n\n## Describe\n\nDescribe can be used to display the applications current state.\n\n```sh\n% ./appctl describe --help\nProvide detailed app information in json format\n\nUsage:\n  appctl describe [flags]\n\nExamples:\n\n  # Get detailed information about an app deployed through app-name in json format.\n  appctl describe -n \u003cappname\u003e\n \n\nFlags:\n  -n, --app-name string   Name of app to be described\n  -h, --help              help for describe\n```\n\n- **Describe Example**\n```sh\n% ./appctl describe -n cj-example\n```\n\n## Delete\n\n```sh\n% ./appctl delete --help\nDelete an existing app\n\nUsage:\n  appctl delete [flags]\n\nExamples:\n\n  # Delete an app using app-name.\n  appctl delete -n \u003cappname\u003e\n\n  # Force delete an app using app-name and force flag.\n  appctl delete -n \u003cappname\u003e -f\n \n\nFlags:\n  -n, --app-name string   Provide the name of app to be deleted\n  -f, --force             To force delete an app\n  -h, --help              help for delete\n```\n\n- **Delete Example**\n```sh\n% ./appctl delete -n asp\nAre you sure you want to delete app (y/n)? y\nSuccessfully deleted the app: cj-example\n```\n\n# Building `appctl` locally\n\n## Prerequisites\n- [`git`](https://git-scm.com/downloads)\n- [`make`](https://www.gnu.org/software/make/)\n- [`golang 1.17 or later`](https://go.dev/dl/)\n\n## Building\nClone the repository, navigate to the cloned repository and download the dependencies using `go mod download`. Before building, ensure following environment variables are set either by following the instructions in `.env.dev` or by setting them as environment variables.\n1. APPURL\n1. DOMAIN\n1. CLIENTID\n1. GRANT_TYPE\n1. APPCTL_SEGMENT_WRITE_KEY (optional)\n```sh\n# For setting up app-controller locally, visit: https://github.com/platform9/app-controller\nAPPURL := \u003cYOUR_APP_CONTROLLER_URI\u003e\n# prebuilt binary uses auth0 for authentication\nDOMAIN := \u003cYOUR_AUTH0_APPLICATION_DOMAIN\u003e\n# auth0 client id\nCLIENTID := \u003cYOUR_AUTH0_CLIENT_ID\u003e\n# prebuilt binary uses grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Adevice_code\nGRANT_TYPE := \u003cGRANT_TYPE\u003e\n# optional, used for telemetry\nAPPCTL_SEGMENT_WRITE_KEY := \u003cYOUR_SEGMENT_WRITE_KEY\u003e\n```\n`appctl` can be configured to work with a local or a hosted `app-controller` service installation. For more details on setting up `app-controller` locally, check the GitHub repository [here](https://github.com/platform9/app-controller).\n\nRun the appropriate `make` target:\n- Linux\n\n  ```sh\n  make build-linux64\n  ```\n- Windows\n  ```sh\n  make build-win64\n  ```\n- MacOS\n  ```sh\n  make build-mac\n  ```\nTo generate all the binaries run the default target. The executables are placed in `bin` directory.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplatform9%2Fappctl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fplatform9%2Fappctl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplatform9%2Fappctl/lists"}