# 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](https://docs.fluentbit.io/manual/4.1/administration/configuring-fluent-bit/unit-sizes) for allowed values.  |
| `Wasm_Stack_Size`  | Size of the stack size of Wasm execution. Review [unit sizes](https://docs.fluentbit.io/manual/4.1/administration/configuring-fluent-bit/unit-sizes) 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 %}
