Skip to content

Releases: pygame-community/pygame-ce

2.5.6.dev2

12 Oct 13:40
0fa39e3

Choose a tag to compare

2.5.6.dev2 Pre-release
Pre-release

This is a pre-release for 2.5.6, which should be out next weekend if everything goes to plan. GitHub autogenerated release notes can be found below, for the full release we will clean these up to be more human readable.

What's Changed

Read more

2.5.5

07 Jun 07:28

Choose a tag to compare

Hello again, this release is out a lot quicker than usual because we're responding to two reported regressions in 2.5.4. Thank you to @SamuelWyck and @davidfokkema for their reports. This release fixes both of those regressions and contains the other things we've worked on in the last few weeks.

EDIT 2025-07-28: New wheels have been uploaded to add support for Python 3.14 and Pypy 3.11

What's Changed

Bugfixes

  • @oddbookworm found and fixed a regression where pygame.transform would fail to copy palettes when transforming palettized surfaces, making the outputs unusable, in #3464. @ankith26 made a related fix and @Starbuck5 added additional tests for this in #3465 and #3466 respectively.
  • @ankith26 fixed a regression where pygame-ce apps failed MacOS code notarization in Briefcase, due to the inclusion of non ascii (Korean) filenames in our tutorials. #3478.

New API

Docs

Maintenance

New Contributors

Full Changelog: 2.5.4...2.5.5

2.5.4

02 Jun 05:41
dc12de7

Choose a tag to compare

🕹️🎯⚡🏅📙🕹️🎯⚡🏅📙🕹️🎯⚡🏅📙🕹️🎯⚡🏅📙🕹️🎯⚡🏅📙

pip uninstall pygame (if previously installed, to avoid package conflicts)
pip install pygame-ce --upgrade

🕹️🎯⚡🏅📙🕹️🎯⚡🏅📙🕹️🎯⚡🏅📙🕹️🎯⚡🏅📙🕹️🎯⚡🏅📙

Hey all, we've got another release for you! This one was made by 13 contributors changing over 403 files in 74 PRs and 200 commits. A big theme of this release is porting our codebase to SDL3 (along with some other general maintenance stuff), but we also have some more immediately applicable enhancements. Here's what we did in the last 3 months!

What's Changed

New API

Enhancements

  • @damusss and @Starbuck5 reduced the sizes of our wheels by converting a lot of assets to webp in #3362, #3374 and #3358
  • @zoldalma999 moved Window, display, system, Surface, draw, transform and image docs to their stub file so that editors can pick them up in #3296 and #3389
  • @oddbookworm updated print_debug_info to show whether GIL is enabled in #3355
  • @aatle removed angled brackets from Circle and Line __repr__s in #3375
  • @mv805 improved the warning message when a SysFont is not found and clarified the docs related to it in #3373
  • @damusss removed an unnecessary warning when a zero sized resizable window is requested in display.set_mode in #3386

Bugfixes

Docs and Types

  • @aatle made a bunch of improvements and fixes to our stubs in #3335
  • @damusss added tutorials to the offline docs that come with your pygame-ce installation in #3380
  • @COUR4G3 fixed the depth argument missing in the type hints of video.Texture.__init__ in #3360
  • @ankith26 fixed __class_getitem__ to be positional-only in #3410
  • @XORandom finished the russian translation of our readme in #3424
  • @aatle fixed stubs for buffer types in #3398

SDL3 Porting

Maintenance

New Contributors

Thank you all!

Thank you to everyone who helped make this release happen from contributors, to people reporting issues, to PR reviewers! A big thanks also to those who helped the pygame community whether that be making tutorials, helping people on forums, sharing cool things made with pygame or just talking about it online with other people! And thank you for reading the release notes and using pygame-ce!

Let us know if we made any mistakes in these release notes so that we can correct them.

Take care, and happy pygaming!

Full Changelog: 2.5.3...2.5.4

2.5.4.dev2

24 May 07:27
5248a97

Choose a tag to compare

2.5.4.dev2 Pre-release
Pre-release

