Project Awesome project awesome

SquirrelJME

Java ME 8 Virtual Machine for embedded and Internet of Things devices.

Package 309 stars GitHub

SquirrelJME

SquirrelJME is a Java ME 8 Virtual Machine for embedded and Internet of Things devices, it also is a platform for the Software Preservation of mobile Java ME devices. This includes Japanese Keitai software as well! It has the ultimate goal of being 99.9% compatible with the Java ME standard.

SquirrelJME's runtime library is written purely in Java with a simple abstraction layer on top of native hardware, or otherwise. This allows the runtime to be portable across various different systems along with separation of concerns between software running in Java and the hardware. All native access is performed via this abstraction layer and as such there are no usages of native in any specific class, thus only the classes in the abstraction layer require a native implementation.

There additionally is NanoCoat, which is an execution engine written in C to allow for running SquirrelJME in a cross-platform way without a dependent host virtual machine.

Additionally, there is a port of SquirrelJME to RetroArch which enables the ability to play older J2ME software and games designed for flip-phones.

  • Copyright (C) 2013-2026 Stephanie Gawroriski xer@multiphasicapps.net
  • "SquirrelJME" and "Lex" are trademarked by Stephanie Gawroriski 2016-2026
  • Lex and The SquirrelJME Logo were illustrated by...

Thank you to Hit Save! for sponsoring SquirrelJME!

Please support me on Patreon!

Dedicated to Emily (1998-2020), the developer of Mu, I valued our friendship greatly and all the time we would spend together nerding about technical stuff, programming, and random topics. I do miss when we would play SNES and NeoGeo games for hours, they were cherished moments. The times goofing about in Kirby's Dream Course (SNES) were some of the most fun times spent with you. We both loves PalmOS devices and I always loved to hear about the new odd and quirky things you discovered about them. -- You will not be forgotten, rest in peace.

And...

Dedicated to Near (1983-2021), the developer of Higan, Ares, etc. and otherwise. You were and still are one of the kindest and most caring person that I knew. You showed me lots of support and encouragement with my own preservation work, and also helped me find the right people to connect with to further that goal. I still do miss our daily conversations, even though it is ironic that we rarely if ever spoke about emulation development there were so many other topics of conversation to go through. Honestly without you, I would not be where I am today and to this day I am holding you close and true to my heart. I push forward for you while holding myself high, I know that you would be proud of where I am today. -- You will not be forgotten, rest in peace.

SquirrelJME utilizes Install4J for cross-platform installers, you can read more about it and check out their product page at:

Information:

Repository

  • Online repository (HTTPS, Tor (A), Tor (B))
  • SquirrelJME uses fossil http://fossil-scm.org/.
  • The repository may be cloned using Fossil:
    • One of these commands:
      • fossil clone -u http://squirreljme.cc/ squirreljme.fossil
      • fossil clone -u https://squirreljme.cc/ squirreljme.fossil
      • Alternatively via the Tor Onion network:
        • fossil clone -u http://vzwveldr7djnlpg7ujslaqre632htbl3unkmfbltpgumevw63jn47dad.onion/ squirreljme.fossil
        • fossil clone -u http://hrkzpyi33og6j5z3anfpjuqkawvkw4kxyasrp64elg3i6dffihmdhxad.onion/ squirreljme.fossil
        • fossil clone -u http://squirrelmfbf2udn.onion/ squirreljme.fossil
    • mkdir squirreljme
    • cd squirreljme
    • fossil open ../squirreljme.fossil
  • Alternatively via a Git mirror:
    • Via Codeberg
      • git clone https://codeberg.org/SquirrelJME/SquirrelJME
      • cd SquirrelJME
    • Via GitHub:
      • git clone https://github.com/SquirrelJME/SquirrelJME
      • cd SquirrelJME
    • Via repo.or.cz:
      • git clone https://repo.or.cz/SquirrelJME.git
      • cd SquirrelJME
  • Trunk Source Snapshot (Main website or fossil serve only):

Links

Goals

  • To be small - Smaller programs are easier to maintain and are usually simpler.
  • To be fast - With the potential of AOT/JIT, systems that do not normally have a port of an existing virtual machine will usually only have an interpreter.
  • To be compatible - So that existing Java ME 8 applications can run on this virtual machine, along with J2ME applications when required. This has the added bonus of allowing one to use older software to catalog for preservation.
  • To compile once and run anywhere - Current and up to date Java implementations are limited only to a few select systems (Solaris, Linux, BSD, Mac OS X, and Windows). Java ME 8 as of this writing only supports the FRDM-K64F (dropped), STM32429I-EVAL, Raspberry Pi, Intel Galileo Gen2 (preview), and STM 32F746G DISCOVERY (preview) all of which are either out of date or discontinued by their manufacturers. There are multitudes of devices that support J2ME, however that is horribly out of date when compared with the Java that is used today (J2ME is equal to Java 1.4 which was released in 2002).

Donations

You may donate to SquirrelJME to which would be used by the author to keep the web server online, the purchasing of new hardware/software, and for the purchasing of food items for consumption.

Webring Button

This is the SquirrelJME Webring button:

