# Markdown Metadata Extractor Plugin This example plugin demonstrates how to create a metadata extractor plugin for Pinakes. ## Overview The Markdown Metadata Extractor enhances Pinakes' built-in markdown support by: - Parsing YAML and TOML frontmatter - Extracting metadata from frontmatter fields - Converting frontmatter tags to Pinakes media tags - Extracting custom fields from frontmatter ## Features - **Frontmatter Parsing**: Supports both YAML (`---`) and TOML (`+++`) frontmatter formats - **Tag Extraction**: Automatically extracts tags from frontmatter and applies them to media items - **Custom Fields**: Preserves all frontmatter fields as custom metadata - **Configuration**: Configurable via `plugin.toml` config section ## Frontmatter Example ```markdown --- title: "My Document" author: "John Doe" date: "2024-01-15" tags: ["documentation", "example", "markdown"] category: "tutorials" draft: false --- # My Document Content goes here... ``` ## Implementation The plugin implements the `MetadataExtractor` trait from `pinakes-plugin-api`: ```rust #[async_trait] impl MetadataExtractor for MarkdownMetadataPlugin { async fn extract_metadata(&self, path: &PathBuf) -> PluginResult { // 1. Read the file // 2. Parse frontmatter // 3. Extract metadata fields // 4. Return ExtractedMetadata } fn supported_types(&self) -> Vec { vec!["markdown".to_string()] } } ``` ## Building The plugin is compiled to WebAssembly: ```bash cargo build --target wasm32-wasi --release wasm-strip target/wasm32-wasi/release/markdown_metadata.wasm cp target/wasm32-wasi/release/markdown_metadata.wasm . ``` ## Installation ```bash # Copy plugin directory to Pinakes plugins directory cp -r examples/plugins/markdown-metadata ~/.config/pinakes/plugins/ # Or via API curl -X POST http://localhost:3000/api/v1/plugins/install \ -H "Content-Type: application/json" \ -d '{"source": "/path/to/markdown-metadata"}' ``` ## Configuration The plugin can be configured through the `config` section in `plugin.toml`: - `extract_tags`: Extract tags from frontmatter (default: true) - `parse_yaml`: Parse YAML frontmatter (default: true) - `parse_toml`: Parse TOML frontmatter (default: true) - `max_file_size`: Maximum file size to process in bytes (default: 10MB) ## Security This plugin has minimal capabilities: - **Filesystem**: No write access, read access only to files being processed - **Network**: Disabled - **Environment**: No access ## Testing ```bash cargo test ``` ## License MIT