{"id":42224475,"url":"https://github.com/zohnannor/hk-save-logger","last_synced_at":"2026-01-27T02:18:48.099Z","repository":{"id":315107829,"uuid":"1058145712","full_name":"zohnannor/hk-save-logger","owner":"zohnannor","description":"Hollow Knight / Silksong save file monitor","archived":false,"fork":false,"pushed_at":"2025-09-16T18:45:17.000Z","size":23,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-16T20:00:28.380Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zohnannor.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE-2.0","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":"2025-09-16T17:22:58.000Z","updated_at":"2025-09-16T18:45:00.000Z","dependencies_parsed_at":"2025-09-16T20:00:35.750Z","dependency_job_id":"eed83928-5bab-4607-a2e5-90a935c48fdf","html_url":"https://github.com/zohnannor/hk-save-logger","commit_stats":null,"previous_names":["zohnannor/hk-save-logger"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/zohnannor/hk-save-logger","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zohnannor%2Fhk-save-logger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zohnannor%2Fhk-save-logger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zohnannor%2Fhk-save-logger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zohnannor%2Fhk-save-logger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zohnannor","download_url":"https://codeload.github.com/zohnannor/hk-save-logger/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zohnannor%2Fhk-save-logger/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28796966,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T01:07:07.743Z","status":"online","status_checked_at":"2026-01-27T02:00:07.755Z","response_time":168,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2026-01-27T02:18:47.463Z","updated_at":"2026-01-27T02:18:48.094Z","avatar_url":"https://github.com/zohnannor.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hollow Knight \u0026 Silksong Save Monitor\n\nA tool for monitoring and manipulating save files for Hollow Knight and Hollow\nKnight: Silksong.\n\n## Features\n\n-   Real-time monitoring of save file changes\n-   Save file decoding/encoding to/from JSON format and `.dat`\n-   Support for both Hollow Knight and Silksong\n-   Change tracking with detailed diffs\n-   Cross-platform support (Windows, macOS, Linux)\n\n## Installation\n\n### Pre-built Binaries\n\nDownload the latest release for your platform from the [Releases\npage](https://github.com/zohnannor/hk-save-logger/releases).\n\n### Building from Source\n\n1. Install Rust from https://rustup.rs/\n2. Clone the repository:\n\n    ```bash\n    git clone https://github.com/zohnannor/hk-save-logger.git\n    cd hk-save-logger\n    ```\n\n3. Build the project:\n\n    ```bash\n    bash\n    cargo build --release\n    ```\n\n    The binary will be available at `target/release/hk-save-logger`\n\n## Usage\n\n### Basic Monitoring\n\nMonitor Hollow Knight save slot 1:\n\n```bash\nhk-save-logger hollow-knight 1\n# or\nhk-save-logger hk 1\n```\n\nMonitor Silksong save slot 2:\n\n```bash\nhk-save-logger silksong 2\n# or\nhk-save-logger ss 2\n```\n\nMonitor a specific save file:\n\n```bash\nhk-save-logger --path /path/to/your/save/user1.dat\n```\n\n### Encoding/Decoding\n\nDecode a save file to JSON:\n\n```bash\nhk-save-logger --path /path/to/save.dat\n# or\nhk-save-logger ss 1\n```\n\nEncode a modified JSON file back to save format (`.dat`):\n\n```bash\nhk-save-logger --path /path/to/save.dat --encode\n```\n\nCommand Line Options\n\n```text\nUsage: hk-save-logger [OPTIONS] [GAME] [SAVE]\n\nArguments:\n  [GAME]  Game to parse (hollow-knight/hk or silksong/ss) [possible values: hollow-knight, silksong]\n  [SAVE]  Save slot to parse (1-4)\n\nOptions:\n      --encode       Decode save file (default) or encode (it won't place the file for you, you have to do it manually, this is done to prevent data loss. Rename file to user1.dat (or whatever number you need) and place it in the correct folder)\n      --path \u003cPATH\u003e  Path to save file (default: auto-detect)\n  -h, --help         Print help\n  -V, --version      Print version\n```\n\n## Save File Locations\n\nThe tool automatically detects save file locations for both games and both Steam\nand GOG:\n\n-   Windows: `%USERPROFILE%\\AppData\\LocalLow\\Team Cherry\\`\n-   macOS: `~/Library/Application Support/`\n-   Linux: `~/.config/unity3d/Team Cherry/`\n\n## Output Files\n\nThe tool creates (or appends to) two files:\n\n-   `{game}-{save}.json` - JSON representation of the save file\n-   `{game}-{save}.log` - Log of all changes detected\n\nExample output:\n\n```py\n[2025-09-10 13:50:19.1053902 +03:00:00] Change #10 detected:\n  playerData.HeroCorpseMarkerGuid: null -\u003e \"HtdHrq1NO02NyYPJ4NjRpA==\"\n  playerData.FisherWalkerDirection: false -\u003e true\n  playerData.FisherWalkerIdleTimeLeft: -0.00288200425 -\u003e 48.22196\n  playerData.FisherWalkerTimer: 44.7499161 -\u003e -0.00561722228\n  playerData.HeroCorpseMoneyPool: 0 -\u003e 1013\n  playerData.HeroCorpseScene: \"\" -\u003e \"Song_Tower_01\"\n  playerData.HeroDeathScenePos.x: 67.47 -\u003e 53.51\n  playerData.HeroDeathScenePos.y: 16.84 -\u003e 102.620064\n  playerData.HeroDeathSceneSize.x: 124.0 -\u003e 130.0\n  playerData.HeroDeathSceneSize.y: 56.0 -\u003e 140.0\n  playerData.IsSilkSpoolBroken: false -\u003e true\n  playerData.LastSetFieldName: \"HasSeenGeoMid\" -\u003e \"encounteredLaceTower\"\n  playerData.QuestCompletionData.savedData[28].Data.IsCompleted: false -\u003e true\n  playerData.QuestCompletionData.savedData[28].Data.WasEverCompleted: false -\u003e true\n  playerData.QuestCompletionData.savedData[43]: null -\u003e {\"Data\":{\"CompletedCount\":0,\"HasBeenSeen\":false,\"IsAccepted\":true,\"IsCompleted\":false,\"WasEverCompleted\":false},\"Name\":\"Citadel Ascent Lift\"}\n  playerData.QuestPaneHasNew: false -\u003e true\n  playerData.UnlockedMelodyLift: false -\u003e true\n  playerData.encounteredLaceTower: false -\u003e true\n  playerData.environmentType: 4 -\u003e 0\n  playerData.geo: 1013 -\u003e 0\n  playerData.health: 3 -\u003e 0\n  playerData.playTime: 160898.813 -\u003e 161115.266\n  playerData.prevHealth: 6 -\u003e 8\n  playerData.scenesVisited[682]: null -\u003e \"Song_Tower_01\"\n  playerData.silk: 3 -\u003e 0\n\n[2025-09-10 13:51:52.2267669 +03:00:00] Change #11 detected:\n  playerData.FisherWalkerDirection: true -\u003e false\n  playerData.FisherWalkerIdleTimeLeft: 48.22196 -\u003e -0.00368880527\n  playerData.FisherWalkerTimer: -0.00561722228 -\u003e 12.2016125\n  playerData.InvPaneHasNew: true -\u003e false\n  playerData.LastSetFieldName: \"encounteredLaceTower\" -\u003e \"QuestPaneHasNew\"\n  playerData.MaskMakerQueuedUnmasked2: false -\u003e true\n  playerData.QuestCompletionData.savedData[43].Data.HasBeenSeen: false -\u003e true\n  playerData.QuestPaneHasNew: true -\u003e false\n  playerData.ToolEquips.savedData[6].Data.Slots[3].EquippedTool: \"Revenge Crystal\" -\u003e \"Poison Pouch\"\n  playerData.belltownCrowd: 4 -\u003e 1\n  playerData.bonetownCrowd: 6 -\u003e 5\n  playerData.currentInvPane: 4 -\u003e 1\n  playerData.environmentType: 0 -\u003e 4\n  playerData.grubFarmerTimer: 1493.97046 -\u003e 1714.77307\n  playerData.halfwayCrowd: 1 -\u003e 3\n  playerData.hazardRespawnFacing: 0 -\u003e 1\n  playerData.health: 0 -\u003e 8\n  playerData.mapperAway: false -\u003e true\n  playerData.pilgrimGroupBonegrave: 2 -\u003e 1\n  playerData.pilgrimGroupGreymoorField: 3 -\u003e 2\n  playerData.pilgrimGroupShellgrave: 3 -\u003e 2\n  playerData.pilgrimRestCrowd: 1 -\u003e 3\n  playerData.pinstressInsideSitting: false -\u003e true\n  playerData.playTime: 161115.266 -\u003e 161176.031\n  playerData.silk: 0 -\u003e 1\n```\n\n## Bugs\n\nIf you find any bugs, please [open an\nissue](https://github.com/zohnannor/hk-save-logger/issues/new) and describe your\nproblem.\n\n## Known Issues\n\n-   Insertion of a new value into the middle of an array is rendered as a change\n    to all the subsequent values\n\n## License\n\nThis project is licensed under either of\n\n-   Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or\n    http://www.apache.org/licenses/LICENSE-2.0)\n-   MIT license ([LICENSE-MIT](LICENSE-MIT) or\n    http://opensource.org/licenses/MIT)\n\nat your option.\n\n#### Disclaimer\n\nYes, some parts (json diff and github action) are generated by DeepSeek bc I\ncan't be bothered\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzohnannor%2Fhk-save-logger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzohnannor%2Fhk-save-logger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzohnannor%2Fhk-save-logger/lists"}