[Release Notes](https://sanicframework.org/en/guide/release-notes/v21.3.html)
Features
* [1876](https://github.com/sanic-org/sanic/pull/1876) Unified streaming server
* [2005](https://github.com/sanic-org/sanic/pull/2005) New `Request.id` property
* [2008](https://github.com/sanic-org/sanic/pull/2008) Allow Pathlib Path objects to be passed to `app.static()` helper
* [2010](https://github.com/sanic-org/sanic/pull/2010) [#2031](https://github.com/sanic-org/sanic/pull/2031) New startup-optimized router
* [2018](https://github.com/sanic-org/sanic/pull/2018) [#2064](https://github.com/sanic-org/sanic/pull/2064) Listeners for main server process
* [2032](https://github.com/sanic-org/sanic/pull/2032) Add raw header info to request object
* [2042](https://github.com/sanic-org/sanic/pull/2042) [#2060](https://github.com/sanic-org/sanic/pull/2060) [#2061](https://github.com/sanic-org/sanic/pull/2061) Introduce Signals API
* [2043](https://github.com/sanic-org/sanic/pull/2043) Add `__str__` and `__repr__` to Sanic and Blueprint
* [2047](https://github.com/sanic-org/sanic/pull/2047) Enable versioning and strict slash on BlueprintGroup
* [2053](https://github.com/sanic-org/sanic/pull/2053) Make `get_app` name argument optional
* [2055](https://github.com/sanic-org/sanic/pull/2055) JSON encoder change via app
* [2063](https://github.com/sanic-org/sanic/pull/2063) App and connection level context objects
Bugfixes and issues resolved
* Resolve [1420](https://github.com/sanic-org/sanic/pull/1420) `url_for` where `strict_slashes` are on for a path ending in `/`
* Resolve [1525](https://github.com/sanic-org/sanic/pull/1525) Routing is incorrect with some special characters
* Resolve [1653](https://github.com/sanic-org/sanic/pull/1653) ASGI headers in body
* Resolve [1722](https://github.com/sanic-org/sanic/pull/1722) Using curl in chunk mode
* Resolve [1730](https://github.com/sanic-org/sanic/pull/1730) Extra content in ASGI streaming response
* Resolve [1749](https://github.com/sanic-org/sanic/pull/1749) Restore broken middleware edge cases
* Resolve [1785](https://github.com/sanic-org/sanic/pull/1785) [#1804](https://github.com/sanic-org/sanic/pull/1804) Synchronous error handlers
* Resolve [1790](https://github.com/sanic-org/sanic/pull/1790) Protocol errors did not support async error handlers #1790
* Resolve [1824](https://github.com/sanic-org/sanic/pull/1824) Timeout on specific methods
* Resolve [1875](https://github.com/sanic-org/sanic/pull/1875) Response timeout error from all routes after returning several timeouts from a specific route
* Resolve [1988](https://github.com/sanic-org/sanic/pull/1988) Handling of safe methods with body
- [2001](https://github.com/sanic-org/sanic/pull/2001) Raise ValueError when cookie max-age is not an integer
Deprecations and Removals
* [2007](https://github.com/sanic-org/sanic/pull/2007)
* Config using `from_envvar`
* Config using `from_pyfile`
* Config using `from_object`
* [2009](https://github.com/sanic-org/sanic/pull/2009) Remove Sanic test client to its own package
* [2036](https://github.com/sanic-org/sanic/pull/2036) [#2037](https://github.com/sanic-org/sanic/pull/2037) Drop Python 3.6 support
* `Request.endpoint` deprecated in favor of `Request.name`
* handler type name prefixes removed (static, websocket, etc)
Developer infrastructure
* [1995](https://github.com/sanic-org/sanic/pull/1995) Create FUNDING.yml
* [2013](https://github.com/sanic-org/sanic/pull/2013) Add codeql to CI pipeline
* [2038](https://github.com/sanic-org/sanic/pull/2038) Codecov configuration updates
* [2049](https://github.com/sanic-org/sanic/pull/2049) Updated setup.py to use `find_packages`
Improved Documentation
* [1218](https://github.com/sanic-org/sanic/pull/1218) Documentation for sanic.log.\* is missing
* [1608](https://github.com/sanic-org/sanic/pull/1608) Add documentation on calver and LTS
* [1731](https://github.com/sanic-org/sanic/pull/1731) Support mounting application elsewhere than at root path
* [2006](https://github.com/sanic-org/sanic/pull/2006) Upgraded type annotations and improved docstrings and API documentation
* [2052](https://github.com/sanic-org/sanic/pull/2052) Fix some examples and docs
Miscellaneous
* `Request.route` property
* Better websocket subprotocols support
* Resolve bug with middleware in Blueprint Group when passed callable
* Moves common logic between Blueprint and Sanic into mixins
* Route naming changed to be more consistent
* request endpoint is the route name
* route names are fully namespaced
* Some new convenience decorators:
* `app.main_process_start`
* `app.main_process_stop`
* `app.before_server_start`
* `app.after_server_start`
* `app.before_server_stop`
* `app.after_server_stop`
* `app.on_request`
* `app.on_response`
* Fixes `Allow` header that did not include `HEAD`
* Using "name" keyword in `url_for` for a "static" route where name does not exist
* Cannot have multiple `app.static()` without using the named param
* Using "filename" keyword in `url_for` on a file route
* `unquote` in route def (not automatic)
* `routes_all` is tuples
* Handler arguments are kwarg only
* `request.match_info` is now a cached (and not computed) property
* Unknown static file mimetype is sent as `application/octet-stream`
* `_host` keyword in `url_for`
* Add charset default to `utf-8` for text and js content types if not specified
* Version for a route can be str, float, or int
* Route has ctx property
* App has `routes_static`, `routes_dynamic`, `routes_regex`
* [2044](https://github.com/sanic-org/sanic/pull/2044) Code cleanup and refactoring
* [2072](https://github.com/sanic-org/sanic/pull/2072) Remove `BaseSanic` metaclass
* [2074](https://github.com/sanic-org/sanic/pull/2074) Performance adjustments in `handle_request_`