pinakes/examples/plugins/markdown-metadata/README.md
NotAShelf 708f8a0b67
examples: add example plugins
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I9eac30c7d4c1c89178f4930b215e523d6a6a6964
2026-02-05 14:36:04 +03:00

103 lines
2.5 KiB
Markdown

# 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<ExtractedMetadata> {
// 1. Read the file
// 2. Parse frontmatter
// 3. Extract metadata fields
// 4. Return ExtractedMetadata
}
fn supported_types(&self) -> Vec<String> {
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