{"ok":true,"repo":{"id":263,"full_name":"dsummersl/treepeat","url":"https://github.com/dsummersl/treepeat","description":"Code similarity detection using treesitter","language":"Python","topics":[],"stars":75,"stars_delta":2,"forks":5,"first_seen":"2026-09-26T17:16:40.528529Z","last_seen":"2026-09-27T04:03:34.903969Z","mentions":1,"platforms":["hn"],"score":43.76,"summary":"treepeat is a Python CLI tool that detects duplicate and similar code in a codebase using tree-sitter AST analysis plus locality-sensitive hashing. It offers three normalization levels (exact duplicates, near-duplicates ignoring strings/whitespace, and structurally similar code with anonymized identifiers), adjustable similarity thresholds, side-by-side diffs, and SARIF output for CI integration.","why":"It was featured in a Show HN post, where the author presented it as a proof of concept and invited pull requests to support more languages.","audience":"Developers and code reviewers who want to find copy-pasted or near-duplicated code in their repositories, especially in CI pipelines.","tags":["code-quality","static-analysis","tree-sitter","cli","python","developer-tools"],"summarized_at":"2026-09-26T17:29:02.560888Z","summary_model":"glm-5.3-flash","fetched_at":"2026-09-27T04:07:34.728959Z","meta":{"license":"Apache-2.0","archived":false,"homepage":null,"pushed_at":"2026-09-22T16:43:46Z","created_at":"2025-11-11T23:27:36Z","first_stars":73},"pushed_at":"2026-09-22T16:43:46Z","created_at":"2025-11-11T23:27:36Z","watchers":0,"open_issues":7,"mentions_list":[{"platform":"hn","url":"https://news.ycombinator.com/item?id=49804359","title":"Show HN: Treepeat – Code similarity detection using Tree-sitter","seen_at":"2026-09-27T04:03:34.904766Z"}],"snapshots":[{"captured_at":"2026-09-26T18:22:54.229096Z","stars":73,"forks":5},{"captured_at":"2026-09-26T18:23:07.966849Z","stars":73,"forks":5},{"captured_at":"2026-09-26T18:27:57.614964Z","stars":73,"forks":5},{"captured_at":"2026-09-26T18:29:33.898055Z","stars":73,"forks":5},{"captured_at":"2026-09-26T18:44:22.746333Z","stars":73,"forks":5},{"captured_at":"2026-09-26T18:57:56.345855Z","stars":73,"forks":5},{"captured_at":"2026-09-26T19:12:48.240186Z","stars":73,"forks":5},{"captured_at":"2026-09-26T19:16:23.572332Z","stars":73,"forks":5},{"captured_at":"2026-09-26T19:19:31.726601Z","stars":73,"forks":5},{"captured_at":"2026-09-26T19:21:48.616290Z","stars":73,"forks":5},{"captured_at":"2026-09-26T19:28:22.118183Z","stars":73,"forks":5},{"captured_at":"2026-09-26T19:31:59.008808Z","stars":73,"forks":5},{"captured_at":"2026-09-26T19:34:45.676693Z","stars":73,"forks":5},{"captured_at":"2026-09-26T19:50:00.483864Z","stars":73,"forks":5},{"captured_at":"2026-09-26T20:04:57.036015Z","stars":74,"forks":5},{"captured_at":"2026-09-26T20:20:08.707474Z","stars":74,"forks":5},{"captured_at":"2026-09-26T20:34:52.287679Z","stars":74,"forks":5},{"captured_at":"2026-09-26T20:49:49.307196Z","stars":74,"forks":5},{"captured_at":"2026-09-26T20:52:50.877713Z","stars":74,"forks":5},{"captured_at":"2026-09-26T21:07:32.357549Z","stars":74,"forks":5},{"captured_at":"2026-09-26T21:22:36.421512Z","stars":74,"forks":5},{"captured_at":"2026-09-26T21:37:56.345914Z","stars":74,"forks":5},{"captured_at":"2026-09-26T21:52:35.323348Z","stars":74,"forks":5},{"captured_at":"2026-09-26T22:07:35.434823Z","stars":75,"forks":5},{"captured_at":"2026-09-26T22:37:39.034284Z","stars":75,"forks":5},{"captured_at":"2026-09-26T22:52:50.899737Z","stars":75,"forks":5},{"captured_at":"2026-09-26T23:07:39.398207Z","stars":75,"forks":5},{"captured_at":"2026-09-26T23:22:29.159916Z","stars":75,"forks":5},{"captured_at":"2026-09-26T23:37:51.790567Z","stars":75,"forks":5},{"captured_at":"2026-09-26T23:52:32.518732Z","stars":75,"forks":5},{"captured_at":"2026-09-27T00:07:41.772829Z","stars":75,"forks":5},{"captured_at":"2026-09-27T00:23:02.337549Z","stars":75,"forks":5},{"captured_at":"2026-09-27T00:37:35.911923Z","stars":75,"forks":5},{"captured_at":"2026-09-27T00:52:34.462338Z","stars":75,"forks":5},{"captured_at":"2026-09-27T01:07:33.278181Z","stars":75,"forks":5},{"captured_at":"2026-09-27T01:22:39.917479Z","stars":75,"forks":5},{"captured_at":"2026-09-27T01:37:53.246184Z","stars":75,"forks":5},{"captured_at":"2026-09-27T01:52:32.511612Z","stars":75,"forks":5},{"captured_at":"2026-09-27T02:07:31.886420Z","stars":75,"forks":5},{"captured_at":"2026-09-27T02:22:50.480081Z","stars":75,"forks":5},{"captured_at":"2026-09-27T02:37:34.296037Z","stars":75,"forks":5},{"captured_at":"2026-09-27T02:52:36.440639Z","stars":75,"forks":5},{"captured_at":"2026-09-27T03:07:56.584179Z","stars":75,"forks":5},{"captured_at":"2026-09-27T03:22:37.500385Z","stars":75,"forks":5},{"captured_at":"2026-09-27T03:37:35.356506Z","stars":75,"forks":5},{"captured_at":"2026-09-27T03:52:32.018112Z","stars":75,"forks":5},{"captured_at":"2026-09-27T04:07:34.729587Z","stars":75,"forks":5}]}}