{"id":51026914,"url":"https://github.com/gitstq/configdiff","last_synced_at":"2026-06-21T20:02:31.665Z","repository":{"id":351991857,"uuid":"1213384118","full_name":"gitstq/configdiff","owner":"gitstq","description":"ConfigDiff - Multi-format configuration file diff and merge tool. Zero-dependency Python CLI.","archived":false,"fork":false,"pushed_at":"2026-04-17T10:22:07.000Z","size":25,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-17T12:26:07.753Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","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/gitstq.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","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":"2026-04-17T10:19:21.000Z","updated_at":"2026-04-17T10:20:50.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/gitstq/configdiff","commit_stats":null,"previous_names":["gitstq/configdiff"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/gitstq/configdiff","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitstq%2Fconfigdiff","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitstq%2Fconfigdiff/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitstq%2Fconfigdiff/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitstq%2Fconfigdiff/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gitstq","download_url":"https://codeload.github.com/gitstq/configdiff/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gitstq%2Fconfigdiff/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34623906,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-21T02:00:05.568Z","response_time":54,"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-06-21T20:02:31.515Z","updated_at":"2026-06-21T20:02:31.650Z","avatar_url":"https://github.com/gitstq.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ConfigDiff\n\n**[English](README.md)** | **[简体中文](README_zh-CN.md)**\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eMulti-format configuration file diff and merge tool\u003c/strong\u003e\u003cbr\u003e\n  Zero-dependency Python CLI - diff JSON, YAML, TOML, .env, and more\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Python-3.8+-blue.svg\" alt=\"Python 3.8+\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/License-MIT-green.svg\" alt=\"MIT License\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Dependencies-Zero-success.svg\" alt=\"Zero Dependencies\"\u003e\n\u003c/p\u003e\n\n---\n\n## What is ConfigDiff?\n\nConfigDiff is a lightweight, zero-dependency Python CLI tool for comparing configuration files across multiple formats. It provides intelligent, format-aware diffs that understand the structure of JSON, YAML, TOML, .env, and other config files.\n\n**Key difference from `diff`**: Standard `diff` compares line-by-line. ConfigDiff understands your file's structure and shows meaningful differences at the semantic level.\n\n## Features\n\n- **Multi-format support**: JSON, YAML, TOML, .env, INI, XML, Properties, plain text\n- **Structured diff**: Understands nested objects, arrays, key-value pairs\n- **6 output formats**: Color terminal, plain text, JSON, Markdown, Git-style\n- **Directory diff**: Compare entire config directories recursively\n- **Zero dependencies**: Only Python 3.8+ stdlib (optional PyYAML for enhanced YAML)\n- **CLI + Python API**: Use from command line or import as a library\n\n## Quick Start\n\n### Install\n\n```bash\npip install configdiff\n```\n\n### Compare two config files\n\n```bash\n# YAML comparison\nconfigdiff config_dev.yaml config_prod.yaml\n\n# JSON comparison with JSON output\nconfigdiff app.json app_new.json --format=json\n\n# .env file comparison\nconfigdiff .env.development .env.production\n\n# Directory comparison\nconfigdiff configs/staging/ configs/production/ --recursive\n```\n\n### Example output\n\n```\n--- config_dev.yaml\n+++ config_prod.yaml\n@@ -1,1 +1,1 @@\n!  app.debug:\n-    old: True\n+    new: False\n!  app.port:\n-    old: 3000\n+    new: 8080\n+  + monitoring: {'enabled': True, 'endpoint': 'https://metrics.example.com'}\n\nSummary: +1 added  ~2 changed\n```\n\n## CLI Reference\n\n```bash\nconfigdiff \u003cleft\u003e \u003cright\u003e [options]\n\nOptions:\n  -f, --format {color,plain,json,markdown,git}  Output format\n  -o, --output FILE                             Write to file instead of stdout\n  -c, --context N                               Context lines (default: 3)\n  --ignore-order                                 Ignore array ordering\n  --color {auto,always,never}                   Color output control\n  -r, --recursive                               Recursively compare directories\n  -q, --quiet                                   Only show summary\n```\n\n## Python API\n\n```python\nfrom configdiff import ConfigDiff\n\ncd = ConfigDiff()\n\n# Compare two files\nresult = cd.diff_file(\"config_a.yaml\", \"config_b.yaml\")\nprint(result.changed)  # True if differences found\nprint(result.stats)    # {'added': 1, 'removed': 0, 'changed': 2}\n\n# Format output\nprint(cd.format(result, format=\"color\"))   # Terminal colors\nprint(cd.format(result, format=\"json\"))    # JSON output\nprint(cd.format(result, format=\"markdown\")) # Markdown report\n```\n\n## Supported Formats\n\n| Format | Extension | Features |\n|--------|-----------|----------|\n| JSON | .json | Deep diff, array ordering options |\n| YAML | .yaml, .yml | Structured diff (requires PyYAML) |\n| TOML | .toml | Structured diff (requires tomli) |\n| Environment | .env | Key-value diff, ignores comments |\n| INI | .ini, .conf | Section-aware diff |\n| XML | .xml | Text diff (structured coming soon) |\n| Properties | .properties | Key-value diff |\n| Text | any | Line-by-line diff |\n\n## Design Philosophy\n\n1. **Config-first**: Built specifically for configuration files, not general text\n2. **Zero friction**: Works out of the box with no dependencies\n3. **CI/CD ready**: JSON/Markdown output for automated reports\n4. **Developer friendly**: Colored terminal output with clear visual hierarchy\n\n## Roadmap\n\n- [ ] 3-way merge support\n- [ ] Interactive merge resolution\n- [ ] XML structured diff\n- [ ] Config validation against schema\n- [ ] Web UI for visual diff\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n## License\n\nMIT License - see [LICENSE](LICENSE) file.\n\n---\n\nMade with ❤️ by [gitstq](https://github.com/gitstq)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgitstq%2Fconfigdiff","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgitstq%2Fconfigdiff","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgitstq%2Fconfigdiff/lists"}