logseq/mldoc

Another Emacs Org-mode and Markdown parser.

281

stars

687

commits

OCaml

primary language

Aug 31, 2026

updated

README

* Mldoc
  Another Org-mode and Markdown parser implemented using OCaml and [[https://github.com/inhabitedtype/angstrom][Angstrom]].
  It's based on [[http://iso.mor.phis.me/projects/mlorg/][mlorg]] which is a high quality Org-mode parser written by [[https://github.com/asmanur?tab=repositories][Simon Castellan]].

** Who's using Mldoc?
   - [[https://logseq.com][Logseq]], a local-first notes app (In development)

** Build
   #+begin_src sh
     # compile
     make

     # run test
     make test
   #+end_src

** Run utop
   #+begin_src sh
     cd lib
     dune utop
   #+end_src

** Usage
*** For Javascript users
    #+BEGIN_SRC sh
      # install mldoc
      npm install -g mldoc

      # convert org mode file to html
      mldoc convert -i ./test.org -o ./test.html

      # convert markdown mode file to html
      mldoc convert -i ./test.markdown -o ./test.html
    #+END_SRC

*** For OCaml users
    #+BEGIN_SRC sh
      # compile
      make

      # convert org file to html
      _build/default/bin/main.exe ./test.org -o ./test.html
    #+END_SRC

*** Invoke utop in Emacs
    #+BEGIN_SRC sh
      opam config exec -- dune utop lib -- -emacs
    #+END_SRC

** Parsing todos [12/12]
*** DONE Heading [7/7]
    1. [X] level
    2. [X] marker
    3. [X] priority
    4. [X] title
    5. [X] tags
    6. [X] stats
    7. [X] footnote

*** DONE Markup (Inline) [14/14]
    1. [X] Latex fragment
    2. [X] timestamp
    3. [X] entity
    4. [X] macro
    5. [X] statistics cookie
    6. [X] footnote reference
    7. [X] link
    8. [X] direct link
    9. [X] target
    10. [X] verbatim
    11. [X] code
    12. [X] nested emphasis [4/4]
        1. [X] bold
        2. [X] underline
        3. [X] italic
        4. [X] strike_through
    13. [X] subscript
    14. [X] superscript

*** DONE Table [2/2]
    1. [X] preliminary support
    2. [X] column groups

*** DONE List [3/3]
    1. [X] Unordered list
    2. [X] Ordered list
    3. [X] Definition list

*** DONE Directive

*** DONE Block [5/5]
    1. [X] src
    2. [X] quote
    3. [X] example
    4. [X] custom
    5. [X] block nested in block

*** DONE Comment

*** DONE Drawer
    Not exported.

*** DONE Horizontal

*** DONE Latex environment

*** DONE Quoting
*** DONE TOC

** DONE Export [2/2]
   1. [X] json
   2. [X] html

Not written in Markdown, so it's shown here as plain text — view it formatted on GitHub.

Contributors

tiensonqin

497 commits

RCmerci

172 commits

cursoragent

8 commits

stdword

6 commits

logseq/mldoc

Another Emacs Org-mode and Markdown parser.

281

stars

687

commits

OCaml

primary language

Aug 31, 2026

updated

README

* Mldoc
  Another Org-mode and Markdown parser implemented using OCaml and [[https://github.com/inhabitedtype/angstrom][Angstrom]].
  It's based on [[http://iso.mor.phis.me/projects/mlorg/][mlorg]] which is a high quality Org-mode parser written by [[https://github.com/asmanur?tab=repositories][Simon Castellan]].

** Who's using Mldoc?
   - [[https://logseq.com][Logseq]], a local-first notes app (In development)

** Build
   #+begin_src sh
     # compile
     make

     # run test
     make test
   #+end_src

** Run utop
   #+begin_src sh
     cd lib
     dune utop
   #+end_src

** Usage
*** For Javascript users
    #+BEGIN_SRC sh
      # install mldoc
      npm install -g mldoc

      # convert org mode file to html
      mldoc convert -i ./test.org -o ./test.html

      # convert markdown mode file to html
      mldoc convert -i ./test.markdown -o ./test.html
    #+END_SRC

*** For OCaml users
    #+BEGIN_SRC sh
      # compile
      make

      # convert org file to html
      _build/default/bin/main.exe ./test.org -o ./test.html
    #+END_SRC

*** Invoke utop in Emacs
    #+BEGIN_SRC sh
      opam config exec -- dune utop lib -- -emacs
    #+END_SRC

** Parsing todos [12/12]
*** DONE Heading [7/7]
    1. [X] level
    2. [X] marker
    3. [X] priority
    4. [X] title
    5. [X] tags
    6. [X] stats
    7. [X] footnote

*** DONE Markup (Inline) [14/14]
    1. [X] Latex fragment
    2. [X] timestamp
    3. [X] entity
    4. [X] macro
    5. [X] statistics cookie
    6. [X] footnote reference
    7. [X] link
    8. [X] direct link
    9. [X] target
    10. [X] verbatim
    11. [X] code
    12. [X] nested emphasis [4/4]
        1. [X] bold
        2. [X] underline
        3. [X] italic
        4. [X] strike_through
    13. [X] subscript
    14. [X] superscript

*** DONE Table [2/2]
    1. [X] preliminary support
    2. [X] column groups

*** DONE List [3/3]
    1. [X] Unordered list
    2. [X] Ordered list
    3. [X] Definition list

*** DONE Directive

*** DONE Block [5/5]
    1. [X] src
    2. [X] quote
    3. [X] example
    4. [X] custom
    5. [X] block nested in block

*** DONE Comment

*** DONE Drawer
    Not exported.

*** DONE Horizontal

*** DONE Latex environment

*** DONE Quoting
*** DONE TOC

** DONE Export [2/2]
   1. [X] json
   2. [X] html

Not written in Markdown, so it's shown here as plain text — view it formatted on GitHub.

Contributors

tiensonqin

497 commits

RCmerci

172 commits

cursoragent

8 commits

stdword

6 commits

Languages

OCaml

98.6%

JavaScript

1.3%