GGPK Browser consists of the following components:
ggpk-server (ggpk-index.onrender.com) - a searchable index of all PoE1 and PoE2 game files. Axum server deployable as a docker image.
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.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.
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.
Note that the 'ggpk' in GGPK Browser is metonymy - ggpk refers to the 'Content.ggpk' game file distributed with the client, while this project sources data from Grinding Gear Games' CDN, which serves bundles individually rather than as a monolithic ggpk.