{"id":34051182,"url":"https://github.com/proteanhq/protean","last_synced_at":"2026-04-11T04:03:19.646Z","repository":{"id":43351558,"uuid":"141027053","full_name":"proteanhq/protean","owner":"proteanhq","description":"Pragmatic Framework for Ambitious Applications","archived":false,"fork":false,"pushed_at":"2026-04-03T07:08:05.000Z","size":16525,"stargazers_count":37,"open_issues_count":37,"forks_count":34,"subscribers_count":8,"default_branch":"main","last_synced_at":"2026-04-03T08:59:34.230Z","etag":null,"topics":["cqrs","domain-driven-design","framework","ports-and-adapters","python"],"latest_commit_sha":null,"homepage":"https://docs.proteanhq.com/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/proteanhq.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.rst","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":"2018-07-15T12:51:10.000Z","updated_at":"2026-04-03T06:55:04.000Z","dependencies_parsed_at":"2025-12-14T01:10:16.778Z","dependency_job_id":null,"html_url":"https://github.com/proteanhq/protean","commit_stats":{"total_commits":849,"total_committers":10,"mean_commits":84.9,"dds":"0.22025912838633688","last_synced_commit":"60544e7a24757b7968c229343213807b0fcf6bc4"},"previous_names":[],"tags_count":48,"template":false,"template_full_name":null,"purl":"pkg:github/proteanhq/protean","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/proteanhq%2Fprotean","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/proteanhq%2Fprotean/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/proteanhq%2Fprotean/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/proteanhq%2Fprotean/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/proteanhq","download_url":"https://codeload.github.com/proteanhq/protean/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/proteanhq%2Fprotean/sbom","scorecard":{"id":747158,"data":{"date":"2025-08-18","repo":{"name":"github.com/proteanhq/protean","commit":"9c429118730abe27a9b2688868adba0005f7abc1"},"scorecard":{"version":"v5.2.1-41-g40576783","commit":"40576783fda6698350fcbbeaea760ff827433034"},"score":5.1,"checks":[{"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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#packaging"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: topLevel 'contents' permission set to 'write': .github/workflows/ci.yml:10","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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#token-permissions"}},{"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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 0/11 approved changesets -- score normalized to 0","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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#code-review"}},{"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/40576783fda6698350fcbbeaea760ff827433034/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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#binary-artifacts"}},{"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/ci.yml:66: update your workflow using https://app.stepsecurity.io/secureworkflow/proteanhq/protean/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:78: update your workflow using https://app.stepsecurity.io/secureworkflow/proteanhq/protean/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:82: update your workflow using https://app.stepsecurity.io/secureworkflow/proteanhq/protean/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:86: update your workflow using https://app.stepsecurity.io/secureworkflow/proteanhq/protean/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:125: update your workflow using https://app.stepsecurity.io/secureworkflow/proteanhq/protean/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:135: update your workflow using https://app.stepsecurity.io/secureworkflow/proteanhq/protean/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:142: update your workflow using https://app.stepsecurity.io/secureworkflow/proteanhq/protean/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:148: update your workflow using https://app.stepsecurity.io/secureworkflow/proteanhq/protean/ci.yml/main?enable=pin","Warn: downloadThenRun not pinned by hash: .github/workflows/ci.yml:106","Warn: downloadThenRun not pinned by hash: .github/workflows/ci.yml:158","Info:   0 out of   6 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned","Info:   0 out of   2 downloadThenRun 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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#pinned-dependencies"}},{"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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: BSD 3-Clause \"New\" or \"Revised\" License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/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/40576783fda6698350fcbbeaea760ff827433034/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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#signed-releases"}},{"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/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":6,"reason":"4 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-3xw7-v6cj-5q8h","Warn: Project is vulnerable to: GHSA-p7q8-grrj-3m8w","Warn: Project is vulnerable to: GHSA-wj6h-64fc-37mp","Warn: Project is vulnerable to: GHSA-pq67-6m6q-mj2v"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: all commits (25) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-22T19:11:22.614Z","repository_id":43351558,"created_at":"2025-08-22T19:11:22.614Z","updated_at":"2025-08-22T19:11:22.614Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31668050,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T17:19:37.612Z","status":"online","status_checked_at":"2026-04-11T02:00:05.776Z","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":["cqrs","domain-driven-design","framework","ports-and-adapters","python"],"created_at":"2025-12-14T01:03:37.119Z","updated_at":"2026-04-11T04:03:19.621Z","avatar_url":"https://github.com/proteanhq.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Protean\n\n**Protean** is an opinionated and pragmatic framework for building event-driven applications using the CQRS pattern.\n\n[![Python](https://img.shields.io/pypi/pyversions/protean?label=Python)](https://github.com/proteanhq/protean/)\n[![Release](https://img.shields.io/pypi/v/protean?label=Release\u0026style=flat-square)](https://pypi.org/project/protean/)\n[![Build Status](https://github.com/proteanhq/protean/actions/workflows/ci.yml/badge.svg)](https://github.com/proteanhq/protean/actions/workflows/ci.yml)\n[![Coverage](https://codecov.io/gh/proteanhq/protean/graph/badge.svg?token=0sFuFdLBOx)](https://codecov.io/gh/proteanhq/protean)\n[![Tests](https://img.shields.io/badge/tests-7%2C674-brightgreen)](https://github.com/proteanhq/protean/actions/workflows/ci.yml)\n[![Maintainability](https://img.shields.io/badge/maintainability-A-brightgreen)](https://docs.proteanhq.com/community/quality/)\n\n## Installation\n\nProtean is available on PyPI:\n\n```console\n$ pip install protean\n```\n\nProtean officially supports Python 3.11+.\n\n## Quick Start\n\n```python\nfrom protean import Domain\nfrom protean.fields import String, Text\n\ndomain = Domain(name=\"Publishing\")\n\n@domain.aggregate\nclass Post:\n    title: String(required=True, max_length=1000)\n    slug: String(required=True, max_length=1024)\n    content: Text(required=True)\n\ndomain.init()\nwith domain.domain_context():\n    post = Post(\n        title=\"Hello World\",\n        slug=\"hello-world\",\n        content=\"Lorem Ipsum ...\"\n    )\n\n    domain.repository_for(Post).add(post)\n```\n\n## Documentation\n\nOnline docs are available at [https://docs.proteanhq.com](https://docs.proteanhq.com).\n\n## Quality\n\nProtean is tested against 5 backing services across 4 Python versions on every commit.\n\n| Metric | Value |\n|---|---|\n| Tests | 7,674 (3.0:1 test-to-code ratio) |\n| Linting | Zero violations (Ruff) |\n| Complexity | Avg 3.38 cyclomatic (A grade) |\n| Maintainability | A rank (95% of files) |\n| CI Matrix | Python 3.11-3.14 x PostgreSQL, Redis, Elasticsearch, MessageDB, MSSQL |\n\nSee the full [Quality Report](https://docs.proteanhq.com/community/quality/) for details.\n\n## Contributing\n\n\u003e **Note**: Protean framework is not associated or related to [Protean eGov Technologies](https://www.proteantech.in/) or [Code for Gov Tech](https://codeforgovtech.in/) initiatives.\n\n1. Check for open issues or open a fresh issue to start a discussion\n    around a feature idea or a bug.\n2. Fork [the repository](https://github.com/proteanhq/protean) on\n    GitHub, branch off `main` and start making your changes.\n3. Write a test which shows that the bug was fixed or that the feature\n    works as expected.\n4. Send a pull request and bug the maintainer until it gets merged and\n    published.\n\nFor more information, please check out the\n[community](https://docs.proteanhq.com/community/) section.\n\n## License\n\nBSD 3-Clause License\n\nCopyright (c) 2018-2026, Subhash Bhushan C.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\nlist of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\nthis list of conditions and the following disclaimer in the documentation\nand/or other materials provided with the distribution.\n\n* Neither the name of the copyright holder nor the names of its contributors\nmay be used to endorse or promote products derived from this software\nwithout specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fproteanhq%2Fprotean","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fproteanhq%2Fprotean","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fproteanhq%2Fprotean/lists"}