286

I found a file formatted with Markdown. Could you suggest what viewer I could use to view this type of file? Hopefully one without a GUI, if it's possible.

I am looking for a viewer that could parse markdown file format that does not need any conversion, but something close to that should be okay.

6
  • I think what I want is some sort of browser addon that lets me open markdown files just like it was an html file. Does that exist?
    – PapaFreud
    Commented Nov 29, 2012 at 9:58
  • 1
    There are many versions of "markdown". Technically, LaTeX, HTML are markdowns, as is the italics bold bold italics and USE links...
    – vonbrand
    Commented Dec 27, 2015 at 21:08
  • 2
    retext now on github as @Fran recommended
    – DrBeco
    Commented Jun 7, 2016 at 2:35
  • 28
    @vonbrand LaTeX and HTML are markup languages. Markdown is a specific text formatting "language" (though you are correct that there are a number of variants, including the one used on Stack Exchange sites like this one). Markdown's name is a joke, as it lets you do a lot of the sorts of things that could be done with a markup language, without actually "marking up" (ie: adding tags) to your text (for the most part). Commented Oct 14, 2016 at 0:37
  • 1

35 Answers 35

190

Using pandoc and lynx without creating temporary files:

pandoc file.md | lynx -stdin
6
  • 35
    Or just pandoc -t plain file.md | less
    – Adriano P
    Commented Sep 26, 2015 at 17:53
  • 18
    then add this to .bashrc: md() { pandoc "$1" | lynx -stdin; }
    – Dave
    Commented Nov 26, 2016 at 17:03
  • 2
    After some tinkering, I settled on this, to default to reading "README.md", which is what I'm usually doing: function mdless { /usr/bin/pandoc -t plain "${1:-README.md}" | /usr/bin/less; }
    – bgvaughan
    Commented Feb 12, 2019 at 21:26
  • 2
    For @HDave's solution, if you get defining function based on alias 'md', do this: Check what it's for (e.g., Do you need/use it?): which md (mine was set to mkdir -p). No? Then add this above the line: unalias md. Received this error when using zsh on Ubuntu 18.
    – Swivel
    Commented May 10, 2019 at 20:41
  • To create a function that accepts a filename or stdin pandoc ${@:1:2} | lynx -stdin Commented Dec 6, 2019 at 17:29
130

You can use Grip, which renders the Markdown exactly as GitHub would (it uses the GitHub markdown API).

Install it with pip:

pip install grip

To render a file example.md:

grip -b example.md

What this looks like:

enter image description here

Privacy note

This solution sends the content of your Markdown document to GitHub.

If you do not trust GitHub/Microsoft and/or have sensitive data in your document, you may want to have a look at Grip's issue to complete the offline renderer.

Credits

@Joe's (Grip's author) answer in Stack Overflow.

13
  • 8
    Arch Linux users: Grip is a different package. Do pip install grip instead.
    – ave
    Commented Jun 20, 2019 at 21:04
  • 1
    Works like a charm. I recommend this. Commented Jun 26, 2019 at 0:18
  • 5
    Must read it in a browser though... Not always possible.
    – ixe013
    Commented Oct 30, 2019 at 12:41
  • 29
    To be clear, this tool will send the contents of your markdown file to GitHub, right? You may want to highlight that in a disclaimer, it's kind of a relevant aspect of the solution from a privacy point of view. Commented May 28, 2021 at 4:45
  • 2
    @CivFan Yes, grip implements the Markdown rendering by making a call to api.github.com. Commented Mar 31, 2022 at 9:14
75

I wrote a lightweight terminal markdown viewer in python, for CLI or as lib:

It supports e.g. tables, admonitions and tons of color themes.

Usage:
mdv [-t THEME] [-T C_THEME] [-x] [-l] [-L] [-c COLS] [-f FROM] [-m] [-M   DIR] [-H] [-A] [MDFILE]

Options:
MDFILE    : Path to markdown file
-t THEME  : Key within the color ansi_table.json. 'random' accepted.
-T C_THEME: Theme for code highlight. If not set: Use THEME.
-l        : Light background (not yet supported)
-L        : Display links
-x        : Do not try guess code lexer (guessing is a bit slow)
-f FROM   : Display FROM given substring of the file.
-m        : Monitor file for changes and redisplay FROM given substring
-M DIR    : Monitor directory for markdown file changes
-c COLS   : Fix columns to this (default: your terminal width)
-A        : Strip all ansi (no colors then)
-H        : Print html version

   enter image description here

