Skip to content

Changelog

Unreleased

Removed

  • #233 Remove deprecated WATCHMAN_TOKEN setting — use WATCHMAN_TOKENS instead (deprecated since 0.11, removal planned for 1.0)

1.5.0 (2026-03-07)

Fixed

  • #228 Fix database health check for Oracle — use SELECT 1 FROM DUAL instead of SELECT 1 which Oracle does not support without a FROM clause
  • #231 Raise TypeError when WATCHMAN_CHECKS is a string instead of a sequence — prevents confusing ImportError when parentheses are used without a trailing comma (e.g. ('single.check'))

Documentation

  • #229 Add monitoring integrations reference documentation for common uptime monitoring vendors
  • #230 Improve API reference documentation with comprehensive docstrings and restructured layout

1.4.0 (2026-02-21)

Security

  • #213 Fix ReDoS vulnerability in auth header parsing — replace regex-based Authorization header parser with simple string splitting to prevent polynomial backtracking on crafted input

Added

  • #212 Add type annotations to all source modules and ship PEP 561 py.typed marker for downstream type checking
  • #212 Add Python 3.14 support
  • #214 Automate PyPI publishing with GitHub Actions trusted publishing (OIDC, no API tokens needed)

Changed

  • #206 Modernize project infrastructure:
  • Replace black, flake8, and isort with ruff for linting and formatting
  • Switch from make to just as the task runner
  • Migrate from setup.py / MANIFEST.in to pyproject.toml with Hatch build backend
  • Update CI test matrix: drop Django 5.0 (EOL), add Django 5.2 (LTS)
  • Expand Dependabot to cover GitHub Actions and pip dependencies
  • Modernize tests to use pathlib; remove legacy runtests.py wrapper
  • Add test runner and ty type checker to pre-commit hooks
  • #206 Fix storage check to handle pathlib.Path objects for MEDIA_ROOT and WATCHMAN_STORAGE_PATH
  • #214 Read version dynamically from watchman/__init__.py via Hatchling (eliminate duplication in pyproject.toml)

Documentation

  • #211 Switch documentation from Sphinx/reStructuredText to MkDocs with Material theme
  • #190 Clarify custom checks and paid checks documentation
  • #201 Update WATCHMAN_STORAGE_PATH documentation in README
  • #189 Add custom check example to sample project

1.3.0 (2022-02-24)

  • #181 Update sample project to Django 4.x
  • #171 Improve database check performance: replace introspection.table_names() by a simple cursor query (@cristianemoyano)
  • #180, #174 Switch testing to Github Actions from TravisCI, update to latest versions
  • #178 Add black, flake8, and isort linting

1.2.0 (2020-09-20)

  • #163 Replaced deprecated url() calls with re_path() (@dominik-bln)

1.1.1 (2020-05-04)

  • #159 Fixed invalid escape sequence in decorators by changing to a raw string

1.1.0 (2020-03-16)

  • #154 Added custom path support for storage check

1.0.1 (YYYY-MM-DD)

  • Fix modal popups on dashboards when Type or Name fields contains spaces (@maikeps)

1.0.0 (2019-12-18)

  • Official django-watchman 1.0 release! Releases will (try to) follow semantic versioning from now on.
  • Drop support for python 2 and Django<2 (@JBKahn)
  • Drop usage of django-jsonview in favor of the Django's built in JsonResponse (@JBKahn)

0.18.0 (2019-08-19)

  • #142 Skip traces in Datadog if WATCHMAN_DISABLE_APM is enabled (@robatwave)

0.17.0 (2019-06-14)

  • #141 Disable APM monitoring on ping endpoint if settings.WATCHMAN_DISABLE_APM is configured (@JBKahn)

0.16.0 (2019-03-19)

  • #131 Make watchman constants importable (@jonespm)
  • #134 Update Django/Python versions & clean up sample site Docker (@JayH5)

0.15.0 (2018-02-27)

  • #114 Add "bare" status view (@jamesmallen)
  • #115 Adds WATCHMAN_DISABLE_APM option (@xfxf)
  • #63 Disable watchman version output by default, add EXPOSE_WATCHMAN_VERSION setting (@mwarkentin)

0.14.0 (2018-01-09)

  • #110 Replace vagrant + ansible with Dockerfile (@ryanwilsonperkin)
  • #111 Configure Django logging for checks (@dhoffman34)
  • #112 Add simple HTTP ping endpoint (@dhoffman34)

0.13.1 (2017-05-27)

  • #101 Write bytes to dummy file on storage check to fix an issue in Python 3 (thanks @saily!)

0.13.0 (2017-05-23)

  • #105 Add WATCHMAN_CACHES and WATCHMAN_DATABASES settings to override the Django defaults
    • When using watchman with a large number of databases, the default checks can cause an excess of connections to the database / cache
    • New settings allow you to check only a subset of databases / caches
    • Watchman will still default to checking all databases / caches, so no changes necessary for most apps

0.12.0 (2017-02-22)

  • #100 Add WATCHMAN_EMAIL_SENDER setting to customize email check "from" address

0.11.1 (2017-02-14)

  • #99 Fix verbose output in management command on Django 1.8+

