> ## Documentation Index
> Fetch the complete documentation index at: https://flatfile.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Overview

> Extend your Flatfile data engine with powerful plugins for extraction, transformation, validation, and integration

Flatfile plugins extend your data processing capabilities with pre-built, reusable modules for common data operations. They handle everything from file extraction and data transformation to validation and external integrations, allowing you to build sophisticated data workflows quickly.

## Open Source

All Flatfile plugins are **open source** and available on GitHub at [github.com/FlatFilers/flatfile-plugins](https://github.com/FlatFilers/flatfile-plugins).

## Plugin Categories

### 🔄 Transform

Plugins for data transformation, validation, and cleaning.

> [card] [Record Hook](https://flatfile.com/docs/plugins/record-hook.md)
>
> Run custom logic on individual data records in real-time

> [card] [Autocast](https://flatfile.com/docs/plugins/autocast.md)
>
> Automatically cast values to appropriate data types

> [card] [Constraints](https://flatfile.com/docs/plugins/constraints.md)
>
> Extend schemas with external validation constraints

> [card] [Dedupe](https://flatfile.com/docs/plugins/dedupe.md)
>
> Remove duplicate records via sheet-level actions

### 📤 Extractors

Plugins for parsing and extracting data from various file formats.

> [card] [Delimiter Extractor](https://flatfile.com/docs/plugins/delimiter-extractor.md)
>
> Parse delimited files (CSV, TSV, etc.)

> [card] [XLSX Extractor](https://flatfile.com/docs/plugins/xlsx-extractor.md)
>
> Extract data from Excel spreadsheets

> [card] [JSON Extractor](https://flatfile.com/docs/plugins/json-extractor.md)
>
> Parse JSON files and convert to tabular data

> [card] [PDF Extractor](https://flatfile.com/docs/plugins/pdf-extractor.md)
>
> Extract structured data from PDF documents

### 📋 Schemas

Plugins for converting external schemas to Flatfile format.

> [card] [JSON Schema Converter](https://flatfile.com/docs/plugins/json-schema.md)
>
> Convert JSON Schema to Flatfile Blueprint

> [card] [OpenAPI Schema Converter](https://flatfile.com/docs/plugins/openapi-schema.md)
>
> Convert OpenAPI schema to Flatfile Blueprint

> [card] [SQL DDL Converter](https://flatfile.com/docs/plugins/sql-ddl-converter.md)
>
> Convert SQL DDL to Flatfile Blueprint

> [card] [YAML Schema Converter](https://flatfile.com/docs/plugins/yaml-schema.md)
>
> Convert YAML Schema to Flatfile Blueprint

### 📤 Export

Plugins for exporting processed data to external systems.

> [card] [Export Workbook](https://flatfile.com/docs/plugins/export-workbook.md)
>
> Export data from Flatfile to various formats

> [card] [Webhook Egress](https://flatfile.com/docs/plugins/webhook-egress.md)
>
> Send data to external webhooks

> [card] [Export Delimited ZIP](https://flatfile.com/docs/plugins/delimited-zip.md)
>
> Export workbooks as delimited files in ZIP archives

> [card] [Export Pivot Table](https://flatfile.com/docs/plugins/pivot-table.md)
>
> Generate pivot tables from sheet data

### 🔧 Core

Essential plugins for Flatfile operations and configuration.

> [card] [Space Configure](https://flatfile.com/docs/plugins/space-configure.md)
>
> Configure Flatfile spaces with workbooks and settings

> [card] [Job Handler](https://flatfile.com/docs/plugins/job-handler.md)
>
> Handle Flatfile jobs with custom logic

> [card] [View Mapped](https://flatfile.com/docs/plugins/view-mapped.md)
>
> Show only mapped columns in post-mapping view

> [card] [Rollout](https://flatfile.com/docs/plugins/rollout.md)
>
> Automatically roll out workbook changes

### ✅ Validation

Specialized validation plugins for data quality.

> [card] [Validate Email](https://flatfile.com/docs/plugins/email.md)
>
> Comprehensive email address validation

> [card] [Validate Phone](https://flatfile.com/docs/plugins/phone.md)
>
> Phone number formatting and validation

> [card] [Validate Date](https://flatfile.com/docs/plugins/date.md)
>
> Date format normalization and validation

> [card] [Validate Number](https://flatfile.com/docs/plugins/number.md)
>
> Number validation and formatting

### 🔗 Enrich

Plugins for data enrichment using external APIs.

> [card] [Geocode](https://flatfile.com/docs/plugins/geocode.md)
>
> Geocode addresses using Google Maps API

> [card] [Sentiment Analysis](https://flatfile.com/docs/plugins/sentiment.md)
>
> Analyze sentiment of text fields

> [card] [Text Summarization](https://flatfile.com/docs/plugins/summarize.md)
>
> Summarize and extract key phrases from text

> [card] [What3Words](https://flatfile.com/docs/plugins/what3words.md)
>
> Convert What3Words addresses to standard addresses

## Getting Started with Plugins

### Installation

Install plugins using npm in your Flatfile project:

```bash theme={null}
npm install @flatfile/plugin-record-hook @flatfile/plugin-autocast
```

### Basic Usage

Add plugins to your listener:

```typescript theme={null}
import { FlatfileListener } from '@flatfile/listener'
import { recordHook } from '@flatfile/plugin-record-hook'
import { autocast } from '@flatfile/plugin-autocast'

const listener = FlatfileListener.create(async (client) => {
  // Add autocast for automatic type conversion
  client.use(autocast())
  
  // Add record hook for custom validation
  client.use(
    recordHook('customers', (record) => {
      // Custom record processing logic
      const email = record.get('email')
      if (email && !isValidEmail(email)) {
        record.addError('email', 'Invalid email format')
      }
      return record
    })
  )
})
```

### Plugin Configuration

Most plugins accept configuration options:

```typescript theme={null}
import { configureSpace } from '@flatfile/plugin-space-configure'
import { dedupePlugin } from '@flatfile/plugin-dedupe'

client.use(
  configureSpace({
    workbooks: [workbookConfig],
    space: {
      name: "Customer Import",
      namespace: "customers"
    }
  })
)

client.use(
  dedupePlugin({
    sheetSlug: 'customers',
    dedupe: {
      key: 'email',
      keep: 'first',
      custom: {
        operation: 'dedupe-customers',
        label: 'Remove Duplicate Customers'
      }
    }
  })
)
```

## Plugin Development

### Creating Custom Plugins

You can create custom plugins for reusable functionality:

```typescript theme={null}
import { FlatfilePlugin } from '@flatfile/listener'

export function myCustomPlugin(options: any): FlatfilePlugin {
  return (client) => {
    // Plugin initialization logic
    client.filter({ job: 'sheet:myCustomOperation' }, (configure) => {
      configure.on('job:ready', async (event) => {
        // Plugin functionality
        const { jobId } = event.context
        
        try {
          await client.jobs.ack(jobId, {
            info: 'Running custom operation...'
          })
          
          // Your custom logic here
          await performCustomOperation(options)
          
          await client.jobs.complete(jobId, {
            outcome: { message: 'Custom operation completed successfully' }
          })
        } catch (error) {
          await client.jobs.fail(jobId, {
            outcome: { message: `Operation failed: ${error.message}` }
          })
        }
      })
    })
  }
}

// Usage
client.use(myCustomPlugin({ customOption: 'value' }))
```

### Plugin Best Practices

1. **Single Responsibility**: Each plugin should handle one specific functionality
2. **Configuration**: Accept configuration options for flexibility
3. **Error Handling**: Implement robust error handling and logging
4. **Documentation**: Provide clear documentation and examples
5. **Testing**: Include comprehensive tests for your plugin

## Popular Plugin Combinations

### Basic Data Import

```typescript theme={null}
// Essential plugins for most data import scenarios
client.use(autocast())
client.use(recordHook('sheet-name', validateRecord))
client.use(dedupePlugin({ sheetSlug: 'sheet-name' }))
```

### Advanced Validation

```typescript theme={null}
// Comprehensive data validation
client.use(autocast())
client.use(recordHook('customers', validateCustomer))
client.use(validateEmail({ sheetSlug: 'customers', fieldKey: 'email' }))
client.use(validatePhone({ sheetSlug: 'customers', fieldKey: 'phone' }))
client.use(validateDate({ sheetSlug: 'customers', fieldKey: 'birthdate' }))
```

### Schema Conversion

```typescript theme={null}
// Convert external schemas to Flatfile
client.use(convertJsonSchema({ source: 'api-schema.json' }))
client.use(convertOpenApiSchema({ source: 'swagger.yaml' }))
```

### Data Enrichment

```typescript theme={null}
// Enrich data with external services
client.use(enrichGeocode({ 
  sheetSlug: 'addresses',
  addressField: 'full_address'
}))
client.use(enrichSentiment({
  sheetSlug: 'feedback', 
  textField: 'comments'
}))
```

## Plugin Repository

All Flatfile plugins are open source and available on GitHub:

* **Main Repository**: [github.com/FlatFilers/flatfile-plugins](https://github.com/FlatFilers/flatfile-plugins)
* **NPM Organization**: [@flatfile](https://www.npmjs.com/org/flatfile)
* **Plugin Marketplace**: [flatfile.com/plugins](https://flatfile.com/plugins/)

## Contributing

We welcome contributions to the Flatfile plugin ecosystem:

1. **Bug Reports**: Report issues on the GitHub repository
2. **Feature Requests**: Suggest new plugins or enhancements
3. **Pull Requests**: Contribute code improvements or new plugins
4. **Documentation**: Help improve plugin documentation

## Support

* **Documentation**: Each plugin includes detailed documentation
* **Community**: Join our [Slack community](https://flatfile.com/join-slack/) for support
* **GitHub Issues**: Report bugs or request features on GitHub
* **Professional Support**: Contact our team for enterprise support