11
  • I really like this, but it is missing some basic usability features, such as: not displaying the theme by default when run as an app (I really don't care about what theme is used, let me define one in my alias and then just display the markdown please), justifying paragraph text (not asking for advanced hyphenation here but at least word-wrap), and it also does not seem to handle paragraph breaks properly for some odd reason. It's a really good start and has lots of useful features like code syntax highlighting, but is basically not usable in its current state, sad because it came so close.
    – Thomas
    Commented Aug 23, 2015 at 8:20
  • 2
    Hi, thanks! Btw: after only 10 years or so, I fixed those ob things. If still interesting to you, have a look and feedback issues on GH.
    – Red Pill
    Commented Jul 24, 2016 at 9:44
  • Hey, what about that Python 3 version? Commented Sep 11, 2016 at 4:10
  • will do as soon Py3 is ready for POSIX thoughtstreams.io/ncoghlan_dev/…
    – Red Pill
    Commented Sep 14, 2016 at 9:05
  • 2
    It appears to be abandoned as of 2019--critical bugs (like rendering code blocks) are not being addressed. Commented Jun 20, 2019 at 18:04
51

The following website provides a tool that will translate markdown into HTML:

http://daringfireball.net/projects/markdown/

Once you convert the file to HTML, there are a number of command line tools to use to view the file. Using a test file that contains markdown formatted-text, I found the following worked nicely.

$ wget http://daringfireball.net/projects/downloads/Markdown_1.0.1.zip
$ unzip Markdown_1.0.1.zip
$ cd Markdown_1.0.1/
$ ./Markdown.pl ~/testfile.markdown | html2text

html2text is one of many tools you can use to view html formatted text from the command line. Another option, if you want slightly nicer output would be to use lynx:

$ ./Markdown.pl ~/testfile.markdown | lynx -stdin

If you are an emacs user, someone has written a mode for markdown which is available here: http://jblevins.org/projects/markdown-mode/. This provides nice syntax highlighting as can be seen in the screenshot on that website.

All of these tools should be available for slackware.

4
  • 9
    In VIM you can get syntax highlight by manually setting the syntax to markdown if it isn't recognized. :set syntax=mkd
    – Gert
    Commented Nov 17, 2010 at 9:48
  • 3
    I never would have thought to use -stdin and lynx, very clever indeed and just what I needed.
    – NickO
    Commented Jan 7, 2014 at 19:39
  • 1
    I tested this and can verify it works on Linux, but interestingly the man page informs such a feature applies only to UNIX. -stdin read the startfile from standard input (UNIX only).
    – sherrellbc
    Commented Dec 22, 2016 at 16:33
  • 1
    How can I install html2text ?
    – alper
    Commented Aug 22, 2021 at 21:59
45

Is a GUI program, but I find useful for this task ReText, that is an editor for Markdown and reStructuredText with a preview mode:

ReText screenshot

However, if you need see the file of ReText from a terminal, one option could be convert the marddown to html with pandoc and see the html copy in lynx:

pandoc file.mkd > file.html ; lynx file.html

Edit

There are a few more free markdown editors with preview available for *nix systems. Some in official repositories, others not, and each with their own strengths and weaknesses, but as suitable viewers I would like to highlight these:

  • Typora: It is still in beta phase, but it’s free meanwhile (it’s not clear how will be licensed the stable version). Although it is not FOSS, is perfect as markdown viewer because it work by default nearly as a WYSIWYG editor ("live preview mode") with a Outline panel (table of contents) that is very convenient for large files. The "source code mode" have syntax highlight, including bigger fonts for headings and italics for emphasis. And not only export to HTML, ODT and PDF. Also can import-export to several formats via pandoc integration.

  • Ghostwriter: HTML preview only (non editable) but also have a nice outline panel and syntax highlight. Without import options, but export to several formats with pandoc and others processors (MultiMarkdown, Discount, or cmark) and have a live spellcheck via hunspell/myspell.

  • MdCharm: Similar to Retext, but support markdown (markdown extra) and MultiMarkdown. Show also an outline (ToC) panel.

For R Markdown users, I should mention also editR. Is not a program, but a R package to edit/html preview of R Markdown in a browser. R Commander and RStudio also allow a easy preview in HTML, PDF or Word.

Now RStudio have a source and visual edit mode. The last is like type in a HTML preview, but we aware that this mode write the source markdown in their own way and rewrite any existing markdown with an alternative syntax. For example, the visual mode will change existing inline footnotes (as ^[text]) by normal labeled footnotes. This will not change the output, but could be annoyingly that a minimal edit in visual mode might reformat the whole source text.

4
  • I use retext exclusively. It hasn't failed me yet but then I haven't used it as extensively as some others have. I use it exclusively to make issues in github (which sadly uses markdown) and has no GUI for it.
    – shirish
    Commented Dec 2, 2014 at 20:18
  • Thanks for the tip Fran, exactly what I was looking for. Only thing I've noticed ReText missing so far is a refresh or "load on change" feature so you can use it in conjunction with other editors.
    – Ash
    Commented Oct 4, 2015 at 11:40
  • Very nice tip. Also recommended here: softwarerecs.stackexchange.com/a/17740 The repository has changed to github: github.com/retext-project/retext
    – DrBeco
    Commented Jun 7, 2016 at 2:34
  • Ghostwriter works fine as a straight viewer, since it is single-pane.
    – Digger
    Commented Nov 21, 2023 at 22:27
23

For those who prefer w3m (vi style bindings):

pandoc file.md | w3m -T text/html

I put it in a script, mdview.sh, and put that in my path:

#!/bin/sh
pandoc "$1" | w3m -T text/html
3
  • 3
    By far the best version without a gui: rendering keeps terminal colors, and looks like a simple less command with coloring.
    – Ulysse BN
    Commented Feb 9, 2017 at 23:28
  • 2
    mdw() { pandoc "$@" | w3m -T text/html }
    – HappyFace
    Commented May 6, 2020 at 3:15
  • 1
    Note that Github-flavoured markdown can be rendered well with pandoc -f gfm "$1" | w3m -T text/html, as of 2023.
    – icedwater
    Commented Apr 17, 2023 at 9:26
17

Use the mdless gem / command. It displays a Markdown file nicely in the terminal.

gem install mdless

Then run

mdless README.d

enter image description here

Links:

1
  • Similarly, mdcat
    – Mercer
    Commented Mar 21, 2021 at 8:33
12

Currently using mdp in Arch Linux and Termux on android, a markdown presentation tool.

image

Usage

$ mdp {file}.md

Slick alias

md() {
  fileName=${1:-"README.md"}
  mdp "$fileName"
}
1
  • 5
    This doesn't work for general md files, but it is a VERY neat tool nonetheless.
    – HappyFace
    Commented May 6, 2020 at 3:27
6

Readonly Vim with Markdown highlighting & folding

With Vim Markdown highlighting and folding up and running, the most straightforward solution is to evoke vim in the read only mode with either vim -R, or (at least on Ubuntu) more elegantly:

$ view filename.md

Add the following at the very bottom of your .vimrc file, and view will behave just like less with the added benefit of your favourite syntax highlighting (not only for markdown!) and folding:

" less behaviour for view
" https://unix.stackexchange.com/a/314184/39845

" http://vim.wikia.com/wiki/Using_vim_as_a_syntax-highlighting_pager
function! LessBehaviour()
    if (!&modifiable || &ro)
        set nonumber
        set nospell
        set laststatus=0    " Status line
        set cmdheight=1
        set guioptions=aiMr    " No menu bar, nor tool bar
        noremap u <C-u>
        noremap d <C-d>
        noremap q :q<CR>
    endif
endfunction

" https://vi.stackexchange.com/a/9101/3168
augroup ReadOnly
    au!
    au VimEnter * :call LessBehaviour() 
augroup END

There exists also a more rigorous less.sh script. On my system, it comes packaged with vim. To find it, use:

$ find /usr/share/vim -name less.sh

However, contrary to the script listed above, folding will not work with this less.sh.

4

There's also Discount, David Parsons' C implementation of John Gruber's Markdown text to html language. Discount consists of several command-line tools including markdown, mkd2html, makepage, mktags and theme.

http://www.pell.portland.or.us/~orc/Code/discount/

In addition, there's an implementation of markdown in C, using a PEG grammar.

https://github.com/jgm/peg-markdown

On Mac OS X you also may have a look at qlmarkdown, a QuickLook generator for Markdown files.

4

Bit late, but as I was trying to find the same and this was still an open tab, https://github.com/charmbracelet/glow/ looks and works quite well.
It's a product of https://charm.sh/ which makes terminals look better than they have any right to.

3

I know you said you preferred a non-GUI application, but I am currently working on a GUI application called DownMarker which does this. You can find the source in a mercurial repository here. You can find a stand-alone executable to run with mono or .NET here.

Caveat: It is far from finished and only occasionally tested on linux/mono. Last test I did was on Mono 2.6. If you want to build it yourself will need a recent version of mercurial to clone the repository, and MonoDevelop to compile the application.

1
  • 1
    It opens in my Windows 7 machine 64 bits, but it doesn't render the md document, it only shows the source. Nonetheless, it's amazing that a mono application just ran without a crash in my machine. :)
    – GmonC
    Commented Nov 21, 2010 at 0:44
