{"id":14988239,"url":"https://github.com/apache/sling-org-apache-sling-feature","last_synced_at":"2026-02-23T04:32:53.145Z","repository":{"id":38325862,"uuid":"131208938","full_name":"apache/sling-org-apache-sling-feature","owner":"apache","description":"Apache Sling OSGi Feature Model","archived":false,"fork":false,"pushed_at":"2025-08-06T12:33:42.000Z","size":1665,"stargazers_count":13,"open_issues_count":0,"forks_count":12,"subscribers_count":30,"default_branch":"master","last_synced_at":"2025-10-29T00:50:22.470Z","etag":null,"topics":["java","osgi","osgi-feature-model","sling"],"latest_commit_sha":null,"homepage":"https://sling.apache.org/","language":"Java","has_issues":false,"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/apache.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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-04-26T20:47:40.000Z","updated_at":"2025-08-06T12:33:48.000Z","dependencies_parsed_at":"2024-01-04T13:47:09.318Z","dependency_job_id":"c9ad3858-c334-4273-a9e9-8b6aa62adcb2","html_url":"https://github.com/apache/sling-org-apache-sling-feature","commit_stats":{"total_commits":384,"total_committers":20,"mean_commits":19.2,"dds":0.59375,"last_synced_commit":"b9348fe0c4445e9a07aa6e89426c82d2690f55c9"},"previous_names":[],"tags_count":34,"template":false,"template_full_name":null,"purl":"pkg:github/apache/sling-org-apache-sling-feature","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fsling-org-apache-sling-feature","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fsling-org-apache-sling-feature/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fsling-org-apache-sling-feature/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fsling-org-apache-sling-feature/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/apache","download_url":"https://codeload.github.com/apache/sling-org-apache-sling-feature/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fsling-org-apache-sling-feature/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29738079,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-23T02:24:00.660Z","status":"ssl_error","status_checked_at":"2026-02-23T02:22:56.087Z","response_time":90,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["java","osgi","osgi-feature-model","sling"],"created_at":"2024-09-24T14:16:20.805Z","updated_at":"2026-02-23T04:32:53.096Z","avatar_url":"https://github.com/apache.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Apache Sling](https://sling.apache.org/res/logos/sling.png)](https://sling.apache.org)\n\n\u0026#32;[![Build Status](https://ci-builds.apache.org/job/Sling/job/modules/job/sling-org-apache-sling-feature/job/master/badge/icon)](https://ci-builds.apache.org/job/Sling/job/modules/job/sling-org-apache-sling-feature/job/master/)\u0026#32;[![Test Status](https://img.shields.io/jenkins/tests.svg?jobUrl=https://ci-builds.apache.org/job/Sling/job/modules/job/sling-org-apache-sling-feature/job/master/)](https://ci-builds.apache.org/job/Sling/job/modules/job/sling-org-apache-sling-feature/job/master/test/?width=800\u0026height=600)\u0026#32;[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=apache_sling-org-apache-sling-feature\u0026metric=coverage)](https://sonarcloud.io/dashboard?id=apache_sling-org-apache-sling-feature)\u0026#32;[![Sonarcloud Status](https://sonarcloud.io/api/project_badges/measure?project=apache_sling-org-apache-sling-feature\u0026metric=alert_status)](https://sonarcloud.io/dashboard?id=apache_sling-org-apache-sling-feature)\u0026#32;[![JavaDoc](https://www.javadoc.io/badge/org.apache.sling/org.apache.sling.feature.svg)](https://www.javadoc.io/doc/org.apache.sling/org-apache-sling-feature)\u0026#32;[![Maven Central](https://maven-badges.herokuapp.com/maven-central/org.apache.sling/org.apache.sling.feature/badge.svg)](https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.apache.sling%22%20a%3A%22org.apache.sling.feature%22) [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)\n\n# The Sling OSGi Feature Model\n\n# An Introduction to the Sling Feature Model\n\nSee also the [Sling Website Feature Model documentation](http://sling.apache.org/tags/featuremodel.html) which includes tutorials and examples.\n\nOSGi is a platform capable of running large applications for a variety of purposes, including rich client applications, server-side systems and cloud and container based architectures. Typical OSGi applications are assembled out of bundles and configured through both, OSGi configurations and framework properties (though these are less frequently used than OSGi configurations). Depending on the nature of the application, there might be additional artifact types involved.\n\nAs these applications are generally based on many bundles, describing each bundle individually in the application definition becomes unwieldy once the number of bundles reaches a certain level. Additionally, OSGi has no mechanism to describe other elements of the application definition, such as configuration or custom artifacts.\n\nWhile bundles already provide a good way to define rather small, coherent modules, there is often a need to distribute or provision a set of such bundles together with some configuration. Or if you want to build a set of applications (for example microservices) which share certain parts (like a foundation) the need for a higher level building block arises.\n\nThe Sling OSGi Feature Model introduces such a higher level building block to describe OSGi applications or parts of it that encapsulates the details of the various components that the feature is built up from. It allows the description of an entire OSGi-based application based on reusable components and includes everything related to this application, including bundles, configuration, framework properties, capabilities, requirements and custom artifacts.\n\nThe model is a general purpose feature model and in no way tied to Apache Sling.\n\n## Features\n\nIn a nutshell, a feature is the central entity for the Feature Model. A feature is described through a JSON object and can contain:\n\n* Metadata like a unique identifier, description etc.\n* OSGi bundles\n* OSGi configurations\n* OSGi Framework properties\n* Extensions - a plugin mechanism to add additional information to the feature\n\nRead the [documentation about features](docs/features.md)\n\n## Feature Extensions\n\nThe Feature Model is extensible, meaning that it can be augmented with custom content in a number of ways. Some extensions are supported out of the box. Other extensions are available through additional modules.\n\nRead the [documentation about available extensions](docs/extensions.md)\n\n## Feature Archives\n\nFeature archives allow to distribute a feature together with all its referenced binaries.\n\nRead the [documentation about feature archives](docs/feature-archives.md)\n\n## Feature Reference Files\n\nReference files can be used to mention a collection of feature files in a single file.\n\nRead the [documentation about feature reference files](docs/feature-ref-files.md)\n\n## Feature Aggregation\n\nIn order to create higher level features or a complete application, usually several features are aggregated into a single final feature.\n\nRead the [documentation about feature aggregation](docs/aggregation.md)\n\n# Managing Features\n\nA Feature Launcher can be used to launch features into a running process with an OSGi Framework.\nThe launcher is typically fed with a number of feature files that should be launched together.\nOverrides for variables defined in the feature models can be provided on the launcher commandline.\n\nTooling exists to analyze and validate features, and to aggregate and merge multiple features into a single\nfeature, which can be used to create higher level features from a combination of lower-level ones. Most of\nthe tooling is accessible through the [slingfeature-maven-plugin](https://github.com/apache/sling-slingfeature-maven-plugin).\n\nThe following diagrams show a typical workflow when working with feature files:\n\n\u003cimg src=\"docs/diagrams/Develop.jpg\" width=\"700\"/\u003e\n\nFeatures are authored as JSON Feature Files.\nThe slingfeature-maven-plugin provides analyzers and aggregators that check features and can combine them into larger features. The maven plugin can also be used to publish features to a Maven Repository.\n\n\u003cimg src=\"docs/diagrams/RunningSystem.jpg\" width=\"700\"/\u003e\n\nTo create a running system from a number of feature files, features are selected from a Maven Repository,\nthey are validated for completeness and optionally additional features are pulled in through the OSGi Resolver\n(not yet implemented). A final system feature has no unresolved dependencies. It is passed to the Feature Launcher\nalong with optional additional features the provide functionality on top of what is defined in the system feature.\nThe Feature Launcher creates a running process containing an OSGi Framework provisioned with the feature's contents.\n\n# Launching\n\nA launcher for feature models is available in the [Apache Sling Feature Launcher](https://github.com/apache/sling-org-apache-sling-feature-launcher) project.\n\n# Tooling\n\nThe primary tooling around the feature model is provided through Maven by the [Sling Feature Maven Plugin](https://github.com/apache/sling-slingfeature-maven-plugin)\n\nSee the readme of the plugin for more information.  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapache%2Fsling-org-apache-sling-feature","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fapache%2Fsling-org-apache-sling-feature","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapache%2Fsling-org-apache-sling-feature/lists"}