

Anybuild: build anything, deploy anywhere
Syrus Akbary
Founder & CEO
Today, we’re open-sourcing Anybuild, the build system we use at Wasmer to automatically build applications from source.
Give Anybuild a project and it will figure out the language and framework, generate a build definition, build the application, and package it for whatever runtime you want to use.
Anybuild has powered Wasmer’s automated builds for almost a year and has supported more than half a million deployments. Anybuild started as a Python prototype, then added customizable Starlark build definitions, and was recently rewrote in Rust.
It has become a pretty important piece of our infrastructure. And today, we’re making it available to everyone and fully open source.
Try it
Install Anybuild on macOS or Linux:
curl -fsSL https://anybuild.run/install | sh
Then build and run a project:
anybuild . --start
Anybuild inspects the project, generates an Anybuild definition, builds it, and starts the application.
You can also select a runtime or deployment platform:
# Build and run with Wasmer
anybuild . --runner=wasmer --start
# Build and run in Docker
anybuild . --runner=docker --start
# Deploy to Wasmer
anybuild . --platform=wasmer
# Deploy to Fly.io
anybuild . --platform=fly --fly-app=my-app
Build-time dependencies shouldn't ship to production
Building an application and running it are two different things.
A Docusaurus documentation site may need Node.js with npm and a long list of dependencies to build. But once built, none of that is needed anymore. You only need the generated static files and something to serve them.
The same happens with MkDocs: Python is useful during the build, but there is no reason to ship Python with the final static website.
This sounds obvious, but a lot of deployment systems still bundle both environments together. The result is a larger artifact containing package managers, compilers, source files and development dependencies that production will never use and that will make your site slower to load (on startup time).
Anybuild keeps all three stages separate:
- The builder produces the final application files.
- The runner decides how to run the application.
- The deployment adapter takes that artifact and publishes it to the target platform.
So instead of deploying the environment that built the application, we deploy the smallest environment that can run it.
On Wasmer, that could mean serving a static application with Static Web Server, running PHP, or mapping a Node.js application to Edge.js, without bringing the entire build toolchain into production.
How Anybuild works
The architecture of Anybuild is greatly inspired by Railpack (Nixpacks spiritual successor), Heroku’s buildpacks and the Buck build system for deterministic builds from Facebook.
Anybuild uses a five-stage pipeline:
Source code
↓
Project detection
↓
Editable Anybuild definition
↓
Build
↓
Runtime artifact
↓
Deployment
Each stage has a clear responsibility.
1. Detecting the right provider
When anybuild is given any application source, it asks all providers available if that source is recognizable for them:
- Node.js static provider will look for a
package.jsonand a static framework as dependency - Node.js provider will look for a
package.jsonand a build/start command - Python provider will look for a
requirements.txtorpyproject.tomlfile - …
A project can be detected by zero, one, or more providers.
If no providers are detected, it will raise an error. If only one provider is detected it will use that one. And if multiple are detected, a centralized heuristic will help Anybuild determine which one is the right provider for it (for example, a Laravel project may as well be detected as both a PHP and Node.js static provider).
2. Generate an editable build definition
Detection is only the starting point.
Anybuild writes its provider configuration into an Anybuild Starlark file (a Python dialect used by many build systems like Bazel and Buck). Runtime versions, build commands, framework settings, and serving behavior become explicit and reviewable.
A generated Anybuild definition looks like this:
load(
"//anybuild/tools:python.bzl",
"python_build",
"python_config",
"python_serve",
)
config = python_config(
schema = 1,
commands = {
"start": "python main.py",
},
python_main_file = "main.py",
python_version = "3.13",
)
build = python_build(config)
python_serve(config, build, name = "my-app")
3. Build the site
A builder is specialized on building the site.
Right now Anybuild supports the current build modes:
- Local: it will use your local tools and programs to build the site. For example, if you are building a Node static site, it will use your local
nodeto build it (this can help considerably on iteration time when testing things) - Docker: it will put the build assets into the container, run the build commands in a container, and return the built output, so can be served as an artifact by a runner.
4. Produce a runtime artifact
The runner abstraction allows anybuild to execute the site in different environments.
Anybuild currently supports these following execution modes:
- Local: it will run your site locally, with your local tools
- Docker: it will run the site inside of Docker
- Wasmer: it will run the site as a Wasmer package
5. Deploy to a platform
Anybuild currently includes deployment adapters for:
- Wasmer: uses Wasmer packages as deployment artifacts
- Fly.io: uses Docker containers as deployment artifacts
- AWS Lambdas: uses Zip files as deployment artifacts
We are also actively interested on supporting Cloudflare Workers, and hope that our friends at Cloudflare will help us get there!
At the end, we want to offer a product that allows users to use the deployment platform they like most.
We believe that Wasmer will be a go-to for many people, but we also believe that the power of choice assures always the best option wins for the user.
So by open-sourcing Anybuild we aim to set a high bar for Wasmer, with the hopes of winning the customer hearts (your love!) over the time.
Frameworks supported by Anybuild
Anybuild includes 11 providers and recognizes dozens of frameworks and server libraries, all actively tested in the repository on each commit.
| Ecosystem | Supported frameworks |
|---|---|
| Node.js | Next.js, Astro, Remix, Nuxt, SvelteKit, SolidStart, TanStack Start, React Router, Hydrogen, NestJS, Angular, Vue, Vite, Gatsby, Docusaurus, and more |
| Node.js servers | Express, Fastify, Hono, Elysia, Koa, H3, and Nitro |
| Python | Django, FastAPI, Flask, FastHTML, Streamlit, and MCP |
| PHP | Laravel, Symfony, Drupal, and Moodle |
| WordPress | WordPress sites, plugins, and themes |
| Static sites | Hugo, Jekyll, MkDocs, Eleventy, Gatsby, Docusaurus, VitePress, VuePress, and plain static sites |
Anybuild applies framework-specific defaults where useful. It can detect build commands, start commands, output directories, package managers, and application entry points.
Frameworks that produce static output are built with their native toolchain and then served using a small static runtime. Server applications retain only the runtime dependencies they need.
See the complete framework list for every supported integration.
Built from what we learned
Anybuild takes inspiration from several excellent projects and ideas:
- Railpack and Nixpacks
- Heroku Buildpacks
- Buck and Starlark-based build systems (like Bazel)
- Our experience operating automated builds at Wasmer for few years
The important difference is that Anybuild treats detection, build execution, runtime packaging, and deployment as independent parts of the same pipeline.
That provides a system that can remain convenient for simple projects while still being explicit and customizable for complex ones (you can generate your own build pipelines easily).
Get started
Anybuild is available today under the MIT license.
⭐️ Star the project on Github: https://github.com/wasmerio/anybuild
🚀 Or give it a try!
curl -fsSL https://anybuild.run/install | sh
anybuild . --start
Explore the repository, report issues, or contribute a provider on GitHub.
And if Anybuild helps you ship something, please give the project a star, we would love to hear what you built!
Sobre el autor
Syrus Akbary is an enterpreneur and programmer. Specifically known for his contributions to the field of WebAssembly. He is the Founder and CEO of Wasmer, an innovative company that focuses on creating developer tools and infrastructure for running Wasm
Syrus Akbary
Founder & CEO
Try it
Build and run with Wasmer
Build and run in Docker
Deploy to Wasmer
Deploy to Fly.io
Build-time dependencies shouldn't ship to production
How Anybuild works
1. Detecting the right provider
**2. Generate an editable build definition**
3. Build the site
4. Produce a runtime artifact
**5. Deploy to a platform**
Frameworks supported by Anybuild
Built from what we learned
Get started
Despliega tu app web en segundos con nuestra solución de nube gestionada.
Leer más
backendperformancedjangorust
Porting our Django backend to Rust improved the infra usage by 90%
Syrus AkbaryJune 3, 2026
cloudedgejavascriptnode.jsedge.js
Edge.js: Running Node apps inside a WebAssembly Sandbox
Syrus AkbaryMarch 17, 2026