3

A couple comments asked about or mentioned the possibility of using a browser add-on. I like this approach because I can edit markdown files in any Linux text editor (from nano to vim to Kate) and view the files in Firefox (my browser of choice).

I simply installed this Firefox add-on and it worked out of the box on Kubuntu 12.04 and Firefox 33.0. No tweaks required.

Markdown Viewer :: Add-ons for Firefox
https://addons.mozilla.org/en-us/firefox/addon/markdown-viewer/

(I also like ReText, but I would prefer to see something like ReText implemented as a plugin for Kate. ReText lacks too many features to compete with mature editors like Kate.)

1
  • The question asked for a viewer without gui, but I personally really like this solution. Commented May 3, 2017 at 13:30
3

An IMHO heavily underestimated command line markdown viewer is the markdown-cli.

Installation

npm install markdown-cli --global

Usage

markdown-cli <file>

Features

Probably not noticed much, because it misses any documentation...
But as far as I could figure out by some example markdown files, some things that convinced me:

  • handles ill formatted files much better (similarly to atom, github, etc.; eg. when blank lines are missing before lists)
  • more stable with formatting in headers or lists (bold text in lists breaks sublists in some other viewers)
  • proper table formatting
  • syntax highlightning
  • resolves footnote links to show the link instead of the footnote number (not everyone might want this)

