Metadata Guide
Complete guide to creating valid meta.json files for your projects.
Overview
Every project on mstm.dev requires a meta.json file that describes the project. This metadata is used for browsing, searching, and displaying your project.
Location
src/app/content/your-project-name/
├── meta.json ← Required
└── page.tsx
Complete Example
{
"title": "Hex Forge",
"description": "Professional binary/hex editor in your browser with real-time inspector.",
"type": "tool",
"category": "development",
"tags": ["hex-editor", "binary", "file-analysis"],
"authors": ["rxxuzi"],
"featured": false,
"mobile": false,
"createdAt": "2025-11-24",
"license": "MIT"
}
Required Fields
title
Type: string
The display name of your project.
Rules:
- 3-50 characters recommended
- Use proper capitalization
- Be descriptive but concise
Examples:
- ✅ "Hex Forge"
- ✅ "Queens"
- ✅ "Logic Gate Simulator"
- ❌ "Tool" (too generic)
- ❌ "My Amazing Super Cool Project" (too long)
description
Type: string
A brief description of what your project does.
Rules:
- 100-200 characters recommended
- One or two complete sentences
- Focus on functionality, not marketing
- End with a period
Examples:
- ✅ "Professional binary/hex editor in your browser with real-time inspector."
- ✅ "Build logic circuits to match target binary outputs using various gates."
- ❌ "This is a tool" (too vague)
- ❌ "The best, most amazing tool you've ever seen!!!" (marketing fluff)
type
Type: "tool" | "art" | "game" | "other"
The primary category of your project.
Options:
tool - Utilities and applications
- Editors, converters, analyzers
- Developer tools
- Productivity apps
game - Interactive games
- Puzzles and brain teasers
- Arcade games
- Simulations
art - Creative and visual
- Generative art
- Interactive visualizations
- Experimental projects
other - Everything else
- Educational content
- Demos and experiments
- Uncategorizable projects
category
Type: string
A more specific classification within the type.
Common categories:
For tools:
development- Developer toolsaudio- Audio processingutility- General utilitiesimage- Image editorstext- Text processing
For games:
puzzle- Logic puzzlesarcade- Action gamesstrategy- Strategy games
For art:
generative- Algorithmic artvisual- Visual experimentsinteractive- Interactive art
tags
Type: string[] (array of strings)
Keywords for search and filtering.
Rules:
- 3-7 tags recommended
- Use lowercase
- Use hyphens for multi-word tags
- Be specific and relevant
Examples:
"tags": ["hex-editor", "binary", "file-analysis"]
"tags": ["puzzle", "logic", "n-queens", "chess"]
"tags": ["music", "drums", "sequencer", "808"]
authors
Type: string[] (array of strings)
Array of contributor usernames.
Rules:
- Must have at least one author
- Use GitHub usernames
- List primary author first
Examples:
"authors": ["rxxuzi"]
"authors": ["alice", "bob"]
mobile
Type: boolean
Whether the project works well on mobile devices.
true - Mobile-friendly
- Responsive design
- Touch interactions work
- No keyboard required
false - Desktop only
- Complex UI
- Keyboard required
- Not optimized for mobile
Testing: Always test on an actual mobile device if setting to true.
createdAt
Type: string
The date when the project was created.
Format: yyyy-mm-dd
Examples:
"createdAt": "2025-11-26"
"createdAt": "2025-01-15"
❌ Wrong formats:
"createdAt": "11/26/2025"
"createdAt": "2025-11-26T00:00:00Z"
"createdAt": "Nov 26, 2025"
Optional Fields
featured
Type: boolean
Default: false
Whether the project should be featured on the homepage.
Note: Set to false for all new projects. Maintainers may feature exceptional projects after review.
updatedAt
Type: string
Format: yyyy-mm-dd
The date when the project was last significantly updated.
When to update:
- Major feature additions
- Significant redesigns
- Breaking changes
Don't update for:
- Minor bug fixes
- Small tweaks
- Documentation updates
license
Type: string
Default: "MIT"
The license under which your project is released.
Common licenses:
MIT- Most permissive (recommended)Apache-2.0- Patent protectionGPL-3.0- Copyleft
Validation
Before submitting, validate your metadata:
npm run collect
This command checks all meta.json files and reports errors.
Common errors:
❌ Missing required field
Invalid meta.json (missing required fields)
❌ Invalid type
Invalid type "invalid-type"
❌ Empty authors array
authors must be a non-empty array
❌ Wrong date format
createdAt must be in yyyy-mm-dd format
Complete Schema
{
"title": "string (required)",
"description": "string (required)",
"type": "tool|art|game|other (required)",
"category": "string (required)",
"tags": ["string", "..."] (required, 3-7 recommended),
"authors": ["string", "..."] (required, non-empty),
"mobile": boolean (required),
"createdAt": "yyyy-mm-dd (required)",
"featured": boolean (optional, default: false),
"updatedAt": "yyyy-mm-dd (optional)",
"license": "string (optional, default: MIT)"
}
Tips
Choose Good Tags
Think about what users would search for:
- Technology used:
react,canvas,webgl - Domain:
music,image,binary - Functionality:
editor,converter,analyzer
Write Clear Descriptions
Focus on what the project does, not what it is:
- ✅ "Edit binary files with real-time hex viewer"
- ❌ "A hex editor"
Test Thoroughly
Before submitting:
- Run
npm run collect- No errors - Visit your project - Works correctly
- Check mobile if
mobile: true - No console errors
Need help? Check existing projects' meta.json files for reference or ask on GitHub.