{"id":42140901,"url":"https://jdan.github.io/cleaver/","last_synced_at":"2026-02-05T17:00:57.676Z","repository":{"id":4951938,"uuid":"6109274","full_name":"jdan/cleaver","owner":"jdan","description":"30-second slideshows for hackers","archived":false,"fork":false,"pushed_at":"2021-10-19T12:36:46.000Z","size":5267,"stargazers_count":4050,"open_issues_count":17,"forks_count":301,"subscribers_count":82,"default_branch":"master","last_synced_at":"2026-01-24T11:07:22.205Z","etag":null,"topics":["markdown","slideshow"],"latest_commit_sha":null,"homepage":"http://jdan.github.io/cleaver","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"zulip/zulip","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jdan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-10-07T04:12:01.000Z","updated_at":"2026-01-08T03:11:13.000Z","dependencies_parsed_at":"2022-08-30T05:41:02.746Z","dependency_job_id":null,"html_url":"https://github.com/jdan/cleaver","commit_stats":null,"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"purl":"pkg:github/jdan/cleaver","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdan%2Fcleaver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdan%2Fcleaver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdan%2Fcleaver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdan%2Fcleaver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jdan","download_url":"https://codeload.github.com/jdan/cleaver/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdan%2Fcleaver/sbom","scorecard":{"id":512196,"data":{"date":"2025-08-11","repo":{"name":"github.com/jdan/cleaver","commit":"0606224ad38f1a1a92cbd4993500ce677d464884"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.4,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":3,"reason":"Found 6/18 approved changesets -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 21 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-20T00:51:16.144Z","repository_id":4951938,"created_at":"2025-08-20T00:51:16.144Z","updated_at":"2025-08-20T00:51:16.144Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29126042,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-05T14:05:12.718Z","status":"ssl_error","status_checked_at":"2026-02-05T14:03:53.078Z","response_time":65,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["markdown","slideshow"],"created_at":"2026-01-26T17:00:22.057Z","updated_at":"2026-02-05T17:00:57.670Z","avatar_url":"https://github.com/jdan.png","language":"JavaScript","readme":"# Cleaver\n\n30-second Slideshows for Hackers. http://jdan.github.io/cleaver/\n\n[![Travis Build](https://travis-ci.org/jdan/cleaver.svg)](https://travis-ci.org/jdan/cleaver)\n[![NPM version](https://badge.fury.io/js/cleaver.svg)](http://badge.fury.io/js/cleaver)\n\n## Intro\n\nCleaver turns this:\n\n    title: Basic Example\n    author:\n      name: Jordan Scales\n      twitter: jdan\n      url: http://jordanscales.com\n    output: basic.html\n    controls: true\n\n    --\n\n    # Cleaver 101\n    ## A first look at quick HTML presentations\n\n    --\n\n    ### A textual example\n\n    Content can be written in **Markdown!** New lines no longer need two angle brackets.\n\n    This will be in a separate paragraph\n\n    --\n\n    ### A list of things\n\n    * Item 1\n    * Item B\n    * Item gamma\n\n    No need for multiple templates!\n\nInto this:\n\n![output](https://i.cloudup.com/cIssKFjcB6.gif)\n\n## Quick Start\n\nGet it [on NPM](https://npmjs.org/package/cleaver):\n\n```sh\nnpm install -g cleaver\n# To update: npm update -g cleaver\n```\n\nAnd run it like so:\n\n```bash\ncleaver path/to/something.md\n```\n\nYou can also watch for changes on a file and automatically recompile with:\n\n```bash\ncleaver watch path/to/something-changing.md\n\n# Watching for changes on presentation.md. Ctrl-C to abort.\n# Rebuilding: Thu Nov 07 2013 00:15:03 GMT-0500 (EST)\n# Rebuilding: Thu Nov 07 2013 00:15:21 GMT-0500 (EST)\n# Rebuilding: Thu Nov 07 2013 00:16:01 GMT-0500 (EST)\n# Rebuilding: Thu Nov 07 2013 00:16:09 GMT-0500 (EST)\n```\n\nUse the `--debug` flag to display debug information:\n\n```bash\n$ cleaver --debug examples/basic.md\n  cleaver loaded input document +0ms\n  helper read /Users/jordan/Projects/cleaver/templates/layout.mustache +0ms\n  helper read /Users/jordan/Projects/cleaver/templates/author.mustache +0ms\n  helper read /Users/jordan/Projects/cleaver/templates/default.mustache +0ms\n  cleaver loaded templates +3ms\n  cleaver parsed metadata +4ms\n  helper read /Users/jordan/Projects/cleaver/resources/default.css +13ms\n  helper read /Users/jordan/Projects/cleaver/resources/github.css +0ms\n  helper read /Users/jordan/Projects/cleaver/resources/script.js +0ms\n  cleaver loaded static assets +9ms\n  cleaver rendered slides +1ms\n  cleaver rendered presentation +1ms\n```\n\n## More Info\n\n**Cleaver** is a one-stop shop for generating HTML presentations in\nrecord time. Using some spiced up markdown, you can produce\ngood-looking, interactive presentations with a just a few lines of text.\n\nSlides are written in [Markdown](http://daringfireball.net/projects/markdown/),\nand are separated by two dashes (`--`).\n\n## Options\n\n    title: Basic Example\n    author:\n      name: Jordan Scales\n      twitter: jdan\n      url: http://jordanscales.com\n    style: basic-style.css\n    output: basic.html\n\nCleaver supports several basic options that allow you to further customize the\nlook and feel of your presentation, including author info, stylesheets, and\ncustom templates.\n\nSee the documentation on\n[options](https://github.com/jdan/cleaver/blob/master/docs/options.md) for more\ninformation.\n\nBe sure to check out the [wiki](https://github.com/jdan/cleaver/wiki) as well.\n\n## Themes\n\nCheck out the [themes](https://github.com/jdan/cleaver/wiki/Theme-Index)\npage on our [wiki](http://github.com/jdan/cleaver/wiki).\n\n    title: Theme Example\n    output: theme.html\n    theme: jdan/cleaver-retro\n\nCleaver has substantial theme support to give you more fine-grained control\nover your presentation, similar to [options](#options). Instead of manually\nspecifying a stylesheet, template, layout, and others, you can specify a single\ntheme containing each of these assets. More specifically, a theme may contain:\n\n* style.css - styles for your presentation\n* template.mustache - a template used to render the slides in your presentation\n* layout.mustache - a template used to render the entire document of your\npresentation\n* script.js - javascript to be included in your slideshow\n\nA theme does not need to contain all of these files, only the ones present\nwill be loaded into your slideshow.\n\n### Examples\n\n* [jdan/cleaver-retro](http://github.com/jdan/cleaver-retro)\n\n![cleaver-retro](https://i.cloudup.com/HLtcPJWJJl-1200x1200.png)\n\n* [matmuchrapna/cleaver-ribbon](http://github.com/matmuchrapna/cleaver-ribbon)\n– [Shower](http://shwr.me/) implemented in cleaver.\n\n![cleaver-ribbon](https://i.cloudup.com/GECEx5BmxI-1200x1200.png)\n\n* [sudodoki/reveal-cleaver-theme](http://github.com/sudodoki/reveal-cleaver-theme)\n– cleaver meets [reveal.js](http://lab.hakim.se/reveal-js/#/).\n\n![reveal-cleaver-theme](https://i.cloudup.com/wlzisDLe32-1200x1200.png)\n\n### Specifying Themes\n\nThemes may be specified by one of the following options:\n\n* An absolute or relative path to a directory\n* A URL to a directory\n* A github repository in the form of *username/reponame*\n\n### Overriding Themes\n\nBy default, *style.css* and *script.js* will be **appended** to the default\nstylesheets and javascripts included in cleaver presentations. If you wish to\ncompletely override these defaults, you must include another file in your\ntheme - settings.json - corresponding to the following:\n\n```json\n{\n  \"override\": true\n}\n```\n\nTemplate files will automatically override the default templates.\n\n### More Info\n\nFor more information on themes, check out\n[our documentation](https://github.com/jdan/cleaver/blob/master/docs/themes.md).\n\n## Markup\n\nCleaver slides are rendered using the following template:\n\n```handlebars\n{{#slides}}\n  \u003cdiv class=\"slide{{#hidden}} hidden{{/hidden}} {{classList}}\" id=\"slide-{{id}}\"\u003e\n    \u003csection class=\"slide-content\"\u003e{{{content}}}\u003c/section\u003e\n  \u003c/div\u003e\n{{/slides}}\n```\n\nAnd produce the following markup:\n\n```\n+-------------------------------+\n| #slide-N                      |\n|     +-------------------+     |\n|     | .slide-content    |     |\n|     |                   |     |\n|     |                   |     |\n|     |                   |     |\n|     |                   |     |\n|     +-------------------+     |\n|                               |\n|                               |\n| (navigation)                  |\n+-------------------------------+\n```\n\n**#slide-N** (for example, *#slide-3*) allows you to identify a particular\nfull-bleed slide by its position in the slideshow. It extends to the bounds of\nthe page.\n\n**.slide-content** is a smaller window which holds the actual content of the\nslide.\n\n### Class List\n\nA class list can be placed after each \"slice\" (denoted `--`) to help you\nstyle individual slides without worrying about their index.\n\n```\n-- bg\n\nThis slide will have a class \"bg\" associated with it\n\n-- bg blink\n\nThis one, too, but it will also have the class \"blink\"\n```\n\n## Slide Types\n\n### Title slide\n\n    # Cleaver 101\n    ## A first look at quick HTML presentations\n\n**h1** and **h2** elements (prefaced with *#* and *##* respectively), will\nautomatically include padding to render a title slide.\n\n### Other slides\n\n    ### A list of things\n\n    * Item 1\n    * Item B\n    * Item gamma\n\n    No need for multiple templates!\n\nSince slides are written in [Markdown](http://daringfireball.net/projects/markdown/),\nyou can include things like lists, images, and arbitrary HTML.\n\n**h3** tags (prefaced `###`) are automatically given a bottom border to\nrepresent a slide title.\n\n## Navigation\n\nCleaver supports keyboard navigation for switching between slides.\nAlternatively, click the control buttons located below the presentation.\n\nTo navigate the slideshow:\n\n* **forward**: K, L, UP, RIGHT, PgDn, and Space\n* **reverse**: H, J, LEFT, DOWN, PgUp, and Backspace\n\nThe toggle fullscreen mode, press the **ENTER** key.\n\n## Contributing\n\n* Fork it\n* Clone it\n* Install dependencies (`npm install`)\n* Checkout a release branch (`git checkout -b feature/cool-wordart`)\n* Make changes, commit, and push (`npm test` and make sure it passes)\n* Open a pull request!\n\nWith \u0026lt;3,\u003cbr/\u003e[@jdan](http://jordanscales.com)\n\n--\n\n[MIT Licensed](https://github.com/jdan/cleaver/blob/master/LICENSE)\n","funding_links":[],"categories":["Developer \u0026 Markdown-Based"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/jdan.github.io%2Fcleaver%2F","html_url":"https://awesome.ecosyste.ms/projects/jdan.github.io%2Fcleaver%2F","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/jdan.github.io%2Fcleaver%2F/lists"}