Screenshot

example.png

Drawbacks

I have realized the following issues

  • code blocks are flattened (all leading spaces disappear)
  • two blank lines appear before lists
3

mdo - Terminal Markdown Viewer

(A wrapper I made around rich)

$ mdo README.md

enter image description here

Install:

$ pip install mdo

Or with pipx:

$ pipx install mdo
3

Mdcat can be use to preview it. As said here you can install binary for any platform. It can even preview images in md file in iTerm and Kitty
Syntax:

mdcat file.md
2
  • Migrated to codeberg.org/flausch/mdcat
    – xebeche
    Commented Mar 19, 2022 at 17:34
  • With Arch Linux it is even part of the extra repo (no need for AUR): pacman -S mdcat
    – JepZ
    Commented Jun 16 at 5:50
3

batcat handles anything, and supports code snippets inside Markdown:

a screenshot of batcat displaying a Markdown file with code snippets inside correctly colorized

3

This is an old post but an up to date and far simpler solution, which should be compatible with any OS that supports Python is using the library rich.

After installing the library on your system you can render a markdown file straight from the terminal as follows:

$ python -m rich.markdown README.md

A short example taken directly from the project github page: enter image description here

You can see the content in raw (on the left) and the rendered markdown (on the right).

You can also choose whether to use a pager or not, in case you wish to use its features or your terminal does not support colors, hyperlinks, etc.

2
  • This does a great job with tables.
    – daviewales
    Commented Jul 28, 2023 at 0:26
  • There's also rich-cli which can be installed with pipx install rich-cli, and gives you the command rich, so you can just run rich README.md. It's currently using an older release of rich which doesn't have table support, but presumably it will be updated soon.
    – daviewales
    Commented Jul 28, 2023 at 0:50
2

Assuming you want to see what the html looks like: Use a web browser (with an addon) as a viewer.

For example, for Google Chrome there's TextDown which also lets you edit files straight in the browser and see a live preview.

