CLI User Manual
The Wing CLI is a command line interface for Wing. It is used to compile, test, and run Wing programs, and we hope it will become your best friend.
Installation
The CLI is distributed as an npm package which can be installed globally using:
npm i -g winglang
The usage is:
$ wing <command> <options>
Run: wing run / wing it
You can use the run command (or it) when you want to interact with your Wing program in the
Wing Console.
Usage:
$ wing run|it [<ENTRYPOINT.w> | <PROGRAM.wsim>]
The run command takes a single positional argument which can be one of:
- ENTRYPOINT.wis an entrypoint for a Wing program (source code). In this case, Wing Console will watch for changes and will automatically recompile your program when the source code change. The entrypoint is optional if there's a single- .wfile in the working directory (in which case you can just type- wing itand it will run this file).
- PROGRAM.wsimis the output of- wing compile -t sim
Compile: wing compile
You can use the compile command to compile a Wing program into a deployable artifact.
$ wing compile --target <TARGET> <ENTRYPOINT.w>
The ENTRYPOINT.w specifies the entrypoint file to compile (e.g. hello.w).
The --target option is required, and specifies the target platform to compile for. The
following targets are supported:
- sim- Wing Simulator
- tf-aws- Terraform/AWS
- tf-azure- Terraform/Azure
sim Target
The Wing program is going to be compiled for the Wing simulator (.wsim).
Usage:
$ wing compile --target sim ENTRYPOINT.w
The output will be under target/ENTRYPOINT.wsim and can be opened in one two ways:
- Interactively using Wing Console using wing it target/hello.wsim.
- Programmatically using the Simulatorclass (instructions).
tf-aws Target
Compiles your program for Terraform and run on AWS.
Usage:
$ wing compile --target tf-aws ENTRYPOINT.w
The output includes both a Terraform configuration file (under target/cdktf.out/stacks/root) and
JavaScript bundles that include inflight code that executes on compute platform such as AWS Lambda.
You can deploy your stack to AWS using Terraform (instructions).
tf-azure Target
Compiles your program for Terraform and run on Azure.
For example:
$ export AZURE_LOCATION="East US"
$ wing compile --target tf-azure hello.w
The variable AZURE_LOCATION is required and indicates the deployment
location of your
stack.
The output includes both a Terraform configuration file (under target/cdktf.out/stacks/root) and
JavaScript bundles that include inflight code that executes on compute platform such as Azure
Functions.
You can deploy your stack to Azure using Terraform (example).
tf-gcp Target
Compiles your program for Terraform and run on Google Cloud Platform.
For example:
$ export GOOGLE_PROJECT_ID="my-project"
$ export GOOGLE_STORAGE_LOCATION="US"
$ wing compile --target tf-gcp hello.w
The variable GOOGLE_STORAGE_LOCATION is required and indicates the deployment
location of all storage
resources (such as buckets and queues). The variable GOOGLE_PROJECT_ID is required and indicates
the project ID of your stack.
The output includes both a Terraform configuration file (under target/cdktf.out/stacks/root) and
JavaScript bundles that include inflight code that executes on compute platform such as Google Cloud Functions.
You can deploy your stack to GCP using Terraform (example).
awscdk Target
Compiles your program for AWS CDK with CloudFormation to run on AWS.
Usage:
$ export CDK_STACK_NAME="my-project"
$ wing compile --target awscdk app.w
The output includes both a AWS-CDK configuration file (under target/<file name>.awscdk) and
JavaScript bundles that include inflight code that executes on compute platforms such as AWS Lambda.
You can deploy your stack to AWS by installing the AWS CDK Toolkit and running:
$ cdk deploy --app target/app.awscdk
Plugins
Additionally the compile command can be provided an optional list of plugins to use during the compilation process.
$ wing compile --target tf-aws ENTRYPOINT.w --plugins PLUGIN1 PLUGIN2
Each plugin can be an absolute paths or relative path to a JavaScript file. For more on how to create a plugin, see Compiler Plugins.
Test: wing test
The wing test command can be used to compile and execute tests in Wing applications.
Usage:
$ wing test ENTRYPOINT...
This will compile each entrypoint, and for each entrypoint it will invoke all cloud.Functions with
that start with test: (or simply called test).
For example (test_bucket.w):
bring cloud;
let b = new cloud.Bucket();
new cloud.Function(inflight (_: str) => {
  assert(b.list().length == 0);
  b.put("hello.txt", "world");
  assert(b.list().length == 1);
}) as "test:put";
new cloud.Function(inflight (_: str) => {
  b.put("hello.txt", "world");
  assert(b.get("hello.txt") == "world");
}) as "test:get";
Now, if we run the following command:
$ wing test test_bucket.w
pass | test_bucket.w | root/test:get
pass | test_bucket.w | root/test:put
We will see that both functions were invoked and that the tests passed.