TLDR; Some highlights.

Every single source file has been heavily modified and moved in this release. Initial (source code only) support for SDL2 has been merged in. We also support compiling with SDL1 in the same code base, so the migration to pygame 2 is easier. pygame 2 will be released with SDL2 being the default backend when some remaining issues are ironed out. The 1.9.x releases will continue with SDL1 until then. Also, the C API of pygame is undergoing a transformation with lots of cleanups. Then there have been plenty of other cleanups all throughout the python code as well. There's still lots to clean up, but things should be significantly easier for people to contribute (👋 hello and thanks new contributors!). The documentation has been improved with better examples links, search functionality, and improved navigation. Support for older Macs, and newer Macs has been improved. The mask, midi, draw, and math modules have gotten lots of polish with rough edges removed.

Thanks

A very special thanks to the people who have volunteered commits to pygame since the last release. In alphabetical order...

(@alphaCTzo7G) | Amos Bastian (@amosbastian) | Andrey Lopukhov (@andreyx86) | Augusto Noronha (@augusto2112) | Bernardo Sulzbach (@bernardosulzbach) | (@Bottersnike) | Cai Q.T. (@CAIQT) | (@Cerealdragon) | Charles (@charlesej) | (@ChrisWeissNike) | (@cmtrapp02) | Daniel Molina (@daniel-molina) | David Caughell (@DavidCaughell) | David Lönnhager (@dlon) | (@dr0id) | burmer (@dtschirmer) | (@e1000) | xFly_Dragon (@husano896) | (@IchMageBaume) | René Dudfield (@illume) | (@LambdaGoblin) | Lenard Lindstrom (@llindstrom) | François Magimel (@Linkid) | (@LiquidFenrir) | Mark Hurley (@markph0204) | Marius Gedminas (@mgedmin) | (@metulburr) | Michael Farrell (@micolous) | Dominik George (@Natureshadow) | Nik (@nikolas) | Nunu-Willump (@Nunu-Willump) | (@pleboulanger) | Rebecca Chen (@rchen152) | (@robertpfeiffer) | Sett (@sw00) |

Quite a few new people have helped out with this release 🤗

An equally special thanks to everyone else who has contributed in other ways. Thanks to claudeb, imallet, and deshipu for moderating the discord chat to keep it friendly. Thanks to the twitter folk, and the stackoverflow Q&A people. Thanks to everyone who puts their game up on the pygame website for others to look at. Thanks to people making tutorials and sharing articles & books they've written. Thanks to the r/pygame mods and community. Thanks to pyladies groups for running fun sessions, and for making things better. Thanks to the teachers providing feedback, and for doing something fun with their students. Thanks to Debian, Raspberrypi, Arch, Fedora, and all the other community groups. 🖤

More details.

#945 Vector: Explain slices and swizzling

#944 Update surface documentation

#937 Make mask offset boundary checking consistent

#936 Update midi documentation

#931 Fix drawing 1 pixel wide off-surface ellipses

#929 Use SDL_RWops instead of pg_FopenUTF8.

#928 Fix LayeredDirty's inconsistent use of its source rect

#927 Workaround for locale errors with PyPy

#926 Update dependencies for manylinux builds.

#924 Upload .whl binaries to a github draft release when creating tag.

#923 Update scrap documentation

#922 #881 #879 Fix zero-sized mask segfaults

#920 Fix the SystemError when no type specific clipboard content exists.

#917 Update scrap tests

#914 Update freetype tests

#911 #893 #889 #876 #874 #844 #840 #831 #819 Improved mask tests

#900 Add sprite tests

#899 bugfix for dirty sprite when using a source rect

#891 Add missing Vector2.magnitude()

#873 Fix mask index out of bounds segmentation fault

#806 Mask constructor 'fill' argument

#807 Use version directives consistently in documentation and update style

#805 Event functions: pump parameter and keyword arguments

#803 Add customized repr()/str() output for Mask objects

#802 Fix aaline()/aalines() not drawing on a surface's border

#797 Keep surface alpha value for copied surfaces with SRCALPHA flag

#760 #707 Load images on multiple threads properly

#783 Fix overlap_mask() making incorrect mask

#751 #749 #748 #746 #745 Added get_init() to all modules with an init() function

#725 Allow camera module to be used on Windows

#722 API version macros

#698 Use pre styles in docs

#670 Converting between ANSI notes and MIDI notes or frequencies

#663 Compile for PyPy 3 and PyPy fixes

#665 Chimp tutorial: reindent and clean some code

#664 Chimp tutorial: fix reST syntax

#656 #649 Handle Unicode objects and paths properly

#631 Fix failing tests test_aapolygon and test_pie

#630 Fix freetype rotation rendering

#596 aaline cleanup

#582 draw.aaline: blend correctly

#577 #573 Fixed FreeType memory leaks

#571 Fix surface.blits() bugs

#560 Added math.Vector2 subclass test for issue

#558 Raise TypeError on invalid point arguments

#557 Update typecheck to allow subtypes

#545 update system font lists in sysfont.py

#538 Mac fonts support using system_profiler

#559 Allow clean silencing of support prompt

#553 Fix homebrew travis mac builds

#551 Fixed freezing while playing music from file objects

#550 updated for python 3

#546 Improve message on failed imports & cleanup

#544 Spelling fix in examples/glcube.py

#540 DirtySprite subclass allow other _layer values

#536 dependency version into README & Cleanup SDL1.2

#534 More test cleanups.

#535 draw_py for Python algos & aaline testing

#534 More Test cleanup

#518 Organise the docs modules by usage, add search form.

#517 Test cleanup n+1 : yet another test cleanup branch

#516 PY_VERSION_HEX < 0x02070000 : cleanup

#515 Fix draw polygon ; tests & code cleanup

#514 Cleanup Python < 2.7 references

#511 Fix odd-width ellipses not drawing correctly

#510 Update unit tests draw.ellipse, add unit tests draw.(aa)line(s)

#509 Midi tests : add, refactor, cleanup

#508 More test method cleanup

#507 Improve mac compile times on travis.

#505 Remove "if 1:" pattern in tests

#504 Cleanup mixer test

#503 Clang format all the src_c/.c files

#502 Cleanup some test methods & test/sndarray_test.py

#501 Add draw_ellipse unit test

#500 Test for overlap mask

#499 Remove boilerplate imports from top of test files

#498 Adding a test for Thick Line Bug

#493 0 sized masks are now possible

#489 transform.scale does not crash for zero sized surfaces

#488 Added unit test 'test_zero_surface_transform' for issue 411

#486 Moved jquery.plugin.docscomments.js into pygameweb.

#485 Repo cleanup. 8 things in top level. Rest in buildconfig/. Old stuff removed.

#484 Added mac sdl2 support. Changed config.py -sdl2

#483 Support older mac core duo 2 cpus

#482 The giant SDL2_patches merging PR.

#476 Do not try to add portmidi on freebsd. It does not exist.

#475 Resurrect Python 3.4 builds on Appveyor