![SquirrelJME](data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAFgAAAAfCAMAAABUFvrSAAAACXBIWXMAAC4jAAAuIwF4pT92AAAB X1BMVEUAAAABAgICAwQHCgxEmrtIRUxImrpMmLhPmLdSl7VXlrNblbJelLBhlK9lkq1my/Vpy/Rq kaxtkaltx/BuyfJv0/lxkKh0j6d0yO900fd3xOl4jqV4xet40fV5xux5x+18jaN80PN+xOp+xeuA jKKBxOiCxemCz/GEi6CEvuKFweSHw+eHzfCIip6Jvd+LiZ2Lv+GLzO2NwuWOiJyPzOyRwOGSiJqS weKUyuqXeVeXh5iXwOCahZeavt6ayembv9+dhZWdudidyeWgvdyhhJSix+Slg5KlvNqmxuOpgpCq Hh2ru9irxeCtgY6vgY6vxN6wuta0f4u0w921uNO5t9K5wtu7s82+ttC+wNjBv9fDtc3FvtbJtMvK vtPOssnQvdHSssfTutDUx5/WnpjXsMXXus3cr8PcuczguMrirsDlt8fnrL7qtcXstcXuY2XzAQL5 89f/kQz/o53//O7////m5Am4AAAC1ElEQVRIibWUizsbQRTFTx/ej5YGUdVQGtpQFY9YQdT7TT2K eA9C0XbZ+f+/3ntnN6kkJeTzy+ycM3cm55vM7gYvnwgU1gi6Ji8yvl6IovpXuaFzXCcr64tQ3Pj6 gehbkp3GYpQ0+wjlM2ju3qiU/8ddX/uyoX2gj1lFTvA1l6C0ze/3K0f5Gbc3s/40rq/TCt4S+L21 SddWirKOQEAdO44KkJre5CLwPiC8DdyCq+/E0RKjniNxSx1lKO9uaZFg1aJMz8GqhSHzHCxyAR9S 1jVmmed4xpS6y1HRGwyq42OKVLbDycoxGw4G3Z0HjZf2jAXBVJ2BfEg/ujMI9lagciAUomDKk2BO lrN4jhAQCnHHaiTlPGHIfSb7CexMaaASVSM6rDjXC+bsYxUGuIXDL4yaYdIR4a8yT1BBui/GMSNV qB6LRPj3O45lc7gyu44A3CKeGkm5iDtF0ieCPu4iZiYyVo3ayWiUcm0Jpk1TsHu2UWrRqKg35Mrt QpSXiCDpiMla1M3EOFdlBA/HYgA3VhZ3ZC54I2rDMVkkl/lubKYODQsUJbnJYJtlXADG7+Zb9hUL DWhadvfrBVsWJ6tpAZjOEX1rtNyE1lW+YZalOJGsp/MC/ax5zKeh0wuZrLaifUNJbsEfLYFzpGSs Fb1CmCNbyYrOXhY22tG5xXtUBXP6RlkcrG8KLMdSawbOXXs4W53o2l63+DGe+83BSpHyeat1F8Bz ej1HaOF2F3p2NiVY3jo6BIGOetPlx+b96IzKTg/69+LxOAfbjhsqr17cQ8cfw14/Bg92d3fpn403 a5nOVruPQyfdwSCGjvYZSrZt91L7eXM0hNHTQ0b2bGm+beowf05HMXF2QtjyRGit+QWxTzz0yX+5 Y4o4m8DUeSKRsCmY96r5mabzSOSFTiTOpzB78TNn9D3jFBezWLy6vLzUl2lkFB7I1SKWfuWNzlJb wvcn4i+bSJ+DUtAtmgAAAABJRU5ErkJggg==)

This can be added to your site with:

<a href="https://squirreljme.cc/" target="_blank" rel="noopener">
<img src="https://squirreljme.cc/uv/www/webring_button.png"
    alt="SquirrelJME, a Java ME 8 JVM intended for software preservation."
    width="88" height="31"
    decoding="async"
    loading="lazy">
</img></a>
[![SquirrelJME][SquirrelJME]](https://squirreljme.cc/)
[SquirrelJME]: https://squirreljme.cc/uv/www/webring_button.png "SquirrelJME"

Important Statements

JAVA AND ALL OTHER RELATED TRADEMARKS AND COPYRIGHTS ARE OWNED BY ORACLE CORPORATION http://www.oracle.com/.

SQUIRRELJME IS NEITHER PRODUCED BY, ENDORSED BY, NOR SUPPORTED BY ORACLE CORPORATION.

ALL SOURCE CODE IS WRITTEN BY MYSELF WITH FUNCTIONALITY DETERMINED BY THE DOCUMENTED APIS AND RUN-TIME BEHAVIOR. I HAVE NOT LOOKED AT THE SOURCE CODE FOR OTHER IMPLEMENTATIONS, NEITHER FREE SOFTWARE NOR PROPRIETARY IMPLEMENTATIONS. ESSENTIALLY SQUIRRELJME IS A CLEAN-ROOM IMPLEMENTATION OF THE DESIGN OF JAVA ME 8. THE IMPLEMENTATIONS OF THE JAVA ME 8 APIS AND ASSOCIATED JSRS/JEPS IS CONSIDERED BY MYSELF (STEPHANIE GAWRORISKI) TO BE IN THE FAIR USE.

THIS SOFTWARE IS INCOMPLETE AND IN ITS CURRENT STATE IS NOT CURRENTLY 100% COMPATIBLE WITH JAVA ME 8. THERE ARE CURRENTLY NO STABLE RELEASED VERSIONS OF THIS SOFTWARE. AS SUCH THE FIRST MAJOR VERSION RELEASE WILL BE WHEN IT IS COMPATIBLE SO AS TO NOT VIOLATE POTENTIAL LICENSES, AND IF POSSIBLE BE VERIFIED WITH ANY APPLICABLE TCKS (SO IT WOULD BE AN "OFFICIAL" IMPLEMENTATION).

Back to J2ME