Skip to main content

unidecompiler-gui

unidecompiler-gui is a read-only PySide6 workbench for the public unidecompiler.DecompilerEngine API. It accepts one artifact, a directory, or a ZIP/JAR archive and shows pseudocode, AST, bytecode, and diagnostics together.

Install from PyPI; cloning this repository is not required for normal use.

Install the base GUI with its Qt dependency:

python -m pip install unidecompiler-gui

Install all separately published frontend plugins when needed:

python -m pip install 'unidecompiler-gui[all-formats]'

The GUI never imports frontend plugin packages directly. It discovers installed plugins through DecompilerEngine and does not modify input artifacts or save workspace state. Its optional Simulation tab uses the separate generic IR simulator and can load a trusted Python runtime file for unresolved functions.

Structure and Hex analysis

Structure / Hex is a read-only, IR-first provenance view. It shows the generic recovered structure beside a virtualized hexadecimal view of the original input. Selecting a structure node highlights every exact artifact byte range known for its source instructions. When a frontend only has a logical VM offset, the GUI shows that offset and deliberately does not guess a file byte location. The view is analysis-only: it does not edit bytes, re-encode opcodes, or execute frontend bytecode.

Extension templates

Use Tools -> Export extension template to create a self-contained starter project for either a VM frontend or a GUI plugin. The exporter writes a new directory only and never overwrites an existing path. Each project includes its matching full development guide, a focused AGENTS.md, a README containing the requested feature, packaging metadata, and test skeletons.

The VM frontend template keeps decoding and thin-IR submission separate from core recovery. Its optional simulation adapter is data-only; the generic IR simulator remains responsible for execution. The GUI plugin template depends only on unidecompiler-gui-sdk and remains a read-only application extension.

Frontend persistence

Custom VM frontend folders registered from View -> Frontends are persisted by the GUI host. After the first successful registration, the GUI restores the folder on the next startup before opening input files. The frontend registry and core remain runtime-only; the GUI stores only the normalized source path and frontend ID.

Unload selected removes a frontend from the current process but keeps its startup record. Remove from startup removes it from the current process and from the GUI startup records, but never deletes the frontend directory from disk. Built-in entry-point frontends are not stored as user records.

If a saved directory is missing or its manifest/module is invalid, startup continues. The frontend manager marks the record unavailable and shows the diagnostic so the path can be repaired or removed. Frontend source is trusted Python code and is not sandboxed.

GUI plugins

The Plugins menu manages optional Python GUI plugins. A plugin is an application-layer extension, separate from bytecode frontend plugins. It can inspect immutable snapshots of open documents, functions, AST/reference summaries and selections; add commands and declarative panels; request navigation through stable IDs/source locations; and start asynchronous simulation jobs.

Plugins cannot modify artifacts, generic IR, AST, pseudocode, frontend registration, or simulator execution. They never receive a Qt Workbench, frontend decoder payload, ModuleIR/FunctionIR, simulator frame, or stack. Function lookup remains frontend-owned: a plugin submits an opaque query while the GUI host delegates execution to the generic simulator.

Plugins are trusted in-process Python code, with the same permissions as the GUI process. Review every local folder or GitHub repository before installing. Dependencies in the manifest are checked at load time but never installed automatically. Install, update, enable, disable, and removal take effect after restart.

Plugin layout

Install a folder with plugin.toml through Plugins -> Manage plugins, or install a GitHub owner/repository or /tree/ref URL.

[plugin]
id = "example.function-browser"
name = "Function browser"
version = "1.0.0"
api = "1"
entry = "function_browser:register"

[python]
requires = []
from unidecompiler_gui_sdk import Command, Panel, PanelState

def register(context):
    context.panels.register(Panel("functions", "Functions"))

    def refresh(ctx):
        document = ctx.active_document
        rows = () if document is None else tuple((item.name, item.status) for item in document.functions)
        ctx.set_panel_state("functions", PanelState.table(("Function", "Status"), rows))

    context.commands.register(Command("refresh", "Refresh function browser", refresh))
    context.subscribe("document_selected", lambda _document: refresh(context))

Use only unidecompiler_gui_sdk types. Its API is Qt-neutral and versioned; plugin.toml must declare the matching API version. The repository includes unidecompiler-gui-test-plugin/ as a complete working example.

To simulate, first call context.request_simulation_targets(document_id). It returns immediately with a target-discovery job; observe simulation_targets_completed, obtain its SimulationTargetSnapshot values through context.get_target_job(job_id), then pass a selected snapshot's opaque query to context.submit_simulation(...). Observe simulation_completed and use the SDK's SimulationResultSnapshot; plugins never receive simulator runner objects or frontend adapters.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

unidecompiler_gui-0.1.11.tar.gz (125.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

unidecompiler_gui-0.1.11-py3-none-any.whl (131.3 kB view details)

Uploaded Python 3

File details

Details for the file unidecompiler_gui-0.1.11.tar.gz.

File metadata

  • Download URL: unidecompiler_gui-0.1.11.tar.gz
  • Upload date:
  • Size: 125.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.12

File hashes

Hashes for unidecompiler_gui-0.1.11.tar.gz
Algorithm Hash digest
SHA256 135ed7fcf8118144f95b02b7d46824c6de63da0000492d56f93e04f6f66ccc16
MD5 4bb8d502c0af3dbf8383fe27191641f6
BLAKE2b-256 ed0b98e118cc8b8a5d16f1994b4d9c2ef3e35c4078b8208de6e519acd0aef200

See more details on using hashes here.

File details

Details for the file unidecompiler_gui-0.1.11-py3-none-any.whl.

File metadata

File hashes

Hashes for unidecompiler_gui-0.1.11-py3-none-any.whl
Algorithm Hash digest
SHA256 77c5f96354f78db85289a9a56859c4e79a011bceceb4a0cc9d06393c3b6c8a3e
MD5 634b7d34c086795dcd347f1e2325a8bf
BLAKE2b-256 5267392876c127a87ff3f59e88bed27266a8703fbbb69a8d4ecce08d00e3e15d

See more details on using hashes here.

Release history Release notifications | RSS feed

0.1.19

2 files

0.1.18

2 files

0.1.17

2 files

0.1.16

2 files

0.1.15

2 files

0.1.14

2 files

0.1.13

2 files

0.1.12

2 files

This release

0.1.11 This release

2 files

0.1.10

2 files

0.1.9

2 files

0.1.8

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

1 file

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page