Installation
Prerequisite
- Node.js v20 or later
Install
The Wing CLI is distributed via npm:
npm install -g winglang
Verify your installation:
wing -V
IDE Extension
Wing has extended support for two IDEs. They provide syntax highlighting, completions, go-to-definition, etc. and embedded Wing Console support:
To use Wing in other IDEs, there are a few tools available to help:
- Language server - Running
wing lsp
serves the official language server - TextMate grammar - For syntax highlighting
- tree-sitter grammar and queries - For syntax highlighting and more
- Syntax Highlighting for GitHub (Chrome extension) - Adds syntax highlighting to various locations within GitHub
Create your project
First let's create an empty directory for your project:
mkdir hello-wing
cd hello-wing
You can use the CLI to bootstrap a new project: Use the new
command and then modify main.w
to have the following:
wing new empty
bring cloud;
// define a queue, a bucket and a counter
let bucket = new cloud.Bucket();
let counter = new cloud.Counter(initial: 1);
let queue = new cloud.Queue();
// When a message is received in the queue it should be consumed
// by the following closure
queue.setConsumer(inflight (message: str) => {
// Increment the distributed counter, the index variable will
// store the value prior to the increment
let index = counter.inc();
// Once two messages are pushed to the queue, e.g. "Wing" and "Queue".
// Two files will be created:
// - wing-1.txt with "Hello Wing"
// - wing-2.txt with "Hello Queue"
bucket.put("wing-{index}.txt", "Hello, {message}");
log("file wing-{index}.txt created");
});
Experimental TypeScript Support
If you'd like to use TypeScript instead of winglang, you can add the --language ts
flag when creating a new project:
wing new empty --language ts
Then modify main.ts
to have the following, equivalent to the above winglang code:
import { main, cloud, lift } from "@wingcloud/framework";
main((root) => {
const bucket = new cloud.Bucket(root, "Bucket");
const counter = new cloud.Counter(root, "Counter");
const queue = new cloud.Queue(root, "Queue");
queue.setConsumer(
lift({ bucket, counter }).inflight(async ({ bucket, counter }, message) => {
const index = await counter.inc();
await bucket.put(`wing-${index}.txt`, `Hello, ${message}`);
console.log(`file wing-${index}.txt created`);
})
);
});
The rest of the starting guide will be the same! See here for more information on using TypeScript with Wing.
Here we defined a queue and a counter. Every time a message is added to the queue, a handler is triggered and creates a file named wing-{counter-index}.txt
with the content "Hello, {message}!"
, and the counter is incremented by 1.
Now that we've written this program, let's run and test it using the Wing Console.