Re-implementation of presskit() as a static site generator

Build status Standard - JavaScript Style Guide

Created by Pixelnest Studio.

This is a complete re-implementation, with a permissive MIT license, of presskit(), which was originally created by Rami Ismail of Vlambeer.

Warning: presskit.html is, currently, a tool for developers. You need to know how to use the command-line — but that’s all, to be honest. However, we plan to create a small app to simplify this process in the future. Stay tuned by following our Twitter account.

presskit.html is a tool to create a presskit for your company, products or games.

To quote the original presskit():

Developers & press both have the same goal: to bring great games to as many people as possible - after all, a good game is worth nothing if no-one plays it. For the press, finding out about a game but not having access to information & media for the game means that they can’t write about it. Of course, developers want to spend their valuable time making games instead of press pages.

presskit() (pronounced ‘do presskit’) is the solution. Free for everyone, open and easy-to-use for both developers & press. Developers only have to spend an hour or so creating well-laid out press pages with everything the press needs to write to their hearts desire. Everybody wins.

It uses an almost-identical format and output as its precursor. The goal is to be compatible, as much as possible.

And even if presskit() was conceived with videogames in mind, we think that you can use it for any kind of product.

Examples (built with presskit.html):

The goal of presskit.html is to generate only static HTML pages — no PHP required at all. Just fill some XML data files, add some images, execute a command, and boom. It’s done.

You already have a presskit and you want to use this tool instead of the old un-maintained PHP-based presskit()? Read the migration guide.


Why reimplement presskit()? presskit.html is basically a static site generator for presskit(). Everything is built once on your computer, and then distributed as static files to your users.

We love the concept behind static site generators like Jekyll or Hugo. These tools create lightweight static HTML pages, which are, by design, more secure and efficient than using a PHP server, for example.

Moreover, if you use one of these tools to build your company or product’s website, you can simply drop the result of presskit.html into your site directly, whatever the technology you are using — it’s just HTML pages, after all. 😉

That’s mainly why we built presskit.html — that’s how we make our websites, and we can integrate our presskits more easily this way.

We have also added some nice little things (like a “Press Copy Request” button, or widgets integration) and created a more robust implementation of presskit() (which is, unfortunately, un-maintained since 2014).

However, we have tried to be as close as possible to the original presskit format and style. In fact, comparing the output of presskit.html with the one of presskit() should be almost indistinguishable.

This is by design: the aim of the original presskit() was to create an instantly-recognizable website — almost a standard in the videogame industry.

You already have a presskit? Just try it: follow our migration guide, run presskit.html in the folder containing your presskit()-based data.xml and images/ and you will have a ready to deploy set of HTML pages which are almost identical to what you already have.


Built with presskit.html:

You are using presskit.html? Tell us or submit a pull request!

Want to compare with presskit() websites? Check these ones:


The roadmap is available on Trello.

Quickstart for existing presskit users

  1. Install Node.js.
  2. Open your terminal (“Terminal” on macOS, “cmd” on Windows).
  3. Run npm install -g presskit.
  4. Type cd, press space, and drag the folder containing your data.xml files.
  5. Run presskit build.
  6. Open the build/ folder, double-click on index.html and… 🍾


You will need a terminal and Node.js.

The simplest way to install presskit.html is to use npm (bundled with Node.js):

npm install -g presskit

(Feeling fancy? Use Yarn instead.)

This should add a globally available presskit command to your shell.

To update to a new version of presskit.html, just type:

npm update -g presskit


Run this command:

presskit build

presskit.html will then scan your local working directory (where you are executing the command) and all direct sub-directories for data.xml files and images/ folders.

To launch your presskit with a server and automatically reload it each time your save a data.xml, just use:

presskit build --watch

You can also specify the folder to scan:

presskit build path/to/folder

The presskit command does a bunch more (watch mode, generation of data.xml, etc.). Use presskit -h to learn more.

In order to generate a complete presskit, you should have:


📄 data.xml
📂 images/
  📄 header.png
  📄 logo.png
📂 product-name-01/
  📄 data.xml
  📂 images/
    📄 header.png
    📄 logo.png
    📄 screenshot1.png
    📄 screenshot2.png

The header.png is used as the banner for the corresponding page. logo.png will be used as the product’s brand.

The arborescence above should generate a build folder containing:

📂 build/
  📄 index.html
  📂 images/
    📄 header.png
    📄 logo.png
    📄 images.zip
    📄 logo.zip
  📂 product-name-01/
    📄 index.html
    📂 images/
      📄 header.png
      📄 logo.png
      📄 screenshot1.png
      📄 screenshot2.png
      📄 images.zip
      📄 logo.zip
  📂 css/
  📂 js/

Simply copy all the files in the build/ folder to your server… and you’re done!

