
Security News
CISA’s 2025 SBOM Guidance Adds Hashes, Licenses, Tool Metadata, and Context
CISA’s 2025 draft SBOM guidance adds new fields like hashes, licenses, and tool metadata to make software inventories more actionable.
= ShowOff Presentation Software
ShowOff is a Sinatra web app that reads simple configuration files for a presentation. It is sort of like a Keynote web app engine - think S5 + Slidedown. I am using it to do all my talks in 2010, because I have a deep hatred in my heart for Keynote and yet it is by far the best in the field.
The idea is that you setup your markdown slide files in section subdirectories and then startup the showoff server in that directory. It will read in your showoff.json file for which sections go in which order and then will give you a URL to present from.
It can:
It might will can:
Some of the nice things are that you can easily version control it, you can easily move sections between presentations, and you can rearrange or remove sections easily.
= Usage
ShowOff is meant to be run in a ShowOff formatted repository - that means that it has a showoff.json file and a number of sections (subdirectories) with markdown files for the slides you're presenting.
$ gem install showoff
$ git clone (showoff-repo)
$ cd (showoff-repo)
$ showoff serve
If you run 'showoff' in the ShowOff directory itself, it will show an example presentation from the 'example' subdirectory, so you can see what it's like.
= Slide Format
You can break your slides up into sections of however many subdirectories deep you need. ShowOff will recursively check all the directories mentioned in your showoff.json file for any markdown files (.md). Each markdown file can have any number of slides in it, seperating each slide with the '!SLIDE' keyword and optional slide styles.
For example, if you run 'showoff create my_new_pres' it will create a new starter presentation for you with one .md file at one/slide.md which will have the following contents:
!SLIDE
# My Presentation #
!SLIDE bullets incremental transition=fade
# Bullet Points #
* first point
* second point
* third point
That represents two slides, the first contains just a large title, and the second is faded into view showing the title and three bullets that are then incrementally shown. In order for ShowOff to see those slides, your showoff.json file needs to look something like this:
[
{"section":"one"}
]
If you have multiple sections in your talk, you can make this json array include all the sections you want to show in which order you want to show them.
Some useful styles for each slide are:
Check out the example directory included to see examples of most of these.
Transitions can be supplied through the use of transition=tname on the !SLIDE definition, where tname is one of the following supported transitions:
The transitions are provided by jQuery Cycle plugin. See http://www.malsup.com/jquery/cycle/browser.html to view the effects and http://www.malsup.com/jquery/cycle/adv2.html for how to add custom effects.
You can manage the presentation with the following keys:
= Editor integration
The "add slide" feature can allow you to add the necessary boilerplate from your editor. If you are using vim, you can
!showoff add -t code Check This Code
And your buffer will get
!SLIDE
# Check This Code #
@@@ Ruby
code_here()
added where your cursor was. Binding this to a keybinding can allow you to add new slides quickly.
= Command Line Interface
showoff command_name [command-specific options] [--] arguments...
== Commands [add] Add a new slide at the end in a given dir [create] Create new showoff presentation [help] Shows list of commands or help for one command [heroku] Setup your presentation to serve on Heroku [serve] Serves the showoff presentation in the current directory
=== add [title]
Add a new slide at the end in a given dir
Aliases
Outputs or creates a new slide. With -d and -n, a new slide is created in the given dir, numbered to appear as the last slide in that dir (use -u to avoid numbering). Without those, outputs the slide markdown to stdout (useful for shelling out from your editor). You may also specify a source file to use for a code slide
==== Options These options are specified after the command.
[-d, --dir=dir] Slide dir (where to put a new slide file) [-n, --name=basename] Slide name (name of the new slide file) [-s, --source=path to file] Include code from the given file as the slide body [-t, --style, --type=valid showoff style/type] Slide Type/Style ( default: title) [-u, --nonumber] Dont number the slide, use the given name verbatim === create dir_name
Create new showoff presentation
Aliases
This command helps start a new showoff presentation by setting up the proper directory structure for you. It takes the directory name you would like showoff to create for you.
==== Options These options are specified after the command.
[-d, --slidedir=arg] sample slide directory name ( default: one) [-n, --nosamples] Dont create sample slides === help [command]
Shows list of commands or help for one command
=== heroku heroku_name
Setup your presentation to serve on Heroku
=== serve
Serves the showoff presentation in the current directory
==== Options These options are specified after the command.
[-p, --port=arg] Port on which to run ( default: 9090) = Real World Usage
So far, ShowOff has been used in the following presentations:
If you use it for something, please let me know so I can add it.
= Future Plans
I really want this to evolve into a dynamic presentation software server, that gives the audience a lot of interaction into the presentation - helping them decide dynamically what the content of the presentation is, ask questions without interupting the presenter, etc. I want the audience to be able to download a dynamically generated PDF of either the actual talk that was given, or all the available slides, plus supplementary material. And I want the presenter (me) to be able to push each presentation to Heroku or GitHub pages for archiving super easily.
= Why Not S5 or Slidy or Slidedown?
S5 and Slidy are really cool, and I was going to use them, but mainly I wanted something more dynamic. I wanted Slidy + Slidedown, where I could write my slideshows in a structured format in sections, where the sections could easily be moved around and between presentations and could be written in Markdown. I also like the idea of having interactive presentation system and didn't need half the features of S5/Slidy (style based print view, auto-scaling, themes, etc).
= Requirements
FAQs
Unknown package
We found that mattmatt-showoff demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
CISA’s 2025 draft SBOM guidance adds new fields like hashes, licenses, and tool metadata to make software inventories more actionable.
Security News
A clarification on our recent research investigating 60 malicious Ruby gems.
Security News
ESLint now supports parallel linting with a new --concurrency flag, delivering major speed gains and closing a 10-year-old feature request.