{"id":33179309,"url":"https://github.com/alfasoftware/morf","last_synced_at":"2026-05-06T13:01:51.058Z","repository":{"id":38368901,"uuid":"91583905","full_name":"alfasoftware/morf","owner":"alfasoftware","description":"Morf is a library for evolutionary database mechanics","archived":false,"fork":false,"pushed_at":"2025-11-18T22:05:19.000Z","size":5564,"stargazers_count":40,"open_issues_count":38,"forks_count":27,"subscribers_count":21,"default_branch":"main","last_synced_at":"2025-11-18T22:05:51.376Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alfasoftware.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":"2017-05-17T14:12:00.000Z","updated_at":"2025-11-10T10:14:47.000Z","dependencies_parsed_at":"2024-01-22T14:14:47.428Z","dependency_job_id":"47fd5c85-768b-4c9f-9e52-153eb91cd994","html_url":"https://github.com/alfasoftware/morf","commit_stats":null,"previous_names":[],"tags_count":144,"template":false,"template_full_name":null,"purl":"pkg:github/alfasoftware/morf","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alfasoftware%2Fmorf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alfasoftware%2Fmorf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alfasoftware%2Fmorf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alfasoftware%2Fmorf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alfasoftware","download_url":"https://codeload.github.com/alfasoftware/morf/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alfasoftware%2Fmorf/sbom","scorecard":{"id":182953,"data":{"date":"2025-08-11","repo":{"name":"github.com/alfasoftware/morf","commit":"9f2b537830a59807147727b5c411e53a00cfd000"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":6.3,"checks":[{"name":"Code-Review","score":4,"reason":"Found 7/17 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":"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":"Maintained","score":9,"reason":"10 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 9","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"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":"Dangerous-Workflow","score":-1,"reason":"no workflows found","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":"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":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"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":"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":"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":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: all commits (20) 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"}},{"name":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-j288-q9x7-2f5v"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-16T19:12:25.863Z","repository_id":38368901,"created_at":"2025-08-16T19:12:25.863Z","updated_at":"2025-08-16T19:12:25.863Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28784093,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-26T13:55:28.044Z","status":"ssl_error","status_checked_at":"2026-01-26T13:55:26.068Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":"2025-11-16T03:00:36.829Z","updated_at":"2026-01-26T18:09:08.957Z","avatar_url":"https://github.com/alfasoftware.png","language":"Java","funding_links":[],"categories":["数据库中间件"],"sub_categories":[],"readme":"# ![Alfa Morf](https://github.com/alfasoftware/morf/wiki/morf.png)\n\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![Build Status](https://travis-ci.com/alfasoftware/morf.svg?branch=main)](https://app.travis-ci.com/alfasoftware/morf)\n[![Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=org.alfasoftware%3Amorf-parent\u0026metric=alert_status)](https://sonarcloud.io/project/overview?id=org.alfasoftware:morf-parent)\n[![Changelog](https://img.shields.io/badge/-Changelog-grey.svg)](https://github.com/alfasoftware/morf/releases)\n\nMorf is a library for cross-platform evolutionary relational database mechanics, database access and database imaging/cloning.  It has been developed over many years at Alfa and is used to manage all of our RDBMS-backed applications.\n\n## Status\n\nMorf is proven technology and has been used in mission-critical production applications for many years as part of our flagship product.  **However**, as an open source project, it is in an early **pre-alpha** state, as we go through the process of disentangling it from parts of the rest of our stack, tidying up the code for long-term support, and making it easier and more convenient to use in other projects. Until then, consider the API unstable.\n\nWe are maintaining Morf in the open, because we believe this is the right thing to do. Please [get involved](https://github.com/alfasoftware/morf/wiki/Contributing) if you would like to help steer the project.\n\nSee the [Roadmap](https://github.com/alfasoftware/morf/wiki/Roadmap) for more information.\n\n## Getting Started\nDocumentation is somewhat sparse, not least because the APIs are not quite _ready_ to document.  One of the first items on the [roadmap](https://github.com/alfasoftware/morf/wiki/Roadmap) is to agree our new user \"hello world\" user stories, write them up and make sure the necessary APIs are in place to support them.\n\nAs we work on those, we will be expanding the [Start here](https://github.com/alfasoftware/morf/wiki/Start-Here) part of the Wiki.\n\n## Key features\n\n### Pure Java API\n- No XML/JSON/YAML etc\n- Clean and easy to integrate with existing applications\n\n### Evolutionary Database Design\n- Implements bidirectional run-time verification of upgrades against a known target schema.\n- Bootstraps empty databases with no additional coding\n- Manages complex data migration and fixing alongside schema changes\n- Targets multiple database platforms without platform-specific scripting and without sacrificing low level control\n- Cleanly integrates disordered branches\n- Exports SQL upgrade scripts in any SQL dialect for DBA use\n\n### Extensible\n- Easy to add new database platform support\n\n### Cross-platform Snapshots and Cloning\n- Clone or dump a full database, including schema and data\n- Create a dump of a MySQL database as XML, restore to Oracle\n- Copy a live PostgreSQL database directly into in-memory H2\n- Run a JUnit test over an in-memory H2 database using a snapshot from a live Oracle environment\n- Automatically run missing upgrades after restoring from a snapshot\n\n### Database Access API\n- Database access at run-time using the same DSL used in upgrades\n\n## Contributing\nIf you're interested in contributing to the project, please read the [contribution guide](https://github.com/alfasoftware/morf/wiki/Contributing).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falfasoftware%2Fmorf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falfasoftware%2Fmorf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falfasoftware%2Fmorf/lists"}