{"id":35151374,"url":"https://github.com/jzebedee/deltaq","last_synced_at":"2026-04-06T07:01:37.697Z","repository":{"id":22087761,"uuid":"25417397","full_name":"jzebedee/deltaq","owner":"jzebedee","description":"Fast and portable delta encoding for .NET in 100% safe, managed code.","archived":false,"fork":false,"pushed_at":"2023-12-04T00:31:29.000Z","size":568,"stargazers_count":44,"open_issues_count":1,"forks_count":13,"subscribers_count":4,"default_branch":"master","last_synced_at":"2026-03-06T09:24:39.937Z","etag":null,"topics":["bsdiff","bwt","delta","diff","divsufsort","patch","sais","suffix-array","vcdiff","xdelta"],"latest_commit_sha":null,"homepage":"","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/jzebedee.png","metadata":{"files":{"readme":"README.md","changelog":null,"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}},"created_at":"2014-10-19T04:05:10.000Z","updated_at":"2025-10-21T22:37:40.000Z","dependencies_parsed_at":"2024-06-18T23:41:22.474Z","dependency_job_id":"235e315f-3461-49b5-a26b-9183ce4063c9","html_url":"https://github.com/jzebedee/deltaq","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/jzebedee/deltaq","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jzebedee%2Fdeltaq","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jzebedee%2Fdeltaq/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jzebedee%2Fdeltaq/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jzebedee%2Fdeltaq/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jzebedee","download_url":"https://codeload.github.com/jzebedee/deltaq/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jzebedee%2Fdeltaq/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31463015,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T21:22:52.476Z","status":"online","status_checked_at":"2026-04-06T02:00:07.287Z","response_time":112,"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":["bsdiff","bwt","delta","diff","divsufsort","patch","sais","suffix-array","vcdiff","xdelta"],"created_at":"2025-12-28T15:46:22.546Z","updated_at":"2026-04-06T07:01:37.690Z","avatar_url":"https://github.com/jzebedee.png","language":"C#","readme":"# ![DeltaQ logo](assets/dq.png) DeltaQ\n\nFast and portable delta encoding for .NET in 100% safe, managed code.\n\nDeltaQ is available for use as a library in .NET and .NET Framework, and as a cross-platform command-line tool, `dq`, which can be used to perform delta operations (similar to `bsdiff` or `xdelta`).\n\n## Support\n\nDiscussion and technical support is available on Discord.\n\n[![Discord](https://img.shields.io/discord/359127425558249482)](https://discord.gg/FkRPyz6kcD)\n\n## Installing\n\n### `dq` command-line tool\n\n[![DeltaQ.CommandLine nuget package](https://img.shields.io/nuget/v/DeltaQ.CommandLine.svg?style=flat)](https://www.nuget.org/packages/DeltaQ.CommandLine)\n\n`\u003e dotnet tool install DeltaQ.CommandLine -g`\n\n### `DeltaQ` library\n\n[![DeltaQ nuget package](https://img.shields.io/nuget/v/DeltaQ.svg?style=flat)](https://www.nuget.org/packages/DeltaQ)\n\n`\u003e dotnet add package DeltaQ`\n\n## Usage\n\n### `dq` command-line tool\n\n#### Create a binary delta (diff) with BsDiff\n\n`dq bsdiff \u003coldfile\u003e \u003cnewfile\u003e \u003cdeltafile\u003e`\n\nHere's an example of `dq` creating a `bsdiff` delta for patching file `app_v1.exe` into `app_v2.exe`:\n```\n\u003e ls -sh\ntotal 32M\n16M app_v1.exe  17M app_v2.exe\n\n\u003e dq bsdiff app_v1.exe app_v2.exe v1_to_v2.delta\nGenerating BsDiff delta between\nOld file: \"app_v1.exe\"\nNew file: \"app_v2.exe\"\n\nDelta file: \"v1_to_v2.delta\"\nDelta size: 4.28 MB (13.49%)\n```\n\n#### Apply a binary delta (patch) with BsDiff\n\n`dq bspatch \u003coldfile\u003e \u003cdeltafile\u003e \u003cnewfile\u003e`\n\nInstead of distributing the large `app_v2.exe` when it's time to upgrade, `dq` can recreate it by applying the much smaller delta file `v1_to_v2.delta` to the original `app_v1.exe`:\n\n```\n\u003e dq bspatch app_v1.exe v1_to_v2.delta generated_app_v2.exe\nApplying BsDiff delta between\nOld file:   \"app_v1.exe\"\nDelta file: \"v1_to_v2.delta\"\n\nNew file: \"generated_app_v2.exe\"\n```\n```\n\u003e sha256sum app_v2.exe generated_app_v2.exe\nfab165a6e604dc7f9265d13013b6fb06319faec4eaa251a8a6d74a7e30e38dc6  app_v2.exe\nfab165a6e604dc7f9265d13013b6fb06319faec4eaa251a8a6d74a7e30e38dc6  generated_app_v2.exe\n```\n\n### `DeltaQ` library\n\nThe `DeltaQ` package contains all currently supported delta encoding and suffix sorting providers, for use in your own .NET projects.\n\n#### Example: bsdiff and bspatch files\n\n```cs\nusing System.IO;\nusing DeltaQ.BsDiff;\nusing DeltaQ.SuffixSorting;\nusing DeltaQ.SuffixSorting.LibDivSufSort;\n\nvoid MakeDelta() {\n    var oldData = File.ReadAllBytes(\"oldfile.txt\");\n    var newData = File.ReadAllBytes(\"newfile.txt\");\n    using var outStream = File.Create(\"old_to_new.delta\");\n    ISuffixSort suffixSorter = new LibDivSufSort();\n\n    Diff.Create(oldData, newData, outStream, suffixSorter);\n}\n\nvoid UseDelta() {\n    var oldData = File.ReadAllBytes(\"oldfile.txt\");\n    var deltaData = File.ReadAllBytes(\"old_to_new.delta\");\n    using var outStream = File.Create(\"generated_newfile.txt\");\n\n    Patch.Apply(oldData, deltaData, outStream);\n}\n```\n\n#### Example: Suffix sorting with LibDivSufSort\n\n```cs\nusing DeltaQ.SuffixSorting;\nusing DeltaQ.SuffixSorting.LibDivSufSort;\n\nISuffixSort suffixSorter = new LibDivSufSort();\n\nReadOnlySpan\u003cbyte\u003e text = new byte[] { 1, 2, 3, 4 };\nusing var ownedSuffixArray = suffixSorter.Sort(text);\nReadOnlySpan\u003cint\u003e sortedSuffixes = ownedSuffixArray.Memory.Span;\n```\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjzebedee%2Fdeltaq","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjzebedee%2Fdeltaq","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjzebedee%2Fdeltaq/lists"}