{"id":43871117,"url":"https://github.com/rakaly/cli","last_synced_at":"2026-02-06T14:30:28.334Z","repository":{"id":38830405,"uuid":"314074734","full_name":"rakaly/cli","owner":"rakaly","description":"Run PDX.Tools commands locally","archived":false,"fork":false,"pushed_at":"2025-12-16T12:07:22.000Z","size":2850,"stargazers_count":17,"open_issues_count":0,"forks_count":3,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-12-20T01:52:30.622Z","etag":null,"topics":["ck3","eu4","hoi4","imperator","ironman","paradox"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rakaly.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","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":"2020-11-18T22:34:10.000Z","updated_at":"2025-12-16T12:07:26.000Z","dependencies_parsed_at":"2023-10-15T15:02:48.095Z","dependency_job_id":"3b1e9c5f-98b6-4ff6-8769-057a880492a0","html_url":"https://github.com/rakaly/cli","commit_stats":null,"previous_names":[],"tags_count":87,"template":false,"template_full_name":null,"purl":"pkg:github/rakaly/cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rakaly%2Fcli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rakaly%2Fcli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rakaly%2Fcli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rakaly%2Fcli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rakaly","download_url":"https://codeload.github.com/rakaly/cli/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rakaly%2Fcli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29164855,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-06T12:44:37.655Z","status":"ssl_error","status_checked_at":"2026-02-06T12:44:13.991Z","response_time":59,"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":["ck3","eu4","hoi4","imperator","ironman","paradox"],"created_at":"2026-02-06T14:30:27.699Z","updated_at":"2026-02-06T14:30:28.322Z","avatar_url":"https://github.com/rakaly.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"![ci](https://github.com/rakaly/cli/workflows/ci/badge.svg)\n\n# Rakaly CLI\n\nThe Rakaly CLI provides a convenient way of accessing [PDX.Tools](https://pdx.tools/) functionality locally.\n\n## Features\n\n- ✔ Supports converting (melting) EU4, CK3, HOI4, and Imperator Rome saves to their plaintext equivalent\n- ✔ Cross platform: run rakaly-cli on mac, windows, and linux \n- ✔ Lightweight: Small executable that can be download and ran -- no dependencies \n\n## Install\n\n - Go to the [latest releases](https://github.com/rakaly/cli/releases/latest)\n - Download desired build (mac, windows, or linux)\n - Extract\n - (optional): Add to your computers path for easier access\n   - For windows, PATH can be modified through [the GUI](https://www.architectryan.com/2018/03/17/add-to-the-path-on-windows-10/) or [the terminal](https://stackoverflow.com/q/9546324/433785)\n - Enjoy\n\n## Documentation\n\n### Melting Save Files\n\nRakaly CLI can convert binary encoded saves to their plaintext equivalent in a process called melting.\n\n```plain\nrakaly melt aq.eu4\n```\n\nThe above example will create a plaintext `aq_melted.eu4` file that one can open up and inspect in a text editor. Moreover, this melted save may be continued in EU4 as if it was a normal game (the other games remain untested in this aspect). \n\nThe melt command determines how to interpret the save file by looking at the extension (`.eu4`, `.rome`, `.hoi4`, or `.ck3`).\n\nIf outputting to stdout is more your style:\n\n```plain\nrakaly melt --to-stdout aq.eu4\n```\n\nWhenever there is a content patch for the supported games, the rakaly-cli will be out of date until the next update. The default behavior of the melt command is to fail when unexpected tokens from the new content is encountered. To make the melt command perserve through the tokens and encode them as hexadecimals in the output:\n\n```plain\nrakaly melt --unknown-key stringify aq.eu4\n```\n\nWhen unknown tokens are encountered with the stringify strategy then the unknown tokens are printed to stderr and the exit code is 1.\n\nThe melter knows how to melt a given file based on its file extension. In the event this heuristic is incorrect, one can explicitly provide the desired format:\n\n```plain\nrakaly melt --format eu4 --to-stdout gamestate\n```\n\n### Conversion to JSON\n\nThe `json` subcommand will convert game and save files (including binary ones) into JSON output on stdout.\n\n```bash\nrakaly json aq.eu4\n```\n\nThe output can be pretty printed:\n\n```bash\nrakaly json --pretty aq.eu4\n```\n\nBy default, duplicate keys are preserved in the JSON, but this can be configured:\n\n```bash\nrakaly json --duplicate-keys preserve  aq.eu4\nrakaly json --duplicate-keys group aq.eu4\nrakaly json --duplicate-keys key-value-pairs aq.eu4\n```\n\nWhen converting game files, pass the character encoding so that non-ascii characters are represented correctly:\n\n```bash\nrakaly json --format windows-1252 achievements.txt\n```\n\n#### Variable Interpolation\n\nThe `json` command supports variable interpolation.\n\n```bash\nrakaly json --interpolation --format utf8 config.txt\n```\n\nInput:\n\n```\n@scale = 10\nposition = { x = @[scale * 2] y = @scale }\n```\n\nOutput:\n\n```json\n{\"position\":{\"x\":20,\"y\":10}}\n```\n\n### Watch and archive saves\n\nThe `rakaly watch` command continuously monitors a save file and creates snapshots to maintain a historical record of the campaign at desired intervals.\n\nWhen there is file activity (eg, when the game saves), the command parses the save to extract the current in-game date. The command compares the current save's date to the date of the last snapshot taken (if any). If the criteria for the frequency are met (eg, the year changed for yearly frequency), it creates a copy of the modified save file in the specified output directory.\n\nFor instance, start an ironman EU4 campaign named \"hsa\" and run the watch command:\n\n```bash\nrakaly watch hsa.eu4 \n```\n\nAnd soon enough, an \"hsa\" directory will be created and start to fill with saves as EU4 autosaves roughly every three months:\n\n- `hsa/hsa_1444-11-11.eu4`\n- `hsa/hsa_1445-03-01.eu4`\n- `hsa/hsa_1446-03-01.eu4`\n\nIn the above example, we only see yearly snapshots, as that is the default snapshot interval the `watch` command uses for EU4 saves. EU4's first autosave in 1445 was in March, hence the snapshot date of 1445-03-01. Note that EU4 does not have consistent autosave dates between sessions.\n\nThe snapshot interval can be customized:\n\n- daily\n- monthly (default for HOI4)\n- quarterly (default for Vic3)\n- yearly (default for EU4, CK3, and Imperator)\n- decade\n\nNote that these snapshot intervals may differ from how frequently the game autosaves.\n\nWhen started, the command scans the output directory for existing snapshots related to the input file. It identifies the most recent snapshot date and will only create new snapshots for in-game dates after that one, according to the frequency rules. This prevents duplicate snapshots if you restart the watcher.\n\nThe watch command is intended to be minimal. For a fully featured save game manager, see [pdxu](https://github.com/crschnick/pdx_unlimiter).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frakaly%2Fcli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frakaly%2Fcli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frakaly%2Fcli/lists"}