Are you happy with your logging solution? Would you help us out by taking a 30-second survey? Click here


Beautiful static documentation for your API

Subscribe to updates I use slate

Statistics on slate

Number of watchers on Github 22465
Number of open issues 22
Average time to close an issue 1 day
Main language JavaScript
Average time to merge a PR 8 days
Open pull requests 9+
Closed pull requests 186+
Last commit over 1 year ago
Repo Created almost 6 years ago
Repo Last Updated over 1 year ago
Size 1.06 MB
Homepage https://spectrum....
Organization / Authorlord
Latest Releasev2.2
Page Updated
Do you use slate? Leave a review!
View open issues (22)
View slate activity
View on github
Fresh, new opensource launches 🚀🚀🚀
Trendy new open source projects in your inbox! View examples

Subscribe to our mailing list

Evaluating slate for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)

Slate: API Documentation Generator
Build Status

Slate helps you create beautiful, intelligent, responsive API documentation.

Screenshot of Example Documentation created with Slate

The example above was created with Slate. Check it out at


  • Clean, intuitive design With Slate, the description of your API is on the left side of your documentation, and all the code examples are on the right side. Inspired by Stripe's and PayPal's API docs. Slate is responsive, so it looks great on tablets, phones, and even in print.

  • Everything on a single page Gone are the days when your users had to search through a million pages to find what they wanted. Slate puts the entire documentation on a single page. We haven't sacrificed linkability, though. As you scroll, your browser's hash will update to the nearest header, so linking to a particular point in the documentation is still natural and easy.

  • Slate is just Markdown When you write docs with Slate, you're just writing Markdown, which makes it simple to edit and understand. Everything is written in Markdown even the code samples are just Markdown code blocks.

  • Write code samples in multiple languages If your API has bindings in multiple programming languages, you can easily put in tabs to switch between them. In your document, you'll distinguish different languages by specifying the language name at the top of each code block, just like with GitHub Flavored Markdown.

  • Out-of-the-box syntax highlighting for over 100 languages, no configuration required.

  • Automatic, smoothly scrolling table of contents on the far left of the page. As you scroll, it displays your current position in the document. It's fast, too. We're using Slate at TripIt to build documentation for our new API, where our table of contents has over 180 entries. We've made sure that the performance remains excellent, even for larger documents.

  • Let your users update your documentation for you By default, your Slate-generated documentation is hosted in a public GitHub repository. Not only does this mean you get free hosting for your docs with GitHub Pages, but it also makes it simple for other developers to make pull requests to your docs if they find typos or other problems. Of course, if you don't want to use GitHub, you're also welcome to host your docs elsewhere.

  • RTL Support Full right-to-left layout for RTL languages such as Arabic, Persian (Farsi), Hebrew etc.

Getting started with Slate is super easy! Simply fork this repository and follow the instructions below. Or, if you'd like to check out what Slate is capable of, take a look at the sample docs.

Getting Started with Slate


You're going to need:

  • Linux or OS X Windows may work, but is unsupported.
  • Ruby, version 2.3.1 or newer
  • Bundler If Ruby is already installed, but the bundle command doesn't work, just run gem install bundler in a terminal.

Getting Set Up

  1. Fork this repository on GitHub.
  2. Clone your forked repository (not our original one) to your hard drive with git clone
  3. cd slate
  4. Initialize and start Slate. You can either do this locally, or with Vagrant:
# either run this to run locally
bundle install
bundle exec middleman server

# OR run this to run with vagrant
vagrant up

You can now see the docs at http://localhost:4567. Whoa! That was fast!

Now that Slate is all set up on your machine, you'll probably want to learn more about editing Slate markdown, or how to publish your docs.

If you'd prefer to use Docker, instructions are available in the wiki.

Note on JavaScript Runtime

For those who don't have JavaScript runtime or are experiencing JavaScript runtime issues with ExecJS, it is recommended to add the rubyracer gem to your gemfile and run bundle again.

Companies Using Slate

You can view more in the list on the wiki.

Questions? Need Help? Found a bug?

If you've got questions about setup, deploying, special feature implementation in your fork, or just want to chat with the developer, please feel free to start a thread in our Spectrum community!

Found a bug with upstream Slate? Go ahead and submit an issue. And, of course, feel free to submit pull requests with bug fixes or changes to the dev branch.


Slate was built by Robert Lord while interning at TripIt.

Thanks to the following people who have submitted major pull requests:

