{"id":37017175,"url":"https://github.com/nbauma109/transformer-api","last_synced_at":"2026-01-14T01:58:04.979Z","repository":{"id":48128613,"uuid":"453467434","full_name":"nbauma109/transformer-api","owner":"nbauma109","description":"Unified Java API for multiple decompilers (Fernflower, Vineflower, Procyon, CFR, JD-Core, JADX)","archived":false,"fork":true,"pushed_at":"2026-01-12T20:01:56.000Z","size":2177,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-13T01:17:46.364Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"helios-decompiler/transformer-api","license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nbauma109.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-01-29T17:25:39.000Z","updated_at":"2026-01-12T20:01:54.000Z","dependencies_parsed_at":"2023-01-28T13:30:28.439Z","dependency_job_id":null,"html_url":"https://github.com/nbauma109/transformer-api","commit_stats":null,"previous_names":[],"tags_count":64,"template":false,"template_full_name":null,"purl":"pkg:github/nbauma109/transformer-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nbauma109%2Ftransformer-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nbauma109%2Ftransformer-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nbauma109%2Ftransformer-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nbauma109%2Ftransformer-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nbauma109","download_url":"https://codeload.github.com/nbauma109/transformer-api/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nbauma109%2Ftransformer-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28408704,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T01:52:23.358Z","status":"ssl_error","status_checked_at":"2026-01-14T01:40:32.775Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-14T01:58:04.196Z","updated_at":"2026-01-14T01:58:04.971Z","avatar_url":"https://github.com/nbauma109.png","language":"Java","funding_links":[],"categories":["Projects"],"sub_categories":["Decompilation"],"readme":"# Transformer API\n[![Maven Central](https://img.shields.io/maven-central/v/io.github.nbauma109/transformer-api.svg?label=Maven%20Central)](https://central.sonatype.com/artifact/io.github.nbauma109/transformer-api)\n[![CodeQL](https://github.com/nbauma109/transformer-api/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/nbauma109/transformer-api/actions/workflows/codeql-analysis.yml)\n[![Maven Release](https://github.com/nbauma109/transformer-api/actions/workflows/maven.yml/badge.svg)](https://github.com/nbauma109/transformer-api/actions/workflows/maven.yml)\n[![Github Release](https://github.com/nbauma109/transformer-api/actions/workflows/release.yml/badge.svg)](https://github.com/nbauma109/transformer-api/actions/workflows/release.yml)\n[![Coverage Status](https://codecov.io/gh/nbauma109/transformer-api/branch/master/graph/badge.svg)](https://app.codecov.io/gh/nbauma109/transformer-api)\n\nThe Transformer API provides convenient access to different transformers (currently decompilers only) under a unified\nAPI. The API is still subject to major changes, but only with a major version bump.\n\n## Usage\n\nCurrently, this API supports the following decompilers :\n\n- Fernflower\n- Vineflower (fork of Fernflower)\n- Procyon\n- CFR\n- JD-Core V0 and V1\n- JADX\n\nDecompilers can be accessed either via `StandardTransformers.DECOMPILER` or by creating a new instance. They are also\nstateless, which means you can use the same instance across different threads.\n\nAn example program decompiling a file using Vineflower (fork of Fernflower) is shown below:\n\n```java\npackage com.heliosdecompiler.transformerapi;\n\nimport com.heliosdecompiler.transformerapi.common.Loader;\n\nimport java.io.ByteArrayOutputStream;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class Sample {\n\n    public byte[] load(String internalName) throws IOException {\n        InputStream is = this.getClass().getResourceAsStream(\"/\" + internalName + \".class\");\n\n        if (is == null) {\n            return null;\n        }\n        try (InputStream in=is; ByteArrayOutputStream out=new ByteArrayOutputStream()) {\n            byte[] buffer = new byte[1024];\n            int read = in.read(buffer);\n\n            while (read \u003e 0) {\n                out.write(buffer, 0, read);\n                read = in.read(buffer);\n            }\n\n            return out.toByteArray();\n        }\n    }\n\n    public boolean canLoad(String internalName) {\n        return this.getClass().getResource(\"/\" + internalName + \".class\") != null;\n    }\n\n    \n    public static void main(String[] args) {\n        Sample sample = new Sample();\n        Loader loader = new Loader(sample::canLoad, sample::load);\n        Map\u003cString, String\u003e preferences = new HashMap\u003c\u003e();\n        try {\n            String ff = StandardTransformers.Decompilers.ENGINE_VINEFLOWER;\n            DecompilationResult result =\n                    StandardTransformers.decompile(\n                            loader,\n                            \"java/lang/String\",\n                            preferences,\n                            ff\n                    );\n            System.out.println(result.getDecompiledOutput());\n        } catch (Exception e) {\n            System.err.println(e);\n        }\n    }\n}\n```\n\n\n## Features\n\n### Updates\n\nThis API will be updated as decompilers receive updates, which means fixes reach you faster.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnbauma109%2Ftransformer-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnbauma109%2Ftransformer-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnbauma109%2Ftransformer-api/lists"}