This is a preview release for 2.5.4, which should be out next weekend, if everything goes to plan. Included are the GitHub autogenerated release notes-- for the full release we will clean these up to be more human readable.

What's Changed

New Contributors

Full Changelog: 2.5.3.dev2...2.5.4.dev2

2.5.3

09 Feb 12:33

Choose a tag to compare

🐉🛡️🔥🥇📗🐉🛡️🔥🥇📗🐉🛡️🔥🥇📗🐉🛡️🔥🥇📗🐉🛡️🔥🥇📗

pip uninstall pygame (if previously installed, to avoid package conflicts)
pip install pygame-ce --upgrade

🐉🛡️🔥🥇📗🐉🛡️🔥🥇📗🐉🛡️🔥🥇📗🐉🛡️🔥🥇📗🐉🛡️🔥🥇📗

Hello all! We are pleased to announce the first pygame-ce release of 2025.

Since last release, our underlying library SDL (Simple DirectMedia Layer) has released SDL3, with tons of shiny new features and lots of breaking changes. Our goal is to get our existing API fully working on top of SDL3, then focus on a pygame-ce 3.0 release with SDL3 + cool SDL3 features + a few minor backwards compatibility tweaks-- nothing crazy but more than we would feel comfortable changing in a release normally. See #2760 for a discussion of potential pygame-ce 3.0 API changes. To that end, significant effort this release went to getting things more ready for SDL3, but we still have a ways to go. And this plan may change, just wanted to share what we're thinking.

