Alpha Release  ·  Xbox 360 RGH/JTAG

A Package Manager
for Xbox 360 Homebrew

Browse, install, and manage homebrew apps, emulators, and community content directly on your console — from any source you trust.

Free Forever
No PC Required
Unlimited Downloads
Sample PC Downloads Settings Sources
LIVE
Aurora Dash
LIVE
DashLaunch
XeXMenu 1.2
RetroArch
LIVE
FCEUX360
SNES360
PCSXR-360
Genesis Plus
LIVE
NXE2GOD
XM360
ASelect XRefresh YQueue v0.2 Public Alpha

A proper package manager,
built for the console

Like APT or Homebrew — but on your Xbox 360. Add sources, browse packages, install with one click.

Browse Any Source

Add community-hosted sources with a single URL. Every source you add shows up as a tab — scroll through all their packages in one unified cover-art grid.

  • Cover art grid with instant thumbnail loading
  • Tabs for each source you've added
  • Dark & Light themes, Xbox 360-style interface

One-Click Install

Select a package and press install. Downloads happen in the background so you can keep browsing, and everything is ready to launch when it's done.

Auto-Extract

Enable it once and forget it. Packages unzip automatically the moment they finish downloading — no manual steps, no hunting through file managers.

Large Package Support

Big packages are handled by downloading independent zip parts that install together as a single unit. It avoids true dependent multi-part zips, maximizing compatibility and bypassing FAT32 limits safely.

  • Each part must be a standard ZIP in STORE format (no compression)
  • Max 2.5 GB per part for best performance
  • Parts are downloaded sequentially and extracted in order

Built for Your TV

Designed to be used from the couch with a controller. Live progress bars, download speed display, and cover art caching so you can browse even without a connection.

  • Live download speed & progress display
  • Manages conflicts to prevent corrupt installs
  • Cover art stays cached for offline browsing

Download Queue

Queue up as many packages as you want and walk away. Triangle works through the list one by one, installing each automatically as the previous one finishes.

Add any source,
from anyone

Triangle is source-agnostic. Point it at any compatible API — community repos, your own server, or a friend's private source.

01

Add a Source URL

Enter the URL of any compatible source in Settings. Multiple sources stack seamlessly.

02

Browse Packages

The browser fetches the source's package catalogue and renders it as a cover-art grid. Any endpoint that returns the expected JSON format is compatible.

03

Install & Extract

Select a package, press install. The browser downloads and auto-extracts in one step.

04

Ready to Play

Package is installed on your HDD. Launch it from your favourite file browser or dashboard.

What can a source serve?

Anything you own and have the right to distribute — homebrew apps, emulators, open-source games, dev tools, themes, and more. Sources are operated independently by their owners; the browser is just the client.

What's next for Triangle

We are actively building towards v1.0 stable. Once stable, the client code will be completely open-sourced (the API is already public). Here's what we're working on.

In Progress

Resume Download Support

Gracefully pause, resume, and recover partially downloaded packages across reboots.

Planned

Concurrent Downloads

Download multiple packages simultaneously across multiple threads for maximum bandwidth saturation.

Planned

Folder-based Sources

APIs will be able to return submenus (e.g., "Themes" or "Games"), allowing nested navigation within Triangle.

Planned

Custom Download Paths

Define specific install locatons per package type (e.g. HDD1:/Emulators, USB0:/Games).

Planned

Bug Fixes & Polish

Ongoing performance upgrades, memory optimization, and squash of alpha-stage bugs.

Planned

Open Source Client

The complete frontend client source code will be published to GitHub once v1.0 stable is reached.

Planned

File Manager Integration

Browse, move, and delete files across the Xbox 360 file system from within Triangle. Planned support for launching content directly from the app.

Planned

Metadata Support

Rich package metadata — ratings, descriptions, screenshots, changelogs, and version history — surfaced directly in the browser.

Host your own
package repository

Triangle connects to any server that implements the simple JSON API spec. A reference Python server is included — drop it on your LAN or any public host.

Quick Start

bash
# 1. Clone or download the sample server
git clone https://github.com/JakobRangel/Triangle-API
cd hbbrowser/API

