# Wasm

The *Wasm* filter lets you modify the incoming records using [Wasm](https://webassembly.org/) technology.

You can extend Fluent Bit capabilities by writing custom filters using built Wasm programs and its runtime. A Wasm-based filter takes the following steps:

1. (Optional) Compile Ahead Of Time (AOT) objects to optimize the Wasm execution pipeline.
2. Configure the filter in the main configuration.
3. Prepare a Wasm program that will be used by the filter.

## Configuration parameters

The plugin supports the following configuration parameters:

| Key                | Description                                                                                                                                        |
| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Wasm_Path`        | Path to the built Wasm program that will be used. This can be a path relative to the main configuration file.                                      |
| `Event_Format`     | Define event format to interact with Wasm programs: `msgpack` or `json`. Default: `json`.                                                          |
| `Function_Name`    | Wasm function name that will be triggered to do filtering. It's assumed that the function is built inside the Wasm program specified previously.   |
| `Accessible_Paths` | Specify the allowlist of paths to be able to access paths from Wasm programs.                                                                      |
| `Wasm_Heap_Size`   | Size of the heap size of Wasm execution. Review [unit sizes](/manual/4.0/administration/configuring-fluent-bit/unit-sizes.md) for allowed values.  |
| `Wasm_Stack_Size`  | Size of the stack size of Wasm execution. Review [unit sizes](/manual/4.0/administration/configuring-fluent-bit/unit-sizes.md) for allowed values. |

## Configuration example

Here is a configuration example.

{% tabs %}
{% tab title="fluent-bit.yaml" %}

```yaml
pipeline:
  inputs:
    - name: dummy
      tag: dummy.local

  filters:
    - name: wasm
      match: 'dummy.*'
      event_format: json    # or msgpack
      wasm_path: /path/to/wasm_program.wasm
      function_name: filter_function_name
      # Note: run Fluent Bit from the 'wasm_path' location.
      accessible_paths: /path/to/accessible
    
  outputs:
    - name: stdout
      match: '*'
```

{% endtab %}

{% tab title="fluent-bit.conf" %}

```
[INPUT]
  Name   dummy
  Tag    dummy.local

[FILTER]
  Name             wasm
  Match            dummy.*
  Event_Format     json # or msgpack
  WASM_Path        /path/to/wasm_program.wasm
  Function_Name    filter_function_name
  Accessible_Paths .,/path/to/accessible

[OUTPUT]
  Name   stdout
  Match  *
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.fluentbit.io/manual/4.0/data-pipeline/filters/wasm.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
