MCPcopy Index your code
hub / github.com/Vineflower/vineflower

github.com/Vineflower/vineflower @1.12.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release 1.12.0 ↗ · + Follow
7,147 symbols 25,065 edges 1,080 files 114 documented · 2% 1 cross-repo links
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Vineflower

Vineflower is a modern general purpose Java & JVM language decompiler focused on providing the best quality, speed, and usability.

Vineflower's features include: - Java 21+ support, including records, sealed classes, switch expressions, pattern matching, and more - Clean code generation and output, with automatic output formatting - Multithreaded decompilation

Examples of Vineflower's output compared to other decompilers can be found on the website.

Use

Vineflower can be used from the console or as a library. To run Vineflower from the command line, download the latest release from the Releases tab. You can then run Vineflower with `java -jar vineflower.jar

.is the list of [commandline arguments](https://vineflower.org/usage/) that you want to pass to the decompiler.

can be a jar, zip, folder, or class file, and` can be a folder, zip, jar, or omitted to print to the console.

To use Vineflower as a library, you can find distributions on maven central. Vineflower 1.9+ requires Java 11 or higher to run, and Vineflower 1.11+ requires Java 17 or higher to run. Vineflower can be addded as a dependency in gradle with:

dependencies {
    implementation 'org.vineflower:vineflower:<version>'
}

More instructions on how to interface with Vineflower can be found on the website.

For IDE use, the Vineflower Intellij IDEA plugin replaces Fernflower in IDEA with Vineflower.

Please report any issues to the Issues tab!

Building

Vineflower can be built simply with ./gradlew build.

Support

For support or questions, please join one of the listed social platforms.

Contributing

Contributions are always welcome! The website has detailed instructions on how to set up Vineflower development, as well as information on debugging. When submitting pull requests, please target the latest develop/1.xx.y branch.

Special Thanks

Vineflower is a fork of Jetbrains' Fernflower, MinecraftForge's ForgeFlower, FabricMC's fork of Fernflower, and a direct continuation of work on Quiltflower. 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
  • CFR, for its large suite of very useful tests

Extension points exported contracts — how you extend this code

Pass (Interface)
A pass that can be run on the decompiled code. [40 implementers]
src/org/jetbrains/java/decompiler/api/plugin/pass/Pass.java
KExprent (Interface)
Marker interface for Kotlin exprents. [9 implementers]
plugins/kotlin/src/main/java/org/vineflower/kotlin/expr/KExprent.java
g (Interface)
(no doc) [42 implementers]
testData/obfuscated/g.java
TestUnionTypeAssign (Interface)
(no doc) [8 implementers]
testData/src/java8/pkg/TestUnionTypeAssign.java
IFabricJavadocProvider (Interface)
Provides (optional) javadoc for Classes/Methods/Fields encountered by {@link org.jetbrains.java.decompiler.main.ClassWr
src/net/fabricmc/fernflower/api/IFabricJavadocProvider.java
VariableRenamingOptions (Interface)
(no doc)
plugins/variable-renaming/src/main/java/org/vineflower/variablerenaming/VariableRenamingOptions.java
IdeaNotNullOptions (Interface)
(no doc)
plugins/idea-not-null/src/main/java/org/vineflower/ideanotnull/IdeaNotNullOptions.java
IContextSource (Interface)
A specific type of context unit. Implementations do not need to cache the results of any provided methods. [5 implementers]
src/org/jetbrains/java/decompiler/main/extern/IContextSource.java

Core symbols most depended-on inside this repo

get
called by 1929
testData/src/java8/pkg/TestNestedLambdas.java
append
called by 1209
src/org/jetbrains/java/decompiler/util/TextUtil.java
size
called by 787
src/org/jetbrains/java/decompiler/code/cfg/BasicBlock.java
put
called by 596
src/org/jetbrains/java/decompiler/util/collections/SFormsFastMapDirect.java
isEmpty
called by 534
src/org/jetbrains/java/decompiler/code/InstructionSequence.java
add
called by 529
src/org/jetbrains/java/decompiler/modules/decompiler/decompose/DomTracer.java
append
called by 505
src/org/jetbrains/java/decompiler/util/TextBuffer.java
getExprents
called by 426
src/org/jetbrains/java/decompiler/modules/decompiler/stats/Statement.java

Shape

Method 5,675
Class 1,290
Interface 101
Enum 70
Function 11

Languages

Java95%
Kotlin5%

Modules by API surface

src/org/jetbrains/java/decompiler/modules/decompiler/stats/Statement.java86 symbols
src/org/jetbrains/java/decompiler/util/TextBuffer.java69 symbols
src/org/jetbrains/java/decompiler/modules/decompiler/exps/InvocationExprent.java68 symbols
test/org/jetbrains/java/decompiler/collections/FixedFastSetTest.java58 symbols
src/org/jetbrains/java/decompiler/modules/decompiler/vars/VarDefinitionHelper.java54 symbols
src/org/jetbrains/java/decompiler/modules/decompiler/exps/VarExprent.java53 symbols
test/org/jetbrains/java/decompiler/ConverterHelperTest.java44 symbols
src/org/jetbrains/java/decompiler/main/ClassWriter.java44 symbols
src/org/jetbrains/java/decompiler/modules/decompiler/exps/NewExprent.java38 symbols
plugins/kotlin/src/main/java/org/vineflower/kotlin/KotlinWriter.java38 symbols
src/org/jetbrains/java/decompiler/modules/decompiler/exps/FunctionExprent.java37 symbols
src/org/jetbrains/java/decompiler/util/collections/FastSparseSetFactory.java36 symbols

Used by 1 indexed graphs manifest dependencies, hub-wide

For agents

$ claude mcp add vineflower \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page