Open Beta Status
What is supported in the BWSL open beta, what may still change, and how to report useful feedback.
Turn the guide into code
Take the key idea from this page into the playground and validate it in a real shader instead of leaving it as theory.
Open PlaygroundBWSL is in open beta. The compiler, playground, examples, and docs are available for real use, but the language is not frozen yet. You can build shaders, evaluate engine integration, and try the standard library today; you should also expect some syntax, reflection details, and advanced features to change before a stable release.
The beta is focused on practical shader authoring: one source file can describe pipeline structure, shader-visible resources, variants, passes, and backend outputs without relying on external template systems.
Beta Expectation
The documented core language is intended to be usable now. Advanced or provisional areas are included so you can experiment and give feedback, not because their exact shape is guaranteed.
Good Fits
BWSL is a good fit during beta if you want to:
- prototype material, post-processing, compute, or multi-pass shader workflows
- evaluate source-declared resources and generated binding reflection
- test shader variants without building a custom preprocessor layer
- experiment with standard modules such as Math, Random, Noise, Color, PBR, Compression, Globals, and PostFX
- compile one shader source toward SPIR-V plus optional Metal, HLSL, GLSL, or GLSL ES output
- embed the WASM compiler in browser tools, playgrounds, or editor workflows
For a first pass, start with Quick Start, then read Integration, Resources, and Shader Variants.
Supported Core Surface
These areas are the main beta-supported surface:
| Area | Status |
|---|---|
| Pipeline and module files | Supported for normal authoring. |
| Graphics passes | Supported with vertex and fragment stages, stage I/O, varyings, and built-in namespaces. |
| Compute passes | Supported for compute shader entry points and compute built-ins. |
| Attributes and resources | Supported through source-declared attributes {} and resources {} blocks. |
| Reflection | Supported through generated metadata and -bindings output. The schema may still gain fields as beta feedback comes in. |
| Variants | Supported through variants {}, variant rules, implicit optional-input variants, -variant, and -dump-variant-space. |
| Types | Supported across scalars, vectors, matrices, structs, enums, arrays, and pointers. |
| Functions and modules | Supported for ordinary helpers, overloads, module imports, module-qualified access, and standard modules. |
| Intrinsics | Supported for documented math, vector, texture, derivative, atomic, bit, packing, wave, and classification functions. |
| Backends | SPIR-V is always generated; Metal, HLSL, GLSL, GLSL ES, and direct GLES are available through compiler flags. |
| WASM compiler | Supported for playground and editor-style tooling. |
For the generated feature inventory, see Compiler Coverage.
Areas Still Settling
Some features are implemented but should be treated as provisional or implementation-defined during beta:
| Area | What to expect |
|---|---|
eval and compile-time expansion | Useful for controlled shader generation, but the comptime model may become cleaner before stable release. Prefer the documented examples. |
| Stage-returning functions | Vertex and fragment composition are available, but this is not the simplest path for most shaders. |
| Pass-block-returning functions | Parsed by the compiler, but not recommended for everyday beta authoring. |
| Compute graph | Dependency tracking exists, but public syntax and scheduling guidance are not settled. |
| Matrix aliases | float2x2, float3x3, and float4x4 may be accepted, but docs use mat2, mat3, and mat4 as canonical spelling. |
| Constants and parameter syntax | More than one accepted form may exist. Use the canonical style shown in these docs for shared code. |
| Pattern matching and flag enums | Useful advanced features, but some details are still implementation-defined. |
| Wave/subgroup operations | Available through wave_* intrinsics, but backend and hardware behavior should be tested on your target platforms. |
Do Not Rely on Draft Surface
Older render-config terminology and host-only .rcfg examples are not the recommended beta model. Write shader-visible data in resources {} and keep render-graph, preview, target, and application metadata outside BWSL source.
Compatibility During Beta
The beta will prefer forward progress over strict compatibility. Stable-looking documented workflows should remain as consistent as possible, but breaking changes can still happen when they make the language simpler, remove ambiguity, or fix a weak abstraction.
When upgrading compiler versions:
- recompile all shader sources
- inspect generated reflection for binding or metadata changes
- re-run representative variants
- test every backend you ship
- check release notes or docs updates for changes to provisional features
Reporting Issues
Useful beta reports are concrete and reproducible. Include:
- compiler version
- target backend, such as SPIR-V, Metal, HLSL, GLSL, or GLSL ES
- operating system, browser, GPU, and driver when relevant
- minimized
.bwslsource - exact CLI flags or playground preset
- expected behavior and actual behavior
- generated reflection or backend output when the issue is ABI-related
Small repros are much more useful than broad descriptions. If a shader only fails after variant selection, include the -variant flags or the -dump-variant-space output.
Next Steps
- Installation - Get the compiler
- Quick Start - Compile a first shader
- Integration - Wire BWSL into a build or engine
- Compiler Coverage - Inspect generated support status
- Playground - Try the WASM compiler and live preview