Asterius: A Haskell to WebAssembly compiler
A Haskell to WebAssembly compiler
By tweag
A Haskell to WebAssembly compiler
By tweag
Asterius: A Haskell to WebAssembly compiler
Asterius is a Haskell to WebAssembly compiler based on GHC. It compiles
Haskell source files or Cabal executable targets to WebAssembly+JavaScript code
which can be run in Node.js or browsers.
It features seamless JavaScript interop
(lightweight Async FFI with Promise
support) and small output code (~600KBhello.wasm
for a Hello
World). A lot of common
Haskell packages like lens
are already supported. The project is actively
maintained by Tweag I/O.
Demos of popular Haskell apps, running in your browser:
diagrams
ormolu
pandoc
todomvc
We host a prebuilt container image on Docker
Hub. The image also ships ~2k
prebuilt packages from a recent
Stackage snapshot for convenience of testing simple programs without needing to
set up a Cabal project.
To use the image, mount the working directory containing the source code as a
shared volume, then use the ahc-link
program:
console
[email protected]:/project$ podman run -it --rm -v $(pwd):/workspace -w /workspace terrorjack/asterius
[email protected]:/workspace#
There are a lot of link-time options available to ahc-link
, e.g. targeting
the browser platform instead of node
, adding extra GHC options or setting
runtime parameters. Check the documentation for
further details.
It's also possible to use ahc-cabal
as a drop-in replacement of cabal
to
build a Cabal project. Use ahc-dist
with --input-exe
on the output
"executable" file to generate actual WebAssembly and JavaScript artifacts. See
the diagrams
blog
post for an
example.
Check the documentation section
about the prebuilt image for more information, e.g. versioning policy, how to
use with podman
/docker
, etc.
asterius
locallySee the Building guide in the
documentation for details.
We recommend using VSCode Remote
Containers to reproduce
the very same dev environment used by our core team members. See the Hacking
guide in the documentation for
details.
We have documentation and blog posts:
Also checkout the HIW 2018 lightning
talk,
and the slides of an introductory talk in 2020
here.
Note that they may be slightly out-of-date as the project evolves. Whenever you
find something in the docs of blog posts which doesn't reflect the status quo,
it's a bug and don't hesitate to open a ticket :)
See the roadmap section in the
documentation for details.
Asterius is maintained by Tweag I/O.
Have questions? Need help? Tweet at @tweagio.