All modules in this registry are PUBLIC and accessible to anyone. For private modules, use the --private flag with mlld publish
mlld publish my-module.mld.mdThe mlld registry uses a modular architecture with GitHub for storage:
- Each module has its own file at
modules/{author}/{module}.json - GitHub Actions builds combined
modules.jsonon merge - Modules stored as GitHub gists or in repositories
- Content addressing via commit hashes
- Local caching for offline access
@import @alice/utils
↓
Query registry/modules.json on GitHub
↓
Return module metadata with source URL
↓
Fetch content and cache by hash
↓
Module ready to use
The mlld CLI handles most publishing automatically.
- Install mlld:
npm install -g mlld - Authenticate:
mlld auth login - Create module with
.mld.mdextension (mlld initwill set this up)
Required frontmatter fields:
name- Module identifier (lowercase, hyphens)author- Your GitHub usernameabout- Brief descriptionneeds- Runtime dependencies (empty array for pure mlld)license- Must be "CC0"
Example:
---
name: string-utils
author: alice
about: String manipulation utilities
needs: []
license: CC0
---
# String Utils
## Module
```mlld-run
@exec slugify(text) = @run js [(@text.toLowerCase().replace(/\s+/g, '-'))]
### Publish Command
```bash
mlld publish my-module.mld.md
The command:
- Validates module syntax and metadata
- Detects git repository or creates gist
- Submits pull request to registry
- Displays module URL when complete
Options:
--dry-run- Preview without publishing--force- Publish with uncommitted changes--message <msg>- Custom PR message--gist- Force gist creation--repo- Force repository publishing
Each module is stored in modules/{author}/{module}.json:
{
"name": "utils",
"author": "alice",
"version": "1.0.0",
"about": "Common utilities for mlld scripts",
"needs": [],
"license": "CC0",
"source": {
"type": "gist",
"url": "https://gist.githubusercontent.com/alice/8bb1c645c1cf0dd515bd8f834fb82fcf/raw/59d76372d3c4a93e7aae34cb98b13a8e99dfb95f/utils.mld",
"contentHash": "sha256:abcdef123456...",
"gistId": "8bb1c645c1cf0dd515bd8f834fb82fcf"
},
"dependencies": {},
"keywords": ["utils", "helpers", "strings"],
"mlldVersion": ">=1.0.0",
"publishedAt": "2024-01-15T10:30:00Z",
"publishedBy": 123456
}- name (required): Module name (lowercase with hyphens)
- author (required): GitHub username
- version (optional): Semantic version
- about (required): Clear description of what the module does
- needs (required): Runtime dependencies array (e.g., ["js", "node"])
- license (required): Must be "CC0"
- source (required): Object with source information
type: Source type - "gist" or "github"url: Full raw content URLcontentHash: SHA256 hash of the contentgistId: The gist ID (for gists)repository: Repo details (for GitHub repos)
- dependencies: Map of module names to their commit hashes
- keywords: Array of lowercase keywords for discovery
- mlldVersion: Required mlld version (e.g., ">=1.0.0")
- publishedAt: ISO 8601 timestamp (set automatically)
- publishedBy: GitHub user ID (set automatically)
The registry also serves as a Claude Code plugin marketplace. Skill and command modules
automatically appear in .claude-plugin/marketplace.json when the build script runs.
claude plugin marketplace add mlld-lang/registry
claude plugin install author--skill-name@mlld-registryStructure your skill module as a Claude Code plugin (mlld module skill my-helper does this automatically):
my-helper/
.claude-plugin/plugin.json Plugin manifest
skills/my-helper/SKILL.md Skill content
module.yml mlld module manifest
README.md
Then publish normally:
mlld publish my-helper/The build script generates marketplace entries for modules with type: skill or type: command.
Skills must be at the root of their source repo to appear in the marketplace (GitHub source refs
don't support subdirectory paths).
Builds and validates the combined registry:
# Build registry from module files
node tools/build-registry.jsThis script:
- Finds all module JSON files
- Validates structure and metadata
- Ensures path matches module content
- Generates
modules.json,modules.generated.json, and.claude-plugin/marketplace.json
Validates the entire registry:
# Validate all modules
node tools/validate.js
# Validate with detailed report
node tools/validate.js --save-report- Use format:
@username/module-name - Lowercase with hyphens only
- Be descriptive but concise
- Examples:
@alice/json-utils,@bob/git-helpers
- Include clear documentation
- Handle errors gracefully
- Test your module thoroughly
- Follow mlld best practices
- Never include secrets or API keys
- Be cautious with command execution
- Validate all inputs
- Document any security considerations
- List all mlld module dependencies
- Use exact commit hashes
- Keep dependencies minimal
- Test with your dependencies
- All modules are addressed by content hash
- Registry is versioned on GitHub
- Gist URLs include specific commit hashes
- Local verification of content hashes
- All modules in this registry are PUBLIC
- Anyone can view and use your code
- Do not publish sensitive or proprietary code
- For private modules, use --private flag
If you discover a security issue in a module:
- Contact the module author first
- If no response, open an issue here
- For urgent issues, email security@mlld-lang.org
- Module must add value to the ecosystem
- Code must be tested and documented
- No duplicates of existing functionality
- Responsive to maintainer feedback
All submissions are reviewed by Claude AI via Vercel webhook:
- Validates structure and metadata
- Checks for security issues
- Assesses code quality
- Posts review comments on PR
- Human maintainers make final merge decision
See docs/LLM-REVIEW-SYSTEM.md for details.
- Setup Guide - Configuration for maintainers
- Self-Governance - How the registry governs itself
- LLM Review System - Automated review details
- Known Issues - Current limitations and workarounds
Registry infrastructure: MIT Individual modules: Licensed by their authors (CC0 required for registry inclusion)