The latest posts in full-text for feed readers.
Some of the 188 games available on the PlayJam GameStick were not available on the OUYA. Ever since building my replacement GameStick server I dreamt of making the GameStick games available on the OUYA.
Andiweli had the same idea and went through the tedious task of installing and testing each of the GameStick games on the OUYA. The result was a long compatibility list.
This list sat for a year until he came back and asked how we could bring them to the OUYA. The main problem is that each game needs a special tv.ouya.intent.category.GAME intent in its manifest file - otherwise it will not appear in the PLAY menu. Manually adding that to the games is possible by modifying the original game .apk, but that breaks the signature and requires us to host two versions - neither of which I was fond of.
At first I tinkered with community content, a feature introduced with the Chickcharney 1.2.1353 firmware update - the last major update ever released. That feature was never used by any games, but I did try out the pre-compiled cc-sample app shipped with the 2.1.0 development kit. It didn't allow me to add custom entries to the play menu, though.
Then I remembered that I already solved this problem for SNES games in 2015 by building a small launcher application that only acts as proxy to start the actual game. The Chickcharney firmware also brought support for bundles, which lets you purchase multiple games at once, and all of them get downloaded automatically! This would make the perfect solution: Bundle the GameStick game with the launcher, and people can click "download" and get both.
Two hours after I communicated my plan, Andi demo'd the first launcher in a small video.
Then I only had to think hard about a way to store the launcher data and cross-link the launchers with the actual games, build a script to convert GameStick meta data files into OUYA meta data files, modify the server software to automatically combine those linked games into bundles, expand the API documentation with the new information I got from implementing bundles and adjust the OUYA-API-to-HTML-converter to handle bundles.
7 days later I had everything in place and the first bundle downloaded on my development OUYA.
Fast-forward 4 days and we've got 11 GameStick games easily installable on the OUYA!
Published on 2025-11-13 in gamestick, ouya
After several months of work the community GameStick server has a HTML interface that lets you browse all the 188 games available for the GameStick.
On a desktop browser, the UI looks like the original marmalade-based GameStick interface. Use a smart phone or tablet device and the website looks a like a typical modern mobile web page.
The web interface has a couple of improvements over the old UI: You may filter games by genre and features - it's easy to find games for 2 players for some couch co-op, or platformer or racing games.
Published on 2025-09-03 in gamestick, html, web
The PlayJam GameStick community server software got another feature: Purchases. You are now able to buy games (instead of having all of them available for free) and in-game products like levels and powerups.
Your wallet has an infinite amount of money, so you don't risk going broke :)
All games - even already installed ones - have to be bought now. After buying, the game download starts automatically.
The purchase dialog is a web view, displaying a HTML page delivered by the server. I had no idea how it looked like - there were no screenshots to find with my Google-Fu. In the end I found a video of Lee Chapman demoing the Gamestick, and near the end he buys Riptide.
I took screenshots, resized and warped them until they had the correct aspect ratio and size. Then I re-built the layout in HTML and CSS that a 2013 browser understands.
There was no documentation about the purchase requests and responses. The requests were easy to document since I could see them in the server logs, but the responses were hard: Some of them are handled in the Java library, while others are passed to the Marmalade UI and parsed there. The important things like "success, download now" were of course in the compiled C code, and I was forced to use Ghidra to make a bit sense of it.
The magic words are:
{
"body": {
"success": true,
"message": null,
"action": "CLOSEPAYMENT"
}
}
Implementing purchases fixed a long-standing bug: The "uninstalled apps" view in the settings crashed, probably the Marmalade interface was never meant to handle 188 games. Now only the purchased games are listed there - without crashing.
A number of games have in-game products: "Top Gear: Stunt School" allows to buy nuts, dollars and permits. In "Pacman Tournaments" you can buy tokens (3500 for 99.99USD!), "Rise of Glory" lets you spend money on airplane packs and in Prince of Persia you can buy coins (1000 for 1.99, 100000 for 99.99$).
Of course we did not have backups and I had to decompile the game apk files to find the product IDs that they used. Products had to be registered at the server, and the game only asks the server which products are available.
More often than not, decompiling did not work because the game was made with Unity or some other engine, and I miss the tools to unpack those files. In this cases I let the server return all products ids from 1 to 1000, with prices from 0.01€ to 10.00€, and could immediately see which products were used. This did of course only work on some games; others crashed when they received more than 15 products.
OUYA games were much easier in this regard: They send all supported product keys to the server, making it a breeze to quickly add products for unsupported games. Although, easier only after I broke their DRM :)
At one point I was finished and had only find products for the last game, Repulze. Then I saw that - instead of sending integer number product IDs, just as all other games do - this game sends string keys like com.pixelbite.repulze.iap.toolkit_pack1! I had to modify the database, parts of the purchase API and the game data schema to support that :(
But now this feature is really complete, and you can purchase things in the following games:
In 2024-09 we had 163 of 188 games archived. Thanks to GameStick fans Kazdan, Krzysiu, Ryo and TheMartinMess22 we have 170 now, a whopping 90.4%!
Newly rescued games:
Published on 2025-06-25 in gamestick
A collection of links regarding the history of the PlayJam GameStick microconsole.
| Age | Date | Event |
|---|---|---|
| 2013-01-02 | Kickstarter funding campaign started | |
| 1 month | 2013-02-01 | Kickstarter funding campaign ended, 5691 supporters, 647.658$ |
| 10 months | 2013-10-24 | First Review at golem.de |
| 11 months | 2013-11-20 | German backers receive Gamesticks: GameStick ist da! |
| 1y 5m | 2014-05-08 | Last firmware update 0.9.2071 |
| 1y 5m | 2014-05-31 | Kickstarter docks were shipped |
| 1y 8m | 2014-08-15 | Inventory sell-off begins: GameStick for 19.99$ |
| 3 years | 2016-01-05 | PlayJam says GameStick will be running in the forseeable future |
| 3y 2m | 2016-03-09 | Last Facebook post by PlayJam |
| 4 years | 2017-01-09 | Official server shutdown |
| Date | Category | Event |
|---|---|---|
| 2012-12-10 | PlayJam | First PlayJam tweet: We are live with our pre-launch campaign. Follow us! Visit http://GameStick.tv or like us on http://facebook.com/GameStickNews |
| 2013-01-02 | Kickstarter | Kickstarter funding campaign started |
| 2013-01-03 | Kickstarter | Update #1: GameStick Day 1 - Wow. |
| 2013-01-09 | Kickstarter | Update #4: 320.000$ reached: Stretch Goals Announced! |
| 2013-01-11 | Kickstarter | Update #6: Stretch goal 1 reached: Stretch #1 Reached! |
| 2013-01-18 | Kickstarter | Update #8: 400.000$ reached: You spoke and we listened.. |
| 2013-01-30 | Kickstarter | Update #13: Miracast support: Working with Miracast |
| 2013-02-01 | Kickstarter | Kickstarter funding campaign ended, 5691 supporters, 647.658$: Wow! What a result! Incredible! Blown Away! |
| 2013-03-19 | Kickstarter | Update #17: Developer unit in production: Dev Kits, Partnerships and Further Updates |
| 2013-04-19 | Kickstarter | Update #23: GameStick DEV kit Unboxing Video |
| 2013-05-27 | Kickstarter | Update #29: GameStick Features on the BBC. |
| 2013-06-13 | Kickstarter | Update #34: Companion app: Demo showing PlayJam's Companion App working the GameStick UI |
| 2013-10-23 | Kickstarter | Update #45: Shipping stalled: Shipping update. |
| 2013-10-24 | Review | Golem.de: Playjams Gamestick im Test: Die Android-Konsole für zwischendurch |
| 2013-10-30 | Review | Eurogamer: GameStick review: Stick it. |
| 2013-11-05 | Review | Techradar: PlayJam GameStick review: The latest Android console doesn't get the formula right |
| 2013-11-07 | Kickstarter | Update #46: Sticks are shipping, Dock shipping delayed: Update - Feedback. |
| 2013-11-11 | Review | Engadget: GameStick review: Android console gaming still awaits its king |
| 2013-11-11 | Store | 45 games available: Engadget review |
| 2013-11-15 | Store | Over 50 games available: GameStick: Aktuelle Spieleliste |
| 2013-11-20 | Kickstarter | Germans backers receive Gamesticks: GameStick ist da! Die Verpackung… |
| 2013-12-04 | GameStick | Firmware update 0.9.2049: (source) |
| 2013-12-12 | GameStick | Firmware update 0.9.2049 report: GameStick Software-Update 0.9.2049 |
| 2014-01-19 | Store | 68 games available (source) |
| 2014-02-03 | GameStick | Firmware update 0.9.2058: (source) |
| 2014-02-06 | Kickstarter | E-Mail: Docks are still not shipping: Dear Backers, Let me start by apologizing for the lack of news and or updates on the GameStick project over recent months - in particular on the status of the docks.[...] |
| 2014-04-04 | Kickstarter | Last Kickstarter page update #47: Dock situation: Update. (archived copy) |
| 2014-05-01 | Store | 84 games available (source) |
| 2014-05-08 | GameStick | Firmware update 0.9.2071 (source) |
| 2014-05-21 | Kickstarter | E-Mail to Backers: Dock will be shipped next week Update: GameStick Dock |
| 2014-05-30 | Store | 90 games available (source) |
| 2014-05-31 | Kickstarter | TopFree got its kickstarter dock: GameStick Dock im Praxistest |
| 2014-07-12 | Review | Telegraph PlayJam article, 35000 units at GameStop: Get ready for TV gaming to move up a gear |
| 2014-08-15 | Sell-off | Price at GameStop: GameStick 19.99$ (source) |
| 2014-08-21 | Sell-off | Price at GameStop: Dock 15$ (source) |
| 2014-09-01 | Sell-off | Price at GameStop.com: GameStick 19.99$ (GameStick für $19.99, source 2) |
| 2014-09-18 | Sell-off | PlayJam sells off inventory on ebay Gamestick Sell off? |
| 2014-09-23 | GameStick | Custom Firmware CFW 1.4 (source) |
| 2014-12-05 | Sell-off | Price in GameStop store: GameStick 17$, Dock 5$ (source) |
| 2015-01-05 | Sell-off | Price at Gamestop: Controller 9$ (source) |
| 2015-10-20 | PlayJam | GameStick website redirects to flareplay.com, only zone.gamestick.tv still available: Neue PlayJam-Konsole FlarePlay und kostenlose AGameAWeek Collection für GameStick |
| 2015-11-23 | PlayJam | Playjam Titan prototype device sent to shanti: PlayJam Titan, (Gen 2 Gamestick?) |
| 2016-01-05 | PlayJam | PlayJam says GameStick will be running in the forseeable future: Tweet |
| 2016-02-26 | PlayJam | Last Tweet by @PlayJam |
| 2016-03-09 | PlayJam | Last Facebook post by PlayJam |
| 2016-05-15 | Store | 177 games available (source) |
| 2016-10-09 | Store | Game download not possible since months: GameStick ist „tot“ |
| 2017-01-09 | PlayJam | Server shutdown (taken from topfree screenshot) |
| 2017-01-11 | Store | Topfree blog post about server shutdown with screenshot of Gamestick homepage: GameStick: Das offizielle Ende |
| 2017-01-12 | Store | 177 games available (source) |
| 2017-11-09 | Store |
Shutdown: "Store closed earlier this year":
Comment:
No - they closed the store earlier in the year. As far as I know you can't download anything from the GameStick servers any more. |
Published on 2025-04-11 in gamestick
2013 PlayJam GameStick devices have a all-around rubber coating, and the controllers have a rubberized bottom. After 11 years, the coating's chemicals dissolved, leaving a sticky mess that sticks to your fingers when touching it.
It is possible to get rid of the coating by rubbing it off with Isopropanol (Isopropyl alcohol), an old sock and a pair of surgical gloves.
The rubber coating was mentioned in the 2013-07-11 Kickstarter Update #36: The Golden Sample:
- Put a rubberized coating on the bottom of the controller. This gives the finish a really nice quality feel.
- Used a rubber coating on the GameStick so that it did not scratch when inserted in to the controller. It really looks and feels fantastic as a result.
Published on 2024-12-31 in gamestick, hardware
The PlayJam GameStick had native support for using mobile phones as game controllers via its Companion app. Youtube still has a the official demo video showing it' usage.
When starting the app, it would show the GameStick and you could connect to it. Then the GameStick would deliver a branded controller skin to the app, which then displayed a custom controller interface for the game (or the standard one if the game had no own).
While looking through the files of a GameStick backup, I found some of the cached files in the /data/com.playjam.ca.service/files/ directory: .bundle and .meta files. The .bundle files are just Zip archives that contain an XML configuration file, background, button and stick images.
I took the time and built some little scripts to convert the XML configuration file via XSLT into a SVG image, and a script to embed the bitmap image files into the svg file. They can be found in the companion-app repository on Codeberg.
Published on 2024-12-15 in gamestick
My PlayJam GameStick replacement server is now able to deliver firmware updates to the GameSticks: Version 2049 to 2058, and 2058 to 2071.
The GameStick server was shut down in 2017, long before we tried to preserve the system. We thus could not download firmware images from the server, but GameStick Fans member Ryo found the firmware files for 2058 and 2071 somewhere on the internet and collected them for us.
Joe, a new GameStick Fan who joined in 2024-11, found the firmware image for 2049 on his stick.
Those full firmware images are ~180 MiB large and fully reset your GameStick - all settings and games are wiped. They can't be used for automatic updates.
After I manged to build a firmware update that enables the Android debug bridge, Ryo found an official firmware update on one of his GameSticks in 2023: Update-2058-to-2071.img. It was located in the /cache/ folder and only 3.2 MiB large.
Another stick contained Update-2049-to-2058.img (9.9 MiB).
Those .img files are small downloads and keep all the settings and games as they are - the right ones for automatic updates.
The initial request to check for firmware updates is pretty standard: A HTTP POST request to http://update.gamestickservices.net/check.php (actually 2 different domains and one hard-coded IP address), which returns a JSON structure that tells the stick if a firmware update is available, the textual changelog and if the stick must install it ("forced update") - and of course the download URL.
By reading the decompiled OOBE code, I figured out that the download URL gets modified and URL parameters are appended:
The firmware update is split into parts (chunks) of 100 kiB, and each chunk is "encrypted" by XORing it with the magic number 0x5b, and the binary SHA1 sum is put before the data itself.
My guess is that the developers did that to prevent people installing their own updates - a measure that was already defied in 2014-03, known as the lukepanic hack method. That hack supposedly (I don't have the files) opens a web server and delivers a custom firmware update :)
My server now contains a script that takes a firmware update, splits it into chunks, encrypts and signs them - so that the download files can be delivered statically.
All firmware images and updates known to us have been uploaded to the Internet Archive: 0.9.2049, 0.9.2059 and 0.9.2071.
Next we'd really like to have a developer firmware, and also know that there was a 0.9.2079 version we do not possess yet. Let's hope we'll find more sticks with cached firmware files on them.
Published on 2024-12-03 in gamestick
I've been continuing work on the Playjam GameStick replacement server and managed to implement two features: Achievements and leaderboards.
Achievements are things you reached in a game, e.g. jumping onto 3 enemies without touching the ground in Bloo Kid 1, a "Triple hit".
Whenever a player unlocks an achievement, the game sends that information to the server - a simple set-complete API call with the ID of the achievement and the session ID of the user. The server then has to store it in a database, and return it when requested.
Achievements can be requested in several locations:
Each of those locations had its own API call. Implementing the first and the last were easy, but the per-game achievement overview in the GameStick UI was pretty hard - the JSON structure was not parsed by the low-level GameStick database interface, but was handed off unparsed to the Marmalade-based UI, which parsed it and then crashed.
Guessing the property name for the achievement list yielded no results. Since the Marmalade SDk compiled code into C, it is pretty hard to decompile.
Fortunately, I found a Ghidra plugin for Marmalade, and after fixing a bug I could load the Console.s3e file into Ghidra. After some looking I found the property name for the achievement list: gameList.
All achievements were unfortunately registered at the server, and we have no backups of them. This means the games have to be decompiled and inspected to find out which achievements exists, what their title and description is. The achievements on the server also had images, which are lost forever.
Currently the game metadata repository has achievement information for Bloo Kid, Boulder Dash, Prince of Persia and ShaqDown.
Unlike the OUYA, the GameStick had native support for high score lists (but only one per game).
After implementing achievements, leaderboards were quickly done - the only API calls required for all games I know are saving the current score, and fetching the top 50 scores.
A couple of games provide high score lists: FallingBird, FourColorTaxi, GridLock, Magnetoid and Prince of Persia.
Stop the birds unfortunately fails to show the leaderboard for yet unknown reasons.
Published on 2024-10-30 in gamestick
This week the GameStick Fans community reached a milestone: Of the 188 games that were once available for the PlayJam GameStick, 163 have been archived and only 25 remain missing. That's 86.7%; a huge success for the project that started in 2024-04.
The lack of a GameStick community meant that nobody had backed up the available games before PlayJam announced the micro console's death in 2017.
After collecting cache files from GameSticks, 37 games could be downloaded from their AWS S3 URLs without authentication.
Another way to get the games is to contact the developers, but we had only limited success in getting answers to our e-mails, let alone .apk that the developers often did not have anymore.
Extracting installed games from existing GameSticks was the third option to get the game .apk files into our hands. It took a while and quite some effort until we were able to copy files off GameSticks - the devices were locked down and allowed neither file access nor sideloading.
The following people helped by copying games off their GameSticks or contacting developers to get .apks directly from them:
We do not yet have the .apk files for the following GameStick games:
| # | Game name | Developer |
|---|---|---|
| 1 | Animalz: Super Squad | InvaderGames |
| 2 | Baa Baa Bomber | RatJar Games |
| 3 | Beast Boxing Turbo | GoodHustle |
| 4 | Canabalt HD | Kittehface Software |
| 5 | CR Footy | Sacred Duck Games |
| 6 | Crumble Zone | Rebel Twins |
| 7 | CUBISTIC | Pytebyte |
| 8 | Dead Rushing | Dancing Cat Development |
| 9 | Dr. Bulbaceous Puzzle Solver | Wetgenes |
| 10 | EDGE | Mobigame |
| 11 | Finger Hoola+ | Plantpot |
| 12 | Furfur and Nublo | DevilishGames |
| 13 | Fuz Rush | Jet Stone Studios |
| 14 | Groundskeeper 2 | OrangePixel |
| 15 | Nimble Quest | Nimblebit |
| 16 | Orborun | Tiny Lab Productions |
| 17 | Pix'N Love Rush | Advanced Mobile Applications |
| 18 | RED | Knife Media |
| 19 | Sci-Fighters | Headup Games |
| 20 | ShaqDown | One Spear |
| 21 | SpaceCat | Platty Soft |
| 22 | Space Grunts | OrangePixel |
| 23 | Space Vermin | GameDisciples |
| 24 | Usagi Yojimbo | Happy Giant |
| 25 | Wasteland Bar Fight | Kybernesis |
If you have a GameStick with one or more of this games - follow the apk rescue instructions, or ask for help in chat.
The following games have been backed up and archived in the GameStick library at the Internet Archive.
Recent gameplay videos can be found on Wayne’s Gaming Den "PlayJam GameStick" playlist
Published on 2024-09-08 in gamestick
I'm on the quest to make PlayJam GameStick micro consoles usable again. Building a replacement server is underway, and collecting game information is nearly finished - but not much progress has been made obtaining the actual .apk files.
37 apks could be downloaded from the PlayJam Amazon AWS S3 bucket, but the rest of them are not accessible although we know the URLs. They are probably only accessible with a temporary access token that the GameStick server once generated.
We contacted a number of developers and asked for the apks, but most don't have them anymore - they are lost. Some developers don't even remember having programmed for the GameStick :) And many don't react on e-mails.
The last resort is to get the .apk files off the GameSticks that have them installed. PlayJam wanted to prevent that, so they locked the GameStick down, preventing access to the Android settings, disabling the adb daemon and even removing the functionality to sideload games (which was available in early firmwares).
Simply starting the Android settings or adbd via the advanced launcher TOFU plugin did not work. I needed to find a way to inspect the GameStick and run applications on them to see what worked. Because adb access was not available, I decided to build my own telnet server that would run as TOFU plugin on the GameStick.
I found a nice Python 2 socket server example and used that as base to build my own server that I could connect to with a telnet client. Development was easy because I could run the server locally. Only at the end I built a TOFU plugin that simply started the telnet server script.
One thing I learned was that the shell (my server) needs to take care of storing the current working directory, and also needs to implement change directory commands - those cannot be delegated to the system. After 2.5 hours I had a telnet server that ran on the GameStick, and I could finally inspect the file system and run programs:
cweiske:~/dev/gamestick/sync/tofu-plugin> telnet gamestick 5023
Trying 192.168.3.41...
Connected to gamestick.
Escape character is '^]'.
/> ls
acct
backup
boot
cache
[...]
/> whoami
u0_a40
/> am start -n com.android.settings/.Settings
[Errno 13] Permission denied
Now I could try to open the Android settings (which still fails) and start adbd - it turned out that running programs on the GameStick is only possible as root:
$ telnet gamestick 5023
Trying 192.168.3.41...
Connected to gamestick.
Escape character is '^]'.
/> su -c start adbd
/> quit
Connection closed by foreign host.
cweiske:~/dev/gamestick/sync/tofu-plugin> adb connect gamestick
already connected to gamestick:5555
cweiske:~/dev/gamestick/sync/tofu-plugin> adb shell
root@android:/ # pwd
/
root@android:/ # ls /data
GameStick
GameStickCache
The result of this endeavour are two TOFU plugins:
Update 2023-06: An adbd-enabling firmware image is available at codeberg.org/gamestick-fans/firmware-adb-enabler/ - see GameStick: Black screen after OOBE.
Published on 2023-05-07 in gamestick