Configuration storage and management in database
Switch branches/tags
Nothing to show
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.

Flask-WaffleConf PyPI version

WaffleConf is a Flask extension that enables storage of configuration variables in the database as well as runtime modification of said variables.

Released under GPLv2+ license.


$ pip install Flask-WaffleConf


Simple usage of the extension requires the following configuration variables (e.g., in your application's

  • WAFFLE_CONFS: used for specifying the configuration variables that are going to be stored in the database. It has the following structure:
        'desc': 'Max upload filesize (in bytes)',
        'default': 1000

    'SITENAME': {
        'desc': 'Name of the site appearing in the header',
        'default': 'Waffle'

Check the documentation for advanced usage

Example Application using SQLAlchemy as ORM

from flask import Flask, current_app
from flask_waffleconf import WaffleConf, AlchemyWaffleStore, \
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['WAFFLE_CONFS'] = {
        'desc': 'Max upload filesize (in bytes)',
        'default': 1000

    'SITENAME': {
        'desc': 'Name of the site appearing in the header',
        'default': 'Waffle'

# Define your database
# db = ...

# Define model
class ConfModel(db.Model, WaffleMixin):
    __tablename__ = 'confs'

    id = db.Column(db.Integer, primary_key=True)
    key = db.Column(db.String(255), unique=True)
    value = db.Column(db.Text)

# Create database tables
# ...

# Initialize WaffleConf
configstore = AlchemyWaffleStore(db=db, model=ConfModel)
waffle = WaffleConf(app, configstore)

def do_before():
    """Update stored configurations."""

def index():
    """Display content of configured variable 'SITENAME'."""
    state = current_app.extensions['waffleconf']

    parsed = state.parse_conf()
    # {'MAX_FILESIZE': 1000, 'SITENAME': 'Waffle'}

    return parsed['SITENAME']

Multiprocess deployments

Since version 0.2.0, multiprocess deployments are supported. Check the documentation for more information.


Documentation is present in the docs/ directory and also online at In order to build the documentation from source (you will need Sphinx), run the following command in the docs/ directory:

$ make html