---
title: "Forward Protocol Input"
description: "read events via the Fluent Forward protocol on a Unix domain socket\
  \ or TCP port"
source: "https://github.com/log-10x/modules/tree/main/pipelines/run/modules/input/forward/module.yaml"

---
Reads events via the [Fluent Forward protocol](https://github.com/fluent/fluentd/wiki/Forward-Protocol-Specification-v1){target="\_blank"} on a Unix domain socket.

Supports all standard Forward protocol modes:

- **Message**: `[tag, time, record]`
- **Forward**: `[tag, [[time, record], ...]]`
- **PackedForward**: `[tag, packed_entries_bin]`

Each record is decoded from msgpack and emitted as a JSON line with the Forward tag injected as a `"tag"` field.

## :material-wrench-outline: Config Files

To configure the Forward protocol input module, [:material-cog: Edit](https://doc.log10x.com/config/app/#module-config "Learn how to edit app and module configurations") these files.  

Below is the default configuration from: [forward/config.yaml](https://github.dev/log-10x/config/blob/main/pipelines/run/input/forward/config.yaml "forward/config.yaml"){target="\_blank"}.  
  
<div class="edit-options">
    <a class="md-button tenx-edit-online-button" data-tooltip="Edit online on github.dev" href="https://github.dev/log-10x/config/blob/main/pipelines/run/input/forward/config.yaml" target="_blank" rel="noopener noreferrer">
        <span class="twemoji" style="margin-right: 0.3rem;">
            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                <path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"></path>
            </svg>
        </span> Edit Online
    </a>
    <button class="md-button tenx-config.yaml0-edit-button" data-tooltip="Edit configuration file" data-dialog-id="config-yaml0-dialog">
        <span style="margin-right: 0.3rem;">
            <span class="twemoji">
                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                    <path d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"></path>
                </svg>
            </span>
        </span>Edit Locally
    </button>
</div>

<dialog id="config-yaml0-dialog" class="md-dialog md-dialog--editor">
    <div class="editor-dialog-wrapper">
        <div class="editor-dialog-header">
            <span class="editor-dialog-title">Edit config.yaml Locally</span>
            <div class="editor-header-actions">
                <button class="editor-toolbar-btn yaml-editor-locations" data-tooltip="Save">
                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M5 20h14v-2H5v2m14-9h-4V3H9v8H5l7 7 7-7Z"></path></svg>
                </button>
                <button class="editor-toolbar-btn yaml-editor-reset" data-tooltip="Reset to default">
                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M12.5 8c-2.65 0-5.05 1-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.5 8z"></path></svg>
                </button>
                <button class="editor-toolbar-btn yaml-editor-copy" data-tooltip="Copy to clipboard">
                    <svg class="icon-copy" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12V1Z"></path></svg>
                    <svg class="icon-check" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="display:none;"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg>
                </button>
                <span class="header-divider"></span>
                <button class="editor-toolbar-btn yaml-editor-fullscreen" data-tooltip="Fullscreen">
                    <svg class="icon-maximize" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M5,5H10V7H7V10H5V5M14,5H19V10H17V7H14V5M17,14H19V19H14V17H17V14M10,17V19H5V14H7V17H10Z"></path></svg>
                    <svg class="icon-minimize" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="display:none;"><path fill="currentColor" d="M5,16H8V19H10V14H5V16M14,14V19H16V16H19V14H14M16,5V8H19V10H14V5H16M10,5V10H5V8H8V5H10Z"></path></svg>
                </button>
                <span class="header-divider"></span>
                <button class="editor-toolbar-btn editor-dialog-close" onclick="closeDialog('config-yaml0-dialog')" data-tooltip="Close">
                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z"></path></svg>
                </button>
            </div>
        </div>
        <div class="editor-dialog-content">
            <div class="yaml-editor-container"></div>
        </div>
        <div class="yaml-editor-statusbar">
            <span class="yaml-editor-status"></span>
        </div>
    </div>
    <!-- Locations Popup -->
    <div class="locations-popup" style="display: none;">
        <div class="locations-popup-content">
            <div class="locations-popup-header">
                <span class="locations-header-label">Download and save to:</span>
                <button class="locations-popup-close" aria-label="Close">
                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="16" height="16">
                        <path fill="currentColor" d="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z"></path>
                    </svg>
                </button>
            </div>
            <ul class="locations-list">
                <li>
                    <span class="location-label">Linux / Docker / macOS
                        <span class="help-icon" data-tooltip="Default system location. The engine automatically reads configs from here at startup. Best for production deployments.">
                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="12" height="12"><path fill="currentColor" d="M11 18h2v-2h-2v2m1-16A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-14a4 4 0 0 0-4 4h2a2 2 0 0 1 2-2 2 2 0 0 1 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5a4 4 0 0 0-4-4Z"/></svg>
                        </span>
                    </span>
                    <div class="location-path-row">
                        <code class="default-path location-path" data-tooltip=""
                            data-copy-osx="/etc/log10x/config/run/input/forward/config.yaml"
                            data-copy-nix="/etc/log10x/config/run/input/forward/config.yaml"
                            data-copy-win="C:\log10x\configs/run/input/forward/config.yaml"></code>
                        <button class="copy-btn" data-tooltip="Copy path">
                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="14" height="14">
                                <path fill="currentColor" d="M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12V1Z"></path>
                            </svg>
                        </button>
                    </div>
                </li>
                <li>
                    <span class="location-label">Custom directory
                        <span class="help-icon" data-tooltip="Set TENX_CONFIG environment variable to point to a custom config directory. Useful when you want configs in a non-standard location.">
                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="12" height="12"><path fill="currentColor" d="M11 18h2v-2h-2v2m1-16A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-14a4 4 0 0 0-4 4h2a2 2 0 0 1 2-2 2 2 0 0 1 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5a4 4 0 0 0-4-4Z"/></svg>
                        </span>
                    </span>
                    <div class="location-path-row">
                        <code class="location-path" data-tooltip="$TENX_CONFIG/run/input/forward/config.yaml">$TENX_CONFIG/run/input/forward/config.yaml</code>
                        <button class="copy-btn" data-tooltip="Copy path">
                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="14" height="14">
                                <path fill="currentColor" d="M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12V1Z"></path>
                            </svg>
                        </button>
                    </div>
                </li>
                <li>
                    <span class="location-label">Within cloned repo
                        <span class="help-icon" data-tooltip="First run: git clone github.com/log-10x/config. Then save the file to this path within the cloned folder. Use for version control.">
                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="12" height="12"><path fill="currentColor" d="M11 18h2v-2h-2v2m1-16A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-14a4 4 0 0 0-4 4h2a2 2 0 0 1 2-2 2 2 0 0 1 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5a4 4 0 0 0-4-4Z"/></svg>
                        </span>
                    </span>
                    <div class="location-path-row">
                        <code class="location-path" data-tooltip="./pipelines/run/input/forward/config.yaml">./pipelines/run/input/forward/config.yaml</code>
                        <button class="copy-btn" data-tooltip="Copy path">
                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="14" height="14">
                                <path fill="currentColor" d="M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12V1Z"></path>
                            </svg>
                        </button>
                    </div>
                </li>
            </ul>
            <div class="locations-popup-footer">
                <button class="locations-download-btn" title="Download config file">
                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="14" height="14">
                        <path fill="currentColor" d="M5 20h14v-2H5v2m14-9h-4V3H9v8H5l7 7 7-7Z"></path>
                    </svg>
                    <span>Download</span>
                </button>
            </div>
        </div>
    </div>
</dialog>

<template class="tenx-config-schema" data-encoding="base64">ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJpbmNsdWRlIiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAidGVueCIgOiB7CiAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICB9LAogICAgImZvcndhcmQiIDogewogICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgImlucHV0UG9ydCIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAibnVtYmVyIiwKICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICBdLAogICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlRDUCBwb3J0IGZvciBGb3J3YXJkIHByb3RvY29sIGlucHV0XG5cblRDUCBwb3J0IHdoZXJlIExvZzEweCBsaXN0ZW5zIGZvciBpbmNvbWluZyBGbHVlbnQgRm9yd2FyZCBwcm90b2NvbCBtZXNzYWdlcy4gU3VwcG9ydHMgYWxsIHN0YW5kYXJkIEZvcndhcmQgcHJvdG9jb2wgbW9kZXMgKE1lc3NhZ2UsIEZvcndhcmQsIFBhY2tlZEZvcndhcmQpLiBFYWNoIGluY29taW5nIHJlY29yZCBpcyBkZWNvZGVkIGZyb20gbXNncGFjayBhbmQgZW1pdHRlZCBhcyBKU09OIGZvciB0aGUgcGlwZWxpbmUuICBFeGFtcGxlOiBgMjQyMjRgIChEZWZhdWx0OiAyNDIyNCkiLAogICAgICAgICAgImRlZmF1bHQiIDogIjI0MjI0IgogICAgICAgIH0sCiAgICAgICAgImlucHV0UGF0aCIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAibnVsbCIKICAgICAgICAgIF0sCiAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiVW5peCBzb2NrZXQgcGF0aCBmb3IgRm9yd2FyZCBwcm90b2NvbCBpbnB1dCAob3ZlcnJpZGVzIHBvcnQpXG5cblVuaXggZG9tYWluIHNvY2tldCBwYXRoIHdoZXJlIExvZzEweCBsaXN0ZW5zIGZvciBpbmNvbWluZyBGbHVlbnQgRm9yd2FyZCBwcm90b2NvbCBtZXNzYWdlcy4gV2hlbiBzZXQsIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGUgVENQIHBvcnQuICBFeGFtcGxlOiBgL3RtcC90ZW54LWZvcndhcmQtaW4uc29ja2AiCiAgICAgICAgfSwKICAgICAgICAic291cmNlUGF0dGVybiIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAibnVsbCIKICAgICAgICAgIF0sCiAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiRXZlbnQgc291cmNlIGNhcHR1cmUgcmVnZXggcGF0dGVyblxuXG5EZWZpbmVzIGEgcmVnZXggcGF0dGVybiB0byBjYXB0dXJlICdzb3VyY2UnIHZhbHVlcyBmb3IgZWFjaCB0cmFuc2Zvcm1lZCBUZW5YT2JqZWN0LiBUaGUgRm9yd2FyZCBwcm90b2NvbCB0YWcgaXMgaW5qZWN0ZWQgaW50byBlYWNoIHJlY29yZCBhcyBhIFwidGFnXCIgZmllbGQuIFRoZSBkZWZhdWx0IHBhdHRlcm4gZXh0cmFjdHMgdGhpcyB0YWcgYXMgdGhlIGV2ZW50IHNvdXJjZS4gKERlZmF1bHQ6IFwidGFnXCI6XCIoLio/KVwiKSIsCiAgICAgICAgICAiZGVmYXVsdCIgOiAiXCJ0YWdcIjpcIiguKj8pXCIiCiAgICAgICAgfSwKICAgICAgICAiZXh0cmFjdG9ycyIgOiB7CiAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAibnVsbCIKICAgICAgICAgIF0sCiAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiSlNPTiAvIHJlZ2V4IGV4dHJhY3RvciBuYW1lcyBhcHBsaWVkIHRvIGVhY2ggRm9yd2FyZCByZWNvcmRcblxuTGlzdCBvZiBleHRyYWN0b3IgbmFtZXMgdG8gYXBwbHkgdG8gZWFjaCBldmVudCBhZnRlciBGb3J3YXJkLXByb3RvY29sIGRlY29kaW5nLiBFYWNoIG5hbWVkIGV4dHJhY3RvciBtdXN0IGJlIGRlZmluZWQgZWxzZXdoZXJlIGluIHRoZSBwaXBlbGluZSAoc2VlIGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL2lucHV0L2V4dHJhY3QpLiBVc2VmdWwgd2hlbiB0aGUgcmVjb3JkcyBjb21pbmcgb3ZlciBGb3J3YXJkIGNhcnJ5IGEgY3VzdG9tIEpTT04gc2hhcGUgYW5kIHlvdSB3YW50IHRvIGNhcHR1cmUgc3BlY2lmaWMgZmllbGRzIGFzIFRlblhPYmplY3QgcHJvcGVydGllcy4gKERlZmF1bHQ6IFtdKSIsCiAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgfSwKICAgICAgICAgICJkZWZhdWx0IiA6IFsgXQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0sCiAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IHRydWUKfQ==</template>

```yaml
# 🔟❎ 'run' Forward protocol input configuration
#
# Configure an input that receives events via the Fluent Forward protocol
# on a Unix domain socket. To learn more see https://doc.log10x.com/run/input/forward/

# Set the 10x pipeline to 'run'
tenx: run

# =============================== Dependencies ================================

include: run/modules/input/forward

# ======================== Forward Protocol Options ============================

forward:

  # ----------------------------- Input Options -----------------------------

  # 'inputPort' specifies the TCP port to listen on for Forward protocol messages
  inputPort: $=TenXEnv.get("TENX_FORWARD_INPUT_SOCKET", "24224")

  # 'inputPath' specifies a Unix domain socket path to listen on instead of TCP.
  #  When set, takes precedence over 'inputPort'.
  inputPath: $=TenXEnv.get("TENX_FORWARD_INPUT_ADDRESS", "")

  # ---------------------------- Parsing Options ----------------------------

  # 'extractors' defines a list of JSON/regex extractor names
  #  used to capture and redact event values from 'path' to transform
  #  into TenXObjects. To learn more see: https://doc.log10x.com/run/input/extract
  extractors: [
  ]

  # 'sourcePattern' defines a regex pattern that captures a 'source' value
  #  for each event received via the Forward protocol and transformed into
  #  a TenXObject. The Forward tag is injected as a "tag" field in each
  #  record, so the default pattern extracts the source from the tag.
  sourcePattern: null
```

## :material-menu: Options

Specify the options below to [configure](/config "configure") the Forward protocol input:

|Name|Description|
|---|---|
|[forwardInputPort](#forwardinputport "TCP port for Forward protocol input")|TCP port for Forward protocol input|
|[forwardInputPath](#forwardinputpath "Unix socket path for Forward protocol input (overrides port)")|Unix socket path for Forward protocol input (overrides port)|
|[forwardSourcePattern](#forwardsourcepattern "event source capture regex pattern")|Event source capture regex pattern|
|[forwardExtractors](#forwardextractors "JSON / regex extractor names applied to each Forward record")|JSON / regex extractor names applied to each Forward record|

### :material-menu-right-outline:**`forwardInputPort`**

TCP port for Forward protocol input.

|Type|Default|
|---|---|
|String|24224|

TCP port where Log10x listens for incoming Fluent Forward protocol messages.

Supports all standard Forward protocol modes (Message, Forward, PackedForward).
Each incoming record is decoded from msgpack and emitted as JSON for the pipeline.

Example: `24224`.


### :material-menu-right-outline:**`forwardInputPath`**

Unix socket path for Forward protocol input (overrides port).

|Type|Default|
|---|---|
|String|""|

Unix domain socket path where Log10x listens for incoming
Fluent Forward protocol messages. When set, takes precedence
over the TCP port.

Example: `/tmp/tenx-forward-in.sock`.


### :material-menu-right-outline:**`forwardSourcePattern`**

Event source capture regex pattern.

|Type|Default|
|---|---|
|String|"tag":"(.\*?)"|

Defines a regex pattern to capture 'source' values for each transformed TenXObject.
The Forward protocol tag is injected into each record as a "tag" field.
The default pattern extracts this tag as the event source.


### :material-menu-right-outline:**`forwardExtractors`**

JSON / regex extractor names applied to each Forward record.

|Type|Default|
|---|---|
|List|\[\]|

List of extractor names to apply to each event after Forward-protocol
decoding. Each named extractor must be defined elsewhere in the pipeline
(see https://doc.log10x.com/run/input/extract). Useful when the records
coming over Forward carry a custom JSON shape and you want to capture
specific fields as TenXObject properties.


<br/>:material-github: This module is defined in [forward/module.yaml](https://github.com/log-10x/modules/tree/main/pipelines/run/modules/input/forward/module.yaml "forward/module.yaml"){target="\_blank"}.

