Sporeflower is a Java decompiler tailored for J2ME-era CLDC/MIDP .jar files. It is a fork of Vineflower.
It also includes the j2me command-line toolkit for renaming, semantic mappings, and recompilation.
Sporeflower has demonstrated improvements over Vineflower in decompilation correctness and recompilability across a wide range of J2ME applications and games.
Warning
AI usage disclosure: Sporeflower is exclusively developed by agentic LLMs, so please be mindful of Vineflower's AI policy if you plan to port changes upstream.
See INSTALL.md for installation and getting started.
Sporeflower would not exist without Vineflower, its maintainers, and its contributors. This fork also inherits from the broader Fernflower/Vineflower lineage, so special thanks to:
- Stiver, for creating Fernflower
- JetBrains, for maintaining Fernflower
- MinecraftForge Team, for maintaining ForgeFlower
- FabricMC Team, for maintaining Fabric's fork of Fernflower
- Vineflower maintainers and contributors, for the upstream project this fork is based on
- CFR, for its large suite of very useful tests
Work on Sporeflower led to the following bug reports in Vineflower. Some may already be fixed upstream; see the linked issues for their current status.
- Downcasts affecting exceptions and field selection
- Array casts after
Objectparameter reassignment - Typed receivers for null-initialized locals
@Overridefor inaccessible superclass methods- Switch break label scope
- Primitive array type joins
- Casts in unrelated reference comparisons
- Single evaluation of duplicated field values
- Object/array overload selection
- Receiver casts for private base methods
- Preserving integer local ranges
- Byte switch variable reused as an int
- Invalid internal type for
byte[]locals - Float ternary assignments
- Standalone unboxing calls
- Reference/int local-slot reuse
- String concatenation type inference
- Static initialization order
- Decrement moved into a short-circuit condition