{"id":21016,"library":"bridgekeeper","title":"Bridgekeeper","description":"Bridgekeeper is a Django permissions library that allows rules to be defined as QuerySet filters, enabling efficient, database-level permission checks. Current version is 0.9, compatible with Python >=3.5 and Django 2.0+. Released under MIT License; maintained irregularly with no recent updates.","status":"active","version":"0.9","language":"python","source_language":"en","source_url":"https://github.com/excitedleigh/bridgekeeper","tags":["django","permissions","queryset","authorization"],"install":[{"cmd":"pip install bridgekeeper","lang":"bash","label":"PyPI"}],"dependencies":[{"reason":"Bridgekeeper is a Django permissions library; requires Django 2.0+","package":"Django","optional":false}],"imports":[{"wrong":"from bridgekeeper import Permission","symbol":"PermissionMap","correct":"from bridgekeeper import PermissionMap"},{"symbol":"permission_map","correct":"from bridgekeeper import permission_map"},{"symbol":"perms","correct":"from bridgekeeper import perms"}],"quickstart":{"code":"import os\nos.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')\nimport django\ndjango.setup()\n\nfrom bridgekeeper import Permission\nfrom bridgekeeper.rules import is_authenticated\n\n# Define a simple permission\nview_dashboard = Permission(\n    'view_dashboard',\n    is_authenticated\n)\n\n# In Django settings, define PERMISSIONS dict\n# PERMISSIONS = {'view_dashboard': view_dashboard}","lang":"python","description":"Create a permission that requires the user to be authenticated."},"warnings":[{"fix":"Define PERMISSIONS in settings.py, e.g., PERMISSIONS = {'my_perm': my_permission}","message":"Bridgekeeper expects a dictionary named PERMISSIONS in Django settings. If not defined, no permissions are registered.","severity":"gotcha","affected_versions":">=0.1"},{"fix":"Ensure rules return Q objects or booleans that can be translated to database filters.","message":"Rules in Bridgekeeper are applied as QuerySet filters, not as Python predicates. Mixing logic that cannot be expressed as a filter will cause unexpected behavior.","severity":"gotcha","affected_versions":">=0.1"},{"fix":"Consider alternative libraries like django-guardian or django-rules for newer Django versions.","message":"Bridgekeeper does not actively support Django 4.x or later; test compatibility before upgrading.","severity":"deprecated","affected_versions":"0.9"}],"env_vars":null,"search_vec":"'0.9':27 '2.0':34 '3.5':31 'allow':9 'author':48 'bridgekeep':1,2 'check':23 'compat':28 'current':24 'databas':20 'database-level':19 'defin':13 'django':5,33,45 'effici':18 'enabl':17 'filter':16 'irregular':40 'level':21 'librari':7 'licens':38 'maintain':39 'mit':37 'permiss':6,22,46 'python':30 'queryset':15,47 'recent':43 'releas':35 'rule':10 'updat':44 'version':25","created_at":"2026-04-27T16:57:37.954446+00:00","updated_at":"2026-04-27T16:57:37.954446+00:00","problems":null,"ecosystem":"pypi","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":"0.9","cli_name":"","cli_version":null,"type":"library","homepage":"https://bridgekeeper.leigh.party/","github":"https://github.com/excitedleigh/bridgekeeper","docs":null,"changelog":null,"pypi":"https://pypi.org/project/bridgekeeper/","npm":null,"openapi_spec":null,"status_page":null,"smithery":null,"categories":["web-framework","auth-security","database"],"base_url":null,"auth_type":null,"provenance":{"verified_status":"passing","verified_at":"2026-06-30","last_verified":"2026-06-30","next_check":"2026-07-30","install_tag":null}}