Thank you for your interest in contributing to the Memory Interchange Format specification.
Before making changes to the specification, please open an issue to discuss:
- Proposed new features or fields
- Clarifications to existing sections
- Use cases that aren't well supported
- Compatibility concerns
For specification changes:
- Fork the repository
- Create a feature branch (
git checkout -b feature/add-xyz-field) - Make your changes to
SPECIFICATION.md - Update examples if needed
- Update
CHANGELOG.mdunder[Unreleased] - Submit a pull request
Help grow the ecosystem by building:
- Import/export converters for memory providers
- Validation tools
- Editor plugins (Obsidian, VS Code, etc.)
Use the provided schemas to validate your implementations:
# Validate MIF documents
npx ajv validate -s schema/mif.schema.json -d your-memory.json
# Validate citations
npx ajv validate -s schema/citation.schema.json -d citation.json- Additive changes (new optional fields) are preferred
- Breaking changes require major version bump
- Use conformance levels to add features progressively
All specification changes must include:
- Clear description of the change
- Rationale for the addition
- Example in both Markdown and JSON-LD formats
- Impact on conformance levels (if any)
When adding examples:
- Use language tags on all code blocks
- Ensure JSON is valid and parseable
- Ensure YAML frontmatter is valid
- Test wiki-link syntax in Obsidian if possible
- Use RFC 2119 keywords (MUST, SHOULD, MAY) appropriately
- Be precise and unambiguous
- Include rationale for design decisions
- Use ATX-style headers (
#,##, etc.) - Use fenced code blocks with language tags
- Use tables for structured comparisons
- Keep lines under 120 characters when possible
Open an issue with the question label or reach out to the maintainers.