
Show HN: Markdeck – author cool slides, text-only, offline-ready, collaborative - tcc_42
https://github.com/arnehilmann/markdeck
======
sephoric
I love that "offline-ready" is a feature that's becoming more and more
supported and prominent. I don't know anyone else in the power user community
who doesn't have home internet, but since getting rid of ours, I've made that
feature a high priority of all apps I've been dreaming up and selling.

I've even gone so far as to remove the concept of "live data sync" from all my
apps, partially because it's so incredibly error prone and hard to get right,
partially because it tends to make software seem laggy and slow since it shows
stale data while loading live data in the background, and partially because
usually it's unneeded as a built-in feature if you're just using files, which
can then be synced with any of the many file syncing service (iCloud, Dropbox,
OneDrive, Box).

Although it's very doubtful other power users will adopt internet-less lives,
if more of us did, not only would we be more productive, but we'd all have
more incentive to make "offline-ready" a much better experience and even move
to "offline-first" like I aim to.

~~~
ChristianBundy
Are you on Scuttlebutt[0]? It's an offline-friendly social network, and some
users are completely off-grid.

[0]: [https://www.scuttlebutt.nz/](https://www.scuttlebutt.nz/)

~~~
sephoric
I've never heard of that, thanks for sharing it. I'm much too busy with
interesting projects and client work to join yet another online social
network, even one that's offline-friendly, but it's still really interesting
to know it exists :)

------
jobvandervoort
This looks cool. Looking forward to give it a try.

For years I've been using Deckset[0] for all my presentations. Being able to
just edit a text file to write and update slides is a massive advantage. I
usually export them as pdf, which 99% of conferences are happy with.

A big bonus is that you can now version control your slides, allow them to get
forked, etc.

If you're curious to see what those slides look like, check any of my previous
talks [1].