Before we get into the meat of the changes,

  • This release drops support for Python 3.8, as it is end of life. (Contributed by @ankith26 in #3143)
  • This release raises the minimum SDL2 version to 2.0.14 (Contributed by @ankith26 in #3213)

Enhancements

  • @gresm added an option for pygame.Windows to not show up in the taskbar, for "utility windows". pygame.Window(utility=True). Added in #3226.
  • @damusss Added "erase" and "repeat" options for Surface.scroll in #2855.
  • @damusss Expanded color type support (not just tuples, but also color strings like other APIs accept) for mask.from_threshold. He also fixed the type stubs for PixelArray methods to correctly indicate they don't have the expanded color type support. See #3164.
  • @MrRedstone058 added Line methods and length attribute to the experimental geometry module in #3179.

Bugfixes

  • @Matiiss Added runtime support for type hinting sprite Groups like other Python containers. E.g. group: pygame.sprite.Group[MySpriteClass] = pygame.sprite.Group() tells type hinters that this is a sprite group of MySpriteClass instances. Contributed in #3053.
  • @ankith26 Fixed a bug in saving Surfaces as TGA images, where they could overrun allocated memory and crash, in #3169.
  • @yunline Added the missing BLENDMODE_MUL (relevant to the experimental _sdl2.video module) in #3258.
  • @ankith26, @MyreMylar, and @zoldalma999 all worked together (we love to see it) to straighten out event.peek behavior between implementation, type hints, and documentation, in #3283. Classifying this as a bugfix because the previous behavior was a mistake and has been fixed.

Peformance improvements

  • @Starbuck5 removed unnecessary calls to PyNumber_Index, PyLong_Check-- speeding up x = rect[0] and rect[0] = x 7-9% percent-- in #3242.
  • @Starbuck5 optimized an internal function that converts pairs of Python numbers into C integers or floats. This function is used all over the place, but is only significant for functions that were pretty quick anyways. Rect.move_ip and Rect.collidepoint were tested to be 19% and 17% faster, respectively. Contributed in #3214.
  • @ankith26 and @damusss improved the speed of color parsing for color names (e.g "green") and string hex values (e.g. "#FF00FF") by more than 2x, by adding a fast path before stranger arguments are considered. Contributed in #3297 and #3302.

Deprecations

  • @ankith26 deprecated Window's foreign kwarg and Window.focus's input_only kwarg in #3234
  • @Starbuck5 marked old type aliases as deprecated (SurfaceType, RectType --- just use Surface and Rect!) #3288

Docs and Types

  • @zoldalma999 began implementation of a new documentation system where we generate the docs from a unified representation in the type hints. This will allow editors to see and display the documentation of each function as the user uses it. Currently this is only implemented for the time and cursors modules, it is planned to roll out to other modules in future releases. See #3188.

An example before/after with docs in the type hints

  • @aatle improved the type hints, especially around Color, Rect, display, and geometry. See #3172, #3183, #3248, and #3264.
  • @gavinmorrow fixed a grammar mistake in the Window docs in #3194.
  • @Starbuck5 corrected some older docs content and some recent invalid formatting that got through, in #3204, #3205, #3266, #3272, and #3316.
  • @ankith26 improved the type hints around the experimental geometry and _sdl2 modules, as well as the freetype module, in #3212, #3300, #3301.
  • @damusss expanded the type hints for pygame.Window init keyword arguments to make them easier to discover in editors/IDEs, see #3295.
  • @XORandom and @noahcse worked on Russian and Traditional Chinese readmes, respectively, in #3138 and #3113.
  • @GabrieleLS added a note to the mixer documentation about different meanings of the word "channel" in #3228.
  • @JovialKnoll did a grammar fix and removed incorrect information from the Surface docs in #3231 and #3263
  • @yunline fixed a formatting mistake in sndarray.rst and cursors.rst in #3257
  • @Matiiss documented how volume is stored internally for (get|set)_volume functions/methods (129-value scale) in #3091

Tests and Examples

  • @damusss Added __name__ == "__main__" guards to the examples, so they can't be accidentally run on import. People occasionally import them on accident, like in this case. Contributed in #3181.
  • @Akaracy added a test for draw.arc in #3230.
  • @MyreMylar renamed TestTags so it doesn't get confused for a test in #3276.
  • @MyreMylar fixed most of the Deprecation Warnings in surfarray_test in #3274.

SDL 3 porting

  • @Starbuck5 put in several PRs to getting modules compiling or get modules closer to compiling, focusing on modules failing because of SDL3's pixelformat changes. See #3166, #3171, #3278, #3294, #3308, #3307.
  • @ankith26 put in a bunch of PRs as well, getting time, surflock, constants, event, imageext, window, key, and mouse all compiling for SDL3. See #3206, #3217, #3262, #3251, #3207.

Maintenance

  • @ankith26 added a new dev.py file to help pygame-ce devs run necessary commands and do editable builds very smoothly, as a spiritual successor to setup.py which is seemingly being phased out in the Python packaging ecosystem. See #3128.
  • @ankith26 and @Starbuck5 kept us up to date with SDL2 (and SDL3 releases/prereleases for our experimental support). We've pulled in the new SDL 2.30.12, SDL_image 2.8.4, and SDL_ttf 2.24.0. Contributed in #3203, #3261, #3271, #3286, #3304, #3279, and #3322.
  • @ankith26...
Read more

2.5.3.dev2

02 Feb 07:36

Choose a tag to compare

2.5.3.dev2 Pre-release
Pre-release

Hello! This is a preview release for 2.5.3, which should be out in a week or so. Included are the GitHub autogenerated release notes, for the full release we will clean these up to be more human readable.

What's Changed

Read more

2.5.2

27 Oct 17:11
7a7dea3

Choose a tag to compare

☀️🎃👻🕸️🕷️🧛🧟‍♂️🧙‍♀️🧙‍♂️🕯️🪦🍬🍭🍫☠️⚰️🔮🧹🌕🐈‍⬛🦇🌌
pip uninstall pygame (if previously installed, to avoid package conflicts)
pip install pygame-ce --upgrade
☀️🎃👻🕸️🕷️🧛🧟‍♂️🧙‍♀️🧙‍♂️🕯️🪦🍬🍭🍫☠️⚰️🔮🧹🌕🐈‍⬛🦇🌌

We're pumped to drop another pygame-ce release, thanks to the awesome efforts of 30+ contributors in this release! In the last couple of months, we've together made 286 commits, updated 281 files, and merged 85 pull requests.

Now, let's dive into what's new!

New and improved API

Bugfixes

  • @Starbuck5 fixed an OpenGL issue in Window init in #3059

  • @oddbookworm fixed a break when the OS resizes the window in set_mode in #2992

  • @bilhox fixed segfault with antialiased draw functions with a depth different than 32bits in #3008

  • @pmp-p did some fixes for improved wasm support in #3137 and #3163

  • @MyreMylar fixed midi timer reset when quit in #3018

  • @mzivic7

    • Fixed aalines overlap issue in #2912
    • Fixed missing pixels in aalines when using integer coordinates in #3144
  • @ankith26

    • Fixed (F)Rect.scale_by(_ip) handling of the scale_by parameter in #3078
    • Updated FRect repr to handle larger values in #3077
    • Fixed pygame-ce editable install on windows in #3117

General Enhancements

  • @oddbookworm improved Vector{2,3}.__delattr__ messaging when deleting x, y, {z} and removed Vector4 zombies in #3069, and @ankith26 applied some more related updates in #3087
  • @bilhox made it so that too many arguments to Color.from_{colorspace} style methods now raise errors in #3125
  • @damusss added handling for all color types in transform.threshold in #3156

Performance Enhancements

  • @Starbuck5 updated more places in rect code to use PyObject_Vectorcall in #3048. The affected methods therefore see 15-22% improvements in speed.

  • @itzpr3d4t0r

    • Optimized Rect.clipline() in #3067. The performance is up by upto 50% in some of our test cases.
    • Optimized tuple creation for Rect getters in #3072

Docs and Type Hints

  • New contributor @MrValdez added example on how Window behaves with WINDOWCLOSE and QUIT events in #3115

  • New contributor @datapythonista clarified how Rect and positions relate in the intro tutorial in #3111

  • New contributor @hisa10 added a Japanese README in #3114

  • @oddbookworm fixed a couple of versionadded tags that should have been versionaddedold in display docs in #3046

  • @itzpr3d4t0r improved geometry docs in #3043

  • @Starbuck5 fixed transform.average_color docs and stubs to match implementation in #3076

  • @yunline updated the dependency section of zh-cn README in #3119

  • @zoldalma999 fix stubcheck typing error on windows in #3147

  • @bilhox

    • Made it so that some experimental API is not hidden in the docs anymore in #3068
    • Polished and reviewed french readme + note of when it was last reviewed in #3142
  • @damusss

    • Enhanced pygame.mouse.get_pressed docs in #3084
    • Made copy methods explicit for linting in #3129
    • Added Italian README in #3120
    • Improved color notation in the docs in #3165

Examples and Unit Tests

Code Quality and General Maintenance

Read more

2.5.2.dev2

13 Oct 08:35

Choose a tag to compare

2.5.2.dev2 Pre-release
Pre-release

Pre release version of 2.5.2 for testing, we appreciate everyone who tests out our dev releases!

Release highlights

  • Promoted pygame.Window to public API. Allows use of multiple windows at once, new window operations.
  • Various rect optimizations
  • Dependency updates: SDL and lower level C libraries
  • New module pygame.typing
  • Fixed segfault in antialiased draw functions with non 32 bit surfaces

What's Changed

Read more

2.5.1

12 Aug 11:47
e6fb798

Choose a tag to compare

☀️🌊🏖️😎🏄🐚🌈🏝️🍹☀️🌊🏖️🎉
pip uninstall pygame (if previously installed, to avoid package conflicts)
pip install pygame-ce --upgrade
☀️🌊🏖️😎🏄🐚🌈🏝️🍹☀️🌊🏖️🎉

We are pleased to do yet another release of pygame-ce, and this has been possible due to the efforts of over 20 code contributors. Together, we have made 193 commits across 139 files via 80 pull requests in the last 2 months since the previous release!

Now, onto the highlights!

Highlights

  • Added Python 3.13 (just standard 3.13, no free threading yet) and PyPy for apple silicon support.

  • We have a new logo!

pygame-ce logo

  • We haven't run out of optimization ideas yet 😅, we've managed to cram a few more in this release.

New API

  • There is now a default destination position (0, 0) for Surface.blit, thanks to @damusss in #2936.
  • @itzpr3d4t0r added a new function Surface.premul_alpha_ip to premultiply alpha faster by operating in place instead of needing to allocate a new Surface. @Matiiss also helped with documentation. See #2899, #2972, and #2980.

Bugfixes

  • @Matiiss fixed passing parent_window=None to display.message_box in #2723.
  • @itzpr3d4t0r fixed an issue transform.hsl not working on certain pixel formats in #2948.
  • @oddbookworm fixed a Surface.fill where rects with negative positions would slide to (0, 0) and then fill, instead of only filling part of the Rect. See #2939 for details.
  • @ankith26 fixed using SCALED after not using SCALED in display in #2925.
  • @damusss fixed using OpenGL with a resizable pygame.Window, see #2915.

General Enhancements

  • @MyreMylar added a SIMD printout (SSE2, AVX2 & NEON) to pygame.print_debug_info() in #2897. This will help us debug any SIMD-backend specific bugs submitted by users.
  • @damusss added support for radius = 0 circles to the experimental geometry module, see #2913.
  • @zoldalma999 added new "ABGR" format support to image.frombytes and image.tobytes in #2951.
  • @zoldalma999 made the experimental Window class subclassable in #2950.
  • @ankith26 added support for iterables in display.update, see #2987.
  • @Starbuck5 and @ankith26 added Python 3.13 support in #2994 and #3030.

Performance Enhancements

  • @itzpr3d4t0r continued his quest to optimize all the things, merging improvements to PixelArray.make_surface, transform.scale2x, Surface.fblits (a fix for a performance regression), mask.from_surface and (F)Rect methods. See #2953, #2859, #2978, #2895, and #2908 for more details.
  • @mzivic7 got a 5-6% boost out of draw.aacircle (new in pygame-ce 2.5.0) in #3012.
  • @Starbuck5 boosted the performance of some draw operations on 24-bit surfaces, with a 20% improvement on single-pixel line drawing, see #3021.

Deprecations and Removals

No new deprecations this release, but-

  • @ankith26 added deprecation warnings to some already-deprecated API (freetype.was_init, scrap.lost) in #3001.

Docs and Type Hints

  • @Mega-JC created a new logo and added it to the docs (in collaboration with @kadir014 on the design), in #2965. This is great for us to express our own identity as a project.
  • @REX2626, @whangho, @Mic-lab, and @damusss made grammar and wording improvements to docs content. See #2907, #2919, #2911, #3004, and #2901.
  • @damusss made it so deprecated functions are marked with the deprecated decorator in #2984. This allows editors to show users that a function is deprecated very neatly. They also made some smaller enhancements to the type stubs in #2918 and #2926.
  • @ankith26 modernized the stubs to use python-3.8-isms in #2995
  • @MrF1ow added a Contribution Section to README to help out new contributors in #2910.
  • @MyreMylar added license identifier to README in #2890.
  • @oddbookworm changed dark theme slightly to make code more readable in some cases in #2960.

Examples and Unit Tests

Code Quality and General Maintenance

New Contributors

Thanks all

A heartfelt thank you to everyone involved! This includes not just code contributors, but also the wider community - issue reporters, PR reviewers, tutorial creators, helpers on various media platforms, developers of supp...

Read more

2.5.1.dev2

06 Aug 09:56

Choose a tag to compare

2.5.1.dev2 Pre-release
Pre-release

A pre-release before the final release, please help us by testing this!

Release highlights

This is mostly a bug-fixes-and-enhancements release, but we do have a few cool new stuff to showcase!

  • We now support and distribute wheels for CPython 3.13 and PyPy for apple silicon.
  • The experimental Window class is now subclass-able.
  • Added new method Surface.premul_alpha_ip
  • The dst argument of Surface.blit now has a default value: (0, 0). This means you can skip this argument if you are blitting a surface at the origin (top-left) of the window.

What's Changed

New Contrib...

Read more