Also, thanks to Sauce Labs for sponsoring the development of the responsive styles.

Special Thanks

slate open issues Ask a question     (View All Issues)
  • almost 3 years middleman doesn't start - Unknown switches
  • almost 3 years Question: can't get the language tabs to work right. all code shows up on all tabs. looked like it was fixed but has it been?
  • almost 3 years Error: Issue getting Slate to run
  • almost 3 years Non-Latin support
  • about 3 years Potential Bug: Content not fully shown in Chrome
  • about 4 years Control+click doesn't open in a new tab
  • about 4 years Solve the bottom-of-the-page bug
  • over 4 years Add section seperators in the sidebar
  • almost 5 years Add switcher to switch between various .md files for versions, languages, etc.
  • almost 5 years Add page title to browser history tracking
  • over 5 years Multiple language tabs per programming language
  • over 5 years Statically generate ToC and Sections
slate open pull requests (View All Pulls)
  • Make variables !default (including fonts)
  • make scss variables changeable
  • Cormacs updates
  • Exec middleman server fails with invalid flags
  • [Fix #731] Added configurable keypress delay before initiating search
  • Fix #752
  • Fixed: #722
  • Fixes #909, reverts "don't pushState", using replaceState instead
  • Updated margins on logo
slate questions on Stackoverflow (View All Questions)
  • Python Slate Library: PDF text extraction concatenating words
  • slate: Import error in python
  • ActiveAdmin - blank slate - customized message - Rails
  • Phantom Error "Running Transformation" remain after removing model need clean slate
  • Keytool says alias both exists and does not exist. How do I start from scratch with a clean slate?
  • Reverting environment to clean slate for Python in El Capitan
  • Slate in Python stumbles on foothills
  • WebView in HP Slate 21 Pro
  • How can I get a [Glance] Interface Controller / blank slate for Apple Watch?
  • Slate vs Swagger - Which is better and which have more options?
  • Slate appears at the front of a video when I run it through Adobe Media Encoder
  • Maxscript Material/Slate editor?
  • JellyBean HP Slate 7 : getSystemService(CAMERA_SERVICE) returns null
  • Launch or focus an app with slate window manager?
  • HP Slate 7 android app compatibility
  • Shouldn't NSUserDefault be clean slate for unit tests?
  • How to detect a Windows 8 Slate
  • rake - rake build not working on tripit/slate docs
  • How to initialize object properly and start from clean slate?
  • Re-sizing of slate in Drawing app
  • Callback function in Slate Material Editor
  • Windows App gets automatically log-out in Surface and Slate
  • Is there some kind of blank slate openGL and freeglut project in VC++?
  • Why am I getting a blank slate after the iOS loading screen?
  • Making one slate in XCode
  • UITableView blank slate using NSFetchedResultsController
  • Setting up Heroku from a clean slate
  • Windows 8 Javascript app dropdown acting like a spinner on slate?
  • Can mvn package produce Android .apk from clean slate?
  • RaphaelJS Touch Support on an Asus Slate Tablet
slate list of languages used
slate latest release notes
v2.2 Version 2.2

January 19, 2018

  • Fixes bugs with some non-roman languages not generating unique headers
  • Adds editorconfig, thanks to Jay Thomas
  • Adds optional NestingUniqueHeadCounter, thanks to Vladimir Morozov
  • Small fixes to typos and language, thx Emir Ribi, Gregor Martynus, and Martius!
  • Adds links to Spectrum chat for questions in README and ISSUE_TEMPLATE
2.1.0 Version 2.1

October 30, 2017

Thanks to everyone who submitted PRs for this version!

v2.0.0 Version 2.0
  • All-new statically generated table of contents
    • Should be much faster loading and scrolling for large pages
    • Smaller Javascript file sizes
    • Avoids the problem with the last link in the ToC not ever highlighting if the section was shorter than the page
    • Fixes control-click not opening in a new page
    • Automatically updates the HTML title as you scroll
  • Updated design
    • New default colors!
    • New spacings and sizes!
    • System-default typefaces, just like GitHub
  • Added search input delay on large corpuses to reduce lag
  • We even bumped the major version cause hey, why not?
  • Various small bug fixes

Thanks to everyone who helped debug or wrote code for this version! It was a serious community effort, and I couldn't have done it alone.

If you run into any bugs with these new features, please don't hesitate to open an issue!

Other projects in JavaScript