# 2. Install dependencies
pip install flask requests

# 3. Edit SERVER_PORT at the top of api.py if needed
#    Default is 8080

# 4. Run
python api.py

Configuration (api.py)

python
# ========== CONFIGURATION ==========
# Edit these constants near the top of api.py

SERVER_PORT = 8080           # port to listen on

PACKAGES_DIR = Path(...) / "packages" # folder containing packages
COVERS_DIR = Path(...) / "covers"   # folder containing cover images

# Auto-fetch metadata from Xbox Live for new TitleIDs
# Off by default — see note below.
FETCH_XBOX_METADATA = False

The server auto-detects your local IP at startup and prints the full address to the terminal. No external config file is needed.

FETCH_XBOX_METADATA — When False (default), new TitleID folders get a blank metadata.json entry you fill in manually. When True, the server queries the Xbox Live Catalog API once per TitleID and caches the result. It is left off by default to avoid automated lookups of commercial game identifiers, keeping the tool clearly separate from any piracy use case.

Directory Layout

text
API/
├── api.py               # Flask server (edit config here)
├── metadata.json        # auto-generated metadata cache (editable)
├── covers/              # cover image files (flat folder)
│   └── TITLEID.png      # e.g. CODE9999.png  (or .jpg)
└── packages/            # packages to serve
    └── <TITLEID>/       # e.g. CODE9999
        ├── part1.zip    # single-part package
        └── part2.zip    # additional independent part

The packages/ and covers/ folders are created automatically when you run the script. metadata.json is generated on the first request to /. Xbox Live metadata is fetched once per TitleID and cached locally — if an entry already exists in metadata.json it is never re-fetched. If a title isn't found on Xbox Live, a blank entry is still written so you can fill in the fields manually.

API Endpoints

GET / Returns JSON listing of all available packages
GET /download/<titleid>/<file> Streams a package .zip file for download
GET /api/cover/<titleid> Returns {"front_url":"...","name":"..."} for a package
GET /covers/<filename> Serves the raw cover image file

/ — Response Schema

json
{
  "packages": [
    {
      "titleid":      "CODE9999",              // 8-char hex TitleID (folder name)
      "name":         "My Homebrew App",       // display name
      "description":  "What this package does",
      "developer":    "YourName",
      "publisher":    "YourOrg",
      "release_date": "2009-11-17",            // from Xbox Live metadata
      "rating":       "4.5",                   // from Xbox Live metadata
      "parts": [                               // sorted list of .zip download URLs
        "/download/CODE9999/part1.zip"
      ],
      "cover_url":    "/api/cover/CODE9999"
    }
  ]
}
💡
Multi-part packages

For large packages, split content across multiple independent .zip files inside the same <TITLEID>/ folder. Each .zip must be in STORE format (uncompressed), self-contained, and no larger than 2.5 GB. The server detects all .zip files in the folder automatically and lists them in the parts array in sorted order. Triangle downloads and extracts them sequentially.

🖼️
Cover art

Drop a TITLEID.png (or .jpg) directly into the covers/ folder, named exactly after the TitleID — e.g. CODE9999.png. No subdirectories or metadata file needed. Triangle fetches and caches covers locally so they load instantly after the first visit.

🌐
Public hosting

The server runs on any machine with Python and prints its LAN address to the terminal on startup. To make it internet-accessible, port-forward SERVER_PORT on your router or deploy to any Linux VPS. The Xbox will stream packages at full connection speed.

Performance targets

Component Target Notes
Startup <5 sec Async thumbnail loading at startup
Download 10+ Mbps SSD + Ethernet + Experimental Mode
Extraction 10–20 MB/s Storage-limited; SSD recommended

Platform

Xbox 360 RGH / JTAG

Built With

VS 2010 · DirectX 9 · XDK

License

Free · Homebrew Community

Ready to install?

Transfer the XEX to your Xbox 360, launch it, add a source, and start browsing in seconds.

Download Triangle Donate
Free & open source · Xbox 360 RGH/JTAG · Alpha
View all releases →