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.15.tar.gz (136.9 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.15-py3-none-any.whl (145.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: unidecompiler_gui-0.1.15.tar.gz
  • Upload date:
  • Size: 136.9 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.15.tar.gz
Algorithm Hash digest
SHA256 53b0a21101f40fe099b6e4ccdac95480af782558b09dfc7512d93e6b5d009a16
MD5 253d5f5e0fa2d04126926633680a98e1
BLAKE2b-256 c8e0baea233b498c3fce727449c060450f2f141e519d8fa6b34261986dc1d2f8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for unidecompiler_gui-0.1.15-py3-none-any.whl
Algorithm Hash digest
SHA256 2033fab3e0434eded7e9766c7f0a8a18a81194516ed2d4ac600f7046d769d75a
MD5 f9fa45c43d942f8626906084c0f7fdba
BLAKE2b-256 4d92b6a352a4b82da5295a6d0f8019eeaec6718c4aa2cd8261b380ef4b90698b

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

This release

0.1.15 This release

2 files

0.1.14

2 files

0.1.13

2 files

0.1.12

2 files

0.1.11

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