Skip to content

Manifest Specification

Every connector requires a manifest.yaml file describing its metadata, permissions, and configuration.

Full Schema

# === REQUIRED ===
name: string
# Unique identifier. Lowercase, underscores allowed.
# Example: "notion_export"
version: string
# Semantic version: MAJOR.MINOR.PATCH
# Example: "1.0.0"
description: string
# Short description (< 100 chars)
# Example: "Import Notion workspace from export ZIP"
author: string
# Author name or handle
# Example: "community" or "alice@example.com"
license: string
# SPDX license identifier
# Example: "MIT"
# === COMPATIBILITY ===
requires_hoard: string
# Hoard version constraint (pip-style)
# Example: ">=1.0.0,<2.0.0"
requires_python: string
# Python version constraint
# Example: ">=3.11"
# === PERMISSIONS (INFORMATIONAL IN v1) ===
permissions:
filesystem:
read: list[string]
# Paths connector needs to read.
# Example: ["${config.export_path}"]
write: list[string]
# Paths connector writes (usually empty).
network:
domains: list[string]
# Domains connector accesses.
# Example: ["api.notion.com"]
can_emit_sensitive: boolean
# Can set sensitivity="sensitive" on entities.
# Default: false
# === CONFIGURATION ===
config_schema: object
# JSON Schema for user configuration.
# === ENTRY POINT ===
entry_point: string
# Python import path to connector class.
# Example: "connector:NotionExportConnector"
# === DEPENDENCIES ===
dependencies: list[string]
# pip package requirements.
# Example: ["beautifulsoup4>=4.12"]
# === OPTIONAL ===
repository: string
# Source repository URL.
documentation: string
# Documentation URL.
tags: list[string]
# Searchable tags.
# Example: ["notion", "export"]

Example Manifest

name: notion_export
version: "1.0.0"
description: "Import from Notion export ZIP"
author: "community"
license: "MIT"
requires_hoard: ">=1.0.0"
requires_python: ">=3.11"
permissions:
filesystem:
read: ["${config.export_path}"]
write: []
network:
domains: []
can_emit_sensitive: false
config_schema:
type: object
required: [export_path]
properties:
export_path:
type: string
description: "Path to Notion export ZIP or folder"
include_attachments:
type: boolean
default: false
description: "Index file attachments"
entry_point: "connector:NotionExportConnector"
dependencies:
- "beautifulsoup4>=4.12"
- "lxml>=4.9"
repository: "https://github.com/hoard-project/connectors"
tags: ["notion", "export", "knowledge-base"]

Config Schema

Use JSON Schema to define user configuration:

config_schema:
type: object
required: [vault_path]
properties:
vault_path:
type: string
description: "Path to Obsidian vault"
include_daily_notes:
type: boolean
default: true
description: "Index daily notes"
chunk_max_tokens:
type: integer
default: 400
minimum: 100
maximum: 1000

Validation runs when connector is enabled.

Permissions

Filesystem Permissions

permissions:
filesystem:
read:
- "${config.export_path}" # User config value
- "${config.backup_dir}/*" # Glob patterns
- "/tmp/hoard-${connector.name}"
write:
- "/tmp/hoard-cache/*"

Network Permissions

permissions:
network:
domains:
- "api.notion.com"
- "*.notion.so"

Sensitive Entities

permissions:
can_emit_sensitive: true

Allows setting sensitivity="sensitive" on entities.

Config Interpolation

Manifests support ${...} interpolation:

VariableDescription
${config.field}User config value
${connector.name}Connector name
${connector.version}Connector version

Example:

permissions:
filesystem:
read:
- "${config.export_path}" # /Users/me/export.zip
- "/tmp/${connector.name}-*" # /tmp/notion_export-*

Entry Point

Specifies where to load the connector class:

entry_point: "connector:NotionExportConnector"

This imports NotionExportConnector from connector.py in the connector directory.

For nested modules:

entry_point: "src.main:MyConnector"

Dependencies

List pip packages the connector requires:

dependencies:
- "beautifulsoup4>=4.12"
- "lxml>=4.9"
- "requests>=2.28"

These are installed when the connector is enabled.

Validation

Manifests are validated when connectors are loaded. Hoard checks:

  • Required fields present
  • Version formats valid
  • Config schema valid
  • Entry point importable

Next Steps