[0]: [https://www.deckset.com/](https://www.deckset.com/)

[1]: [http://jobv.gitlab.io/talks/](http://jobv.gitlab.io/talks/)

~~~
alaithea
I love Deckset-- using it is like having presentation creation superpowers.
But since it's OSX-only, I've moved to GitPitch, which is cross-platform and
has the added benefit of hosting the slides.

[https://gitpitch.com/](https://gitpitch.com/)

~~~
tcc_42
I had to use gitpitch for one presentation only, so correct me if I am wrong,
but with gitpitch you cannot see the resulting slides before you push them to
the repo, right?

We had more than 200 commits at the end of one day, 150 of them to solve minor
layout problems... with a (feeled) round-trip-time of 10-20seconds, that
became frustrating quite fast...

~~~
em-bee
you could squash those commits, but i agree it would be better not to have
them.

can you commit with --amend instead to avoid creating new commits every time?

~~~
tcc_42
That wouldnt help, I am afraid: the web hook of gitpitch starts on push to the
github repo, so you _really have_ to push your change...

~~~
em-bee
right, good point. didn't think of that. you can push after --amend but
gitpitch may not work with that.

------
djsumdog
When I looked at it, I was like, "huh .. it's a lot like reveal.js" and then I
looked carefully at the README and it is reveal.js, with extensions/mods.

I've used reveal.js for a while. I found it most useful when I did
presentations for multiple meetups on the same open source project. I created
a little build tool that let me re-use slides for Ruby, Scala and Python
meetups (the service was written in Scala, client in Python and devops was all
Ruby, but that's since been migrated to Docker):

[https://github.com/bigsense/presentations](https://github.com/bigsense/presentations)

[http://bigsense.github.io/](http://bigsense.github.io/)

Tools like this are great if you have several similar presentations. Some of
the additions in Markdeck are things I've kinda hacked in (like terminal
output players). Still with a recent presentation where I did everything from
scratch, I used the same build process and found it felt a bit much for
something that didn't require the shared-slides use case and I wondered if I
would have just saved time writing it in a GUI/WYSIWYG tool like OpenOffice or
Powerpoint.

------
amanzi
My only feedback is to commend the author on including a "Similar projects"
section in the README file. I love when authors are not afraid to compare
their projects to other similar pieces of work.

~~~
tcc_42
In fact, there already is such a (okay, rather short) section in the README
[0]. But I plan to incorporate the other tools mentioned here. Only the
feature comparison table with all of these tools against all of the features
mentioned here will have to wait, I am afraid...

[0]: [https://github.com/arnehilmann/markdeck#similar-
projects](https://github.com/arnehilmann/markdeck#similar-projects)

~~~
zapzupnz
> In fact, there already is such a [...] section in the README

GP knows. You were being commended for it. :-)

------
xemoka
I've been using Backslide [0] for all my lecture slides for a couple years
now, seems quite similar. Backslide doesn't use pandoc though.

[0]:
[https://github.com/sinedied/backslide](https://github.com/sinedied/backslide)

~~~
Kihashi
I tried Backslide for a recent presentation, but I'm not sure I can recommend
it. Exporting things properly turned out to be quite hard.

------
hoov
This is really nice, especially all the integrations. I've been using
slides.com for a while, and I may switch to this. But, one feature that would
be amazing would be the ability to upload to an S3 bucket. Bonus points for
creating a public bucket configured correctly to view the slides. It's
annoying to have to carry every possible type of dongle and fight with A/V
issues at random places when you need to show a deck on hardware that you
don't control. I always make sure that the content I need to show is available
on any machine with an internet connection, but it takes a lot of effort
sometimes.

~~~
Leftium
I use [https://surge.sh/](https://surge.sh/) to host my reveal.js
presentations for free, images and all.

Examples: [https://marketing-slides.surge.sh](https://marketing-
slides.surge.sh)

~~~
tcc_42
That looks really interesting.

------
whitten
So Markdeck lets you use ascii art via pandoc, as well as generating slides
from text with titles, background images and background colors. It can also
generate slides with "hand-written sketches" as in the complete slideshow:
[https://arnehilmann.github.io/markdeck/showcase/#/example-
te...](https://arnehilmann.github.io/markdeck/showcase/#/example-terminal-
session-asciinema)

I tried to help by putting in a change request, but couldn't exactly figure
out where the slides were coming from.

~~~
StavrosK
Can it really not include images in the output though? I didn't see an example
in the showcase.

~~~
tcc_42
The word cloud and the stick figure are taken from the `assets/img` folder;
you can reference ANY file you want, as long as it is located somewhere within
the `assets` folder.

~~~
StavrosK
That sounds great, thanks! I'll try it right away.

------
miki123211
I'm definitely going to look into that one. As a blind user who needs to do
presentations sometimes, I hate wysiwyg and I always use text-based tools. My
favorite is Spectacle [1], as it apparently looks pretty good and I can upload
presentations to now with a nice, simple, memorable URL. It's amazing when you
can just open up a browser, point it to an URL you remember and the
presentation just opens.

[1]
[https://github.com/FormidableLabs/spectacle](https://github.com/FormidableLabs/spectacle)

~~~
IshKebab
Remark.js looks similar but less complex I think.

------
geraldbauer
FYI: Slideshow (S9) is another free (open source) alternative offering themes
/ template packs for reveal.js, bespoke.js, impress.js ("prezi-style"), s5,
s6, shower, and more. See
[http://slideshow-s9.github.io](http://slideshow-s9.github.io) and
[https://github.com/slideshow-templates](https://github.com/slideshow-
templates)

------
Gys
Golang has a similar tool called 'present' [0]. Sample presentation:
[https://talks.golang.org/2017/state-of-go-
may.slide](https://talks.golang.org/2017/state-of-go-may.slide)

[0]
[https://godoc.org/golang.org/x/tools/cmd/present](https://godoc.org/golang.org/x/tools/cmd/present)

------
gerald1248
The reason I use Markdeck for all presentations is the care that the author
has lavished on the many, many integrations. Anyone can render to PDF, but few
tools produce pixel perfect PDF you can hand to your audience afterwards. Not
to forget CSS3 backgrounds, Vega Lite charts mixed with TeX formulas and DITAA
- full support for anything the browser will put up with.

------
atsaloli
How is this better than [https://pandoc.org/MANUAL.html#producing-slide-shows-
with-pa...](https://pandoc.org/MANUAL.html#producing-slide-shows-with-pandoc)
? Oh! You've got other yummy things rolled in there like graphviz and more.
Thanks! I've got an important presentation coming up on Thursday, I'll give
this a go!

~~~
tcc_42
maybe important/interesting for you: the pdf export.

~~~
owaty
pandoc can do pdfs too (via beamer)

~~~
tcc_42
Yes, but markdeck uses decktape and chrome headless... so your PDF is in fact
a near pixel-perfect version of your HTML slides.

~~~
atsaloli
Yep! I just wasn't willing to run "curl ... | bash" on a corporate computer to
install markdeck. I made a note to circle back to it, I still want to try it,
the slides look slicker than those generated by pandoc with beamer which is
what I use now to generate PDF presentations. my first choice was GitPitch but
rendering PDFs doesn't work without using their web service and this content
has got to stay on the private network.

~~~
tcc_42
So how would you like to install such a tool on a corporate device? Is docker
an option In your case? Is downloading and reviewing the scaffold script
sufficient (before actually starting it)?

~~~
atsaloli
yeah, that would be fine -- what stopped me actually (now that I'm circling
back to it) was the requirement for docker-compose which my sandbox VM didn't
have. and still doesn't (some dependency is broken). sigh. that's all the time
I have for it now.

~~~
atsaloli
I actually narrowed it down a bit further and reached out to someone
internally that can help me work through this. thanks!

~~~
atsaloli
I tried this at home on Ubuntu 16 LTS and discovered my Docker is too old.

ERROR: Version in "./docker-compose.yaml" is unsupported. ... specify a
version of "2" (or "2.0") ...

markdeck uses version 3.2

I guess it's time to finally upgrade to Ubuntu 18 LTS. I just needed a reason.
=)

------
preek
Shameless plug: Being a lecturer, I wrote something similar years ago:
[https://github.com/munen/p_slides](https://github.com/munen/p_slides)

p_slides doesn’t have any dependency that doesn’t run in the browser and its
files can be checked into SCM which makes collaboration easy.

------
pondidum
What advantage does this have over just using reveal.js's support for external
markdown document for slides?

~~~
tcc_42
markdeck can create diagrams and charts on-the-fly (graphviz, ditaa, plantuml,
a2s, Vega-lite). And it can export the slides as PDF or as standalone HTML
file. Plus out-of-the-box auto-reloading the slides on change, emojis, font-
awesome, math-jax, and some other stuff helpful when authoring slides...

But when you don't need any of the above, then markdeck in fact has no
advantage over plain reveal.js and markdown.

~~~
pondidum
Thanks for the reply, I might look into this for my next presentation (the
graphviz could be pretty useful for me)

------
johnlp
This is super awesome!! I wish it didn't spam the hell out of my browser
history though.

------
Dowwie
Are there plans to enable remote control functionality, such as
[https://github.com/jpsim/DeckRocket](https://github.com/jpsim/DeckRocket) ?

~~~
tcc_42
I use a simple presenter with simple forward/backward keys...

DeckRocket looks cool, but unfortunately I cannot build it on my machine (to
convert the app from swift 2.4 to swift 3 or even higher, xcode8 or so is
needed... and that is not a priority at the moment)

------
thanatropism
What I always miss in Markdown-ish mathjax-enabled tools is the ability to
define symbols globally. E.g. in latex I always do "\renewcommand{\d}{\mathrm
d} \newcommand{\re}{\mathbb R}" etc.

~~~
tcc_42
Do you mean something like this?
[http://docs.mathjax.org/en/latest/tex.html#tex-
macros](http://docs.mathjax.org/en/latest/tex.html#tex-macros)

Okay, that made me curious and I gave it a try: please have a look at the
slides.md and the resulting pdf

[https://github.com/arnehilmann/markdeck/tree/master/docs/doc...](https://github.com/arnehilmann/markdeck/tree/master/docs/docs/test-
area/mathjax-symbols-test)

~~~
thanatropism
Lovely!

------
keldaris
Are there plans for Linux / Windows support? I don't own any Apple hardware,
so I can't even try this, but if it works well I'd be happy to pay for it.

~~~
dschep
The showcase slides claim support:
[https://arnehilmann.github.io/markdeck/showcase/#/features](https://arnehilmann.github.io/markdeck/showcase/#/features)

------
benj111
The title says collaborative, but the about says: "easy to collaborate-n-
reuse: text-only, so bring your own VCS"

If it requires a VCS isn't everything collaborative?

~~~
tcc_42
It does not _require_ a VCS, but you can bring/use your own quite easily. Why?
because most of the slide sources are in text format, so working with them
under version control is easy compared to the big binary blobs known from
powerpoint/pages/...

~~~
benj111
Thanks, I understand that.

It's just that I would expect it to be built in if you're mentioning it in the
title of the submission like that.

------
qznc
"text-only" is a good description of bad slides to me. Why do people do that?
The are plenty of Markdown slides tools so there seems to be a need.

~~~
chrisseaton
This does allow you to embed images and diagrams. I think they rather mean the
slide description language is text-only.

But even embedded images implies uninspiring slides to me.

For example they have a system that allows you to add source code to a slide,
but then don't you want to be annotating that code? Adding arrows, lines,
highlighting bits, breaking it apart, etc?

~~~
fock
For a recent presentation I also tried reveal.js again and I really liked it
overall (compared to LO Impress). I do science, so I'm not that into
annotating source code, but this total lack of presentation "spice" also
really bugged me and I basically ended up writing html with semitransparent
overlays over key graphics (more of an explorative presentation)...

As to this: I just don't get what's so special about this. I especially don't
get, what this could do, what plainly putting your presentation into git
doesn't do already? Apparently behind the curtains (which probably does not
concern people who do `curl <url> | bash` stuff...) it's using pandoc to
convert md to a reveal-js presentation and using a node-based live-server for
display. Not even sure if speaker notes work (or if you have to use the
reveal.js internal server for that)...

Also, this is a security nightmare, as a ton of boilerplate-dockercode/npm-
packages/random-binaries is necessary for just about nothing, as in the end
it's just downloading the pandoc-binary from github to a docker-container
(well, building pandoc was to hard apparently). I'm scrambling my head, what
this means for security in applications developed by people lead by the poster
if he goes forward like this.

------
stared
How does it ASCII to sketch work? (I am particularly interested in this
"sketchy" example.)

~~~
tcc_42
It is based on another tool I have written, a2sketch[0]: that uses asciitosvg
(still the php-variant[1]), generates a svg and feeds that into rough.js[2]
(converts svg in sketchy svg)

[0]:
[https://github.com/arnehilmann/a2sketch](https://github.com/arnehilmann/a2sketch)

[1]:
[https://github.com/dhobsd/asciitosvg](https://github.com/dhobsd/asciitosvg)

[2]: [https://github.com/pshihn/rough](https://github.com/pshihn/rough)

~~~
stared
Thank you a lot, especially for this rough one.

------
em-bee
i love how topics like these not only bring out a review of the tool in
question, but also suggest other related tools for comparison.

for convenience, here is a list of all alternatives mentioned (in no
particular order):

(i added a quick but incomplete review of key aspects of each tool. almost all
are using markdown and support pdf export)

[https://arnehilmann.github.io/markdeck/](https://arnehilmann.github.io/markdeck/)
(reveal.js docker)

[https://pandoc.org/MANUAL.html#producing-slide-shows-with-
pa...](https://pandoc.org/MANUAL.html#producing-slide-shows-with-pandoc)
(export-to: S5 DZSlides Slidy Slideous reveal.js pdf ppt)

[https://github.com/munen/p_slides](https://github.com/munen/p_slides)
(slidy2)

[https://godoc.org/golang.org/x/tools/cmd/present](https://godoc.org/golang.org/x/tools/cmd/present)
(go-present-markup local-go-server "can't find documentation of how to
actually use it")

[http://slideshow-s9.github.io/](http://slideshow-s9.github.io/) (commandline-
tool browser-preview many-templates)

[https://github.com/FormidableLabs/spectacle](https://github.com/FormidableLabs/spectacle)
(react-based presenter-mode local-node-server)

[https://github.com/sinedied/backslide](https://github.com/sinedied/backslide)
(docker)

[https://gitpitch.com/](https://gitpitch.com/) (online-service 'desktop
version is docker based and not free')

[https://yhatt.github.io/marp/](https://yhatt.github.io/marp/) (electron-app
live-preview)

[https://github.com/jxnblk/mdx-deck](https://github.com/jxnblk/mdx-deck)
(browser-preview)

[https://www.deckset.com/](https://www.deckset.com/) (osx-only not-free)

[https://github.com/arnehilmann/markdeck#similar-
projects](https://github.com/arnehilmann/markdeck#similar-projects)

------
ForHackernews
Does this support LaTeX? Or can support be added via a plugin?

~~~
tcc_42
What kind of support do you have in mind? Converting a whole document, a
couple of slides, or embedding latex code within a single slide?

technical detail: markdeck uses pandoc[0] as converter; and, yes, there is a
LaTeX-Importer available, too (besides the Markdown-Importer used now by
markdeck). So, on a per-file basis, it should be quite easy to support other
input formats than markdown (restructerdText might be another candidate).

Embedding LaTeX in markdown might be a little bit more trickier, because we
already use html-tags where markdown is not expressive enough... _sigh_

[0]: [https://pandoc.org](https://pandoc.org)

~~~
ForHackernews
For my personal use case, embedding latex in a slide would be the best: I'd
like to include equations alongside text and images, but I prefer writing
markdown to latex where possible.

~~~
tcc_42
markdeck supports mathjax[0], might that be enough for your use case? An
example can be found in the showcase[1]...

[0]: [https://www.mathjax.org](https://www.mathjax.org) [1]:
[https://arnehilmann.github.io/markdeck/showcase/#/example-
ma...](https://arnehilmann.github.io/markdeck/showcase/#/example-math-
equations)

~~~
ForHackernews
It might, I'll give it a shot. Thanks!

------
s09dfhks
why use this over marp?

[https://yhatt.github.io/marp/](https://yhatt.github.io/marp/)

~~~
em-bee
i have been using marp lately.

i really liked the live preview and the output to pdf.

i do prefer pdf over web-based presentations because they are easier to share
without a webbrowser (just send a document) (and they can still be viewed in a
browser).

most irritating was the fact that i could not use my preferred editor. i
haven't checked all the recommendations here, but i'll be looking for a
combination if something like markdown in vim with live preview in a browser
or pdf viewer

~~~
tcc_42
I am using markdeck with vim. Markdeck has an auto-reload, that means, every
time you save your markdown or change something in your assets-folder, the web
view gets reloaded automatically; so not really live preview, but auto-reload
on save...

And markdeck has a standalone-exporter: it generates a single html file with
all resources embedded (url-data, base64, ...); one file to send/open/view,
but with working animations and the like (even the terminal session works)

