{"id":30760627,"url":"https://github.com/kalakit/kaladata","last_synced_at":"2025-09-04T13:07:04.660Z","repository":{"id":310371107,"uuid":"1039591808","full_name":"KalaKit/KalaData","owner":"KalaKit","description":null,"archived":false,"fork":false,"pushed_at":"2025-08-17T16:39:32.000Z","size":13215,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-17T18:08:51.462Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/KalaKit.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES.txt","contributing":null,"funding":null,"license":"LICENSE.md","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}},"created_at":"2025-08-17T15:14:38.000Z","updated_at":"2025-08-17T16:39:35.000Z","dependencies_parsed_at":"2025-08-17T18:19:11.129Z","dependency_job_id":null,"html_url":"https://github.com/KalaKit/KalaData","commit_stats":null,"previous_names":["kalakit/kaladata"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/KalaKit/KalaData","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KalaKit%2FKalaData","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KalaKit%2FKalaData/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KalaKit%2FKalaData/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KalaKit%2FKalaData/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/KalaKit","download_url":"https://codeload.github.com/KalaKit/KalaData/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KalaKit%2FKalaData/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273612627,"owners_count":25137000,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-04T02:00:08.968Z","response_time":61,"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":"2025-09-04T13:07:03.547Z","updated_at":"2025-09-04T13:07:04.638Z","avatar_url":"https://github.com/KalaKit.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# KalaData\n\n[![License](https://img.shields.io/badge/license-Zlib-blue)](LICENSE.md)\n![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20Linux-brightgreen)\n![Development Stage](https://img.shields.io/badge/development-Alpha-yellow)\n\n![Logo](logo.png)\n\nKalaData is a custom compression and decompression tool written in C++20, built entirely from scratch without external dependencies.  \nIt uses a hybrid LZSS + Huffman pipeline to compress data efficiently, while falling back to raw or empty storage when appropriate.  \nAll data is stored in a dedicated archival format with the `.kdat` extension.\n\n\u003e Other uses of the `.kdat` extension in unrelated software do not work with KalaData.  \nKalaData archives have their own internal structure, designed specifically for this tool.\n\n## Features\n- Independent archive format `.kdat`, not based on `ZIP`, `RAR`, `7z` or other archival formats.\n- Hybrid compression:\n  - LZSS for dictionary-based redundancy removal.\n  - Huffman coding for entropy reduction.\n- Storage modes:\n  - Compressed (LZSS + Huffman).\n  - Raw (when compression is not effective).\n  - Empty (for 0-byte files).\n- Verbose logging (--tvb) with detailed per-file reporting.\n- Summary statistics: input and output sizes, ratios, throughput (MB/s), file counts, and total duration.\n- Cross-platform support for Windows 10/11 and Linux.\n- No third-party libraries; relies only on the C++ Standard Library.\n\n## Usage Model\n\nKalaData supports two modes of operation:\n\n1. **Direct mode**  \n   Launch KalaData with a command from the system shell.  \n   Example:  \n   `KalaData.exe --c project_directory project.kdat`  \n   This executes the command and then enters the KalaData CLI environment.\n\n2. **Interactive mode**  \n   Launch KalaData without arguments to enter its own CLI environment.  \n   Commands such as `--c`, `--dc`, or `--tvb` can then be entered directly.  \n\nNote: KalaData does not support command piping or chaining. Commands must be given either at startup in direct mode or entered manually in interactive mode within the CLI environment.\n\n---\n\n## Commands\n\n### Notes:\n  - KalaData accepts relative paths to current directory (or directory set with --go) or absolute paths.\n  - the command `-help command` expects a valid command, like `--help c`\n  - the command `--go path` expects a valid path in your device\n  - the command `--sm mode` expects a valid mode, like `--sm balanced`\n\n| Command          | Description                                            |\n|------------------|--------------------------------------------------------|\n| --v              | Prints KalaData version                                |\n| --about          | Prints the KalaData description                        |\n| --help           | Lists all commands                                     |\n| --help `command` | Gets info about the specified command                  |\n| --go `path`      | Goes to a directory on your device to be able to compress/decompress relative to that directory |\n| --root           | Navigates to system root directory                     |\n| --home           | Navigates to KalaData root directory                   |\n| --where          | Prints your current path (KalaData root or the one set with --go) |\n| --list           | Lists all files and directories in your current path (KalaData root or the one set with --go) |\n| --create `path`  | Creates a new directory at the chosen path             |\n| --delete `path`  | Deletes the file or directory at the chosen path (asks for confirmation before permanently deleting)|\n| --sm `mode`      | Sets compression/decompression mode                    |\n| --tvb            | Toggles verbosity (prints detailed logs when enabled)  |\n| --c              | Compresses origin directory into target archive file path   |\n| --dc             | Decompresses origin archive file into target directory path |\n| --exit           | Quits KalaData                                         |\n\n---\n\n## Available compression modes\n\nNote: All modes share the same min_match value `3`.\n\n### Available modes\n\n| Mode     | Best for            | Window size | Lookahead |\n|----------|---------------------|-------------|-----------|\n| fastest  | Temporary files     | 4 KB        | 18        |\n| fast     | Quick backups       | 32 KB       | 32        |\n| balanced | General use         | 256 KB      | 64        |\n| slow     | Long-term storage   | 1 MB        | 128       |\n| archive  | Maximum compression | 8 MB        | 255       |\n\n---\n\n## Verbose logging\n\nEnabling verbose messages shows additional data that would otherwise flood your console window.\nUse the `--tvb` command to toggle verbose messages on and off.\n\nIf enabled, then the following info is also displayed:\n\nindividual file logs:\n  - compressed/decompressed file is empty\n  - original file size is bigger than the compressed file size so it will not be compressed/decompressed\n  - stored file size is smaller or equal than the compressed file size so it will be compressed/decompressed\n\ncompression/decompression success log additional rows:\n  - compression/expansion ratio\n  - compression/expansion factor\n  - throughput\n  - total files\n  - compressed files\n  - raw files\n  - empty files\n  \n---\n\n## KalaData Archive Layout\n\n### Header data\n| Offset | Size   | Field      | Description                        |\n|--------|--------|------------|------------------------------------|\n| 0x00   | 6 B    | magicVer   | Magic string + version (KDAT01)  |\n| 0x06   | 4 B    | fileCount  | Number of file entries (uint32)    |\n\n### Metadata + file data\n| Offset (relative) | Size        | Field        | Description                                |\n|-------------------|-------------|--------------|--------------------------------------------|\n| +0x00             | 4 B         | pathLen      | Length of relative path string (uint32)    |\n| +0x04             | pathLen B   | relPath      | Relative path string (not null-terminated) |\n| +…                | 1 B         | method       | Storage flag (0 = raw, 1 = compressed)     |\n| +…                | 8 B         | originalSize | Size before compression (uint64)           |\n| +…                | 8 B         | storedSize   | Size after compression/raw (uint64)        |\n| +…                | storedSizeB | data         | File data (omitted if storedSize = 0)      |\n\n## Notes\n- Archive always starts with `KDATxx` where `xx` is the version (01–99).\n- Paths are stored exactly as written, with length prefix, no terminator.\n- Compression is only applied if `storedSize \u003c originalSize`; otherwise file is stored raw.\n- Empty files are represented with `originalSize = 0` and `storedSize = 0`.\n\n---\n\n## Compression\n\nThe `--c` command takes in a directory which will be compressed into a `.kdat` file inside the target path parent directory.\n\nRequirements and restrictions:\n\nOrigin:\n  - path must exist\n  - path must be a directory\n  - directory must not be empty\n  - directory size must not exceed 5GB\n\nTarget:\n  - path must not exist\n  - path must have the `.kdat` extension\n  - path parent directory must be writable\n\n\u003e Example: `KalaData.exe --c C:\\Projects\\MyApp C:\\Archives\\MyApp.kdat`\n\n---\n\n## Decompression\n\nThe `--dc` command takes in a compressed `.kdat` file path which will be decompressed inside the target directory.\n\nRequirements and restrictions:\n\nOrigin:\n  - path must exist\n  - path must be a regular file\n  - path must have the `.kdat` extension\n\nTarget:\n  - path must exist\n  - path must be a directory\n  - directory must be writable\n\n\u003e Example: `KalaData.exe --dc C:\\Archives\\MyApp.kdat C:\\Extracted\\MyApp`\n\n## Prerequisites for building from source\n\n### On Windows\n\n\u003e Read `Windows_prerequisites.txt` and use `Windows_prerequisites.zip`\n\n### On Linux\n\n\u003e Not ready, coming soon\n\n## How to build from source\n\nThe compiled executable and its files will be placed to `/release` and `/debug` in the root directory relative to the build stage\n\n### On Windows\n\n\u003e Run `build_windows.bat`\n\n### On Linux\n\n\u003e Not ready, coming soon\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkalakit%2Fkaladata","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkalakit%2Fkaladata","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkalakit%2Fkaladata/lists"}