A Go tool that checks for backwards incompatible changes in Go libraries to ensure consumers still build.
apicompat is a Go library and CLI tool that detects backwards incompatible changes in Go projects by analyzing exported declarations. It helps maintain API stability and prevent breaking updates by scanning recent changes to identify modifications that would cause consumers of a library to fail to build. The tool focuses on eliminating false positives, treating any as a bug.
Go library maintainers and developers who need to ensure API stability across releases, particularly those managing public or shared packages where breaking changes impact downstream consumers.
Developers choose apicompat for its guarantee of zero false positives in detecting breaking API changes, providing high reliability. It offers flexibility as both a library for integration into workflows and a CLI tool with VCS support for Git, Mercurial, and SVN.
apicompat checks recent changes to a Go project for backwards incompatible changes
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
The project treats any false positive as a bug, ensuring high reliability and precision in detecting only genuine breaking changes, as stated in the README.
Focuses solely on exported declarations to target public API surfaces, reducing noise and directly addressing consumer build failures.
Can be consumed as a Go library for integration or via CLI for ad-hoc checks, offering versatility in workflow adoption.
Supports Git, Mercurial, and SVN for comparing revisions, allowing compatibility checks across various version control systems.
Cannot detect all backwards incompatible changes, such as swapping argument parameters, requiring manual review for completeness, as admitted in the README.
The tool is under heavy refactoring and development, leading to potential instability, breaking changes in the tool itself, and incomplete features.
The README notes that adding docs is a current task, indicating sparse user guidance and examples for effective usage.