283

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.

Jeff Schaller
  • 67,283
  • 35
  • 116
  • 255
Amree
  • 3,177

34 Answers34

188

Using pandoc and lynx without creating temporary files:

pandoc file.md | lynx -stdin
  • 34
    Or just pandoc -t plain file.md | less – Adriano P Sep 26 '15 at 17:53
  • 18
    then add this to .bashrc: md() { pandoc "$1" | lynx -stdin; } – Dave Nov 26 '16 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 Feb 12 '19 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 May 10 '19 at 20:41
  • To create a function that accepts a filename or stdin pandoc ${@:1:2} | lynx -stdin – cambunctious Dec 06 '19 at 17:29
  • Can pandoc quit right away with just q key presses? – alper Aug 22 '21 at 22:02
128

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.

Peque
  • 3,462
  • 8
    Arch Linux users: Grip is a different package. Do pip install grip instead. – ave Jun 20 '19 at 21:04
  • 1
    Works like a charm. I recommend this. – some_guy632 Jun 26 '19 at 00:18
  • 5
    Must read it in a browser though... Not always possible. – ixe013 Oct 30 '19 at 12:41
  • 1
    Note that, due to the limitation of GitHub API, only 60 requests per hour can be sent. If you have a GitHub account, by using --user option, you can send 5000 requests per hour. – ynn Nov 24 '19 at 10:56
  • This is great! It updates when I just change the README.md without F5! – xjcl Jun 22 '20 at 23:46
  • where is the .html file created? Why is there a need for a simple http server running? This works better than all the other answers for me. I just wish I had an .html file that I can just open from the browser – Tono Nam Sep 09 '20 at 00:14
  • 1
    @TonoNam You could just create it yourself. From your browser you can save the page as HTML (single file). The server is just so that you can edit the Markdown file and see the changes in real-time, which is useful for many cases. – Peque Sep 09 '20 at 07:15
  • 25
    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. – HighCommander4 May 28 '21 at 04:45
  • @HighCommander4 does it, though? I didn't specify any place in GitHub, and it's hosting it on a localhost http server. Am I missing something? – CivFan Mar 31 '22 at 04:19
  • 1
    @CivFan Yes, grip implements the Markdown rendering by making a call to api.github.com. – HighCommander4 Mar 31 '22 at 09:14
  • In Arch Linux there is a python-grip package, no need to use pip. – Ashark Jan 05 '23 at 05:29
  • While I installed this and I like it (I was previewing something bound for GitHub anyway), do note that it's possible to view GitHub-flavoured Markdown in the terminal using the gfm format for pandoc: pandoc -f gfm README.md | lynx -stdin. – icedwater Apr 17 '23 at 09:38
  • Doesn't address the issue of rendering inside the shell – Jacob Valdez Sep 21 '23 at 15:10
72

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

slm
  • 369,824
Red Pill
  • 898
  • 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 Aug 23 '15 at 08: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 Jul 24 '16 at 09:44
  • Hey, what about that Python 3 version? – Lucas Soares Sep 11 '16 at 04:10
  • will do as soon Py3 is ready for POSIX https://thoughtstreams.io/ncoghlan_dev/missing-pieces-in-python-3-unicode/ – Red Pill Sep 14 '16 at 09:05
  • Too bad it still doesn't support light background. (installed with pip as suggested in Readme) – Ruslan Apr 27 '17 at 08:02
  • Beautiful! Exactly what I wanted! – Andriy Makukha Apr 24 '18 at 16:24
  • I like using this with the -H option to do something like this: $ mdv -H README.md > ~/Desktop/this.html Now hit this.html with your browser and enjoy the viewing pleasure. – fbicknel Jul 18 '18 at 20:54
  • pip install mdv --user # install this for just your user , easiest way – Amias Nov 09 '18 at 13:53
  • 2
    It appears to be abandoned as of 2019--critical bugs (like rendering code blocks) are not being addressed. – gnkdl_gansklgna Jun 20 '19 at 18:04
  • For long files, you can also pipe this via mdv FILE | less -r – dessalines Feb 25 '20 at 15:42
  • @duane: It's been n-abandoned this year apparently. – einpoklum Dec 22 '21 at 11:35
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.

Steven D
  • 46,160
  • 9
    In VIM you can get syntax highlight by manually setting the syntax to markdown if it isn't recognized. :set syntax=mkd – Gert Nov 17 '10 at 09:48
  • 3
    I never would have thought to use -stdin and lynx, very clever indeed and just what I needed. – NickO Jan 07 '14 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 Dec 22 '16 at 16:33
  • 1
    How can I install html2text ? – alper Aug 22 '21 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.

Fran
  • 1,811
  • 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 Dec 02 '14 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 Oct 04 '15 at 11:40
  • Very nice tip. Also recommended here: http://softwarerecs.stackexchange.com/a/17740

    The repository has changed to github: https://github.com/retext-project/retext

    – DrBeco Jun 07 '16 at 02:34
  • Ghostwriter works fine as a straight viewer, since it is single-pane. – Digger Nov 21 '23 at 22:27
22

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
Graeme
  • 34,027
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:

nnsense
  • 389
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"
}
A1rPun
  • 240
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.

carlo
  • 41
  • 1
  • 1
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.)

MountainX
  • 17,948
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
orzechow
  • 356
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.

Wim Coenen
  • 1,263
  • 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 Nov 21 '10 at 00:44
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

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.

MSpreij
  • 133
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.

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.

PapaFreud
  • 143
2

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
Jeff Schaller
  • 67,283
  • 35
  • 116
  • 255
2

batcat handles anything, and supports code snippets inside Markdown:

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

awvalenti
  • 191
2

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.

  • This does a great job with tables. – daviewales Jul 28 '23 at 00: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 Jul 28 '23 at 00:50
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)

DrBeco
  • 774
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

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.
Archemar
  • 31,554
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

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.

nerdguy
  • 11
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.

aap
  • 103
0

Moeditor

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

Kapil
  • 115
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.

  • Ubuntu users can implement this with packages already available from the repositories (https://packages.ubuntu.com/) – XavierStuvw Jan 09 '22 at 19:33
0

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

Kapil
  • 115
0

I use this function:

mdp() {
    pandoc -t plain `find . -maxdepth 1 -iname "${1:-readme.md}"` | less
}

Usage:

mdp <file>

Will open parsed .md file specified as argument

mdp

Will open readme.md if there's any

ivanjermakov
  • 303
  • 3
  • 8
0

just use cat foo.md on the command line in linux and you will see the file displayed enter image description here

0

I'm currently checking MkDocs (https://www.mkdocs.org/). A small python app which can run as a server, serving your .md files as HTML in a browser. Any change you make in the .md file is automatically transferred to the HTML page in your browser. It has various plugins and themes, and the ability to build your .md files to HTML pages.

Since MkDocs is started from CLI, it basically is not a GUI. Your webbrowser however... Although Lynx could solve that issue.

0

It is a GUI option but it is the widely used code editor VS Code. Writing and rendering (viewing) markdown files is pretty easy.

It also renders in real time while you are editing the markdown file. You can also go to cursor position on the rendering or text position from the rendering.

To be honest, I am surprised how this option have not been mentioned earlier considering its popularity.

alercelik
  • 101
  • As it’s currently written, your answer is unclear. Please [edit] to add additional details that will help others understand how this addresses the question asked. You can find more information on how to write good answers in the help center. – Community Apr 06 '23 at 09:51