| title | README |
|---|---|
| category | documentation |
A meaning-first markup language that remains readable as plain text.
A semantic alternative to Markdown that compiles to HTML. Instead of describing formatting, MML describes meaning through structured tags like claim, evidence, argument, timeline, and event.
- Human-readable source documents
- Explicit semantic structure
- Strong parent-child validation
- Meaning-first document modeling
- Plain text as the authoring format
- Automatic structure generation
- Compiler-friendly AST representation
- Extensible semantic schemas
argument
claim
Markdown introduces an unnecessary abstraction layer.
evidence
The final rendered output is already HTML.
/evidence
/claim
/argument
<argument>
<claim>
<text>Markdown introduces an unnecessary abstraction layer.</text>
<evidence>
<text>The final rendered output is already HTML.</text>
</evidence>
</claim>
</argument>MML is built around semantic objects rather than formatting instructions.
For example:
argument
claim
evidence
timeline
event
comparison
entity
image
caption
represent meaningful concepts.
By contrast, generic containers such as:
<div>
<span>have no direct equivalent in MML.
Every element should represent something recognizable and meaningful.
Opening tags are written as plain keywords.
claim
section title="Background"
Closing tags use a slash prefix.
/claim
/section
Anything that is not recognized as valid markup is treated as text.
claim
Arguments are not always unhealthy.
/claim
The word "Arguments" is content, not a tag.
MML validates semantic structure, not just syntax.
Example:
evidence
The final output is already HTML.
/evidence
Produces:
Error:
evidence requires parent claim.
Valid:
argument
claim
evidence
The final output is already HTML.
/evidence
/claim
/argument
Plain text is automatically wrapped in text nodes.
Source:
claim
Markdown is unnecessary.
/claim
Internal representation:
<claim>
<text>Markdown is unnecessary.</text>
</claim>Authors rarely need to write explicit text tags.
argument
└── claim
└── evidence
Rules:
- argument requires at least one claim
- claim may exist standalone
- evidence requires parent claim
timeline
├── year-start
├── event
└── year-end
Rules:
- timeline requires year-start
- timeline requires year-end
- event requires date
calendar
├── year-month
└── event
Rules:
- calendar requires year-month
- event requires date
comparison
├── before
└── after
comparison
├── entity
│ └── unique
├── entity
│ └── unique
└── shared
comparison
├── scenario
│ └── conditions
└── scenario
└── conditions
media
├── image
├── video
├── audio
├── caption
└── source
Rules:
- media requires at least one image, audio, or video
- caption typically belongs to media
If something is not valid markup, it is text.
The parser should never aggressively reinterpret ordinary writing as structure.
Element names are singular.
Valid:
claim
event
entity
image
Invalid:
claims
events
entities
images
Every opened element must be explicitly closed.
Valid:
claim
Text.
/claim
Invalid:
claim
Text.
A tag should only exist if it represents a meaningful concept that cannot already be expressed using existing tags.
Early specification and parser prototype.
The language is actively evolving and many schemas, validation rules, and compilation targets remain under discussion.
Have an issue? GET IN TOUCH.
Have an idea for a tag we should add? SUBMIT A TAG here.
Do you have a more advanced tag idea? SUBMIT A SCHEMA instead!
You can read the full SPEC here.
Try the PARSER.
Here is the list of TAGS.
Looking for the SHORTHAND version?
Check out a list of PROPOSED TAGS.
Curious about how the tags can be used together? Find out here ---> DEPENDENCIES.
Did you know that you can use the tag CHAPTER instead of SECTION, if you want? SYNONYMS make it fine to replace one with the other!
#readme #markup #grammar #syntax #semantic #data-structure #schemas #official #tags