{"id":33179534,"url":"https://github.com/inverno-io/inverno-core","last_synced_at":"2026-01-22T13:16:12.414Z","repository":{"id":53849965,"uuid":"274405440","full_name":"inverno-io/inverno-core","owner":"inverno-io","description":"Inverno Framework core project","archived":false,"fork":false,"pushed_at":"2025-02-27T15:24:34.000Z","size":1059,"stargazers_count":94,"open_issues_count":0,"forks_count":3,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-07-31T01:42:07.419Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://inverno.io/","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/inverno-io.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":["inverno-io"]}},"created_at":"2020-06-23T12:54:45.000Z","updated_at":"2025-07-12T09:06:39.000Z","dependencies_parsed_at":"2024-02-22T19:46:07.456Z","dependency_job_id":"405cae90-2c94-4966-a5ac-f42fa30f63cd","html_url":"https://github.com/inverno-io/inverno-core","commit_stats":null,"previous_names":["winterframework-io/winter-root","winterframework-io/winter"],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/inverno-io/inverno-core","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inverno-io%2Finverno-core","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inverno-io%2Finverno-core/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inverno-io%2Finverno-core/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inverno-io%2Finverno-core/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/inverno-io","download_url":"https://codeload.github.com/inverno-io/inverno-core/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inverno-io%2Finverno-core/sbom","scorecard":{"id":492181,"data":{"date":"2025-08-11","repo":{"name":"github.com/inverno-io/inverno-core","commit":"200e58e051afa11a5d1ed54bcedb89ba2c7bd0f0"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.8,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/30 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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/maven.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":"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":"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":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"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/maven.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/inverno-io/inverno-core/maven.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/maven.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/inverno-io/inverno-core/maven.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/maven.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/inverno-io/inverno-core/maven.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/maven.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/inverno-io/inverno-core/maven.yml/master?enable=pin","Info:   0 out of   4 GitHub-owned GitHubAction 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":"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":"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":"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":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/maven.yml:27"],"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":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"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"}}]},"last_synced_at":"2025-08-19T19:28:04.348Z","repository_id":53849965,"created_at":"2025-08-19T19:28:04.348Z","updated_at":"2025-08-19T19:28:04.348Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28663778,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T01:17:37.254Z","status":"online","status_checked_at":"2026-01-22T02:00:07.137Z","response_time":144,"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":[],"created_at":"2025-11-16T03:00:36.837Z","updated_at":"2026-01-22T13:16:12.410Z","avatar_url":"https://github.com/inverno-io.png","language":"Java","funding_links":["https://github.com/sponsors/inverno-io"],"categories":["IoC"],"sub_categories":[],"readme":"[inverno-io]: https://www.inverno.io\n\n[inverno-core-root-doc]: https://github.com/inverno-io/inverno-core/tree/master/doc/reference-guide.md\n\n[jdk]: https://jdk.java.net/\n[graal-vm]: https://www.graalvm.org/\n[maven]: https://maven.apache.org/\n[apache-license]: https://www.apache.org/licenses/LICENSE-2.0\n\n# Inverno Core\n\n[![Maven Central](https://img.shields.io/maven-central/v/io.inverno/inverno-core-root)](https://central.sonatype.com/search?namespace=io.inverno)\n[![CI/CD](https://github.com/inverno-io/inverno-core/actions/workflows/maven.yml/badge.svg)](https://github.com/inverno-io/inverno-core/actions/workflows/maven.yml)\n[![GitHub License](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg?style=flat)](http://www.apache.org/licenses/LICENSE-2.0)\n\nThe [Inverno core framework][inverno-io] project provides an Inversion of Control and Dependency Injection framework for the Java™ platform. It has the particularity of not using reflection for object instantiation and dependency injection, everything being verified and done statically during compilation.\n\nThis approach has many advantages over other IoC/DI solutions starting with the static checking of the bean dependency graph at compile time which guarantees that a program is correct and will run properly. Debugging is also made easier since you can actually access the source code where beans are instantiated and wired together. Finally, the startup time of a program is greatly reduced since everything is known in advance, such program can even be further optimized with ahead of time compilation solutions like [GraalVM][graal-vm]...\n\nThe framework has been designed to build highly modular applications using standard Java modules. An Inverno module supports encapsulation, it only exposes the beans that need to be exposed, and it clearly specifies the dependencies it requires to operate properly. This greatly improves program stability over time and simplifies the use of a module. Since an Inverno module has a very small runtime footprint it can also be easily integrated in any application.\n\n## Creating an Inverno module\n\nAn **Inverno  module** is a regular Java module, that requires `io.inverno.core` modules, and which is annotated with `@Module` annotation. The following *hello* module is a simple Inverno module:\n\n```java\n@io.inverno.core.annotation.Module\nmodule io.inverno.example.hello {\n    requires io.inverno.core;\n}\n```\n\nAn **Inverno bean** can be a regular Java class annotated with `@Bean` annotation. A bean represents the basic building block of an application which is typically composed of multiple interconnected beans instances. The following `HelloService` bean can be used to create a basic application:\n\n```java\npackage io.inverno.example.hello;\n\nimport io.inverno.core.annotation.Bean;\n\n@Bean\npublic class HelloService {\n\n    public HelloService() {}\n\n    public void sayHello(String name) {\n        System.out.println(\"Hello \" + name + \"!!!\");\n    }\n}\n```\n\nAt compile time, the Inverno framework will generate a module class named after the module, `io.inverno.example.hello.Hello` in our example. This class contains all the logic required to instantiate and wire the application beans at runtime. It can be used in a Java program to access and use the `HelloService`. This program can be in the same Java module or in any other Java module which requires module `io.inverno.example.hello`:\n\n```java\npackage io.inverno.example.hello;\n\nimport io.inverno.core.v1.Application;\n\npublic class Main {\n    \n    public static void main(String[] args) {\n        Hello hello = Application.with(new Hello.Builder()).run();\n\n        hello.helloService().sayHello(args[0]);\n    }\n}\n```\n\n### Building and running with Maven\n\nThe development of an Inverno module is pretty easy using [Apache Maven][maven], you simply need to create a standard Java project that inherits from `io.inverno.dist:inverno-parent` project and declare a dependency to `io.inverno:inverno-core`:\n\n```xml\n\u003c!-- pom.xml --\u003e\n\u003cproject xmlns=\"http://maven.apache.org/POM/4.0.0\"\n    xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n    xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\"\u003e\n    \u003cmodelVersion\u003e4.0.0\u003c/modelVersion\u003e\n    \u003cparent\u003e\n        \u003cgroupId\u003eio.inverno.dist\u003c/groupId\u003e\n        \u003cartifactId\u003einverno-parent\u003c/artifactId\u003e\n        \u003cversion\u003e${VERSION_INVERNO_DIST}\u003c/version\u003e\n    \u003c/parent\u003e\n    \u003cgroupId\u003eio.inverno.example\u003c/groupId\u003e\n    \u003cartifactId\u003ehello\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0-SNAPSHOT\u003c/version\u003e\n\n    \u003cdependencies\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003eio.inverno\u003c/groupId\u003e\n            \u003cartifactId\u003einverno-core\u003c/artifactId\u003e\n        \u003c/dependency\u003e\n    \u003c/dependencies\u003e\n\u003c/project\u003e\n```\n\nJava source files for `io.inverno.example.hello` module must be placed in `src/main/java` directory, the module can then be built using Maven:\n\n```plaintext\n$ mvn install\n```\n\nYou can then run the application:\n\n```plaintext\n$ mvn inverno:run -Dinverno.run.arguments=John\n\n[INFO] --- inverno-maven-plugin:${VERSION_INVERNO_TOOLS}:run (default-cli) @ app-hello ---\n[INFO] Running project: io.inverno.example.hello@1.0.0-SNAPSHOT...\nHello John!!!\n\n```\n\n### Building and running with pure Java\n\nYou can also choose to build your Inverno module using pure Java commands. Assuming Inverno framework modules are located under `lib/` directory and Java source files for `io.inverno.example.hello` module are placed in `src/io.inverno.example.hello` directory, you can build the module with the `javac` command:\n\n```plaintext\n$ javac --processor-module-path lib/ --module-path lib/ --module-source-path src/ -d jmods/ --module io.inverno.example.hello \n```\n\nThe application can then be run as follows:\n\n```plaintext\n$ java --module-path lib/:jmods/ --module io.inverno.example.hello/io.inverno.example.hello.Main John\nHello John!!!\n```\n\n### Summary\n\nIn this simple example, we created an Inverno module which exposes one bean and use it to implement logic in an application. As you can imagine a real life application is far more complex than that, composed of many modules providing multiple beans in different ways and wired altogether. The Inverno framework has been designed to create such applications in a simple, elegant and efficient way, please consult the [reference documentation][inverno-core-root-doc] to get the full picture.\n\n## Building Inverno core framework\n\nThe Inverno core framework can be built using Maven and a [JDK][jdk] 15+ with the following command:\n\n```plaintext\n$ mvn install\n```\n\n## License\n\nThe Inverno Framework is released under version 2.0 of the [Apache License][apache-license].\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finverno-io%2Finverno-core","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finverno-io%2Finverno-core","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finverno-io%2Finverno-core/lists"}