Skip to main content
joão

2026 — Case Study

OPL Linux Toolbox

Linux-first desktop application for managing existing Open PS2 Loader libraries with verified file imports, recoverable UL conversion, maintenance tooling, and native Linux packaging.

TypeScriptElectronAngularNode.jsLinuxGitHub Actions
01

Context

OPL Linux Toolbox manages user-supplied Open PS2 Loader libraries on folders and storage already mounted by Linux. The project is based on the GPL-3.0 OrbitOPL Toolbox by Luden02 and preserves that upstream attribution and contributor history. My work evolves that base toward Linux-native storage workflows, safer import and recovery paths, maintenance tooling, and installable Linux packages; the application does not search for or distribute commercial game downloads.

02

Architecture

Electron owns filesystem, process, import, and storage operations while Angular remains the renderer. A preload bridge exposes named IPC capabilities, and service modules implement the failure-sensitive file and UL workflows.

main.ts

Electron lifecycle and native window boundary with `contextIsolation: true`, application protocols, loading-state close protection, and IPC registration

preload.ts

Explicit `contextBridge` API for library, import, artwork, storage, maintenance, VMC, CFG, logging, update, and window operations instead of exposing raw Node.js APIs to Angular

/services

Import planning, verified copy, ZSO handling, UL conversion and rollback, storage inspection, artwork, maintenance, and library operations

/angular

Desktop interface for dashboard, library, import, artwork, game details, VMC, maintenance, settings, and logs

Distribution

Release workflow and installer surface for DEB, RPM, Pacman, and AppImage packages with checksum verification before installation

03

Engineering Decisions

01

Make direct copies verifiable before promotion

Imports write to a hidden .part file, synchronize the output handle, optionally compare SHA-256 of source and temporary destination — enabled by default — and only then rename the file into its final path. The destination directory is synchronized after the rename where supported.

02

Treat UL conversion as a recoverable operation

Before invoking iso2opl, the service snapshots UL state. Cancellation, non-zero exit, validation failure, or another conversion error triggers rollback, and a successful conversion is accepted only after the resulting installation scans as complete for the expected game ID.

03

Keep privileged desktop capabilities behind explicit IPC

Filesystem and process work stays in Electron services and handlers. The renderer is isolated with contextIsolation: true, while the preload script exposes named operations through contextBridge instead of handing the Angular application unrestricted native APIs.

04

Avoid shell composition for the UL converter

The UL conversion service launches iso2opl with an argument array and shell: false. Cancellation first sends SIGINT and escalates to SIGKILL only if the child does not exit within the bounded grace period.

05

Treat Linux distribution as part of the application

The project publishes native package formats for Debian-based, RPM-based, and Arch-based distributions plus AppImage. The installer selects the appropriate release artifact and verifies its SHA-256 checksum instead of asking users to clone the source tree.

06

Keep derivative-project provenance explicit

The repository states that OPL Linux Toolbox is based on OrbitOPL Toolbox by Luden02, retains GPL-3.0 licensing and contributor history, and distinguishes the upstream project from the Linux-focused changes maintained here.