
<!-- path: toolchain/index.md -->
# Toolchains

- [MoonBit's Build System](https://docs.moonbitlang.com/en/latest/toolchain/moon/index.html): full manual of `moon` build system.
- [MoonBit's Agent IDE](https://docs.moonbitlang.com/en/latest/toolchain/moonide/index.html): full manual of `moon ide`, the agent ide.
- [MoonBit's VSCode Plugin](https://docs.moonbitlang.com/en/latest/toolchain/vscode/index.html): hint on VSCode plugin.

**Other toolchains**

- [WebAssembly Toolchain](https://docs.moonbitlang.com/en/latest/toolchain/wasm/index.html): how to use Wasm with MoonBit.
- ...

# Contents:

* [Moon Build System](https://docs.moonbitlang.com/en/latest/toolchain/moon/index.html)
  * [MoonBit's Build System Tutorial](https://docs.moonbitlang.com/en/latest/toolchain/moon/tutorial.html)
  * [Running `.mbtx` Scripts](https://docs.moonbitlang.com/en/latest/toolchain/moon/script-mode.html)
  * [Use and publish packages](https://docs.moonbitlang.com/en/latest/toolchain/moon/package-manage-tour.html)
  * [Workspace Support](https://docs.moonbitlang.com/en/latest/toolchain/moon/workspace.html)
  * [Command-Line Help for `moon`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html)
  * [Module Configuration](https://docs.moonbitlang.com/en/latest/toolchain/moon/module.html)
  * [Package Configuration](https://docs.moonbitlang.com/en/latest/toolchain/moon/package.html)
  * [Measuring code coverage](https://docs.moonbitlang.com/en/latest/toolchain/moon/coverage.html)
* [MoonBit Agent IDE](https://docs.moonbitlang.com/en/latest/toolchain/moonide/index.html)
  * [Overview](https://docs.moonbitlang.com/en/latest/toolchain/moonide/index.html#overview)
  * [Symbol Syntax](https://docs.moonbitlang.com/en/latest/toolchain/moonide/index.html#symbol-syntax)
  * [`moon ide peek-def` - View Symbol Definitions](https://docs.moonbitlang.com/en/latest/toolchain/moonide/index.html#moon-ide-peek-def-view-symbol-definitions)
  * [`moon ide find-references` - Track All Usages](https://docs.moonbitlang.com/en/latest/toolchain/moonide/index.html#moon-ide-find-references-track-all-usages)
  * [`moon ide codelens` - Get Reference Code Lenses](https://docs.moonbitlang.com/en/latest/toolchain/moonide/index.html#moon-ide-codelens-get-reference-code-lenses)
  * [`moon ide outline` - Get Structural Overview](https://docs.moonbitlang.com/en/latest/toolchain/moonide/index.html#moon-ide-outline-get-structural-overview)
  * [`moon ide doc` - Discover and Explore APIs](https://docs.moonbitlang.com/en/latest/toolchain/moonide/index.html#moon-ide-doc-discover-and-explore-apis)
* [MoonBit VSCode Plugin](https://docs.moonbitlang.com/en/latest/toolchain/vscode/index.html)
  * [Commands](https://docs.moonbitlang.com/en/latest/toolchain/vscode/index.html#commands)
  * [Actions](https://docs.moonbitlang.com/en/latest/toolchain/vscode/index.html#actions)
  * [Code Lens](https://docs.moonbitlang.com/en/latest/toolchain/vscode/index.html#code-lens)
* [WebAssembly Integration](https://docs.moonbitlang.com/en/latest/toolchain/wasm/index.html)
  * [Component Model](https://docs.moonbitlang.com/en/latest/toolchain/wasm/index.html#component-model)
  * [Custom Export and Import](https://docs.moonbitlang.com/en/latest/toolchain/wasm/index.html#custom-export-and-import)
  * [Q&A](https://docs.moonbitlang.com/en/latest/toolchain/wasm/index.html#q-a)

<!-- path: toolchain/moon/index.md -->
## Moon Build System

## Contents:

* [MoonBit's Build System Tutorial](https://docs.moonbitlang.com/en/latest/toolchain/moon/tutorial.html)
  * [Prerequisites](https://docs.moonbitlang.com/en/latest/toolchain/moon/tutorial.html#prerequisites)
  * [Creating a New Module](https://docs.moonbitlang.com/en/latest/toolchain/moon/tutorial.html#creating-a-new-module)
  * [Understanding the Module Directory Structure](https://docs.moonbitlang.com/en/latest/toolchain/moon/tutorial.html#understanding-the-module-directory-structure)
  * [Working with Packages](https://docs.moonbitlang.com/en/latest/toolchain/moon/tutorial.html#working-with-packages)
  * [Choosing a Target](https://docs.moonbitlang.com/en/latest/toolchain/moon/tutorial.html#choosing-a-target)
  * [Package Importing](https://docs.moonbitlang.com/en/latest/toolchain/moon/tutorial.html#package-importing)
  * [Creating and Using a New Package](https://docs.moonbitlang.com/en/latest/toolchain/moon/tutorial.html#creating-and-using-a-new-package)
  * [Adding Tests](https://docs.moonbitlang.com/en/latest/toolchain/moon/tutorial.html#adding-tests)
* [Running `.mbtx` Scripts](https://docs.moonbitlang.com/en/latest/toolchain/moon/script-mode.html)
  * [Run a `.mbtx` file](https://docs.moonbitlang.com/en/latest/toolchain/moon/script-mode.html#run-a-mbtx-file)
  * [Test a `.mbtx` script](https://docs.moonbitlang.com/en/latest/toolchain/moon/script-mode.html#test-a-mbtx-script)
  * [Run a `.mbtx` script from stdin](https://docs.moonbitlang.com/en/latest/toolchain/moon/script-mode.html#run-a-mbtx-script-from-stdin)
* [Use and publish packages](https://docs.moonbitlang.com/en/latest/toolchain/moon/package-manage-tour.html)
  * [Setup mooncakes.io account](https://docs.moonbitlang.com/en/latest/toolchain/moon/package-manage-tour.html#setup-mooncakes-io-account)
  * [Setup MoonBit project](https://docs.moonbitlang.com/en/latest/toolchain/moon/package-manage-tour.html#setup-moonbit-project)
  * [Add dependencies](https://docs.moonbitlang.com/en/latest/toolchain/moon/package-manage-tour.html#add-dependencies)
  * [Import packages from module](https://docs.moonbitlang.com/en/latest/toolchain/moon/package-manage-tour.html#import-packages-from-module)
  * [Remove dependencies](https://docs.moonbitlang.com/en/latest/toolchain/moon/package-manage-tour.html#remove-dependencies)
  * [Publish your module](https://docs.moonbitlang.com/en/latest/toolchain/moon/package-manage-tour.html#publish-your-module)
* [Workspace Support](https://docs.moonbitlang.com/en/latest/toolchain/moon/workspace.html)
  * [Initialize a workspace](https://docs.moonbitlang.com/en/latest/toolchain/moon/workspace.html#initialize-a-workspace)
  * [Add members](https://docs.moonbitlang.com/en/latest/toolchain/moon/workspace.html#add-members)
  * [Work at workspace root](https://docs.moonbitlang.com/en/latest/toolchain/moon/workspace.html#work-at-workspace-root)
  * [Sync member versions](https://docs.moonbitlang.com/en/latest/toolchain/moon/workspace.html#sync-member-versions)
* [Command-Line Help for `moon`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html)
  * [`moon`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html#moon)
  * [`moon new`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html#moon-new)
  * [`moon build`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html#moon-build)
  * [`moon check`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html#moon-check)
  * [`moon run`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html#moon-run)
  * [`moon test`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html#moon-test)
  * [`moon clean`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html#moon-clean)
  * [`moon fmt`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html#moon-fmt)
  * [`moon doc`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html#moon-doc)
  * [`moon info`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html#moon-info)
  * [`moon bench`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html#moon-bench)
  * [`moon add`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html#moon-add)
  * [`moon remove`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html#moon-remove)
  * [`moon install`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html#moon-install)
  * [`moon tree`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html#moon-tree)
  * [`moon login`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html#moon-login)
  * [`moon register`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html#moon-register)
  * [`moon publish`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html#moon-publish)
  * [`moon package`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html#moon-package)
  * [`moon update`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html#moon-update)
  * [`moon coverage`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html#moon-coverage)
  * [`moon coverage analyze`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html#moon-coverage-analyze)
  * [`moon coverage report`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html#moon-coverage-report)
  * [`moon coverage clean`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html#moon-coverage-clean)
  * [`moon generate-build-matrix`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html#moon-generate-build-matrix)
  * [`moon upgrade`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html#moon-upgrade)
  * [`moon shell-completion`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html#moon-shell-completion)
  * [`moon version`](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html#moon-version)
* [Module Configuration](https://docs.moonbitlang.com/en/latest/toolchain/moon/module.html)
  * [Name](https://docs.moonbitlang.com/en/latest/toolchain/moon/module.html#name)
  * [Version](https://docs.moonbitlang.com/en/latest/toolchain/moon/module.html#version)
  * [Dependency Management](https://docs.moonbitlang.com/en/latest/toolchain/moon/module.html#dependency-management)
  * [Meta Information](https://docs.moonbitlang.com/en/latest/toolchain/moon/module.html#meta-information)
  * [Publishing Files with `.moonignore`](https://docs.moonbitlang.com/en/latest/toolchain/moon/module.html#publishing-files-with-moonignore)
  * [Preferred Target](https://docs.moonbitlang.com/en/latest/toolchain/moon/module.html#preferred-target)
  * [Supported Targets](https://docs.moonbitlang.com/en/latest/toolchain/moon/module.html#supported-targets)
  * [Source directory](https://docs.moonbitlang.com/en/latest/toolchain/moon/module.html#source-directory)
  * [Warning List](https://docs.moonbitlang.com/en/latest/toolchain/moon/module.html#warning-list)
  * [Rule](https://docs.moonbitlang.com/en/latest/toolchain/moon/module.html#rule)
  * [Scripts](https://docs.moonbitlang.com/en/latest/toolchain/moon/module.html#scripts)
* [Package Configuration](https://docs.moonbitlang.com/en/latest/toolchain/moon/package.html)
  * [New format (`moon.pkg`)](https://docs.moonbitlang.com/en/latest/toolchain/moon/package.html#new-format-moon-pkg)
  * [Name](https://docs.moonbitlang.com/en/latest/toolchain/moon/package.html#name)
  * [Formatter](https://docs.moonbitlang.com/en/latest/toolchain/moon/package.html#formatter)
  * [Package type](https://docs.moonbitlang.com/en/latest/toolchain/moon/package.html#package-type)
  * [is-main (deprecated)](https://docs.moonbitlang.com/en/latest/toolchain/moon/package.html#is-main-deprecated)
  * [Importing dependencies](https://docs.moonbitlang.com/en/latest/toolchain/moon/package.html#importing-dependencies)
  * [Maximum Concurrent Tests](https://docs.moonbitlang.com/en/latest/toolchain/moon/package.html#maximum-concurrent-tests)
  * [Conditional Compilation](https://docs.moonbitlang.com/en/latest/toolchain/moon/package.html#conditional-compilation)
  * [Supported Targets](https://docs.moonbitlang.com/en/latest/toolchain/moon/package.html#supported-targets)
  * [Native Stub Files](https://docs.moonbitlang.com/en/latest/toolchain/moon/package.html#native-stub-files)
  * [Link Options](https://docs.moonbitlang.com/en/latest/toolchain/moon/package.html#link-options)
  * [Rule and dev_build](https://docs.moonbitlang.com/en/latest/toolchain/moon/package.html#rule-and-dev-build)
  * [Warnings List](https://docs.moonbitlang.com/en/latest/toolchain/moon/package.html#warnings-list)
  * [Virtual Package](https://docs.moonbitlang.com/en/latest/toolchain/moon/package.html#virtual-package)
* [Measuring code coverage](https://docs.moonbitlang.com/en/latest/toolchain/moon/coverage.html)
  * [Running code coverage in tests](https://docs.moonbitlang.com/en/latest/toolchain/moon/coverage.html#running-code-coverage-in-tests)
  * [Visualizing the coverage results](https://docs.moonbitlang.com/en/latest/toolchain/moon/coverage.html#visualizing-the-coverage-results)
  * [Skipping coverage](https://docs.moonbitlang.com/en/latest/toolchain/moon/coverage.html#skipping-coverage)

<!-- path: toolchain/moonide/index.md -->
## MoonBit Agent IDE

### Overview

`moon ide` is a specialized CLI toolset for navigating, understanding, and exploring MoonBit codebases. It provides semantic-aware tools for code discovery using the compiler's knowledge of your project structure.

These commands use semantic analysis rather than text matching, making them more precise than grep-based searching for code navigation tasks.

Navigation commands work with modules, multi-module workspaces, and standalone
`.mbtx` scripts. In a multi-module workspace, `moon ide` follows each module's
configured backend. For a single module, commands that offer `--target` can
select the backend used by the project check.

#### Available Commands

- **`moon ide peek-def`**: Locate symbol definitions with inline context
- **`moon ide find-references`**: Locate all usages of a symbol across the project
- **`moon ide rename`**: Compute or apply semantic rename edits
- **`moon ide hover`**: Show type and documentation at a source position
- **`moon ide outline`**: Get a structural overview of files or packages
- **`moon ide analyze`**: Report public API usage counts
- **`moon ide doc`**: Discover and explore APIs with documentation
- **`moon ide workspace-symbols`**: Search top-level workspace symbols
- **`moon ide codelens`**: Return reference CodeLens entries as JSON
- **`moon ide gen-symbols`**: Generate a package symbol index

### Symbol Syntax

Commands that accept a `<symbol>` argument use these patterns:

**Basic symbols:**

- `[@pkg.]symbol` - Symbol in a package (e.g. `parse_int`, `Array`)
- If `@pkg.` is omitted, searches current package and prelude

**Type members:**

- `[@pkg.]Type::member` - Type methods, struct fields, enum variants, trait methods
- `Trait::method for Type` - A trait method implementation for a type
- Examples: `Array::length`, `@http.Request::new`, `Option::None`

Package prefix `@pkg.` is optional for symbols in the current package and standard library.

### `moon ide peek-def` - View Symbol Definitions

Quickly locate symbol definitions with surrounding context. This is faster and more precise than grepping for declarations.

#### Usage

```bash
moon ide peek-def <symbol> [--loc filename[:line[:col]]]
```

**Lookup modes:**

1. **Global search** (no `--loc`): Searches the module or workspace using the
   symbol syntax described above.
2. **File-restricted search** (`--loc filename`): Restricts the initial symbol
   lookup to one file.
3. **Source-position lookup** (`--loc filename:line[:col]`): Resolves the symbol
   at that position, which is useful for local variables, shadowed names, and
   ambiguous symbols. When line and column are both present, the separate
   `<symbol>` argument may be omitted.

#### Examples

```bash
$ moon ide peek-def Agent
Found 1 symbols matching 'Agent':

`pub (all) struct Agent` in package moonbitlang/maria/agent at ./agent/agent.mbt:17-47

17 | ///|
   | /// Represents an AI agent that interacts with language models and executes tools.
...|
   | pub(all) struct Agent {
...|
...| }
```

```bash
$ moon ide peek-def Agent --loc ./maria.mbt:7
Definition found at file ./maria/agent/agent.mbt
   | ///
   | /// The `Agent` struct encapsulates the complete state and behavior of an AI agent,
...|
24 | pub(all) struct Agent {
   |                 ^^^^^
   |   /// UUID generator for creating unique identifiers.
...|
```

### `moon ide find-references` - Track All Usages

Discover where and how a symbol is used throughout your codebase.

#### Usage

```bash
moon ide find-references <symbol>
moon ide find-references <token> --loc <path[:line[:col]]>
moon ide find-references --loc <path:line:col>
```

Without `--loc`, the command searches for a semantic symbol across the current
module or workspace. File and source-position forms behave like those of
`peek-def`, including support for local variables and shadowed names.

Definitions are excluded by default. Add `--include-definition` to include
them. With `--json`, each result also has an `is_test` field that identifies
references in test blocks and test files.

#### Example

```bash
$ moon ide find-references Agent --include-definition
`pub (all) struct Agent` in package moonbitlang/maria/agent at ./agent/agent.mbt:17-47
17 | ///|
   | /// Represents an AI agent that interacts with language models and executes tools.
...|
   | pub(all) struct Agent {
...|
...| }
Found 98 references of this symbol:
./agent/agent_tool.mbt:41:8-41:13:
   | /// * `agent` : The agent instance whose tools will be enabled or disabled.
   | /// * `tool_names` : A set containing the names of tools that should be enabled.
   | ///   Tools not in this set will be disabled.
41 | pub fn Agent::set_enabled_tools(
   |        ^^^^^
   |   agent : Agent,
   |   tool_names : Set[String],
...
```

### `moon ide codelens` - Get Reference Code Lenses

Return local- and global-reference CodeLens entries for top-level declarations
in a source file:

```bash
moon ide codelens path/to/file.mbt
```

The output is always a JSON array. Local-reference locations include an
`is_test` field, and ranges use one-based `line:column-line:column` positions.

### `moon ide outline` - Get Structural Overview

Quickly scan the structure of a file or package to understand its organization.

#### Usage

```bash
moon ide outline <path/to/file_or_directory>
```

Two modes:

- `moon ide outline path/to/file.mbt` - Outline a specific file
- `moon ide outline path/to/directory` - Outline all `.mbt` files in the package

#### Examples

**Package outline** - See all files and their top-level symbols:

```bash
moon ide outline .
maria.mbt:
 L05 | pub struct Maria {
       ...
 L71 | pub fn Maria::close(self : Maria) -> Unit {
       ...
 L84 | pub async fn Maria::start(self : Maria, prompt? : String) -> Unit {
```

**File outline** - Detailed view of a single file:

```bash
$ moon ide outline ./internal/readline/readline.mbt
 L0002 | priv struct Edit {
         ...
 L0008 | pub enum KeyName {
         ...
 L0045 | pub struct Key {
         ...
 L1369 | pub async fn Interface::start(self : Interface) -> Unit {
         ...
 L1383 | pub async fn Interface::read_line(self : Interface) -> String {
         ...
 L1390 | pub async fn Interface::read_key(self : Interface) -> Key {
         ...
```

### `moon ide doc` - Discover and Explore APIs

Query documentation and discover available symbols, packages, and APIs.

#### Usage

```bash
moon ide doc '<query>'
```

#### Query Syntax

The query syntax is specialized for symbol and package discovery:

**Empty query** - List available packages or symbols:

- `moon ide doc ''`
  - In a module: Shows all available packages (including dependencies and `moonbitlang/core`)
  - In a package: Shows all symbols in current package
  - Outside package: Shows all available packages

**Lookup by name:**

- `moon ide doc "[@pkg.]function_name"` - Find functions or values
- `moon ide doc "[@pkg.]TypeName"` - Find types (builtin types don't need prefix)
- `moon ide doc "[@pkg.]Type::member"` - Find type methods or fields

**Package exploration:**

- `moon ide doc "@pkg"` - List all exported symbols in a package
- `moon ide doc "@encoding/utf8"` - Works with nested packages
- Examples: `moon ide doc "@json"`, `moon ide doc "@buffer"`

**Globbing** - Use `*` wildcard for partial matches:

- `moon ide doc "String::*rev*"` - Find all String methods containing "rev"
- `moon ide doc "*parse*"` - Find all symbols with "parse" in the name

#### Examples

**Search for type methods:**

```bash
## Search for String methods in standard library:
$ moon ide doc "String"

type String

  pub fn String::add(String, String) -> String
  # ... more methods omitted ...
```

**Explore a package:**

```bash
$ moon ide doc "@buffer"
moonbitlang/core/buffer

fn from_array(ArrayView[Byte]) -> Buffer
## ... omitted ...
```

**Query a specific function:**

```bash
$ moon ide doc "@buffer.new"
package "moonbitlang/core/buffer"

pub fn new(size_hint? : Int) -> Buffer
  Creates ... omitted ...
```

**Use globbing to find related functions:**

```bash
$ moon ide doc "String::*rev*"
package "moonbitlang/core/string"

pub fn String::rev(String) -> String
  Returns ... omitted ...
  # ... more

pub fn String::rev_find(String, StringView) -> Int?
  Returns ... omitted ...
```

<!-- path: toolchain/vscode/index.md -->
## MoonBit VSCode Plugin

MoonBit provides a plugin for Visual Studio Code, available in the
[Visual Studio MarketPlace](https://marketplace.visualstudio.com/items?itemName=moonbit.moonbit-lang)
and [Open VSX Registry](https://open-vsx.org/extension/moonbit/moonbit-lang).

### Commands

The plugin provides several commands, available through
[command palettes](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette)

- Select backend: It allows you to switch between several backends
- Restart MoonBit language server: It allows you to restart the language server,
  in case it's unresponsive or has some stale state.
- Install MoonBit toolchain: Manually triggers the installation process. The
  extension will check if the installed MoonBit toolchain matches the
  extension's version.
- Get lsp's compiler version: It will display the MoonBit compiler version used
  by the extension.
- Toggle multiline string: It can help switching the chosen text between a plain
  text and the MoonBit's
  [multiline string syntax](https://docs.moonbitlang.com/en/latest/language/fundamentals.html#string)

### Actions

The plugin also provides several actions, available through
[quick fix](https://code.visualstudio.com/docs/editing/refactoring#_code-actions-quick-fixes-and-refactorings)

- Add missing arms: It allows you to fill up the branches of a `match`
  expression when encountering [Error 0011](https://docs.moonbitlang.com/en/latest/language/error_codes/E0011.html)

### Code Lens

The plugin provides code lens for each top-level code block, especially test
blocks.

The provided functionalities are:

- Format: format the code block
- Test / Bench: test or bench the test block
- Debug (JavaScript backend only): test the test block with debugger
- Update: update the [snapshot tests](https://docs.moonbitlang.com/en/latest/language/tests.html#snapshot-tests) in the
  code block
- Trace: turn on/off the tracing of the test block where each assignment will
  have the value rendered next to it

<!-- path: toolchain/wasm/index.md -->
## WebAssembly Integration

MoonBit is a programming language that provides first-class support for
WebAssembly.

### Component Model

Check out [this tutorial](https://docs.moonbitlang.com/en/latest/toolchain/wasm/component-model-tutorial.html) on how to work with
[component model](https://component-model.bytecodealliance.org/) in MoonBit.

### Custom Export and Import

Check out [FFI](https://docs.moonbitlang.com/en/latest/language/ffi.html) section on how to import or export functions.

### Q&A

1. Q: What is `spectest.print_char`

   A: It's how MoonBit prints. It prints a UTF-16 unicode code at a time. For
   portability, avoid using `println`. If this does occur in the final result,
   consider using [`wasm-merge`](https://github.com/WebAssembly/binaryen) or
   similar tools.
