{"id":13587130,"url":"https://github.com/mookid/diffr","last_synced_at":"2025-10-21T04:56:43.641Z","repository":{"id":45518621,"uuid":"194538785","full_name":"mookid/diffr","owner":"mookid","description":"Yet another diff highlighting tool","archived":false,"fork":false,"pushed_at":"2024-12-04T19:10:12.000Z","size":458,"stargazers_count":604,"open_issues_count":13,"forks_count":23,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-09-17T13:42:59.674Z","etag":null,"topics":["code-review","console","diff","git"],"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/mookid.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}},"created_at":"2019-06-30T16:40:32.000Z","updated_at":"2025-09-09T05:49:48.000Z","dependencies_parsed_at":"2023-02-12T10:00:36.411Z","dependency_job_id":"a8bf8a76-23fa-46ba-a3d7-b06ad380e474","html_url":"https://github.com/mookid/diffr","commit_stats":{"total_commits":129,"total_committers":10,"mean_commits":12.9,"dds":0.0852713178294574,"last_synced_commit":"03722050d4f8424cea3239a1f96ff100400f0137"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/mookid/diffr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mookid%2Fdiffr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mookid%2Fdiffr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mookid%2Fdiffr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mookid%2Fdiffr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mookid","download_url":"https://codeload.github.com/mookid/diffr/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mookid%2Fdiffr/sbom","scorecard":{"id":659300,"data":{"date":"2025-08-11","repo":{"name":"github.com/mookid/diffr","commit":"b0ebd4c04a5909b5af44f6ac96014148b7384858"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.2,"checks":[{"name":"Code-Review","score":1,"reason":"Found 4/28 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: MIT License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 22 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-21T15:36:39.496Z","repository_id":45518621,"created_at":"2025-08-21T15:36:39.497Z","updated_at":"2025-08-21T15:36:39.497Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280207209,"owners_count":26290616,"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-10-21T02:00:06.614Z","response_time":58,"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":["code-review","console","diff","git"],"created_at":"2024-08-01T15:06:02.317Z","updated_at":"2025-10-21T04:56:43.607Z","avatar_url":"https://github.com/mookid.png","language":"Rust","readme":"## diffr\n\nReviewing changes involves reading diffs.  Sometimes, a line-oriented\npresentation of changes is not precise enough, especially when changes\ninvolve long lines or very similar consecutive lines.\n\nThis program processes such diffs, and outputs them (in the console)\nwith additional diff information on top of the unified diff format,\nusing text attributes.\n\nIt works hunk by hunk, recomputing the diff on a word-by-word basis.\n\nThe current implementation uses \n[Myers' longest common subsequence](http://www.xmailserver.org/diff2.pdf) \nalgorithm.\n\n[![crates.io](https://img.shields.io/crates/v/diffr.svg)](https://crates.io/crates/diffr)\n[![crates.io](https://img.shields.io/crates/d/diffr.svg)](https://crates.io/crates/diffr)\n[![Build Status](https://dev.azure.com/nathanmoreau/diffr/_apis/build/status/mookid.diffr?branchName=master)](https://dev.azure.com/nathanmoreau/diffr/_build/latest?definitionId=4\u0026branchName=master)\n\n![Demo](screenshots/example_simple_mac.png)\n![Demo](screenshots/example_nonconsecutive.png)\n![Demo](screenshots/example_cross_lines_common_tokens.png)\n\n### Installation\n\n#### Arch Linux\n\nInstall from the [AUR](https://aur.archlinux.org/packages/diffr/):\n\n```\ngit clone https://aur.archlinux.org/diffr.git\ncd diffr\nmakepkg -si\n```\n\n#### Homebrew\n\n```\nbrew install diffr\n```\n\n#### From source\n\nYou will need the [Rust compiler installed](https://www.rust-lang.org/tools/install).\n\nTo install the latest published version:\n\n```\ncargo install diffr\n```\n\nAlternatively, you can build the development version:\n\n```\ngit clone https://github.com/mookid/diffr.git\ncd diffr\ncargo install --path .\n```\n\n### How to use it?\n\ndiffr tries to be a well behaved Unix program: it reads its input from stdin\nand writes to stdout.\n\n#### One-off usage\n\n```\ngit show HEAD | diffr\n```\n\n#### Integration with git\n\nAdd the following section to your `.gitconfig` file:\n\n```\n[core]\n    pager = diffr | less -R\n[interactive]\n    diffFilter = diffr\n```\n\nAlternatively, you can run from the command line:\n\n```\ngit config --global core.pager 'diffr | less -R'\ngit config --global interactive.difffilter diffr\n```\n\n#### Color customization\n\nUse the --colors flag.\n\nYou can customize the display of diffing and common segments of added\nand removed lines.\n\nFor example,\n\n```\ndiffr --colors refine-removed:background:200,0,0:foreground:white:bold\n```\n\ntweaks the red used for uniquely removed text;\n\nThe configuration used in the first screenshot is\n\n```\ndiffr --colors refine-added:none:background:0x33,0x99,0x33:bold --colors added:none:background:0x33,0x55,0x33 --colors refine-removed:none:background:0x99,0x33,0x33:bold --colors removed:none:background:0x55,0x33,0x33\n```\n\n#### Display line numbers\n\nThe ` --line-numbers` displays the line numbers of the hunk.\n\n### Related projects\n\nThis is improvement on the\n[diff-highlight](https://github.com/git/git/tree/master/contrib/diff-highlight)\nscript distributed with git.\n\ngit itself provides both `--word-diff` and `--color-words` options to\nseveral commands.\n","funding_links":[],"categories":["Rust","Source Code"],"sub_categories":["Diff Enhancers"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmookid%2Fdiffr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmookid%2Fdiffr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmookid%2Fdiffr/lists"}