Install & Compatibility
Where this runs
tested against v4.0.0.dev5 · pip install
no network on importno background threads
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
muslpy 3.10–3.920 runs
installs and imports cleanly · install 0.0s · import 0.000s · 145.1MB
glibcpy 3.10–3.920 runs
installs and imports cleanly · install 5.4s · import 0.000s · 146MB
144MB installed
● package 144MB
Code
Verified usage
Verified import paths — ran on the pinned version, not inferred.
Window
✓ import arcade
class MyGame(arcade.Window): ...
✗ from arcade import Window
class MyGame(Window): ...
While 'from arcade import Window' works, the idiomatic and often safer way for Arcade classes is to use 'arcade.Window' to avoid name collisions and maintain clarity, especially for beginners.
This quickstart code initializes an Arcade window with a specified size and title, sets a background color, and then draws a red filled circle in the `on_draw` method. The `arcade.run()` call starts the game loop.
import arcade
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
SCREEN_TITLE = "My Arcade Game"
class MyGame(arcade.Window):
def __init__(self):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)
arcade.set_background_color(arcade.color.AMAZON)
def on_draw(self):
self.clear()
arcade.draw_circle_filled(100, 100, 50, arcade.color.RED)
def main():
game = MyGame()
arcade.run()
if __name__ == "__main__":
main()
Debug
Known issues
breakingArcade 3.x introduced significant breaking changes compared to 2.x, especially in GUI, Sprite, and drawing APIs. Key changes include removal of `Sprite.draw()`, `Sprite.on_update()` (now unified `update`), and `Sprite.set_position()`. The `arcade.draw` module was restructured into submodules.fixConsult the official migration guide for 3.x if upgrading from 2.x. Update code to use new `Sprite` methods (e.g., `update()` for logic), new drawing primitives (e.g., `arcade.gui` for UI components), and revised camera logic.
affects: 3.0.0 and later
gotchaArcade requires OpenGL 3.3+ support, which means it will not run on environments like Raspberry Pi or Wayland without specific (and often complex) workarounds or hardware acceleration.fixEnsure your system's graphics drivers and hardware meet OpenGL 3.3+ requirements. For Linux, X11 is generally recommended over Wayland for best compatibility.
affects: All versions
gotchaDirect interaction with OpenGL objects (e.g., creating textures or buffers) from non-main threads can lead to errors, as OpenGL is not thread-safe. Python's garbage collector can sometimes trigger OpenGL object releases from other threads.fixAvoid manipulating OpenGL-related objects (like `arcade.gl.Texture`, `arcade.gl.Buffer`) from background threads. If using threads, ensure any OpenGL object creation/destruction happens on the main thread, or manage OpenGL garbage collection explicitly using `gc_mode='context_gc'` when creating `arcade.Window` and calling `ctx.gc()` manually.
affects: All versions
deprecatedThe `arcade.quick_run` function was removed as it had no useful purpose and encouraged less structured code.fixReplace calls to `arcade.quick_run()` with the standard `arcade.run()` function within an `arcade.Window` class structure, as shown in the quickstart example.
affects: 2.6.13 and later
Errors
Common errors & fixes
error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools"
This error occurs on Windows when `pip install arcade` attempts to compile a dependency (like `pymunk`) from source, and the necessary C++ build tools are missing.
fixInstall 'Desktop development with C++' workload from Visual Studio Installer (Community edition is free), or specifically install 'Microsoft C++ Build Tools' from `https://visualstudio.microsoft.com/visual-cpp-build-tools/`.
AttributeError: module 'arcade' has no attribute 'Scene'
Users attempting to directly import `Scene` or other core classes that are meant to be inherited from `arcade.Window` or `arcade.View` (or were part of internal restructuring).
fixEnsure you are using the correct object-oriented pattern, typically by subclassing `arcade.Window` or `arcade.View` for game states. If you're looking for a Scene *manager*, it's often built around `arcade.View` transitions.
bash: arcade: command not found
The `arcade` command (used to get environment info or run examples) or Python interpreter cannot find the installed `arcade` package. This often happens if a virtual environment is not activated or `arcade` was not installed successfully in the current environment.
fixActivate your Python virtual environment (if using one). Re-run `pip install arcade` to ensure the library is correctly installed. Verify installation by running `python -c "import arcade; print(arcade.__version__)"`.
Window not created yet. Call `arcade.open_window()` or subclass `arcade.Window` before using this function.
An Arcade drawing or OpenGL-dependent function was called before an `arcade.Window` was created and made current. Many Arcade operations require an active OpenGL context.
fixEnsure `arcade.open_window()` is called or an `arcade.Window` subclass is instantiated and `arcade.run()` is invoked before attempting drawing or other context-dependent operations. In object-oriented setup, ensure drawing/setup code runs within `__init__`, `setup()`, or `on_draw()` methods of your `arcade.Window` subclass.
Upgrade
Version history
3.3.3latest on PyPI · released Oct 9, 2025
Audit
Dependencies
pygletrequiredCore windowing and multimedia backend, including OpenGL bindings.
PillowrequiredUsed for image loading, manipulation, and texture processing.
pymunkrequiredOptional dependency for 2D physics engine integration.