Skip to main content


Learning a programming language can be hard. Learning with materials in a different human language is even harder. This is why we have started the process of converting pygame learning materials into another language. With the help of a professional qualified educator we have begun the process with Spanish. Tutorials, technical API documentation, and teaching materials will need to be translated. Already whilst going through the first tutorials we noticed gaps and problems with our existing materials. It's improving our English materials too! But the first language will be slower because of this, so we don't want to do too many at once. As pygame is a hobby project made by volunteers we don't have a big budget for things, and we don't do corporate sponsors. Costs come out of our pockets, and people work on what they enjoy doing in their spare time. So far one of our contributors has donated $800 USD, but we are seeking to raise $1200(€1200) more for the first phase of this en-devour with a fundraiser. If you think it's a worthy cause and you have a few monies to spare we'd appreciate any support.

Many thanks to: Owen Wiggins, Dan Lawrence, John Norris, Anonym, William Chambers, Franco Bonfiglio Vazquez, Fiona Beardsworth. €674 were raised on top of the $800. Updates will come here on the progress with Spanish.
It's happy dance time.

pygame 2 is out.
It looks like we're 20 years old.

pygame snake with a party hat on blowing a whistle

ps. we have a present for you coming shortly.
Saturday April 18th to Tuesday April 21st, 2020
Starts at 3:00 AM CEST *

Join us for Ludum Dare 46, our first event of 2020!

For the next two months, I'd like to try to focus on pygame 2 critical issues.

Backwards compatibility issues people are reporting with the pygame 2 dev releases.

So there's a feature freeze on anything not related to these issues. One issue at a time until the two months are up or we are done.


The first issue is: "SDL 2: Per Pixel Alpha error".

Over the next weeks we have plenty of game jams that people from the pygame communities take part in.

Alakajam is first starting on September 20th. "Alakajam! is a young community gathering game development enthusiasts from all backgrounds. We host a series of informal events, that give you a chance to both make games and get people to play them. Alakajam! competitions, taking place over a week-end, three times a year. Start/end times are suited to European timezones."

Then the must-use-python PyWeek challenge "Invites entrants to write a game in one week from scratch either as an individual or in a team. Is intended to be challenging and fun. Will hopefully increase the public body of python game tools, code and expertise. Will let a lot of people actually finish a game, and may inspire new projects (with ready made teams!)." PyWeek runs from Sept. 22, 2019 to Sept. 29, 2019, and theme voting is already on.

Finally, Ludum Dare is an event where you create a game from scratch in a weekend based on a theme. Saturday October 5th to Tuesday October 8th, 2019. Starts at 12:00 AM CEST *. Ludumdare is the oldest online game jam, and has the largest number of participants. There is a Jam (72h, less restrictive rules), and a compo (48h more rules). The Jam now lets people submit paper board games, and even things like crafts that aren't games at all!

Want to join in as part of a team? The pygame community game (stuntcat) is also taking part, by creating a new mini game for some of these game jams. Drop into the discord chat #communitygame channel and say hi (

Also, how about inviting women and non-binary people to make the game with you?

pygame europython sprint

If you want to join in online, come into our 'Discord' #contributing channel If you're at EuroPython you can find information about the sprints on their website.

Whilst we focus like a shark-lazer on pygame 2, here is a bonus pygame 1.9.6 with a couple of small regression bug fixes.

- mp3 via smpeg was missing in manylinux builds.
- mixer thread deadlock issue when controlling it from different threads.
- pygame.version.vernum now has major, minor, and patch attributes.

pygame 1.9.5

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.


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
#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/
#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/
#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 -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

🐱‍🏍 stuntcat is our open source mini-game we worked on in order to drive pygame 2 development forward. We wanted to make a real mini-game and try to release it for sale on as many platforms as possible. So that other people can look at the source code and distribute their game on more platforms too.

We only had 4 days... but during that time more than 14 people got involved. We learnt a lot during this. The compilation instructions for pygame 2 were improved so that more people could build development versions. We automated the installer generation for Windows, Mac, and pypi on github (so other projects can copy this base-code and do it too). Gif animation saving was started (because when you release your game you want a gif right?). Missing features and areas where documentation could be improved were identified (animated sprites, and scenes anyone?). Fixes to pymunk (a great 2D physics engine) were made so distributing physics games to end users is now easier. There's also an example of using the tile map loader (PyTMX) with the physics engine. More than a month after the game jam finished we are working on issues discovered during the making of 🐱‍🏍 stuntcat.

We want to make distributing pygame apps easier for people. You made your game, now you want to share it with your friends or even sell it right? The first place we made a release was on, a platform for selling games and apps. There we uploaded the Mac, Windows, and source for people to download with a pay-what-you-feel option.

Next step is to release the game on Steam (another popular games platform). For the next step we need to raise $100 for the Steam App fee. We also have to make the game better! It's already a pretty fun mini game, but requires more mini games and more polish. We also need to make pygame 2 pre-release binaries so that we can actually publish on Steam.

Thanks to the makers of stuntcat: bitcraft, blubberquark, Bottersnake, claudeb, illume, Kuba | ThePolish, TJWhale, hfoxp, xeno, M, CaptHurls, dlon, dirk0, viblo, and kleines filmröllchen.

day 0: $0 of $100 raised for Steam app fee.
day 1: $5 of $100
day 2: $57 of $100
day 3: $100 of $113.20
day 14: $107 of $113.20
day 20: $127 of $113.20
If you ever wanted to support pygame development financially and you can afford it, this is how you can by purchasing stuntcat on for $2 or what ever you feel. update: we raised enough to make a steam release. Thanks to everyone who chipped in!