Click here to see your recently viewed pages and most viewed pages.


Game development technologies have changed dramatically in recent years. "Game developer" now describes a huge number of people working with an incredible diversity of technologies and exciting new gaming platforms. It has never been easier to create games, and modern social, mobile, and web technologies make it easier than ever to get those games in the hands of a wide variety of users.

But here's the problem: there are too many platforms! Developers want to get their games into into the hands of as many users as possible, but those users are scattered across technologies. To reach them all, you need versions of your game for each platform, and that's time consuming, expensive, and hard to maintain. That's where PlayN comes in.

Modern game developers have to worry about many platforms.

PlayN is an open-source cross-platform abstraction layer that uses the GWT compiler to take one code base written in Java and compile it into targets that run it as HTML5, Flash, Java, or as a native Android application. The PlayN architecture uses a service-provider interface pattern, meaning that the core contains a core set of APIs that have separate implementations for each target. Using PlayN all platform-specific calls are eliminated from your source code, and that one codebase can be compiled into multiple output implementations by writing tiny, targeted entry point classes that hook into each platform-specific implementation.

PlayN API service provider interface design

PlayN is not a game engine, it's a library for compiling the same game to many platforms. For the most part, PlayN contains only code which requires different implementations on each platform. For instance, PlayN doesn't come with an asset toolchain, an effects / animation system, or abstractions for game logic; it doesn't make assumptions about whether you're creating a platformer or a word game.

PlayN's mission is to provide the fundamental technology to support cross-compiling code for broadly-generalizable game operations such as an update / render loop, handling user input, and fetching or serializing resources. This keeps the size of the core library down and avoids bloating your source code with functionality irrelevant to your specific game.

Get Started with PlayN today and try it for yourself!