(Open in full screen.)

Square Shooter is an abstract shmup very loosely based on the classic arcade game Asteroids. It's quite addictive, so take care not to ruin your mouse!


Click/tap the hollow bubbles to shoot them. Hold down the mouse/finger to accelerate towards the cursor. You may want to catch the little squares – they're useful power-ups. That's about all!

(You can probably figure out the buttons in the lower left corner.)

Web Edition

As of 25 April 2013, the Web edition has touchscreen support and sound. It also adapts to any screen resolution. I am told it runs on Android, but not Apple devices.

As of 5 November 2014, the Web edition also has gamepad support. Use the left analog stick to move, and the right one to shoot. You still need the mouse/keyboard to start, pause and so on.

Desktop Edition

As of 15 July 2012, I have completed a desktop port based on Pygame.

Screenshot of a game with minimal, abstract graphics consisting mostly of line-art circles.

As of 14 May 2013, this edition also supports a gamepad. Use the analog sticks to fly and shoot, respectively, and button 1 to play/pause.


Square Shooter is available under the MIT license. See in-game credits for art licenses (generally CC-BY).


The new Square Shooter is known to work on Firefox 17 and Opera 12. It runs in Midori 0.3.3, but is too slow. Likewise for the stock Android browser, though various friends told me it runs well there.

I am told the game doesn't run on iOS devices.

The desktop edition requires Python and Pygame; these are most readily available under Linux, but Windows packages exist as well.


Q: Why does the ship move towards the bullet when you fire? That's contrary to the laws of physics.
A: I tried making it do the opposite. It became impossible to control. Realism is not fun.
Q: Why does the ship always move when you fire? Can't you use the other mouse button?
A: I tried that too, and it was just too hard to mentally switch gears, so I'd never manage to get out of the way on time. Just be easy on the mouse, it's part of the gameplay.

Development log