CFR
What it is
CFR is a free Java decompiler that converts Java class files into Java source. It can process named class files, classes on a classpath, or an entire JAR provided by path. The command-line tool can place output in a chosen directory using the --outputdir option, and decompilation can be adjusted with command-line settings or an options file. Its maker says CFR can handle modern Java features, including much of Java 9, 12, and 14. It can also attempt to decompile class files from other JVM languages, but produces Java output rather than the original language. CFR is written in Java 6 and is described as working wherever Java 6 runs. It is available as a downloadable JAR, through Maven, and from the GitHub repository. The FAQ says an API is available as of version 0.135, and the repository identifies the license as MIT. CFR supports bytecode decompilation, not native-code decompilation. Its maker also notes that some inputs can expose edge cases and produce poor results.
For and against
For
- Free, with no paid plans or usage limits stated
- Processes class files, classpaths, and JARs
- Offers command-line and options-file configuration
- API available as of version 0.135
Against
- Does not decompile native code
- Other JVM languages are output as Java
- Some inputs may produce poor results
The verdict
CFR provides a free command-line route from Java bytecode to source, with JAR processing and configurable output. Expect Java output for other JVM languages and possible weak results on edge cases.
Who it suits
CFR suits developers who need to inspect Java bytecode or try to recover Java source from class files and JARs. It may also be useful for attempting Java output from other JVM-language class files.
Plans and prices
Free
No paid plans or usage limits stated
Read 8 Oct 2026 · benf.org
On the record
- API
- The FAQ states that CFR has an API as of version 0.135.benf.org · read 8 Oct 2026
- Configuration
- Decompilation can be customized with command-line options or an options file.github.com · read 8 Oct 2026
- Distribution
- CFR is available as a downloadable JAR, through Maven, and from the GitHub repository.benf.org · read 8 Oct 2026
- Java support
- The maker says CFR can decompile modern Java features, including much of Java 9, 12, and 14.benf.org · read 8 Oct 2026
- JVM languages
- CFR can also attempt to turn class files from other JVM languages back into Java.benf.org · read 8 Oct 2026
- Known limitation
- The maker says CFR has edge cases and may produce poor results for some inputs.benf.org · read 8 Oct 2026
- License
- The maker’s FAQ directs users to the project README for its license; the project repository identifies the license as MIT.github.com · read 8 Oct 2026
- Output
- The command-line tool can emit decompiled files to a specified output directory using --outputdir.benf.org · read 8 Oct 2026
- Output language
- For class files from other JVM languages, CFR generates Java output rather than the original language.benf.org · read 8 Oct 2026
- Purpose
- CFR is a Java decompiler that converts Java class files back into Java source.benf.org · read 8 Oct 2026
- Runtime
- CFR is written in Java 6 and the maker says it will work anywhere Java 6 runs.benf.org · read 8 Oct 2026
- Support
- The maker invites users to email reports of problems and directs bug reports to the GitHub issue tracker.benf.org · read 8 Oct 2026
- Support limitation
- The maker asks users not to submit class files they do not own the copyright to.benf.org · read 8 Oct 2026
- Usage
- CFR can decompile named class files or classes on a classpath, and can process an entire JAR by providing its path.benf.org · read 8 Oct 2026