0.11.0 (2016-08-02)

  • Update tests to run on Django 1.7 - 1.10
  • #87 Fix 500 errors with ATOMIC_REQUESTS enabled
    • Disables atomic transactions on the watchman views to prevent generic 500 errors
  • #88 Restructure dashboard and switch icon libraries
    • Make check types singular on dashboard
    • Switch to FontAwesome instead of Glyphicon to track Bootstrap updates
    • Improve traceback display width
  • #92 Support multiple auth tokens
    • Fixes #86
    • Deprecates settings.WATCHMAN_TOKEN and adds settings.WATCHMAN_TOKENS

0.10.1 (2016-05-03)

  • #81 Fix header-based authentication for tokens w/ dashes (-)
    • Regex was overly specific for header values (\w)
    • Added TODO to follow up with a full regex for valid characters according to the spec

0.10.0 (2016-05-02)

  • #75 Enable header-based authentication
    • Set a header instead of passing the token via GET param: "Authorization: WATCHMAN-TOKEN Token=\":token\""
    • Improves security by keeping tokens out of logs
  • #79 Enable customization of email check
    • Add WATCHMAN_EMAIL_RECIPIENTS setting - pass a list of recipients the email should be sent to
    • Add WATCHMAN_EMAIL_HEADERS setting - pass a dict of custom headers to be set on the email

0.9.0 (2015-12-16)

  • #51 Update TravisCI Python / Django versions
  • #52 Fix deprecated url_patterns
  • #53 Change default error response code to 500
  • #56 Add @check decorator and refactor existing checks to use it (thanks @benwebber!)
  • #57 Sort caches / databases in response for more consistent responses
  • #59 Add .editorconfig for improved consistency in contributions
  • #61 Add Vagrantfile and docs for how to run and develop on Vagrant instance
  • #65 Include assets in source tarball for Debian packaging (thanks @fladi)
  • #71 Unpin django-jsonview in setup.py
  • #72 Fix stacktrace on dashboard modal and increase width for better readability

0.8.0 (2015-10-03)

  • #46 Allow custom response codes with the WATCHMAN_ERROR_CODE setting

0.7.1 (2015-08-14)

  • Update headers in HISTORY.rst to attempt to fix localshop parsing issues

0.7.0 (2015-08-14)

  • #40 Bump django-jsonview for improved Django 1.8 compatibility
    • Also brought travis Django test versions in line with currently supported Django versions (1.4.x, 1.7.x, 1.8.x)

0.6.0 (2015-07-02)

  • #30 Allow users to specify a custom authentication/authorization decorator
    • Override the @auth decorator by setting WATCHMAN_AUTH_DECORATOR to a dot-separated path to your own decorator
    • eg. WATCHMAN_AUTH_DECORATOR = 'django.contrib.admin.views.decorators.staff_member_required'
    • Token-based authentication remains the default
  • #31, #34 Add a human-friendly status dashboard
    • Available at <watchman url>/dashboard/
    • ?check & ?skip GET params work on the dashboard as well
  • #35 Add X-Watchman-Version header to responses

0.5.0 (2015-01-25)

  • Add watchman management command
    • Exit code of 0 if all checks pass, 1 otherwise
    • Print json stacktrace to stderr if check fails
    • Handles --verbosity option to print all status checks
    • -c, --checks, -s, --skips options take comma-separated list of python paths to run / skip
  • Improve identifiability of emails sent from a django-watchman endpoint
    • From: watchman@example.com
    • Subject: django-watchman email check
    • Body: This is an automated test of the email system.
    • Add X-DJANGO-WATCHMAN: True custom header
  • Add new default check: storage check
    • Checks that files can be both written and read with the current Django storage engine
    • Add WATCHMAN_ENABLE_PAID_CHECKS setting to enable all paid checks without modifying WATCHMAN_CHECKS
  • Remove email_status from default checks
  • Refactor utils.get_checks to allow reuse in management command
    • get_checks now performs the optional check inclusion / skipping
    • status refactored to pull check_list / skip_list from GET params and pass them to get_checks
  • Namespace cache keys
  • Update documentation

0.4.0 (2014-09-08)

  • Add the ability to skip certain checks by passing one or more skip=path.to.callable GET params when hitting the watchman URL

0.3.0 (2014-09-05)

  • New check - email (watchman.checks.email_status)! django-watchman will now check that your email settings are working too!
  • Fix a few small issues in the readme
  • Rearrange some of the code in checks.py

0.2.2 (2014-09-05)

  • Fix and run tests on Python 2.7 and 3.4
  • Bump django-jsonview dependency to latest
  • Update tox envlist and travis config to test 2.7 / 3.4

0.2.1 (2014-09-04)

  • Initialize django during tests to prevent app loading issue for Django >= 1.7
  • Suppress MIDDLEWARE_CLASSES warning for Django >= 1.7
  • Reorganize test imports
  • Fix make test, make coverage, make release commands
  • Add htmlcov/ directory to .gitignore
  • Test django 1.4, 1.6, 1.7

0.2.0 (2014-09-04)

  • Custom checks can now be written and run using the WATCHMAN_CHECKS setting
  • A subset of the available checks can be run by passing the check GET param when hitting the watchman url

0.1.2 (2014-02-21)

  • Move package requirements out of requirements.txt and into setup.py

0.1.1 (2014-02-09)

  • Remove django>=1.5.5 version specification
  • Remove wheel requirement

0.1.0 (2014-02-08)

  • First release on PyPI.