{"id":13521439,"url":"https://github.com/mbj/mutant","last_synced_at":"2025-05-11T13:59:48.319Z","repository":{"id":4050213,"uuid":"5152718","full_name":"mbj/mutant","owner":"mbj","description":"Automated code reviews via mutation testing - semantic code coverage.","archived":false,"fork":false,"pushed_at":"2025-04-09T18:57:06.000Z","size":5776,"stargazers_count":1974,"open_issues_count":127,"forks_count":155,"subscribers_count":32,"default_branch":"main","last_synced_at":"2025-05-11T13:59:31.446Z","etag":null,"topics":["code-quality-analyzer","code-review","coverage","dynamic-analysis","minitest","mutant","mutation-testing","rspec","ruby","static-analysis","static-anaysis","uncovered-semantics"],"latest_commit_sha":null,"homepage":"","language":"Ruby","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/mbj.png","metadata":{"files":{"readme":"README.md","changelog":"Changelog.md","contributing":null,"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},"funding":{"github":"mbj"}},"created_at":"2012-07-23T14:18:46.000Z","updated_at":"2025-04-25T11:36:24.000Z","dependencies_parsed_at":"2023-10-05T04:00:02.430Z","dependency_job_id":"1bd1ce1d-b0de-4537-aad2-616e3a4dcce1","html_url":"https://github.com/mbj/mutant","commit_stats":{"total_commits":3114,"total_committers":70,"mean_commits":44.48571428571429,"dds":0.321451509312781,"last_synced_commit":"a0ff19a32cdc6c5721e9910b951c3e8c79f690fd"},"previous_names":[],"tags_count":198,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbj%2Fmutant","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbj%2Fmutant/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbj%2Fmutant/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbj%2Fmutant/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mbj","download_url":"https://codeload.github.com/mbj/mutant/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253576264,"owners_count":21930169,"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","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-quality-analyzer","code-review","coverage","dynamic-analysis","minitest","mutant","mutation-testing","rspec","ruby","static-analysis","static-anaysis","uncovered-semantics"],"created_at":"2024-08-01T06:00:34.380Z","updated_at":"2025-05-11T13:59:48.298Z","avatar_url":"https://github.com/mbj.png","language":"Ruby","readme":"mutant\n======\n\n![Build Status](https://github.com/mbj/mutant/workflows/CI/badge.svg)\n[![Gem Version](https://img.shields.io/gem/v/mutant.svg)](https://rubygems.org/gems/mutant)\n[![Discord](https://img.shields.io/discord/767914934016802818.svg)](https://discord.gg/BSr62b4RkV)\n\n## What is Mutant?\n\nAn automated code review tool, with a side effect of producing semantic code coverage\nmetrics.\n\nThink of mutant as an expert developer that simplifies your code while making sure that all tests pass.\n\nThat developer never has a bad day and is always ready to jump on your PR.\n\nEach reported simplification signifies either:\n\nA) A piece of code that does more than the tests ask for.\n   You can probably use the simplified version of the code. OR:\n\nB) If you have a reason to not take the simplified version as it violates a requirement:\n   There was no test that proves the extra requirement. Likely you are missing an\n   important test for that requirement.\n\nOn extensive mutant use A) happens more often than B), which leads to overall less code enter\nyour repository at higher confidence for both the author and the reviewer.\n\nBTW: Mutant is a mutation testing tool, which is a form of code coverage.\nBut each reported uncovered mutation is actually a call to action, just like a flag in a code review\nwould be.\n\n## Getting started:\n\n* Start with reading the [nomenclature](/docs/nomenclature.md). No way around that one, sorry.\n* Then select and setup your [integration](/docs/nomenclature.md#integration), also make sure\n  you can reproduce the examples in the integration specific documentation.\n* Use mutant during code reviews and on CI in [incremental](/docs/incremental.md) mode.\n* Do not merge code with new alive mutations. If you really must bypass:\n  Add the subjects with open problems to the ignored subjects.\n\n## Operating Systems\n\nMutant is supported and tested under Linux and Mac OS X.\n\n## Ruby Versions\n\nMutant supports multiple ruby versions at different levels:\n\n* Runtime, indicates mutant can execute on a specific Ruby Version / implementation.\n* Syntax, depends on Runtime support, and indicates syntax new to that Ruby version can be used.\n* Mutations, depends on Syntax support, and indicates syntax new to that Ruby version is being analysed.\n\nSupported indicates if a specific Ruby version / Implementation is actively supported. Which means:\n\n* New releases will only be done if all tests pass on supported Ruby versions / implementations.\n* New features will be available.\n\n| Implementation | Version        | Runtime            | Syntax             | Mutations          | Supported          |\n| -------------- | -------------- | -------            | ------------------ | ------------------ | ------------------ |\n| cRUBY/MRI      | 3.1            | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |\n| cRUBY/MRI      | 3.2            | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |\n| cRUBY/MRI      | 3.3            | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |\n| jruby          | TBD            | :email:            | :email:            | :email:            | :email:            |\n| mruby          | TBD            | :email:            | :email:            | :email:            | :email:            |\n| cRUBY/MRI      | \u003c 3.1          | :no_entry:         | :no_entry:         | :no_entry:         | :no_entry:         |\n\n\nLabels:\n\n* :heavy_check_mark: Supported.\n* :warning: Experimental Support.\n* :soon: Active work in progress.\n* :email: Planned, please contact me on interest.\n* :no_entry: Not being planned, or considered, still contact me on interest.\n\n## Licensing\n\nMutant is commercial software, with a free usage option for opensource projects.\nOpensource projects have to be on a public repository.\n\nCommercial projects have to pay a monthly or annual subscription fee.\n\n## Opensource usage\n\nUsage is free and does not require a signup. But it requires the code is under an\nopensource license and public. Specify `--usage opensource` on the CLI or `usage: opensource`\nin the config file.\n\n## Commercial usage\n\nCommercial use requires payment via a subscription and requires a signup. See [pricing](#pricing) for\navailable plans.\n\nAfter payment specify `--usage commercial` on the CLI or `usage: commercial` in the config file.\n\n### Pricing\n\n**Mutant is free for [opensource use](#opensource-usage)!**\n\nFor commercial use mutants pricing is subscription based.\n\n| Currency | Duration | Cost    | Payment Methods                                       |\n| -------- | -------  | ------- | ----------------------------------------------------- |\n| USD      | 1 month  | 90$     | Credit Card                                           |\n| USD      | 1 year   | 900$    | Credit Card, ACH transfer                             |\n| EUR      | 1 month  | 90€     | Credit Card, SEPA Direct Debit                        |\n| EUR      | 1 year   | 900€    | Credit Card, SEPA Direct Debit, SEPA Transfer         |\n\nCosts are **per developer using mutant on any number of repositories**.\n\nVolume subscriptions with custom plans are available on request.\n\nShould you want to procure a commercial mutant subscription please\n[mail me](mailto:mbj@schirp-dso.com?subject=Mutant%20Commercial%20License) to start the payment\nprocess.\n\nPlease include the following information:\n\n* Your business invoice address.\n* A payment email address, if different from your email address.\n* Only for the EU: A valid VAT-ID is *required*, no sales to private customers to avoid the\n  horrors cross border VAT / MOSS.\n  VAT for EU customers outside of Malta will use **reverse charging**.\n\nAlso feel free to ask any other question I forgot to proactively answer here.\n\nAlso checkout the [commercial FAQ](/docs/commercial.md).\n\n## Topics\n\n* [Commercial use / private repositories](/docs/commercial.md)\n* [Nomenclature](/docs/nomenclature.md)\n* [Reading Reports](/docs/reading-reports.md)\n* [Limitations](/docs/limitations.md)\n* [Concurrency](/docs/concurrency.md)\n* [Rspec Integration](/docs/mutant-rspec.md)\n* [Minitest Integration](/docs/mutant-minitest.md)\n* [Configuration](/docs/configuration.md)\n* [Sorbet](/docs/sorbet.md)\n\n## Communication\n\nTry the following:\n\n* [Discord Channel](https://discord.gg/BSr62b4RkV) reach for `@mbj`.\n* [Github Issues](https://github.com/mbj/mutant/issues)\n* [Release Announcement Mailing List](https://announce.mutant.dev/signup)\n\n## Sponsoring\n\nMutant, as published in the opensource version, would not exist without the help\nof [contributors](https://github.com/mbj/mutant/graphs/contributors) spending lots\nof their private time.\n\nAdditionally, the following features where sponsored by organizations:\n\n* The `mutant-minitest` integration was sponsored by [Arkency](https://arkency.com/)\n* Mutant's initial concurrency support was sponsored by an undisclosed company that does\n  currently not wish to be listed here.\n\n### Legal\n\nContents of this repository are maintained by:\n\n```\nSchirp DSO LTD\nDirector: Markus Schirp\nEmail: info@schirp-dso.com\nVat-ID: MT24186727\nRegistration: C80467\n\nOffice address:\n2, Carob Lane,\nSir Harry Luke Street\nNaxxar NXR 2209,\nMalta\n\nRegistred Address\nPhoenix Business Centre,\nThe Penthouse,\nOld Railway Track,\nSanta Venera SVR9022,\nMalta\n```\n","funding_links":["https://github.com/sponsors/mbj"],"categories":["Ruby","Happy Exploring 🤘","Testing","Tools"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmbj%2Fmutant","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmbj%2Fmutant","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmbj%2Fmutant/lists"}