Convert
Format conversion utilities.
Overview
mx convert provides bidirectional conversion between
markdown and YAML. These commands are the format bridge for the sync workflow: markdown is the human-friendly
authoring format, YAML is the machine format used by
mx sync to round-trip issues and discussions with
GitHub.
Two subcommands, one for each direction:
md2yaml– markdown to YAML (for feeding intomx sync push)yaml2md– YAML to markdown (for reading sync output as prose)
Both commands accept a single file or an entire directory. When
given a directory, every file with the matching extension
(.md for md2yaml, .yaml or
.yml for yaml2md) is converted.
md2yaml
mx convert md2yaml <input>
Convert markdown files to the YAML format used by
mx sync. The input can be a single .md
file or a directory of markdown files. Output YAML files use the
same base filename with a .yaml extension.
Flags
Flag |
Type |
Description |
|---|---|---|
|
positional |
Path to a markdown file or directory of markdown files. |
|
path |
Output directory for generated YAML files. Defaults to the current working directory. |
|
flag |
Preview what would be created without writing any files. Prints the output path, title, type, and labels for each file. |
Examples
mx convert md2yaml notes/backlog.mdmx convert md2yaml notes/ --output ./yaml-issuesmx convert md2yaml notes/backlog.md --dry-runMarkdown input formats
md2yaml understands two styles of markdown input.
Frontmatter style uses a YAML frontmatter block
delimited by ---. This is the preferred format for
clean round-trips:
---
title: "Add dark mode support"
type: issue
labels:
- enhancement
- ui
priority: P2
---
## Context
Users have requested a dark mode option...Supported frontmatter fields: title,
type (defaults to issue),
labels (list), and priority (converted to
a priority:<value> label automatically).
Inline style uses a heading and bold metadata lines. This is convenient for quick authoring:
# Add dark mode support
**Type:** `issue`
**Labels:** `enhancement`, `ui`
## Context
Users have requested a dark mode option...In both formats, everything after the metadata (frontmatter or
inline fields) becomes the body_markdown field in the
output YAML.
Output format
The generated YAML matches the schema used by
mx sync. The output can be pushed directly to GitHub
with mx sync push:
mx convert md2yaml notes/dark-mode.md --output ./sync-cache
mx sync push coryzibell/mx --input ./sync-cacheSee Sync for the full YAML file format specification.
yaml2md
mx convert yaml2md <input>
Convert YAML files (from mx sync pull or
hand-authored) back to readable markdown. The input can be a single
.yaml/.yml file or a directory. Output
filenames are derived from the issue number and title slug (e.g.,
42-fix-crash-on-empty-input.md) when a GitHub issue
number is present, or from the original filename otherwise.
Flags
Flag |
Type |
Description |
|---|---|---|
|
positional |
Path to a YAML file or directory of YAML files. |
|
path |
Output directory for generated markdown files. Defaults to the current working directory. |
|
string |
Repository in |
|
flag |
Preview what would be created without writing any files. Prints the output path, title, and issue/discussion number for each file. |
Examples
mx convert yaml2md cache/sync/coryzibell-mx/42-dark-mode.yamlmx convert yaml2md cache/sync/coryzibell-mx/ --output ./readablemx convert yaml2md issue.yaml --repo coryzibell/mxmx convert yaml2md cache/sync/coryzibell-mx/ --dry-runOutput structure
The generated markdown uses YAML frontmatter for metadata, followed by the issue body and any comments:
---
title: "Add dark mode support"
type: issue
labels:
- enhancement
- ui
state: open
github_issue: 42
github_repo: coryzibell/mx
updated_at: 2025-01-15T10:30:00Z
---
The full issue body in markdown...
---
## Comments
### username (Jan 15, 2025)
Comment text here...The frontmatter preserves enough metadata for a clean round-trip
back through md2yaml if needed.
Repo inference
When --repo is not provided, yaml2md infers the
repository from the parent directory name by splitting on the first
hyphen. A file at
cache/sync/coryzibell-mx/42-dark-mode.yaml infers
coryzibell/mx. If the directory name has no hyphen, the
repo defaults to unknown/<dirname>.
For reliable results, pass --repo explicitly.
Typical workflows
Bulk-importing issues from markdown notes
Convert a directory of markdown notes to YAML and push them as new GitHub issues:
mx convert md2yaml notes/ --output ./import-batch
mx sync push coryzibell/mx --input ./import-batchEach markdown file becomes a new issue. After push, the YAML files are updated with assigned issue numbers.
Reading sync output as prose
Pull issues from GitHub, then convert to readable markdown for review:
mx sync pull coryzibell/mx
mx convert yaml2md ~/.wonka/cache/sync/coryzibell-mx/ --output ./issues-readableDry-run preview
Both commands support --dry-run to preview the
conversion without writing files:
mx convert md2yaml notes/ --dry-run
mx convert yaml2md cache/ --dry-runDry-run output shows the file path that would be created, along with key metadata (title, type, labels, issue number) for each item.
Related commands
mx sync– the sync workflow that consumes and produces the YAML format these commands convert to and from.