Skip to main content

A programming language for the cloud

Wing combines infrastructure and runtime code in one language, enabling developers to stay in their creative flow, and to deliver better software, faster and more securely.

Sparks the imagination of thousands

New language for a new programming model

Build cloud applications with cloud primitives and test locally on your machine. Harness the power of the entire cloud ecosystem and reduce the time it takes to test cloud applications from minutes to seconds.

  • Serverless workloads
  • Extensible
  • Compile/runtime APIs
  • Local testing

Develop distributed serverless applications in the cloud.

bring cloud;

// define an API
let api = new cloud.Api();
// define storage
let store = new cloud.Bucket();

// create routes for the API
api.get("/employees", inflight (req) => {
let result = MutJson [];
let var i = 0;
for employee in store.list() {
result.setAt(i, employee);
i = i + 1;
}
return cloud.ApiResponse {
status: 200,
body: Json.stringify(result)
};
});

Build distributed systems that fully leverage the power of the cloud

Wing gives application developers and platform enigneers the tools they need to build and deploy distributed systems without the need to know all the details of the underlying cloud infrastructure.

Wing Cloud Library

A library of classes that represent common resources for building cloud applications including Queues, Functions, APIs and more.

Explore the Wing Cloud Library

Cross-cloud support

Deploy your applications to AWS, Azure, or Google Cloud with Wing, which abstracts cloud provider differences, letting you focus on your application.

Learn more about Wing platforms

Extensibility

Wing is built for extensibility, enabling integration with any IaC resources and customization via powerful compiler plugins.

Explore the language reference

Unify runtime and compile time code

Wing unifies execution phases with a single programming model using preflight and inflight code concepts.

Understand preflight and inflight code

Develop custom platforms

Create custom platforms to support unique cloud providers, optimize deployments, or integrate with enterprise systems.

Create a custom platform

Bring the cloud to your machine

Enhance your experience with the Wing Console by exploring and interacting with Wing applications on the local cloud simulator.

Get started with the Wing Console

Deploy to any cloud

Wing platforms specify how and where your application is deployed. They determine both the cloud environment and the provisioning engine that the code will be deployed with.

1. Write your code
wing.w
bring cloud;

let inputs = new cloud.Bucket() as "Inputs";
let processed = new cloud.Bucket() as "Outputs";

let counter = new cloud.Counter();

