Wingra is a high-level procedural programming language which emphasizes static structural code flow.
Originally created to support game development, the language is general purpose and can have a variety of other applications. The language has been used to create Defenders On Deck, and prototype versions of the languages were used to develop other games.
- Dynamic typing
- Block-based significant indentation
- Memory efficiency through ownership passing
- Statically resolvable references
- Flexible data composition
- Run interpreted or transpile to javascript
- Strong tooling
::CustomersWhoBought(product, ?atleast => customers)
atleast ?: 1 // default to 1 if not passed
@set : $Set.New()
using Set
// find all completed orders
for @order of ^AllOrders.$List.Where(`it.isComplete`)
// check quantity
if (order.items[product] ? 0) >= atleast
// mark customer as having order
set.$Add(order.customer)
// flatten to list
customers : set.$ToList()- Static resolution with $ can be verified at dev-time
- Succinct lambda expression syntax with ` `
- Multiple named output parameters from functions
- Structural safety with async functions and error handling
Static function resolution means language tooling can provide good auto-completion, signatures, and definitions.
This static code flow also means the compiler can automatically inline functions and constants for improved performance. This can open up many additional possibilities around code flow analysis in future.
The ownership passing model of memory management can avoid the performance penalty of garbage collection and reference counting.
The quickest way to get started is to download the VSCode extension.
- Download VSCode for windows
- Download the Wingra Language extension from the VSCode marketplace
- Open VSCode to a new folder
- Add a new file called 'test.wng'
- Add the following code:
$IO.Write("Greetings from Lake Wingra!")
- Press ctrl+shift+p and select 'Wingra: Run current folder'
The Scripts/Tutorial folder contains a number of guides to basic syntax.
The Scripts/Samples folder contains some more realistic samples of how the language can be used.
The language is still relatively young, and probably not suitable for widespread production use at this time. The syntax may yet change and some features may be radically changed or removed in addition to new features and platforms. Some errors are less than helpful, and may require investigation into the language code itself.
I would welcome feedback and suggestions through GitHub or Twitter.
- Additional extension libraries
- Aliasing/isolating external references
- C# transpiler
- (Potentially) web-based package management?
- (Potentially) gradual typing?
Wingra is named for Lake Wingra, which itself takes its name from the word for "duck" in the language of the Ho-Chunk Nation.

