pinakes/examples/plugins/markdown-metadata
NotAShelf 3abfe6a79b
pinakes-plugin-api: expand test coverage; fix merge conflicts
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I34e7c6d382ab7f4b6cf98ede9b7116056a6a6964
2026-02-05 14:36:12 +03:00
..
plugin.toml pinakes-plugin-api: expand test coverage; fix merge conflicts 2026-02-05 14:36:12 +03:00
README.md examples: add example plugins 2026-02-05 14:36:04 +03:00

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

---
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:

#[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:

cargo build --target wasm32-wasi --release
wasm-strip target/wasm32-wasi/release/markdown_metadata.wasm
cp target/wasm32-wasi/release/markdown_metadata.wasm .

Installation

# 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

cargo test

License

MIT