new cloud.Function(inflight () => {
// Process each object in the input bucket
for key in inputs.list() {
// Get the object data from storage
let contents = inputs.getJson(key);
// Extract some information
let cInfo = contents["customerInfo"];
// Atomically increment a counter
let index = counter.inc();
// Store the processed information
processed.putJson("processed-{index}.json", cInfo);
}
});
2. Compile to a Wing platform
AWS with Terraform
AWS with CDK
Azure with Terraform
GCP with Terraform
3. Generated output
AWS Terraform (main.tf.json)
{
"provider": {
"aws": [{}]
},
"resource": {
"aws_cloudwatch_log_group": {
"Queue-SetConsumer0_CloudwatchLogGroup_56C2891C": {
"//": {
"metadata": {
"path": "root/Default/Default/Queue-SetConsumer0/CloudwatchLogGroup",
"uniqueId": "Queue-SetConsumer0_CloudwatchLogGroup_56C2891C"
}
},
"name": "/aws/lambda/Queue-SetConsumer0-c83c303c",
"retention_in_days": 30
}
},
"aws_dynamodb_table": {
"Counter": {
"//": {
"metadata": {
"path": "root/Default/Default/Counter/Default",
"uniqueId": "Counter"
}
},
"attribute": [
{
"name": "id",
"type": "S"
}
],
"billing_mode": "PAY_PER_REQUEST",
"hash_key": "id",
"name": "wing-counter-Counter-c824ef62"
}
},
"aws_iam_role": {
"Queue-SetConsumer0_IamRole_7F9ED9ED": {
"//": {
"metadata": {
"path": "root/Default/Default/Queue-SetConsumer0/IamRole",
"uniqueId": "Queue-SetConsumer0_IamRole_7F9ED9ED"
}
},
"assume_role_policy": "{"Version":"2012-10-17","Statement":[{"Action":"sts:AssumeRole","Principal":{"Service":"lambda.amazonaws.com"},"Effect":"Allow"}]}"
}
},
"aws_iam_role_policy": {
"Queue-SetConsumer0_IamRolePolicy_0299B5AB": {
"//": {
"metadata": {
"path": "root/Default/Default/Queue-SetConsumer0/IamRolePolicy",
"uniqueId": "Queue-SetConsumer0_IamRolePolicy_0299B5AB"
}
},
"policy": "{"Version":"2012-10-17","Statement":[{"Action":["sqs:ReceiveMessage","sqs:ChangeMessageVisibility","sqs:GetQueueUrl","sqs:DeleteMessage","sqs:GetQueueAttributes"],"Resource":["${aws_sqs_queue.Queue.arn}"],"Effect":"Allow"},{"Action":["s3:PutObject*","s3:Abort*"],"Resource":["${aws_s3_bucket.Bucket.arn}","${aws_s3_bucket.Bucket.arn}/*"],"Effect":"Allow"},{"Action":["dynamodb:UpdateItem"],"Resource":["${aws_dynamodb_table.Counter.arn}"],"Effect":"Allow"}]}",
"role": "${aws_iam_role.Queue-SetConsumer0_IamRole_7F9ED9ED.name}"
}
},
"aws_iam_role_policy_attachment": {
"Queue-SetConsumer0_IamRolePolicyAttachment_4A4C5C5D": {
"//": {
"metadata": {
"path": "root/Default/Default/Queue-SetConsumer0/IamRolePolicyAttachment",
"uniqueId": "Queue-SetConsumer0_IamRolePolicyAttachment_4A4C5C5D"
}
},
"policy_arn": "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole",
"role": "${aws_iam_role.Queue-SetConsumer0_IamRole_7F9ED9ED.name}"
}
},
"aws_lambda_event_source_mapping": {
"Queue_EventSourceMapping_8332F7DC": {
"//": {
"metadata": {
"path": "root/Default/Default/Queue/EventSourceMapping",
"uniqueId": "Queue_EventSourceMapping_8332F7DC"
}
},
"batch_size": 1,
"event_source_arn": "${aws_sqs_queue.Queue.arn}",
"function_name": "${aws_lambda_function.Queue-SetConsumer0.function_name}",
"function_response_types": [
"ReportBatchItemFailures"
]
}
},
"aws_lambda_function": {
"Queue-SetConsumer0": {
"//": {
"metadata": {
"path": "root/Default/Default/Queue-SetConsumer0/Default",
"uniqueId": "Queue-SetConsumer0"
}
},
"architectures": [
"arm64"
],
"environment": {
"variables": {
"BUCKET_NAME_1357ca3a": "${aws_s3_bucket.Bucket.bucket}",
"DYNAMODB_TABLE_NAME_6cb5a3a4": "${aws_dynamodb_table.Counter.name}",
"NODE_OPTIONS": "--enable-source-maps",
"WING_FUNCTION_NAME": "Queue-SetConsumer0-c83c303c",
"WING_TARGET": "tf-aws"
}
},
"function_name": "Queue-SetConsumer0-c83c303c",
"handler": "index.handler",
"logging_config": {
"log_format": "JSON"
},
"memory_size": 1024,
"publish": true,
"role": "${aws_iam_role.Queue-SetConsumer0_IamRole_7F9ED9ED.arn}",
"runtime": "nodejs20.x",
"s3_bucket": "${aws_s3_bucket.Code.bucket}",
"s3_key": "${aws_s3_object.Queue-SetConsumer0_S3Object_2AD0A795.key}",
"timeout": "${aws_sqs_queue.Queue.visibility_timeout_seconds}",
"vpc_config": {
"security_group_ids": [
],
"subnet_ids": [
]
}
}
},
"aws_s3_bucket": {
"Bucket": {
"//": {
"metadata": {
"path": "root/Default/Default/Bucket/Default",
"uniqueId": "Bucket"
}
},
"bucket_prefix": "bucket-c88fdc5f-",
"force_destroy": false
},
"Code": {
"//": {
"metadata": {
"path": "root/Default/Code",
"uniqueId": "Code"
}
},
"bucket_prefix": "code-c84a50b1-"
}
},
"aws_s3_object": {
"Queue-SetConsumer0_S3Object_2AD0A795": {
"//": {
"metadata": {
"path": "root/Default/Default/Queue-SetConsumer0/S3Object",
"uniqueId": "Queue-SetConsumer0_S3Object_2AD0A795"
}
},
"bucket": "${aws_s3_bucket.Code.bucket}",
"key": "asset.c83c303c1266dbb851c70f1219bd171134fd688af4.2e29a6166bb14ecb333ff4191f26b302.zip",
"source": "assets/Queue-SetConsumer0_Asset_370CBC69/0AE82898D5DFE9649D2A0B82943882EB/archive.zip"
}
},
"aws_sqs_queue": {
"Queue": {
"//": {
"metadata": {
"path": "root/Default/Default/Queue/Default",
"uniqueId": "Queue"
}
},
"message_retention_seconds": 3600,
"name": "Queue-c822c726",
"visibility_timeout_seconds": 30
}
}
},
"terraform": {
"backend": {
"local": {
"path": "./terraform.tfstate"
}
},
"required_providers": {
"aws": {
"source": "aws",
"version": "5.56.1"
}
}
}
}

Local simulation

Simulate and test cloud applications locally before deploying to the cloud.

App screenshot
Developer experience
User-friendly interface to view, explore and interact with your Wing applications running on the local cloud simulator.
Interact with resources
Send messages to queues, download files from buckets, make API requests and more.
Create tunnels for APIs
Create secure tunnels to expose your API to the internet for testing and sharing.
Running tests
Run tests of your Wing applications and view the results in the Wing Console.
Logs
Debug and view logs of your Wing applications running on the local cloud simulator.
Wing it
Get the console up and running with a single command: wing it.

If Dev and Ops Had a Baby — It Would Be Called Winglang

Winglang takes a batteries-included approach, which means that the toolchain is shipped with everything a developer would need, such as a testing framework, an IDE extension, a compiler and a cloud simulator. It’s a one-stop shop. Wing interoperates naturally with any NPM module and with JavaScript and TypeScript code; we decided to have Winglang compile to JavaScript because it’s the biggest ecosystem on the planet and is very popular in cloud development...

Wing featured in Hype Cycle for Platform Engineering, 2024

Infrastructure From Code (IFC) is on the rise. IFC tools like Winglang improve the development and infrastructure agility by enabling infrastructure to change at the same pace as applications — developers focus on business logic and application architecture while infrastructure code is autogenerated based on organizational standards...

Top 5 Startups to Watch for Enterprise Architects

Wing launched out of stealth with $20 Million in funding from big-name investors last year. They have a well-decorated founder, Elad Ben-Israel (CEO), who is the creator of the AWS Cloud Development Kit (CDK) and other popular open-source projects in the infrastructure space and who has recently been recognized as one of the most innovative CEOs in 2024...

Thoughtworks Technology Radar

We’re seeing a lot of movement in the infrastructure-as-code (IaC) space with tools like Winglang emerging. Winglang takes a different approach to defining infrastructure and run-time behavior. It provides high-level abstractions over platform specifics provided by tools such as CloudFormation, Terraform, Pulumi and Kubernetes...

Keep up with Wing

We are working towards 1.0 release. Subscribe to our newsletter to get updates on our progress.

Monthly updates
Get packaged updates directly into your inbox. New features, bug fixes, and more.
No spam
We will keep the content focused on Wing and related topics. No spam, ever.