The Wolfram Application Server (WAS) combines the computational power of the Wolfram Engine with modern containerization. It provides a scalable deployment model for Wolfram-powered web applications.
This repository deploys WAS on Amazon EKS or Azure AKS with wasctl. The documentation here, together with an appropriate license from Wolfram Research, will get you started.
| Tool | Description |
|---|---|
wasctl |
Command-line installer and operator (install, destroy, doctor, status, …) |
wasctl serve |
Local web UI for the same workflows |
During wasctl install, an interactive terminal can show stage progress when stdout is a TTY. For plain text output, use --no-tui or set NO_COLOR=1.
To deploy and use Wolfram Language content, you need a license file from Wolfram Research. Contact your sales representative at 1-800-WOLFRAM to discuss licensing options.
WAS runs in Kubernetes. Supported cloud paths in this repository:
| Environment | How to deploy |
|---|---|
| Amazon EKS | Use wasctl (--cloud aws). See Quick start and docs/Install.md. |
| Azure AKS | Use wasctl (--cloud azure). See Quick start and docs/Install.md. |
| On-premises | Contact Wolfram Technical Support for options and documentation. |
Install these on the machine that runs wasctl or wasctl serve.
| Tool | Notes | Install |
|---|---|---|
| wasctl | Download a release binary, or go build -o wasctl ./cmd/wasctl (Go 1.26+) |
Build from this repo, or use a released binary when available |
| Terraform ≥ 1.9 | Cloud infrastructure | Install Terraform |
| Helm ≥ 3.12 | Chart install and upgrades | Install Helm |
| kubectl | Cluster operations | Install kubectl |
| curl | Used by doctor and some checks | Usually preinstalled; see curl download |
| Requirement | Notes | Install |
|---|---|---|
| AWS CLI v2 | Configured (aws configure or environment variables) |
Install the AWS CLI |
| Permissions | Create VPC, EKS, EFS, S3, IAM roles, DynamoDB | — |
| Optional DNS | Route53 if wasctl should create a CNAME | — |
| Requirement | Notes | Install |
|---|---|---|
| Azure CLI | az login and the correct subscription (az account set) |
Install the Azure CLI |
| Permissions | Create resource groups, AKS, storage, managed identities, role assignments | — |
| Ingress host | A DNS name (for example a *.cloudapp.azure.com label), not a raw public IP |
— |
Cluster add-ons (ingress-nginx, Strimzi, CSI, metrics-server, prometheus-adapter, optional cert-manager) are installed in the addons stage unless you --skip them. Object storage, identity, and shared filesystems come from the infra stage.
# AWS
./wasctl install --all \
--cloud aws \
--region us-east-1 \
--cluster-name was-prod \
--ingress-host was.example.com
# Azure
./wasctl install --all \
--cloud azure \
--azure-location eastus \
--cluster-name was-prod \
--ingress-host was-prod.eastus.cloudapp.azure.com
# Plain text progress (no interactive terminal UI)
./wasctl install --all --no-tui --cloud aws ...
# Interactive guided menu (lists existing clusters per cloud)
./wasctl --cloud aws
./wasctl status
./wasctl doctor
./wasctl info
./wasctl destroyA full install usually takes about 35–50 minutes (Terraform infra is the longest step).
./wasctl serve
# http://127.0.0.1:8765
# ./wasctl serve --port 9000 --no-browserThe UI has no authentication. Keep it on localhost unless you are on a trusted network.
Seven stages. Stage state is stored in your cloud account so you can resume from another machine with the same credentials.
| # | Stage | Description |
|---|---|---|
| 1 | preflight | Local tools and cloud credentials |
| 2 | bootstrap | Terraform remote state storage |
| 3 | backend | Terraform backend configuration |
| 4 | infra | VPC/VNet, EKS/AKS, storage, identity |
| 5 | kubeconfig | Isolated kubeconfig (does not write ~/.kube/config) |
| 6 | addons | ingress-nginx, Strimzi, CSI, metrics, optional cert-manager |
| 7 | app | Helm install of the WAS chart |
Obtain a license file from your sales representative. Deploy it to WAS as a node file at the conventional location .Wolfram/Licensing/mathpass.
From a Wolfram Language client, load the Wolfram Application Server package (once per session):
Needs["WolframApplicationServer`"]Then evaluate:
was = ServiceConnect["WolframApplicationServer", "http://<your-base-url>"];
ServiceExecute[was, "DeployNodeFile",
{"Contents" -> File["path/to/mathpass"],
"NodeFile" -> ".Wolfram/Licensing/mathpass"}]Use https:// in the base URL when TLS is enabled (cert-manager / Let's Encrypt via wasctl).
Alternatively, use the node files REST API to install the license file.
Restart the application using the restart API so your Wolfram Engines pick up the license.
In your Wolfram Language environment, evaluate:
PacletInstall["WolframApplicationServer"]- Guide page: WolframApplicationServer/guide/WolframApplicationServer (links to WAS functions)
- Service page: WolframApplicationServer/ref/service/WolframApplicationServer (details of a
ServiceConnectionto WAS)
For Helm value customization after deploy, see Configuration.md.
| Doc | Description |
|---|---|
| docs/Install.md | Installation (CLI and web UI) |
| docs/Operations.md | Status, doctor, upgrade, destroy, support bundles |
| docs/WebUI.md | Web UI |
| docs/CLI.md | Commands and flags |
| docs/Troubleshooting.md | Common failures |
| docs/Wasctl-Architecture.md | Stages, workspaces, stack overview, and diagrams |
| charts/wolfram-application-server/README.md | Helm chart values |
| Configuration.md | Application configuration via Helm values |
| README-go.md | Building wasctl from source |
| Doc | Description |
|---|---|
| docs/API/Utilities.md | Restart and utility endpoints |
| docs/API/ResourceManager.md | Resource Manager API |
| docs/API/NodeFilesManager.md | Node files (including license) API |
| docs/API/EndpointManager.md | Endpoint Manager API |
| Doc | Description |
|---|---|
| docs/Architecture/WolframApplicationServerArchitecture.md | WAS architecture |
wasctl / cmd/wasctl/ CLI and serve
internal/ Stages, web UI, doctor, workspace, assets
charts/wolfram-application-server/ Helm chart
infra/aws/ infra/azure/ Terraform bootstrap and stack
docs/ Product API and wasctl operation guide
./wasctl destroy
./wasctl destroy --destroy-state-backend # also remove Terraform state storage