Note: the webserver is not included.

You can also try our example from this repository, available online here: http://pixelnest.io/presskit.html/example/.


For a tag by tag walkthrough, open these links:

If you have never written a presskit before, those links are a must-read.

For a more detailed documentation about some specific features, see below.

NB: since presskit.html is 99% compatible with presskit(), you can also just read the existing documentation there.


Warning: do not put XML tags inside your content.

For example, do not do this (note the <br />):

  Lorem ipsum<br /> sit amet.


This is a new feature of presskit.html: you can put your widgets directly into your presskit pages.

Just add the <widgets> tag, and the widget providers that you want:


We don’t support other widgets for the moment, but feel free to send a pull request or submit an issue.


For each data.xml, you can add an images/ folder containing the assets of your product or game.


You can provide multiple logos for a page. As long as they start with “logo”, they will be displayed in the “Logo & Icon” section.

This will work, for example:

📄 logo01.png
📄 logo02.png
📄 logo03.jpg


If a favicon.ico is found in the images/ folder of a data.xml, it will be used as the favicon of this HTML page. It will not be exported in the images.zip, nor visible in the images gallery.


presskit.html will find every images and logos in the images/ folder of a data.xml. Then, it will create two archives: images.zip and logo.zip.

There’s a small trick to know: if you provide one (or both) of these zips in your images/ folder, presskit.html will just copy it directly, instead of overriding it. This is nice, because it allows you to provide a more complete (and heavy) zip. In this archive, you can, for example, put bigger gifs, images, artworks, or even videos.

That’s purely optional, and most products or games won’t need a specially crafted archive. 😉

Migration Guide

This tool is almost a drop-in replacement for presskit() (well, except for the fact that it generates HTML instead of using a PHP back-end — but that’s simpler, not harder). Which mean that you can go in your folder containing the data.xml and images/, run presskit build and boom, you’re done.

Well, almost.

We have made some breaking changes between this format and the original presskit() format. But be reassured: they are fairly small, and are, indeed, useful.

Follow the guide.


This re-implementation of presskit() has a big difference: all your product URLs will break. With presskit(), you pointed to /sheet.php?p=MYSUPERGAME for the MYSUPERGAME page. Here, you will point to /MYSUPERGAME/ directly (the index.html is not required, which makes prettier URLs).

This can’t be changed. We don’t use PHP, but simple, robust and lightweight HTML files, and this difference is inevitable.

External URLs

presskit() didn’t require the protocol (ie., http or https) for most URLs in the data.xml.

For example:


Note that the <link> has no http or https protocol before its destination.

The problem with that is that we cannot deduce the protocol automatically. It will work seamlessly for the biggest sites like Facebook or Twitter, but we cannot guarantee that it will link correctly for everything.

That’s why we require that you specify the protocol for your URLs:


Otherwise, the URL will be relative to your presskit, and thus, will break.

Company data.xml

This is recommended, but presskit.html is smart enough to detect the company data.xml automatically, if your file structure is correct.

Your main data.xml containing your company information should use a <company></company> root tag for your XML document.


<?xml version="1.0" encoding="utf-8"?>
  <title>Pixelnest Studio</title>
  <!-- The rest -->


<?xml version="1.0" encoding="utf-8"?>
  <title>Pixelnest Studio</title>
  <!-- The rest -->

Why? It allows us to better differentiate the main data.xml from the others. And moreover, it does not make sense that the company data.xml is considered as a <game>, right?

Release dates

The original presskit() assumed that you had only one release date for a product or game. And we all know that it’s simply not true.

That’s why we handle multiple release dates.

So, in your product/game data.xml, you must change your <release-date> tag.


<?xml version="1.0" encoding="utf-8"?>
  <title>My Super Game</title>
  <release-date>04 Feb, 2016</release-date>
  <!-- The rest -->


<?xml version="1.0" encoding="utf-8"?>
  <title>My Super Game</title>
    <release-date>PC/Mac - 04 Feb, 2016</release-date>
    <release-date>iOS/Android - 04 Feb, 2017</release-date>
  <!-- The rest -->

Why? We all know that there’s no single release date for a product or a game.


In each data.xml, you can set a list of contacts:

    <mail>[email protected]</mail>
  <!-- Others -->

In presskit(), you needed to set these informations only in the company page. Each product then retrieved the values from the company and added them automatically.

We modified that: now, you need to set these informations everywhere. That way, you can change mails and links for each product individually.

Pixelnest Studio

Pixelnest Studio is a small indie company, creating games and apps. You can contact us on Twitter at @pixelnest. Want to check our game, Steredenn? Go to http://steredenn.pixelnest.io/.



This couldn’t have be made without the awesome work of Rami Ismail and the presskit() team. Thanks to them!