{"id":371493,"url":"https://github.com/enthought/traits","last_synced_at":"2026-05-13T11:07:05.884Z","repository":{"id":1354235,"uuid":"1301745","full_name":"enthought/traits","owner":"enthought","description":"Observable typed attributes for Python classes","archived":false,"fork":false,"pushed_at":"2026-04-06T20:44:21.000Z","size":55682,"stargazers_count":463,"open_issues_count":231,"forks_count":89,"subscribers_count":61,"default_branch":"main","last_synced_at":"2026-04-18T21:04:47.526Z","etag":null,"topics":["attributes","dataclasses","gui","observer-pattern","python","runtime-typechecking","types"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"glycerine/go-capnproto","license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/enthought.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGES.rst","contributing":null,"funding":null,"license":"LICENSE-CC-BY-3.0.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2011-01-28T04:46:40.000Z","updated_at":"2026-04-18T11:45:10.000Z","dependencies_parsed_at":"2024-03-18T09:46:26.579Z","dependency_job_id":"13fc0bd7-ee32-49f0-b0cf-cb6771909b0f","html_url":"https://github.com/enthought/traits","commit_stats":{"total_commits":2977,"total_committers":110,"mean_commits":"27.063636363636363","dds":0.7836748404433994,"last_synced_commit":"872def363cac51c226073c56f3d76344168eb6dd"},"previous_names":[],"tags_count":49,"template":false,"template_full_name":null,"purl":"pkg:github/enthought/traits","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enthought%2Ftraits","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enthought%2Ftraits/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enthought%2Ftraits/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enthought%2Ftraits/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/enthought","download_url":"https://codeload.github.com/enthought/traits/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enthought%2Ftraits/sbom","scorecard":{"id":378150,"data":{"date":"2025-08-11","repo":{"name":"github.com/enthought/traits","commit":"b9015803365b046e827aa9e87356d80f62fa95ad"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.7,"checks":[{"name":"Code-Review","score":4,"reason":"Found 9/22 approved changesets -- score normalized to 4","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":"Maintained","score":5,"reason":"4 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","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":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/release-to-pypi.yml:1","Warn: no topLevel permission defined: .github/workflows/run-core-traits-tests.yml:1","Warn: no topLevel permission defined: .github/workflows/run-style-checks.yml:1","Warn: no topLevel permission defined: .github/workflows/run-traits-tests.yml:1","Warn: no topLevel permission defined: .github/workflows/test-documentation-build.yml:1","Warn: no topLevel permission defined: .github/workflows/test-from-pypi.yml:1","Info: no jobLevel write permissions found"],"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":"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":"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":"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":"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":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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":"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":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-to-pypi.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/enthought/traits/release-to-pypi.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-to-pypi.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/enthought/traits/release-to-pypi.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release-to-pypi.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/enthought/traits/release-to-pypi.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-to-pypi.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/enthought/traits/release-to-pypi.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-to-pypi.yml:49: update your workflow using https://app.stepsecurity.io/secureworkflow/enthought/traits/release-to-pypi.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/run-core-traits-tests.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/enthought/traits/run-core-traits-tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/run-core-traits-tests.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/enthought/traits/run-core-traits-tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/run-style-checks.yml:10: update your workflow using https://app.stepsecurity.io/secureworkflow/enthought/traits/run-style-checks.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/run-style-checks.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/enthought/traits/run-style-checks.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/run-traits-tests.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/enthought/traits/run-traits-tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/run-traits-tests.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/enthought/traits/run-traits-tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-documentation-build.yml:10: update your workflow using https://app.stepsecurity.io/secureworkflow/enthought/traits/test-documentation-build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-documentation-build.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/enthought/traits/test-documentation-build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-from-pypi.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/enthought/traits/test-from-pypi.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-from-pypi.yml:64: update your workflow using https://app.stepsecurity.io/secureworkflow/enthought/traits/test-from-pypi.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/release-to-pypi.yml:28","Warn: pipCommand not pinned by hash: .github/workflows/release-to-pypi.yml:55","Warn: pipCommand not pinned by hash: .github/workflows/run-core-traits-tests.yml:31","Warn: pipCommand not pinned by hash: .github/workflows/run-style-checks.yml:17","Warn: pipCommand not pinned by hash: .github/workflows/run-style-checks.yml:18","Warn: pipCommand not pinned by hash: .github/workflows/run-traits-tests.yml:23","Warn: pipCommand not pinned by hash: .github/workflows/test-documentation-build.yml:17","Warn: pipCommand not pinned by hash: .github/workflows/test-from-pypi.yml:37","Warn: pipCommand not pinned by hash: .github/workflows/test-from-pypi.yml:71","Info:   0 out of  14 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   9 pipCommand dependencies pinned"],"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":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 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-18T14:44:52.593Z","repository_id":1354235,"created_at":"2025-08-18T14:44:52.593Z","updated_at":"2025-08-18T14:44:52.593Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32633440,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-04T10:08:07.713Z","status":"online","status_checked_at":"2026-05-05T02:00:06.033Z","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"}},"owner":{"login":"enthought","name":"Enthought, Inc.","uuid":"539651","kind":"organization","description":"","email":null,"website":"http://www.enthought.com/","location":"Austin, TX","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/539651?v=4","repositories_count":149,"last_synced_at":"2023-04-09T07:16:04.907Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/enthought","funding_links":[],"total_stars":4276,"followers":null,"following":null,"created_at":"2022-11-02T16:22:58.070Z","updated_at":"2023-04-09T07:16:05.045Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/enthought","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/enthought/repositories"},"packages":null,"commits":{"id":16655,"full_name":"enthought/traits","default_branch":"main","total_commits":3048,"total_committers":109,"total_bot_commits":19,"total_bot_committers":1,"mean_commits":27.96330275229358,"dds":0.7742782152230971,"past_year_total_commits":18,"past_year_total_committers":5,"past_year_total_bot_commits":5,"past_year_total_bot_committers":1,"past_year_mean_commits":3.6,"past_year_dds":0.5555555555555556,"last_synced_at":"2026-05-11T20:24:52.882Z","last_synced_commit":"cf90949bcdf73c6012ed890de5cd87cc94864268","created_at":"2023-03-07T11:33:03.922Z","updated_at":"2026-05-11T20:12:55.970Z","committers":[{"name":"Mark Dickinson","email":"mdickinson@enthought.com","login":"mdickinson","count":688},{"name":"dmorrill","email":"dmorrill@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":431},{"name":"Ioannis Tziakos","email":"ioannist@enthought.com","login":"itziakos","count":258},{"name":"Pietro Berkes","email":"pberkes@enthought.com","login":null,"count":172},{"name":"ischnell","email":"ischnell@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":101},{"name":"dpeterson","email":"dpeterson@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":92},{"name":"Kit Choi","email":"kitchoi","login":"kitchoi","count":84},{"name":"Corran Webster","email":"cwebster@enthought.com","login":"corranwebster","count":78},{"name":"swisher","email":"swisher@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":70},{"name":"Yves Delley","email":"pu.y@delley.net","login":"burnpanck","count":61},{"name":"pwang","email":"pwang@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":56},{"name":"vibha","email":"vibha@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":54},{"name":"Poruri Sai Rahul","email":"rporuri@enthought.com","login":null,"count":52},{"name":"Robert Kern","email":"rkern@enthought.com","login":"rkern","count":48},{"name":"Ilan Schnell","email":"ischnell@enthought.com","login":null,"count":47},{"name":"bhendrix","email":"bhendrix@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":46},{"name":"rkern","email":"rkern@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":45},{"name":"epatters","email":"epatters@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":37},{"name":"Christopher L. Farrow","email":"cfarrow@enthought.com","login":"cfarrow","count":35},{"name":"midhun-pm","email":"midhunpm101@gmail.com","login":"midhun-pm","count":32},{"name":"dmartin","email":"dmartin@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":32},{"name":"ccasey","email":"ccasey@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":27},{"name":"Martin Chilvers","email":"martin.chilvers@gmail.com","login":"mchilvers","count":23},{"name":"Tim Diller","email":"timdiller@gmail.com","login":"timdiller","count":22},{"name":"Joris Vankerschaver","email":"jvankerschaver@enthought.com","login":null,"count":22},{"name":"judah","email":"judah@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":22},{"name":"aaronayres35","email":"36972686+aaronayres35","login":"aaronayres35","count":21},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":19},{"name":"James Johnson","email":"jjohnson@enthought.com","login":"jjenthought","count":18},{"name":"John Tyree","email":"johntyree@gmail.com","login":"johntyree","count":17},{"name":"jwheeler","email":"jwheeler@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":17},{"name":"Shoeb Mohammed","email":"shoeb-github","login":"shoeb-github","count":16},{"name":"Joris Vankerschaver","email":"joris.vankerschaver@gmail.com","login":"jvkersch","count":15},{"name":"warren.weckesser","email":"warren.weckesser@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":14},{"name":"epatters","email":"epatters@enthought.com","login":null,"count":13},{"name":"Jean-Mathieu Deschenes","email":"jean-mathieu.deschenes@cae.com","login":null,"count":12},{"name":"Ieva","email":"ievacerny","login":"ievacerny","count":12},{"name":"Poruri Sai Rahul","email":"rahul.poruri@gmail.com","login":"rahulporuri","count":12},{"name":"Simon Jagoe","email":"simon@simonjagoe.com","login":"sjagoe","count":11},{"name":"Jonathan Rocher","email":"jrocher@enthought.com","login":null,"count":10},{"name":"ferdonline","email":"ferdonline@gmail.com","login":"ferdonline","count":10},{"name":"Stefano Borini","email":"sborini@enthought.com","login":"stefanoborini","count":10},{"name":"Didrik Pinte","email":"dpinte@enthought.com","login":"dpinte","count":10},{"name":"GaelVaroquaux","email":"GaelVaroquaux@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":9},{"name":"Jim Corson","email":"jcorson@enthought.com","login":"JCorson","count":8},{"name":"Steven Kern","email":"skern@enthought.com","login":"stevenjkern","count":8},{"name":"martin","email":"martin@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":7},{"name":"ascopatz","email":"ascopatz@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":7},{"name":"Simon Jagoe","email":"sjagoe@enthought.com","login":null,"count":6},{"name":"oliphant","email":"oliphant@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":6},{"name":"rlratzel","email":"rlratzel@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":6},{"name":"Pankaj Pandey","email":"pankaj@enthought.com","login":null,"count":6},{"name":"martinRenou","email":"martin.renou@isae.fr","login":"martinRenou","count":6},{"name":"John Wiggins","email":"jwiggins@enthought.com","login":"jwiggins","count":6},{"name":"jwiggins","email":"jwiggins@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":5},{"name":"Matt","email":"mhancock743@gmail.com","login":"notmatthancock","count":5},{"name":"Pradyun","email":"pradyunsg@gmail.com","login":"pradyunsg","count":5},{"name":"cwebster","email":"cwebster@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":4},{"name":"jmarch","email":"jmarch@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":4},{"name":"Kevin Duff","email":"kevinkelduff@gmail.com","login":"k2bd","count":4},{"name":"Anthony Scopatz","email":"scopatz@gmail.com","login":"scopatz","count":3},{"name":"Jonathan Rocher","email":"jrocher@kbibiopharma.com","login":"jonathanrocher","count":3},{"name":"Kelsey Jordahl","email":"kjordahl@enthought.com","login":null,"count":3},{"name":"phil","email":"phil@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":3},{"name":"prabhu","email":"prabhu@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":3},{"name":"Rob McMullen","email":"feedback@playermissile.com","login":"robmcmullen","count":3},{"name":"noraderam","email":"nora.deram@gmail.com","login":"noraderam","count":3},{"name":"Matt Reay","email":"mreay@enthought.com","login":"tmreay","count":3},{"name":"Satrajit Ghosh","email":"satra@mit.edu","login":"satra","count":2},{"name":"Srinath Kailasa","email":"srinathkailasa@gmail.com","login":"skailasa","count":2},{"name":"homosapien-lcy","email":"102019577+homosapien-lcy","login":"homosapien-lcy","count":2},{"name":"gvaroquaux","email":"gvaroquaux@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":2},{"name":"epatterson","email":"epatterson@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":2},{"name":"bryanv","email":"bryanv@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":2},{"name":"Jean-Mathieu Deschenes","email":"deschenes.j.m@gmail.com","login":"jdeschenes","count":2},{"name":"Chris Colbert","email":"sccolbert@gmail.com","login":"sccolbert","count":2},{"name":"Charles Whittington","email":"CharlesWhitt@gmail.com","login":"HalfWhitt","count":2},{"name":"Warren Weckesser","email":"warren.weckesser@enthought.com","login":"WarrenWeckesser","count":1},{"name":"Ulzii","email":"j2i2t2u2@gmail.com","login":"ulziibay","count":1},{"name":"Tuomas Airaksinen","email":"tuomas.airaksinen@gmail.com","login":"tuomas2","count":1},{"name":"Tony S Yu","email":"tsyu80@gmail.com","login":"tonysyu","count":1},{"name":"Takafumi Arakaki","email":"aka.tkf@gmail.com","login":"tkf","count":1},{"name":"Rustam Safin","email":"rustiksnegovik@gmail.com","login":"Snegovikufa","count":1},{"name":"Robert Haschke","email":"rhaschke","login":"rhaschke","count":1},{"name":"Prabhu Ramachandran","email":"prabhu@enthought.com","login":"prabhuramachandran","count":1},{"name":"Jonathan Waltman","email":"jonathan.waltman@gmail.com","login":"JonWaltman","count":1},{"name":"Hugo van Kemenade","email":"hugovk","login":"hugovk","count":1},{"name":"Guillaume Garcia","email":"66832525+YomGarcia","login":"YomGarcia","count":1},{"name":"Franklin Ventura","email":"venturafranklin@gmail.com","login":"VenturaFranklin","count":1},{"name":"Eric Prestat","email":"eric.prestat@gmail.com","login":"ericpre","count":1},{"name":"Caio Agiani","email":"agianicaio@gmail.com","login":"caioagiani","count":1},{"name":"Alexandre Chabot-Leclerc","email":"achabotl","login":"achabotl","count":1},{"name":"0xflotus","email":"0xflotus@gmail.com","login":"0xflotus","count":1},{"name":"K.-Michael Aye","email":"kmichael.aye@gmail.com","login":"michaelaye","count":1},{"name":"Kelsey Jordahl","email":"kjordahl@alum.mit.edu","login":"kjordahl","count":1},{"name":"Matt Smarte","email":"mdsmarte@gmail.com","login":"mdsmarte","count":1},{"name":"Maxime Costalonga","email":"maxime.costalonga@gmail.com","login":"xamcost","count":1},{"name":"Peter Zahemszky","email":"63169891+peterzahemszky","login":"peterzahemszky","count":1},{"name":"Pietro Berkes","email":"pietro.berkes@googlemail.com","login":"pberkes","count":1},{"name":"zed","email":"arn.zart+github@gmail.com","login":null,"count":1},{"name":"kriehl","email":"kriehl@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":1},{"name":"kammeyer","email":"kammeyer@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":1},{"name":"eric","email":"eric@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":1},{"name":"chigozienri","email":"cnri@enthought.com","login":null,"count":1},{"name":"builder","email":"builder@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":1},{"name":"bryancole","email":"bryancole@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":1},{"name":"Swarts","email":"Swarts@651a555e-23ca-0310-84fe-ca9f7c59d2ea","login":null,"count":1},{"name":"Jonathan March","email":"jmarch@enthought.com","login":null,"count":1},{"name":"John Wiggins","email":"jwiggins@Boysenberry.enthought","login":null,"count":1}],"past_year_committers":[{"name":"Mark Dickinson","email":"mdickinson@enthought.com","login":"mdickinson","count":8},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":5},{"name":"Ioannis Tziakos","email":"itziakos@gmail.com","login":"itziakos","count":2},{"name":"Charles Whittington","email":"CharlesWhitt@gmail.com","login":"HalfWhitt","count":2},{"name":"Guillaume Garcia","email":"66832525+YomGarcia","login":"YomGarcia","count":1}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/enthought%2Ftraits/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-05-13T00:00:10.629Z","repositories_count":6233266,"commits_count":894038466,"contributors_count":34887294,"owners_count":1152155,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues":{"table":{"full_name":"enthought/traits","html_url":"https://github.com/enthought/traits","last_synced_at":"2026-04-18T21:02:18.791Z","status":"active","issues_count":73,"pull_requests_count":207,"avg_time_to_close_issue":17618650.975,"avg_time_to_close_pull_request":837094.0702702702,"issues_closed_count":40,"pull_requests_closed_count":185,"pull_request_authors_count":11,"issue_authors_count":24,"avg_comments_per_issue":1.6712328767123288,"avg_comments_per_pull_request":1.2173913043478262,"merged_pull_requests_count":164,"bot_issues_count":0,"bot_pull_requests_count":49,"past_year_issues_count":3,"past_year_pull_requests_count":26,"past_year_avg_time_to_close_issue":2977.0,"past_year_avg_time_to_close_pull_request":1141401.5294117648,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":17,"past_year_pull_request_authors_count":5,"past_year_issue_authors_count":2,"past_year_avg_comments_per_issue":2.0,"past_year_avg_comments_per_pull_request":0.5384615384615384,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":13,"past_year_merged_pull_requests_count":13,"created_at":"2023-05-15T01:46:26.221Z","updated_at":"2026-04-18T21:02:18.791Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/enthought%2Ftraits","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/enthought%2Ftraits/issues","issue_labels_count":{"table":{"type: bug":16,"component: core":9,"component: documentation":7,"type: enhancement":6,"type: cleanup":5,"component: typing stubs":5,"component: test suite":5,"component: build":4,"type: discussion":2,"type: refactor":2,"easy":2,"type: performance":1,"resolution: duplicate":1,"component: trait-documenter":1,"priority: low":1,"resolution: third party":1,"good first issue":1}},"pull_request_labels_count":{"table":{"dependencies":49,"github_actions":17,"porting: needs backport to 6.4":6,"type: cleanup":4,"component: documentation":3,"porting: needs backport to 7.0":3,"porting: backported to 7.0":3,"type: enhancement":1,"component: core":1}},"issue_author_associations_count":{"table":{"MEMBER":52,"NONE":18,"CONTRIBUTOR":3}},"pull_request_author_associations_count":{"table":{"MEMBER":147,"CONTRIBUTOR":55,"NONE":5}},"issue_authors":{"table":{"mdickinson":37,"corranwebster":8,"rahulporuri":5,"capn-freako":2,"felixkol":2,"YomGarcia":1,"Tony1321969":1,"esarradj":1,"jwodder":1,"opoplawski":1,"jwiggins":1,"achabotl":1,"nicolasap-dm":1,"dvzrv":1,"Supianti0115":1,"artpelling":1,"mpenning":1,"k2bd":1,"Corwinpro":1,"ptmcg":1,"TheChymera":1,"mdsmarte":1,"homosapien-lcy":1,"astraw":1}},"pull_request_authors":{"table":{"mdickinson":138,"dependabot[bot]":49,"corranwebster":4,"rahulporuri":3,"homosapien-lcy":2,"itziakos":2,"capn-freako":2,"YomGarcia":2,"HalfWhitt":2,"mdsmarte":2,"k2bd":1}},"host":{"table":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-05-13T00:00:11.310Z","repositories_count":14585136,"issues_count":34293036,"pull_requests_count":112205920,"authors_count":11260573,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"}},"past_year_issue_labels_count":{"table":{"type: bug":2,"component: documentation":1}},"past_year_pull_request_labels_count":{"table":{"dependencies":11,"github_actions":11}},"past_year_issue_author_associations_count":{"table":{"MEMBER":2,"NONE":1}},"past_year_pull_request_author_associations_count":{"table":{"CONTRIBUTOR":14,"MEMBER":9,"NONE":1}},"past_year_issue_authors":{"table":{"mdickinson":2,"artpelling":1}},"past_year_pull_request_authors":{"table":{"dependabot[bot]":11,"mdickinson":8,"HalfWhitt":2,"YomGarcia":2,"itziakos":1}},"maintainers":[{"table":{"login":"mdickinson","count":175,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/mdickinson"}},{"table":{"login":"corranwebster","count":12,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/corranwebster"}},{"table":{"login":"rahulporuri","count":8,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/rahulporuri"}},{"table":{"login":"itziakos","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/itziakos"}},{"table":{"login":"jwiggins","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/jwiggins"}},{"table":{"login":"achabotl","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/achabotl"}}],"active_maintainers":[{"table":{"login":"mdickinson","count":10,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/mdickinson"}},{"table":{"login":"itziakos","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/itziakos"}}]}},"events":{"total":{"ReleaseEvent":4,"DeleteEvent":38,"PullRequestEvent":74,"ForkEvent":2,"IssuesEvent":33,"WatchEvent":21,"IssueCommentEvent":54,"PushEvent":68,"PullRequestReviewCommentEvent":5,"GollumEvent":1,"PullRequestReviewEvent":15,"CreateEvent":40},"last_year":{"ReleaseEvent":1,"DeleteEvent":14,"PullRequestEvent":27,"ForkEvent":2,"IssuesEvent":11,"WatchEvent":6,"IssueCommentEvent":12,"PushEvent":22,"PullRequestReviewCommentEvent":1,"PullRequestReviewEvent":4,"CreateEvent":13}},"keywords":["attributes","dataclasses","gui","observer-pattern","python","runtime-typechecking","types"],"dependencies":[{"ecosystem":"actions","filepath":".github/workflows/release-to-pypi.yml","sha":null,"kind":"manifest","created_at":"2023-01-13T11:30:19.913Z","updated_at":"2023-01-13T11:30:19.913Z","repository_link":"https://github.com/enthought/traits/blob/main/.github/workflows/release-to-pypi.yml","dependencies":[{"id":6875621466,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":6875621467,"package_name":"docker/setup-qemu-action","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":6875621468,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":6875621469,"package_name":"pypa/cibuildwheel","ecosystem":"actions","requirements":"v2.9.0","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/run-core-traits-tests.yml","sha":null,"kind":"manifest","created_at":"2023-01-13T11:30:20.259Z","updated_at":"2023-01-13T11:30:20.259Z","repository_link":"https://github.com/enthought/traits/blob/main/.github/workflows/run-core-traits-tests.yml","dependencies":[{"id":6875621475,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":6875621476,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/run-style-checks.yml","sha":null,"kind":"manifest","created_at":"2023-01-13T11:30:20.726Z","updated_at":"2023-01-13T11:30:20.726Z","repository_link":"https://github.com/enthought/traits/blob/main/.github/workflows/run-style-checks.yml","dependencies":[{"id":6875621527,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":6875621528,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/run-traits-tests.yml","sha":null,"kind":"manifest","created_at":"2023-01-13T11:30:20.925Z","updated_at":"2023-01-13T11:30:20.925Z","repository_link":"https://github.com/enthought/traits/blob/main/.github/workflows/run-traits-tests.yml","dependencies":[{"id":6875621538,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":6875621539,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/test-documentation-build.yml","sha":null,"kind":"manifest","created_at":"2023-01-13T11:30:21.101Z","updated_at":"2023-01-13T11:30:21.101Z","repository_link":"https://github.com/enthought/traits/blob/main/.github/workflows/test-documentation-build.yml","dependencies":[{"id":6875621550,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":6875621551,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/test-from-pypi.yml","sha":null,"kind":"manifest","created_at":"2023-01-13T11:30:21.410Z","updated_at":"2023-01-13T11:30:21.410Z","repository_link":"https://github.com/enthought/traits/blob/main/.github/workflows/test-from-pypi.yml","dependencies":[{"id":6875621554,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":6875621555,"package_name":"voxmedia/github-action-slack-notify-build","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"pypi","filepath":"setup.py","sha":null,"kind":"manifest","created_at":"2023-01-13T11:30:21.600Z","updated_at":"2023-01-13T11:30:21.600Z","repository_link":"https://github.com/enthought/traits/blob/main/setup.py","dependencies":[{"id":6875621601,"package_name":"We","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6875621602,"package_name":"support","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":6875621603,"package_name":"typing-extensions","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"pyproject.toml","sha":null,"kind":"manifest","created_at":"2023-12-07T14:45:07.056Z","updated_at":"2023-12-07T14:45:07.056Z","repository_link":"https://github.com/enthought/traits/blob/main/pyproject.toml","dependencies":[]}],"score":11.233819842735947,"created_at":"2026-05-04T06:42:32.622Z","updated_at":"2026-05-13T11:07:05.916Z","avatar_url":"https://github.com/enthought.png","language":"Python","codemeta":null,"publiccode":null,"project_url":"https://summary.ecosyste.ms/api/v1/projects/371493","html_url":"https://summary.ecosyste.ms/projects/371493"}