MyST Markdown Tools
mystjs is a set of open-source, community-driven tools designed for scientific communication, including a powerful authoring framework that supports blogs, online books, scientific papers, reports and journals articles.
Note The
mystjsproject is in beta. It is being used to explore a full MyST implementation in JavaScript and will change significantly and rapidly. The project is being developed by a small team of people on the Executable Books Project, and may make rapid decisions without fully public/inclusive discussion. We will continue to update this documentation as the project stabilizes.
Overview
The mystjs project provides a parser in Javascript (mystjs) and command line tool (myst-cli) for working with MyST Markdown projects.
- Parse MyST into a standardized AST, that follows the MyST Spec
- Provides functionality for cross-referencing, external structured links, and scientific citations
- Translate and render MyST into:
- HTML for static websites, and modern React for interactive websites (like this website!)
- PDFs and LaTeX documents, with specific templates for over 400 journals
- Microsoft Word export
See the documentation.
Get Started
The MyST CLI is available through Node and NPM:
npm install -g myst-cli
myst init
myst build my-doc.md --texDevelopment
All packages for mystjs are included in this repository (a monorepo!).
What's inside?
myst-cli uses npm as a package manager. It includes the following packages/apps:
Core Packages:
myst-clithis will provide CLI functionality formyst build mystdoc.mdjtexa templating library (see docs)myst-frontmaterdefinitions and validation for scientific authorship/affiliation frontmatter (see docs)myst-configValidation and reading of configuration filesmyst-templatestypes and validation for templates (LaTeX, web and word)
Markdown Parsing
markdown-it-mystmarkdown-it plugin to handle tokenizing roles and directives.myst-directivescore directives for MySTmyst-rolescore roles for MySTmyst-parserconverts markdown-it token stream to mdast
Readers
tex-to-mystconvert LaTeX to MyST ASTjats-to-mystconvert JATS xml to MyST AST
Transformers
myst-transformsa number of transformations for use with myst AST to transform, e.g. links, citations, cross-references, admonitions
Export Tools
myst-to-docxconvert MyST documents to word docs!myst-to-jatsconvert MyST to JATS, for use in scientific archivesmyst-to-texconvert MyST to LaTeX, to be used in combination with jtex to create stand alone LaTeX documentsmyst-to-htmlconvert MyST to HTML
Extensions:
myst-ext-card: Card directivesmyst-ext-grid: Grid directivesmyst-ext-tabs: Tab directivesmyst-ext-reactive: Reactive directives
Utilities
myst-commonSome common utilities for working with ASTsmyst-spec-extExtensions tomyst-specused throughout this repository, before pushing upstreamcitation-js-utilsutility functions to deal with citationsmyst-cli-utilssome shared utils between jtex, and myst-clisimple-validatorsvalidation utilities, that print all sorts of nice warnings
Each package is 100% TypeScript.
Versioning & Publishing
mystjs uses changesets to document changes to this monorepo, call npm run changeset and follow the prompts. Later, npm run version will be called and then npm run publish.
Utilities
mystjs is built and developed using:
- TypeScript for static type checking
- ESLint for code linting
- Prettier for code formatting
Build
To build all apps and packages, run the following command:
cd mystjs
npm run build
Develop
To develop all apps and packages, run the following command:
cd mystjs
npm run dev
This will create a local myst CLI interface that you can use to develop and test locally.