# aarvsn/ryty architecture

> Architecture diagram of the GitHub repository aarvsn/ryty, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/aarvsn/ryty
- Repository: https://github.com/aarvsn/ryty

## Overview

Ryty ports PS4/PS5 executables into native host binaries. The main workflow is selecting options, resolving a target plan, analyzing and transforming the input, then producing and optionally verifying a target artifact and report. The GUI wraps the CLI; the separate PRX libraries provide guest-facing system APIs, including a substantial graphics-driver and shader-recompilation subsystem. The README documents additional Apple targets, batch operation, and the web studio. Source excerpts are limited, so internal relinker stages and several optional integrations are shown only at the documented level.

Main entry points: [`core/relinker/relinker/src/pipeline/RelinkerPipeline.cpp`](https://github.com/aarvsn/ryty/blob/main/core/relinker/relinker/src/pipeline/RelinkerPipeline.cpp) (Relinker pipeline), [`core/relinker/main.cpp`](https://github.com/aarvsn/ryty/blob/main/core/relinker/main.cpp) (Ryty CLI), [`core/libs/prx/libSceAgcDriver/Execution/include/Driver/Driver.hpp`](https://github.com/aarvsn/ryty/blob/main/core/libs/prx/libSceAgcDriver/Execution/include/Driver/Driver.hpp) (AGC driver), [`core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp`](https://github.com/aarvsn/ryty/blob/main/core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp) (Graphics resources)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_porting["Porting workflow"]
  node_cli["Ryty CLI<br/>[main.cpp]"]
  node_plan["Porting plan<br/>[PortOne.cpp]"]
  node_parse["ELF analysis<br/>[ElfReader.cpp]"]
  node_pipeline["Relinker pipeline"]
  node_lower["Instruction lowering"]
  node_targets["Target output<br/>[AppleImages.cpp]"]
  node_reports["Reports and verify<br/>[PortOne.cpp]"]
end

subgraph group_frontends["User interfaces"]
  node_gui["Qt GUI<br/>[MainWindow.cpp]"]
  node_web["Web Studio"]
end

subgraph group_runtime["Guest runtime"]
  node_prx["System PRX libraries"]
end

subgraph group_graphics["Graphics translation"]
  node_driver["AGC driver<br/>[Driver.hpp]"]
  node_queue["GPU queues<br/>[QueueWorker.cpp]"]
  node_graphics_api["Graphics resources"]
  node_pipeline_cache["Graphics pipelines<br/>[Pipeline.cpp]"]
  node_recompiler["Shader recompiler<br/>[Recompiler.cpp]"]
  node_spirv["SPIR-V backend"]
  node_shader_cache[("Shader disk cache")]
end

node_user(("User"))
node_host["Host platform"]

node_user -->|"sets options"| node_gui
node_user -->|"supplies input"| node_cli
node_user -->|"inspects ELF"| node_web
node_gui -->|"launches"| node_cli
node_cli -->|"resolves options"| node_plan
node_plan -->|"selects target"| node_pipeline
node_pipeline -.->|"analyzes input"| node_parse
node_pipeline -->|"lowers instructions"| node_lower
node_pipeline -->|"produces binary"| node_targets
node_targets -->|"targets platform"| node_host
node_cli -->|"reports and verifies"| node_reports
node_pipeline -->|"links libraries"| node_prx
node_prx -.->|"provides graphics API"| node_driver
node_driver -.->|"executes submissions"| node_queue
node_driver -.->|"uses graphics resources"| node_graphics_api
node_graphics_api -.->|"builds pipelines"| node_pipeline_cache
node_graphics_api -->|"recompiles shaders"| node_recompiler
node_recompiler -.->|"emits SPIR-V"| node_spirv
node_recompiler -.->|"caches shaders"| node_shader_cache

click node_gui "https://github.com/aarvsn/ryty/blob/main/app/gui/MainWindow.cpp"
click node_cli "https://github.com/aarvsn/ryty/blob/main/core/relinker/main.cpp"
click node_plan "https://github.com/aarvsn/ryty/blob/main/core/relinker/cli/src/PortOne.cpp"
click node_parse "https://github.com/aarvsn/ryty/blob/main/core/relinker/relinker/src/parsing/ElfReader.cpp"
click node_pipeline "https://github.com/aarvsn/ryty/blob/main/core/relinker/relinker/src/pipeline/RelinkerPipeline.cpp"
click node_lower "https://github.com/aarvsn/ryty/blob/main/core/relinker/codegen/src/Amd64OnlyConverter.cpp"
click node_targets "https://github.com/aarvsn/ryty/blob/main/core/relinker/elfpatcher/src/apple/AppleImages.cpp"
click node_reports "https://github.com/aarvsn/ryty/blob/main/core/relinker/cli/src/PortOne.cpp"
click node_prx "https://github.com/aarvsn/ryty/tree/main/core/libs/prx"
click node_driver "https://github.com/aarvsn/ryty/blob/main/core/libs/prx/libSceAgcDriver/Execution/include/Driver/Driver.hpp"
click node_queue "https://github.com/aarvsn/ryty/blob/main/core/libs/prx/libSceAgcDriver/Execution/src/Driver/Queues/QueueWorker.cpp"
click node_graphics_api "https://github.com/aarvsn/ryty/blob/main/core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp"
click node_pipeline_cache "https://github.com/aarvsn/ryty/blob/main/core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp"
click node_recompiler "https://github.com/aarvsn/ryty/blob/main/core/shader/recompiler/Recompiler.cpp"
click node_spirv "https://github.com/aarvsn/ryty/blob/main/core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp"
click node_shader_cache "https://github.com/aarvsn/ryty/blob/main/core/shader/recompiler/ShaderDiskCache.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_plan,node_parse,node_pipeline,node_lower,node_targets,node_reports,node_user toneBlue
class node_gui,node_web toneAmber
class node_prx toneMint
class node_driver,node_queue,node_graphics_api,node_pipeline_cache,node_recompiler,node_spirv,node_shader_cache toneRose
class node_host toneIndigo
```

## Components

### Porting workflow

- [Ryty CLI](https://github.com/aarvsn/ryty/blob/main/core/relinker/main.cpp): `core/relinker/main.cpp`
- [Porting plan](https://github.com/aarvsn/ryty/blob/main/core/relinker/cli/src/PortOne.cpp): `core/relinker/cli/src/PortOne.cpp`
- [ELF analysis](https://github.com/aarvsn/ryty/blob/main/core/relinker/relinker/src/parsing/ElfReader.cpp): `core/relinker/relinker/src/parsing/ElfReader.cpp`
- [Relinker pipeline](https://github.com/aarvsn/ryty/blob/main/core/relinker/relinker/src/pipeline/RelinkerPipeline.cpp): `core/relinker/relinker/src/pipeline/RelinkerPipeline.cpp`
- [Instruction lowering](https://github.com/aarvsn/ryty/blob/main/core/relinker/codegen/src/Amd64OnlyConverter.cpp): `core/relinker/codegen/src/Amd64OnlyConverter.cpp`
- [Target output](https://github.com/aarvsn/ryty/blob/main/core/relinker/elfpatcher/src/apple/AppleImages.cpp): `core/relinker/elfpatcher/src/apple/AppleImages.cpp`
- [Reports and verify](https://github.com/aarvsn/ryty/blob/main/core/relinker/cli/src/PortOne.cpp): `core/relinker/cli/src/PortOne.cpp`

### User interfaces

- [Qt GUI](https://github.com/aarvsn/ryty/blob/main/app/gui/MainWindow.cpp): `app/gui/MainWindow.cpp`
- **Web Studio**

### Guest runtime

- [System PRX libraries](https://github.com/aarvsn/ryty/tree/main/core/libs/prx): `core/libs/prx`

### Graphics translation

- [AGC driver](https://github.com/aarvsn/ryty/blob/main/core/libs/prx/libSceAgcDriver/Execution/include/Driver/Driver.hpp): `core/libs/prx/libSceAgcDriver/Execution/include/Driver/Driver.hpp`
- [GPU queues](https://github.com/aarvsn/ryty/blob/main/core/libs/prx/libSceAgcDriver/Execution/src/Driver/Queues/QueueWorker.cpp): `core/libs/prx/libSceAgcDriver/Execution/src/Driver/Queues/QueueWorker.cpp`
- [Graphics resources](https://github.com/aarvsn/ryty/blob/main/core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp): `core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp`
- [Graphics pipelines](https://github.com/aarvsn/ryty/blob/main/core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp): `core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp`
- [Shader recompiler](https://github.com/aarvsn/ryty/blob/main/core/shader/recompiler/Recompiler.cpp): `core/shader/recompiler/Recompiler.cpp`
- [SPIR-V backend](https://github.com/aarvsn/ryty/blob/main/core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp): `core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp`
- [Shader disk cache](https://github.com/aarvsn/ryty/blob/main/core/shader/recompiler/ShaderDiskCache.cpp): `core/shader/recompiler/ShaderDiskCache.cpp`

### Other components

- **User**
- **Host platform**

## Connections

- User → Qt GUI: sets options
- User → Ryty CLI: supplies input
- User → Web Studio: inspects ELF
- Qt GUI → Ryty CLI: launches
- Ryty CLI → Porting plan: resolves options
- Porting plan → Relinker pipeline: selects target
- Relinker pipeline → ELF analysis: analyzes input
- Relinker pipeline → Instruction lowering: lowers instructions
- Relinker pipeline → Target output: produces binary
- Target output → Host platform: targets platform
- Ryty CLI → Reports and verify: reports and verifies
- Relinker pipeline → System PRX libraries: links libraries
- System PRX libraries → AGC driver: provides graphics API (evidence: `core/libs/prx/libSceAgcDriver/Execution/src/Driver/Queues/QueueWorker.cpp`)
- AGC driver → GPU queues: executes submissions (evidence: `core/libs/prx/libSceAgcDriver/Execution/src/Driver/Queues/QueueWorker.cpp`)
- AGC driver → Graphics resources: uses graphics resources
- Graphics resources → Graphics pipelines: builds pipelines
- Graphics resources → Shader recompiler: recompiles shaders (evidence: `core/libs/prx/libSceAgcDriver/Graphics/include/ShaderResources.hpp`)
- Shader recompiler → SPIR-V backend: emits SPIR-V
- Shader recompiler → Shader disk cache: caches shaders