After adding it, you also need to go to chrome://chrome/extensions/ and check "allow access to file URLs" so you can open local files. A warning though: if you save (shift-ctrl-s) TextDown does not save to the file you opened but to your downloads folder.

1
  • There is also this extension for Firefox, which you can then get working by following this.
    – Wilf
    Commented Feb 28, 2014 at 13:50
2

I suggest taking a look at Atom. It is an excellent text editor with in-built markdown preview. I don't usually use the markdown preview mode as it has a serious bug - line breaks (unless they come in pairs which indicates a <p> tag's contents) are preserved in the preview. But the syntax highlight mode is so good (since Markdown is optimized to be human readable and Atom's colorization is excellent) that I usually end up reading markdown files in source view mode.

1

Here is a commandline script which opens up a markdown file in your browser after converting it into html: http://minhajuddin.com/2012/03/16/markdown-viewer-script-for-your-markdown-documents/

1

You could have a look at mad which is very easy to use:

mad file.md
1

This is an alias that encapsulates a function:

alias mdless='_mdless() { if [ -n "$1" ] ; then if [ -f "$1" ] ; then cat <(echo ".TH $1 7 `date --iso-8601` Dr.Beco Markdown") <(pandoc -t man $1) | groff -K utf8 -t -T utf8 -man 2>/dev/null | less ; fi ; fi ;}; _mdless '

Explanation

  • alias mdless='...' : creates an alias for mdless
  • _mdless() {...}; : creates a temporary function to be called afterwards
  • _mdless : at the end, call it (the function above)

Inside the function:

  • if [ -n "$1" ] ; then : if the first argument is not null then...
  • if [ -f "$1" ] ; then : also, if the file exists and is regular then...
  • cat arg1 arg2 | groff ... : cat sends this two arguments concatenated to groff; the arguments being:
    • arg1: <(echo ".TH $1 7date --iso-8601Dr.Beco Markdown") : something that starts the file and groff will understand as the header and footer notes. This substitutes the empty header from -s key on pandoc.
    • arg2: <(pandoc -t man $1) : the file itself, filtered by pandoc, outputing the man style of file $1
  • | groff -K utf8 -t -T utf8 -man 2>/dev/null : piping the resulting concatenated file to groff:
    • -K utf8 so groff understands the input file code
    • -t so it displays correctly tables in the file
    • -T utf8 so it output in the correct format
    • -man so it uses the MACRO package to outputs the file in man format
    • 2>/dev/null to ignore errors (after all, its a raw file being transformed in man by hand, we don't care the errors as long as we can see the file in a not-so-much-ugly format).
  • | less : finally, shows the file paginating it with less (I've tried to avoid this pipe by using groffer instead of groff, but groffer is not as robust as less and some files hangs it or do not show at all. So, let it go through one more pipe, what the heck!

Add it to your ~/.bash_aliases (or alike)

0
1

The most painless way for me is to use mdless gem from Ruby.

  1. Install ruby

    sudo apt-get install ruby

  2. Install mdless

    sudo gem install mdless

  3. Open file via mdless

    mdless filename.md

1
1

2 more tools:

  • Showdown is JavaScript port or Markdown. You can use it only from browser
  • txt2tags can read Markdown format but it adds a lot of new options and featues.
1

I know this is a bit late, but KDE's Okular (sudo apt install okular on ubuntu) can view markdown quite well, and doesn't have any conversion.

1
0

An easy solution for most situations: copy/paste the markdown into a viewer in the "cloud." Here are two choices:

  1. Dillinger.io
  2. Dingus

Nothing to install! Cross platform! Cross browser! Always available!

Disadvantages: could be hassle for large files, standard cloud application security issues.

0

Easy and available in probably every Linux distro's package repo. You'll need 'pandoc', 'w3m' and 'w3m-img' packages. With the last w3m can display images.

pandoc -f markdown -t html README.md | w3m -T text/html

'-f markdown' is optional. This will give you a nice enough preview with images right in the terminal window, the only downside is that you can't really distinguish inline code blocks.

1
  • Ubuntu users can implement this with packages already available from the repositories (packages.ubuntu.com) Commented Jan 9, 2022 at 19:33
0

You can install calibre software. It can be used to view markdown files.

0

Moeditor

Just stumbled on this nice, simple and effective markdown editor.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .