Skip to content

Dillo Development Docs


git clone git://
git clone git://
git clone
cd dillo
pip install -r requirements-dev.txt

Make a config local and add your categories to it:

# This list generate the selection menu when creating or editing a post.
POST_CATEGORIES = ['Artwork', 'Tutorials', 'Resources', 'Sneak Peek']

Setup Algolia:

Create an account in their site, and add your Algolia API Keys and setup to the `

ALGOLIA_USER = '1QFJ16Q4TZ' # Application ID
ALGOLIA_PUBLIC_KEY = '039c5c1d0efe9d25d06c00f55a541963' # Search-Only API Key
ALGOLIA_API_KEY = '1389947be424f13fbecedabb13ef1710' # Admin API Key
ALGOLIA_INDEX_USERS = 'dev_UsersYourName'
ALGOLIA_INDEX_NODES = 'dev_NodesYourName'

Create the default project, which will be the host for various communities.

python dillo setup_db <admin_email>

Create a project and initialize it as a community TODO check how to create a new project.

python dillo setup_for_dillo today

Configure your nodes index with:

python dillo index_nodes_update_settings

How to run it (FIXME)

python runserver

Now open a web-browser of your preference and visit:


Project layout

docs/                   # Documentation folder
    ...                 # Documentation files
gulpfile.js             # Gulp setup file (for web interface)
LICENSE.txt             # GPL license
package.json            # Required NPM packages list (used by node)
pistacchio/             # Extension source code         #              # ?     # ?           # ?            # ?
    static/             # ?
        ...             # ?
    templates/          # ?
        ...             # ?               # Introductory document
requirements.txt        # Python requirements (pip install -r requirements.txt)               # The entry point of the program
src/                    # Web interface
    ...                 # Web interface files
tests/                  # Unit testing
    ...                 # Proper test files


Explain how we use the Nodes index from the config, but perform indexing in our own hook. Mention that we extend the indexing process by defining index replicas for returning sorted results.

Tags (TODO)

See config

Post Additional Properties

This feature allows the support of 'custom' properties within a dillo_post Node Type. We define a POST_ADDITIONAL_PROPERTIES dict in and Dillo takes care of the rest. For example:

    'status_dev': {
        'schema':  {
            'type': 'string',
            'default': 'Unknown',
            'allowed': ['Unknown', 'In Development']
        'indexing': {
            'searchable': True,
            'faceting': 'searchable'
        'projects': ['rcs'],
        'label': 'Dev. Status',

In this case:

  • status_dev is the key added to dyn_schema of dillo_post
  • indexing extends the indexing settings when running index_nodes_update_settings
  • projects defines to which project we should apply this additional properties
  • label is the UI representation of the key


Additional properties should be applied as follows:

  • Define the additional properties in POST_ADDITIONAL_PROPERTIES
  • ./ dillo attach_post_additional_properties
  • ./ dillo index_nodes_update_settings

Integration details

There are a few places where additional properties are handled:

  • index.pug, where we dynamically add Instant Search widgets
  • dillo/api/posts/, where we define the indexing behaviour
  •, where we configure the Nodes index

Additional Properties should be displayed only in the context where we expect them to be. For this reason, the main posts index (which aggregates posts from all projects) does not feature them as filters.