Language support
Windmill supports scripts in TypeScript, Python, Go, PHP, Bash, SQL, Rust, C#, Java, Ruby, Ansible and more. This page provides a detailed comparison of features available for each language.
Core language features
| Language | Stability | SDK | LSP | Resource types | Relative imports | Workflows as code | Version selection | Other |
|---|---|---|---|---|---|---|---|---|
| TypeScript (Bun) | Stable | Full | ✓ | ✓ | ✓ | ✓ | - | Native mode for REST |
| TypeScript (Deno) | Stable | Full | ✓ | ✓ | ✓ | ✓ | - | - |
| Python | Stable | Full | ✓ | ✓ | ✓ | ✓ | ✓ (3.10-3.13) | - |
| Go | Stable | Simple | ✓ | - | - | - | - | - |
| Bash | Stable | - | - | - | via curl | - | - | Docker mode |
| PowerShell | Stable | - | - | - | - | - | - | - |
| Nu | Unstable | - | - | - | - | - | - | - |
| SQL (PostgreSQL) | Stable | - | - | - | - | - | - | No cold start |
| SQL (DuckDB) | Stable | - | - | - | - | - | - | DuckLake native |
| PHP | Stable | - | - | ✓ | - | - | - | - |
| Rust | Stable | Simple | - | ✓ | - | - | - | Debug/Release builds |
| C# | Stable | - | - | - | - | - | - | - |
| Java | Stable | Minimal | - | - | - | - | - | - |
| Ruby | Unstable | Minimal | - | - | - | - | - | - |
| Ansible | Stable | - | - | - | - | - | - | Vault support, git repos |
Dependency management
| Language | Dependency sources | Auto import inference | Proxy | Private registries (EE) |
|---|---|---|---|---|
| TypeScript (Bun) | npm, git | ✓ | ✓ | ✓ |
| TypeScript (Deno) | npm, git, URL | ✓ | ✓ | ✓ |
| Python | PyPI, git, local | ✓ | ✓ | ✓ + resolution strategy |
| Go | Go proxy, git | ✓ | ✓ | ✓ |
| Bash | - | - | ✓ | - |
| PowerShell | - | - | ✓ | - |
| Nu | - | - | ✓ | - |
| SQL (PostgreSQL) | - | - | ✓ | - |
| SQL (DuckDB) | - | - | ✓ | - |
| PHP | Packagist, git | - | ✓ | - |
| Rust | crates.io, git | - | ✓ | ✓ |
| C# | NuGet | - | ✓ | - |
| Java | Maven, Ivy | - | ✓ | ✓ |
| Ruby | RubyGems | - | ✓ | ✓ |
| Ansible | Galaxy, PyPI, git | - | ✓ | ✓ |
See workspace dependencies for more details.
Platform features
| Language | Dedicated workers (EE) | HTTP tracing (EE) | Caching (EE) | Data tables + Ducklake | Windows |
|---|---|---|---|---|---|
| TypeScript (Bun) | ✓ | ✓ (native) | ✓ | ✓ | ✓ |
| TypeScript (Deno) | - | ✓ | ✓ | ✓ | - |
| Python | ✓ | ✓ | ✓ | ✓ | ✓ |
| Go | - | ✓ | ✓ | - | - |
| Bash | - | ✓ | - | - | - |
| PowerShell | - | - | - | - | ✓ |
| Nu | - | ✓ | - | - | ✓ |
| SQL (PostgreSQL) | - | - | - | - | - |
| SQL (DuckDB) | - | - | - | ✓ | - |
| PHP | - | - | ✓ | - | - |
| Rust | - | ✓ | ✓ | - | - |
| C# | - | ✓ | ✓ | - | ✓ |
| Java | - | - | ✓ | - | ✓ |
| Ruby | - | ✓ | ✓ | - | ✓ |
| Ansible | - | - | ✓ | - | - |
Missing a feature or language?
Help us prioritize what to build next! Vote for the next feature or language to be supported in Windmill.
Legend
- Stability: Production readiness (Stable / Unstable)
- SDK: Official Windmill client (Full = complete SDK, Simple = basic client, Minimal = minimal client)
- LSP: Language Server Protocol support for code assistance
- Resource types: Ability to fetch resources programmatically
- Relative imports: Ability to share code between scripts via relative imports
- Workflows as code: Support for programmatic workflow definition
- Version selection: Ability to specify language version per script
- Dependency sources: Where packages can be fetched from (registries, git, local)
- Auto import inference: Automatic detection of dependencies from import statements
- Proxy: Support for proxy configuration during dependency resolution
- Private registries (EE): Support for private package registries
- Dedicated workers (EE): High-throughput mode eliminating cold starts
- HTTP tracing (EE): HTTP request tracing for debugging
- Caching (EE): Support for distributed cache storage
- Data tables + Ducklake: Support for Data Tables and Ducklake
- Windows: Support on Windows workers
- EE: Enterprise Edition feature