# Custom Document Loader

<figure><img src="https://823733684-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F00tYLwhz5RyR7fJEhrWy%2Fuploads%2Fgit-blob-4a2cfcf771c08307f5d3ea8dd1f2546d4d6cc19d%2Fimage_custom-loader%20(1).png?alt=media" alt="" width="269"><figcaption><p>Custom Document Loader Node</p></figcaption></figure>

The Custom Document Loader provides the ability to create custom document loading functionality using JavaScript. This module enables flexible and customized document processing through user-defined functions.

This module provides a flexible document loader that can:

* Execute custom JavaScript functions for document loading
* Handle input variables dynamically
* Support both document and text outputs
* Run in a sandboxed environment
* Access flow context and variables
* Process custom metadata

## Inputs

### Required Parameters

* **Javascript Function**: Custom code that returns either:
  * Array of document objects (for Document output)
  * String (for Text output)

### Optional Parameters

* **Input Variables**: JSON object containing variables accessible in the function with $ prefix

## Outputs

* **Document**: Array of document objects containing metadata and pageContent
* **Text**: Concatenated string from pageContent of documents

## Features

* Sandboxed execution environment
* Variable injection support
* Flow context access
* Custom dependency support
* Error handling
* Timeout protection
* Input validation

## Document Structure

When returning documents, each object must have:

```javascript
{
  pageContent: 'Document Content',
  metadata: {
    title: 'Document Title',
    // ... other metadata
  }
}
```

## Example Usage

### Document Output

```javascript
return [
  {
    pageContent: 'Document Content',
    metadata: {
      title: 'Document Title',
      source: 'Custom Source'
    }
  }
]
```

### Text Output

```javascript
return "Processed text content"
```

## Available Context

* **$input**: Input value passed to the function
* **$vars**: Access to flow variables
* **$flow**: Flow context object containing:
  * chatflowId
  * sessionId
  * chatId
  * input

## Notes

* Functions run in a secure sandbox
* 10-second execution timeout
* Built-in dependencies available
* External dependencies configurable
* Input variables must be valid JSON
* Error handling for invalid returns
* Supports async operations
