{"id":21981429,"url":"https://github.com/trumank/repak","last_synced_at":"2026-02-02T00:25:39.737Z","repository":{"id":65641280,"uuid":"589879424","full_name":"trumank/repak","owner":"trumank","description":"Unreal Engine .pak file library and CLI in rust","archived":false,"fork":false,"pushed_at":"2026-01-27T23:22:17.000Z","size":8284,"stargazers_count":443,"open_issues_count":12,"forks_count":59,"subscribers_count":5,"default_branch":"master","last_synced_at":"2026-01-28T12:50:23.746Z","etag":null,"topics":["modding-tools","pak","unreal-engine-4","unrealpak"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"bananaturtlesandwich/unpak","license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/trumank.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-01-17T06:43:02.000Z","updated_at":"2026-01-27T23:22:22.000Z","dependencies_parsed_at":"2024-05-31T19:09:13.119Z","dependency_job_id":"ad59ec8c-4dd6-438f-84a5-d5353b91a34a","html_url":"https://github.com/trumank/repak","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/trumank/repak","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trumank%2Frepak","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trumank%2Frepak/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trumank%2Frepak/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trumank%2Frepak/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/trumank","download_url":"https://codeload.github.com/trumank/repak/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trumank%2Frepak/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28996637,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-01T23:10:54.274Z","status":"ssl_error","status_checked_at":"2026-02-01T23:10:47.298Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["modding-tools","pak","unreal-engine-4","unrealpak"],"created_at":"2024-11-29T17:17:25.807Z","updated_at":"2026-02-02T00:25:39.715Z","avatar_url":"https://github.com/trumank.png","language":"Rust","funding_links":[],"categories":["Rust","Unreal Engine 4","⚙️ Engines"],"sub_categories":["Cyberpunk 2077 / REDEngine 4","Unreal Engine"],"readme":"# repak\n\nLibrary and CLI tool for working with Unreal Engine .pak files.\n\n - Supports reading and writing a wide range of versions\n - Easy to use API while providing low level control:\n   - Only parses index initially and reads file data upon request\n   - Can rewrite index in place to perform append or delete operations without rewriting entire pak\n\n`repak` CLI\n - Sane handling of mount points: defaults to `../../../` but can be configured via flag\n - 2x faster unpacking over `UnrealPak`\n - Unpacking is guarded against malicious pak that attempt to write to parent directories\n\n## cli\n```console\n$ repak --help\nUsage: repak [OPTIONS] \u003cCOMMAND\u003e\n\nCommands:\n  info       Print .pak info\n  list       List .pak files\n  hash-list  List .pak files and the SHA256 of their contents. Useful for finding differences between paks\n  unpack     Unpack .pak file\n  pack       Pack directory into .pak file\n  get        Reads a single file to stdout\n  help       Print this message or the help of the given subcommand(s)\n\nOptions:\n  -a, --aes-key \u003cAES_KEY\u003e  256 bit AES encryption key as base64 or hex string if the pak is encrypted\n  -h, --help               Print help\n  -V, --version            Print version\n```\n\n### packing\n```console\n$ find mod\nmod\nmod/assets\nmod/assets/AssetA.uasset\nmod/assets/AssetA.uexp\n\n$ repak pack -v mod\npacking assets/AssetA.uasset\npacking assets/AssetA.uexp\nPacked 4 files to mod.pak\n\n$ repak list mod.pak\nassets/AssetA.uasset\nassets/AssetA.uexp\n```\n\n### unpacking\n```console\n$ repak --aes-key 0x12345678 unpack MyEncryptedGame.pak\nUnpacked 12345 files to MyEncryptedGame from MyEncryptedGame.pak\n```\n\n## compatibility\n\n| UE Version   | Version | Version Feature       | Read               | Write                  |\n|--------------|---------|-----------------------|--------------------|------------------------|\n|              | 1       | Initial               | :grey_question:    | :grey_question:        |\n| 4.0-4.2      | 2       | NoTimestamps          | :heavy_check_mark: | :heavy_check_mark:     |\n| 4.3-4.15     | 3       | CompressionEncryption | :heavy_check_mark: | :heavy_check_mark:     |\n| 4.16-4.19    | 4       | IndexEncryption       | :heavy_check_mark: | :heavy_check_mark:     |\n| 4.20         | 5       | RelativeChunkOffsets  | :heavy_check_mark: | :heavy_check_mark:     |\n|              | 6       | DeleteRecords         | :grey_question:    | :grey_question:        |\n| 4.21         | 7       | EncryptionKeyGuid     | :heavy_check_mark: | :heavy_check_mark:     |\n| 4.22         | 8A      | FNameBasedCompression | :heavy_check_mark: | :heavy_check_mark:     |\n| 4.23-4.24    | 8B      | FNameBasedCompression | :heavy_check_mark: | :heavy_check_mark:     |\n| 4.25         | 9       | FrozenIndex           | :heavy_check_mark: | :heavy_check_mark:[^1] |\n|              | 10      | PathHashIndex         | :grey_question:    | :grey_question:        |\n| 4.26-5.3[^2] | 11      | Fnv64BugFix           | :heavy_check_mark: | :heavy_check_mark:     |\n\n| Feature         | Read               | Write           |\n|-----------------|--------------------|-----------------|\n| Compression     | :heavy_check_mark: | :wavy_dash:[^3] |\n| Encrypted Index | :heavy_check_mark: | :x:             |\n| Encrypted Data  | :heavy_check_mark: | :x:             |\n\n\n[^1]: Except for paks compressed using frozen index which has significant\n    complexity and only existed for UE 4.25 anyway.\n[^2]: As of writing. Later versions are likely supported but untested.\n[^3]: Zlib, Gzip, and Zstd are supported. Not all compression algorithms are\n    available in all games.\n\nSupports reading encrypted (both index and/or data) and compressed paks.\nWriting does not support compression or encryption yet.\n\n## notes\n\n### determinism\n\nAs far as I can tell, the index is not necessarily written deterministically by `UnrealPak`. `repak` uses `BTreeMap` in place of `HashMap` to deterministically write the index and *happens* to rewrite the test paks in the same order, but this more likely than not stops happening on larger pak files.\n\n### full directory index\n\n`UnrealPak` includes a directory entry in the full directory index for all parent directories back to the pak root for a given file path regardless of whether those directories contain any files or just other directories. `repak` only includes directories that contain files. So far no functional differences have been observed as a result.\n\n## acknowledgements\n- [unpak](https://github.com/bananaturtlesandwich/unpak): original crate featuring read-only pak operations\n- [rust-u4pak](https://github.com/panzi/rust-u4pak)'s README detailing the pak file layout\n- [jieyouxu](https://github.com/jieyouxu) for serialization implementation of the significantly more complex V11 index\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrumank%2Frepak","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftrumank%2Frepak","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrumank%2Frepak/lists"}