3.2.0 (in development)

  • Fix mypy warnings about the Dict and Mapping generic types lacking type parameters.



  • gidgethub.sansio.RateLimit.from_http returns None if ratelimit is not found in the headers.
  • Allow authenticating as a GitHub App by using JSON web token. gidgethub.sansio.create_headers now accepts jwt argument.,,,,,, and now accept jwt and oauth_token arguments.
  • gidgethub is now packaged using flit.


  • Tighten type hints for parameters that have a default of None but were not typed as Optional.
  • Tweak code to not change semantics but reach 100% coverage.
  • Provide a human-readable string representation of gidgethub.sansio.RateLimit.
  • Use the message data as the error message if the errors object was not returned.
  • Add the data keyword argument to


  • Tighten up protections against caching ineligible responses.


  • Expand gidgethub.routing.Router.dispatch().


  • Add support for application/x-www-form-urlencoded webhook event payloads. (This also allows for API calls to return this content type, although GitHub currently does not do that.)
  • Introduce gidgethub.routing to help route webhook events to registered asynchronous callbacks.
  • Add type hints.
  • Add a cache argument to


  • Introduce gidgethub.tornado to support Tornado (thanks to Matthias Bussonnier and A. Jesse Jiryu Davis for the PR reviews).


  • The default value for the data argument of was changed from "" to b"".
  • All type hints were removed (due to mypy not supporting yield in an async function, they were not being tested as being valid).


  • Renamed to sleep() to make the method public.
  • Renamed the “test” extra to “tests” and added the “dev” extra.
  • Introduced the RateLimitExceeded exception.
  • Methods on GitHubAPI no longer automatically sleep when it’s possible that the call will exceed the user’s rate limit (it’s now up to the user to prevent from going over the rate limit).
  • Made the [treq] install extra depend on Twisted[tls].


  • gidgethub.sansio.Event.from_http() raises a BadRequest of 415 instead of 400 when a content-type other than application/json is provided.
  • More robustly decode the body in gidgethub.sansio.Event.from_http() (i.e. if the content-type doesn’t specify charset, assume UTF-8).
  • Changed the signature of gidgethub.sansio.Event to accept Any for the data argument.
  • Fixed signature verification.


  • Introduced gidgethub.treq (thanks to Cory Benfield).


Initial release.