Quick start guide

  1. Download Manifesto, and expand the archive. The resulting folder will be the root of your website.
  2. You will need to have an empty database and a database user account already set up, or administrative permission to create a new database.
  3. In a web browser, navigate to http://[www.your-site.com]/install.php.
  4. Complete the form to configure your site and the administrator user account.
  5. Submit, paying attention to any error messages that may appear.
  6. The following page should contain detailed information about the establishment of your site. There is copius logging, and if an error is encountered it should be plainly indicated.

Once installed, you should be able to immediately use and manage the site, using the editorial administration interface to generate content.

Top-level things to know:

  • You should never need to edit or modify any files outside of the /site/ directory. The site directory contains any modules you load specifically for your site, the composer.json file for loading third-party libraries, and the /themes/ directory where your customizations will live.
  • Your first course of action is likely to be either installing additional required modules, or cloning the default theme to begin customization
  • The URLs /admin/ and /editor/ are for managing the site configuration and content management, respectively.
  • There are default, canonical routes for publicly accessing any module content, which follows this pattern:


and this structure is parsed into segments that help route the request to the proper module and controller. Most content types, however, will allow you to construct completely custom URLs for any content, allowing URLs like


but of course these requests must simply be looked up in the database, rather than being programatically determined by the URL structure. (WordPress has the convenience of really only needing to lookup custom slugs in a single database table, whereas Manifesto supports custom URLs for every possible content type.)

The “cheapest” way to create custom routes is to have at least one “trigger” segment in the URL that provides an indicator of which module is providing the content. That allows us to skip the database lookup for custom URLs to determine which page to display. Another benefit to this method is that it creates a sort of “whitelist” of URLs — any request that doesn’t follow a particular, well-defined pattern is obviously an invalid request, and can be 404’d immediately.

See the Routes section for more information.