GGPK Browser consists of the following components:
poecdn-bundle-index automated export of all files listed in the bundle index.
ggpk-server (ggpk-index.onrender.com) - a searchable index of all PoE1 and PoE2 game files. Axum server deployable as a docker image. This index is now stored as static data in cloudflare and accessed directly by ggpker
unoodler (unoodler.lvlvlvllvlvlvl.workers.dev) - extracts individual blocks of raw data from bundle files. Cloudflare worker written in rust.
ggpker (ggpk.exposed) - file server that fetches file details from the index server and uses that to identify which raw blocks to fetch, slice and concatenate to produce requested files. Cloudflare worker written in typescript.
unddser (image-old.ggpk.exposed) - image conversion service. Cloudflare worker, currently using a fork of image-rs as the pull request (image-rs/image#2258) adding support for required DX10 image formats has not been merged yet.
undds2r (image.ggpk.exposed) - image conversion service. Native rust axum server running in a cloudflare container.
exposer (www.ggpk.exposed) - web frontend using vuefinder file browser. SPA that calls apis served by ggpker.
The bundle scheme is detailed here, but a high-level overview is that individual game files are contained within bundles, which contain blocks of data compressed with oodle. Bundles do not contain information about their own contents, instead all file entries are listed in a single bundle named _.index.bin, which also lists the names of all other bundle files, and the location of each file within a bundle as a byte offset and size.
PoE1 has about 1 million files, with an _.index.bin of around 20Mb, while PoE2 has closer to 4 million files indexed a file of almost 100Mb.
This project uses Cloudflare Workers and a Vue frontend. To run the entire stack locally in development mode, follow these steps:
- Ensure you have
node,npmandcargo(Rust) installed. - Check out all component repositories.
- Run
npx wrangler devin theggpk-index-serverandunoodlerrepositories and wait for them to start - Run
npx wrangler devin theggpkerrepository, then theundds2errepository after ggpker starts - Run
npm run devin the exposer repository to start the frontend.
- Exposer (Frontend):
http://localhost:5173 - GGPKer (Gateway):
http://localhost:8788 - UNDDSer (Images):
http://localhost:8789 - UNoddler (Extractor):
http://localhost:8787 - Index Server:
http://localhost:8790
