Skip to content


Subversion checkout URL

You can clone with
Download ZIP

Quokka project goals

Bruno Rocha edited this page · 4 revisions

Quokka CMS Project


Quokka is a content management system powered by Python, Flask and MongoDB. Using a selection of Flask extensions Quokka also provides a full-stack platform for generic applications.

Quokka is develop for:

  • Blogs
  • Social websites
  • Content portals and magazines
  • Intra-net
  • Simple e-commerce
  • Polls, Giveaways, tutorials, courses

In summary, use Quokka for anything using: author -> content <- interactions


  • Channels

    • Channels are like directories, you can create many channels and sub-channels and include documents in there, channels defines urls /channel/sub-channel/content.html by default in Quokka content is always defined by the .html extension, but it can be changed.
    • Channels can have alias, example: /entertainment/content.html is a content endpoint, if you create aliases in entertainment channel ['diversao', 'diversion', 'fun'] so the same content will be accessible with any alias as the channel unless it do not conflict with another channel real channel name. /fun/content.html might work and it can be also useful for internationalization. A channel home page will always have the canonical url pointing to the real channel.
    • channels can be bypassed to render a specific Content, in example: You create the home channel and set it to render a flatpage instead of a channel type content list.
    • Channels have a type, a type in channel can be anything, by default Quokka provides blog, portal, list, grid. You can create your own type by defining its properties.

      • A channel type is (example blog):

        • title: Blog
        • template_suffix: blog
        • inherit: True
        • media files: file_paths

        Basically you are defining the look and feel for that channel.

      • Quokka provides:

        • Blog: a template with blog features, stream of posts, tag cloud, sidebars, widgets.
        • list: a template with a simple list of publications, sorting and search
        • grid: this is a Pinterest like template
        • portal: it mixes a featured slider with some boxes for grid and listing of posts. > Note: In any template type you use blocks and widgets to rearrange the content.
    • Organization of content

      • You can copy/paste content between channels
      • You can program the publication by setting publish data range
      • you can group content on to bundles/content blocks
    • Settings
      • You can choose some properties for a channel and apply for every sub-channel created.
      • include_in_rss: choose if publication will be available in feed
      • rss filters: filter contents which will be available for rss
      • api enabled: choose if that channel will provide its contents api via json or xml
      • api filters: choose filters to be applied in public api > note: This configs are for general public get api, for REST api take a look for REST API topic.
    • Content blocks
      • Every channel has its own namespace for content blocks, but content blocks are available to be use in any channel
      • a content block is a content aggregator and you can have blocks inside blocks.
      • blocks has a relation with a Content + specific fallback attributes like start and end_date, image, title, summary and headline for each content.
      • Blocks have some attributes:
        • order, title, unique_identifier, default_template, block_region
        • custom values to store arbitrary information
      • a block is not stale for a single channel or page, it can be used anywhere so it is generic, the only thing that identify a block is its identifier. But being a Content, every block needs to be inserted in a main channel to be accessible as a bundle, by default Quokka defines a content channel and every block can be listed in /content/blogname. You can change the content with another name in
      • inside channels you can insert any block and choose its properties, in template will be defined where the block should be included.
      • block_region is a placeholder, defined in the template where blocks will be inserted following its order definition per channel
      • the template will always be the default_template unless specified per_channel, order can also be defined per_channel
  • Content

    • A Content is a generic thing that can be inserted in a channel, think this is like a file it has some generic attributes defining its title, slug, access url, ownership, control dates, channeling.
    • Everything in Quokka, except channels, even the Content Block is a Content and every content has its own channel and urls.
    • A content have a main author but can have many contributors co-authors
    • a content have per-user, per-group access control
    • a content have version control revisions
    • a content have translations
    • a content can have related contents
    • a content is within a main channel, but can also be related to another channels
    • a content can have categories (per channel category groups)
    • a content can have tags (for search)
    • a content having an public endpoint has SEO configuration
  • Images and media files
    • a media file is a pure file in filesystem or gridfs but it is also a content
    • the image content has its metadata, endpoint and other content configuration
    • it makes easy to create bundles and content blocks
  • Content Blocks

    • A Content block is a content (the same table and base class)
    • the system views it as an aggregator and ir can be used to create bundles of content
    • a bundle is a collection of any content and it is used for some purposes:
      • Create sliders of content
      • Create image and media albums
      • Create a content block or a card to build widgets for home page
      • Create only a collection with its own link
    • properties
      • all the content properties as title and slug
      • customized templates
      • purpose (album, list, slider, block)
      • access control
      • date available and date end
      • dynamic queryset to load content automatically
  • User and User Profiles

    • User
      • User is an object for authentication and access control
    • User Profile
      • It is a Content but related with a single user or with a group of users
      • It can be used as user bio page, this page can behave like a channel grouping user blocks
      • It can be used to create an group page where content from many users are selected, in this case users can include content inside its own group profile or user profile.


  • Modules

    • Modules are based in Flask blueprints and follow a predefined pattern to create models, views, resources, commands and tasks.
  • Module management

    • once developed the module should be included in /modules/ folder or be in the python path if installed with pip
    • in Quokka admin users can see a list of available modules and choose properties for each one.
    • Every module defines its own admin
    • if needed modules can define views and url_rules
    • modules can insert management commands
    • modules has to provide a configuration view and config dataset to be used in quokka modules admin
    • users can enable/disable modules
    • modules needs to have basic tests
    • Quokka perform a test and version control in a different branch every time a module is enabled/disabled
    • Quokka uses Mongo as db engine, but modules connect to different databases (useful for erp, crm and ecommerce apps also reports)
Something went wrong with that request. Please try again.