Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

How the repositories fit together

MyST Author is built from several repositories that are each useful on their own. This page is the source of truth for how they relate. Each repository documents its own interface.

What each one owns

RepositoryOwnsUseful on its own to
mystmdWhat MyST means: parsing, transforms, builds, and the content serverEveryone
mystmd-lspWhat an editor knows about a MyST project: references, labels, completion, hover, warningsAny LSP editor (VS Code, Neovim, Helix)
mystmd-clientStarting mystmd, reading its content server, and parsing one page the way mystmd doesAny tool that runs mystmd or parses a single page
myst-syntaxHighlighting MyST syntax, for CodeMirror and TextMate, and the VS Code and JupyterLab extensions that ship itAnyone who wants MyST highlighted in VS Code, JupyterLab, CodeMirror, or Shiki
myst-parser-unifiedParsing MyST with micromark, with line and column positions on every nodePeople using the unified Markdown tools (remark), and mystmd as a possible future parser
myst-author packages/previewRendering a page, live preview in CodeMirror, and choosing between the fast and built previewAnyone embedding a MyST preview, once it’s published
myst-author hostsRunning mystmd and the language server where no extension does, and anything that depends on the editor, such as documents, opening files and commandsPeople who want an editor

Each host, the web editor, VS Code or JupyterLab, starts mystmd and the language server its own way, as Architecture describes.

Nothing depends on myst-parser-unified yet. It’s a candidate to replace the parser that mystmd-lsp and the preview use. mystmd-lsp’s design notes list what a parser must provide to replace its regexes. Its drop-in mystParse matches mystmd’s tree on nearly every MyST example in myst-spec.

Where a feature goes

Put each feature in the lowest repository that can hold it:

  1. mystmd, if it’s about what MyST means or what a build contains. Write it up as an upstream proposal and work around it until it lands.

  2. mystmd-lsp, if an editor needs to know it. Every LSP editor then gets it, not just MyST Author’s hosts.

  3. myst-syntax, if it’s about how MyST source looks.

  4. packages/preview, if it’s about how MyST renders. The web editor, JupyterLab and the VS Code live editor all share it.

  5. A host, only for what depends on that editor (see Adding a host).

Keeping them independent