Cashdesk system used at Chaos Communication Congress
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
assets Make postix prettx Feb 26, 2017
doc Remove trailing whitespaces Dec 16, 2016
src Build empty records (hidden feature) Jan 5, 2019
.codecov.yml Adjust coverage reporting Dec 17, 2017
.gitignore Use 'static', not 'staticfiles' Oct 18, 2018
.travis.yml [core] Accept data in importer Dec 17, 2017
AUTHORS Expand AUTHORS file Jan 2, 2017
LICENSE Added LICENSE and AUTHORS file Feb 6, 2016
README.rst Update dependencies Oct 18, 2018



postix (formerly c6sh) is the cashdesk system used at various events to redeem preorder tickets and sell tickets:

  • MRMCD16
  • 33C3
  • 34C3
  • 35C3


postix supports a full cash desk setup with both preorder redemptions (it comes with a pretix import module) and cash transactions, with a layer of accountability for each cashier.

pretix has the user roles of cashiers, who do the main work of exchanging preorder codes or cash for goodies (at least an entrance token), backoffice users (who give and collect cash and goodies to the cashiers), and troubleshooters who support cashiers by looking up presale data, talking to troublesome attendees, resupply the cashiers with goodies, etc.

Every cashier will receive a custom amount of cash (and, optionally, goodies), and will be assigned a cashdesk. After the cashier's session is over, a report is printed, where the cash and goodies present can be checked against the amounts that should be present. These reports also come with a barcode to make them easily readable into a tab delimited file or a spreadsheet.

postix supports adding a variety of constraints to products to be sold or redeemed:

  • Some products may only be redeemed or bought if the buyer has a secret code, such as a member number, or a name.
  • postix can show warnings when a specific product is redeemed, helping to inform and direct people directly on arrival to their destination.
  • Products may be restricted to be sold at certain times only.


postix requires Python 3.5+. Install in a virtalenv of any kind:

pip install --upgrade setuptools pip
pip install -r requirements.txt
python migrate
python createsuperuser

Optionally, import data:

python import_presale pretix.json
python import_member member_list.csv [--prefix BLN]

Run development server:

POSTIX_STATIC_ROOT=_static python runserver

Open your browser at one of the following URLs:


You can configure some aspects of your installation by setting the following environment variables:

  • POSTIX_SECRET -- Secret key used for signing purposes
  • POSTIX_DEBUG -- Turns on Django's debug mode if set to "True"
  • POSTIX_DB_TYPE -- Database backend, defaults to sqlite3. Other options are mysql and postgresql
  • POSTIX_DB_NAME -- Database name (or filename in case of SQLite). Defaults to db.sqlite3
  • POSTIX_DB_USER -- Database user
  • POSTIX_DB_PASS -- Database password
  • POSTIX_DB_HOST -- Database host
  • POSTIX_DB_PORT -- Database port
  • POSTIX_STATIC_URL -- Base URL for static files
  • POSTIX_STATIC_ROOT -- Filesystem directory to plstore static files


Regenerate translation files:

pip install django_extensions pytest
python makemessages
python makemessages --all -d djangojs

Run linters and tests:

isort -rc .