{"id":44014370,"url":"https://github.com/metaborg/coronium","last_synced_at":"2026-02-07T15:34:11.972Z","repository":{"id":138665905,"uuid":"181847568","full_name":"metaborg/coronium","owner":"metaborg","description":"Gradle plugin for building, developing, and publishing Eclipse plugins","archived":false,"fork":false,"pushed_at":"2024-08-01T14:01:32.000Z","size":486,"stargazers_count":4,"open_issues_count":1,"forks_count":0,"subscribers_count":11,"default_branch":"master","last_synced_at":"2024-08-02T13:09:32.272Z","etag":null,"topics":["eclipse","eclipse-features","eclipse-plugin","eclipse-plugins","eclipse-repositories","gradle","gradle-metadata","gradle-plugin","gradle-plugins"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","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/metaborg.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"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}},"created_at":"2019-04-17T08:17:59.000Z","updated_at":"2024-08-02T13:09:32.273Z","dependencies_parsed_at":"2024-02-08T11:28:50.370Z","dependency_job_id":"df30a462-e783-4b10-a827-f73fe77c41ba","html_url":"https://github.com/metaborg/coronium","commit_stats":null,"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"purl":"pkg:github/metaborg/coronium","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metaborg%2Fcoronium","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metaborg%2Fcoronium/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metaborg%2Fcoronium/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metaborg%2Fcoronium/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/metaborg","download_url":"https://codeload.github.com/metaborg/coronium/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metaborg%2Fcoronium/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29198178,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-07T14:35:27.868Z","status":"ssl_error","status_checked_at":"2026-02-07T14:25:51.081Z","response_time":63,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":["eclipse","eclipse-features","eclipse-plugin","eclipse-plugins","eclipse-repositories","gradle","gradle-metadata","gradle-plugin","gradle-plugins"],"created_at":"2026-02-07T15:34:11.133Z","updated_at":"2026-02-07T15:34:11.965Z","avatar_url":"https://github.com/metaborg.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Coronium\n[![Build][github-build-badge]][github-build]\n[![License][license-badge]][license]\n[![GitHub Release][github-release-badge]][github-release]\n\nCoronium is a Gradle plugin for building, developing, and publishing Eclipse plugins.\n\n\n| Artifact                | Latest Release                                 |\n|-------------------------|------------------------------------------------|\n| `org.metaborg.coronium` | [![org.metaborg.coronium][maven-badge]][maven] |\n\n\n\n## Status\n\n### Supported\n\n* __Eclipse plugins__: currently, Coronium supports building, developing (i.e, running an Eclipse instance with your plugin and its dependencies included), and publishing of Eclipse plugins to Maven repositories with Gradle metadata.\n\n* __Eclipse features__: composite Eclipse features by creating dependencies to plugins and other features.\n\n* __Eclipse repositories__: build Eclipse repositories from features.\n\n* __Generate Eclipse installations__: generate Eclipse installations from repositories.\n\n### Unsupported\n\n* __P2 repositories__: not supported, and are unlikely to be supported on the short term, as Gradle does not support custom repository implementations.\nPlugins can only be retrieved from Maven repositories that support Gradle metadata.\nConsequently, Gradle metadata needs to be enabled for this to work, and the Maven repository needs to support Gradle metadata (basically every repository manager supports this).\n\n* __Export/Import-Package__: not supported, un unlikely to ever be supported, as this is not really idiomatic in Gradle.\n\n## Requirements\n\nThe required Java version depends on which version of Eclipse you are building against.\nBy default, you build against Eclipse 2020-06, which requires Java 8.\nEclipse 2020-09 and up require Java 11.\n\nCompiling with higher Java version will most likely work.\nHowever, running with higher Java versions may or may not work, depending on whether Eclipse runs on that Java version.\n\nThe code snippets in this README assume you are using Gradle with Kotlin, but should be translatable to Groovy as well.\n\n## Prerequisites\n\nThe Coronium plugin is not yet published to the Gradle plugins repository.\nTherefore, to enable downloading the plugin, add our repository to your settings.gradle(.kts) file:\n\n```kotlin\npluginManagement {\n  repositories {\n    maven(\"https://artifacts.metaborg.org/content/repositories/releases/\")\n  }\n}\n```\n\n\n## Building Eclipse plugins\n\n### Applying the plugin\n\nApply the bundle plugin to a project (a build.gradle(.kts) file) as follows:\n\n```kotlin\nplugins {\n  id(\"org.metaborg.coronium.bundle\") version(\"0.4.0\")\n}\n```\n\nThe latest version of the plugin can be found at the top of this readme.\n\nNow, your project will automatically be compiled into an OSGi bundle.\nEclipse plugins are just OSGi bundles with additional metadata, so we use the terms (OSGi) bundle and (Eclipse) plugin interchangeably.\n\n### Making dependencies\n\nThe following configurations can be used to create dependencies to bundles, mimicking the `api`/`implementation` configurations of the `java-library` plugin:\n\n* `bundleApi`/`bundleImplementation`: dependencies to bundles.\n* `bundleTargetPlatformApi`/`bundleTargetPlatformImplementation`: dependencies to bundles in a target platform. Currently, only the `eclipse` target platform is supported, which points to a recent version of Eclipse.\n\nConfigurations ending with `Api` are transitive for both compiling and running dependents.\nIn OSGi terms, this becomes a `Require-Bundle` dependency with `;visibility:=reexport`.\n\nConfigurations ending with `Implementation` are not transitive.\nIn OSGi terms, this becomes a `Require-Bundle` dependency with `;visibility:=reexport`.\nCoronium does handle this similarly to the `implementation` configuration of `java-plugin`, in that when you run your plugin, Coronium will include bundles that your plugin depends on in `Implementation` configurations.\n\nFor example, we can depend on several plugins of Eclipse as follows:\n\n```kotlin\ndependencies {\n  bundleTargetPlatformApi(eclipse(\"javax.inject\"))\n  bundleTargetPlatformApi(eclipse(\"org.eclipse.core.runtime\"))\n  bundleTargetPlatformApi(eclipse(\"org.eclipse.core.expressions\"))\n  bundleTargetPlatformApi(eclipse(\"org.eclipse.core.resources\"))\n  bundleTargetPlatformApi(eclipse(\"org.eclipse.core.filesystem\"))\n  bundleTargetPlatformApi(eclipse(\"org.eclipse.ui\"))\n  bundleTargetPlatformApi(eclipse(\"org.eclipse.ui.views\"))\n  bundleTargetPlatformApi(eclipse(\"org.eclipse.ui.editors\"))\n  bundleTargetPlatformApi(eclipse(\"org.eclipse.ui.console\"))\n  bundleTargetPlatformApi(eclipse(\"org.eclipse.ui.workbench\"))\n  bundleTargetPlatformApi(eclipse(\"org.eclipse.ui.workbench.texteditor\"))\n  bundleTargetPlatformApi(eclipse(\"org.eclipse.ui.ide\"))\n  bundleTargetPlatformApi(eclipse(\"org.eclipse.jface.text\"))\n  bundleTargetPlatformApi(eclipse(\"org.eclipse.swt\"))\n  bundleTargetPlatformApi(eclipse(\"com.ibm.icu\"))\n}\n```\n\nWe can also depend on bundles defined in other projects (e.g., through [multi-project](https://docs.gradle.org/current/userguide/multi_project_builds.html) or [composite builds](https://docs.gradle.org/current/userguide/composite_builds.html)), or those that are published to Maven repositories:\n\n```kotlin\ndependencies {\n  bundleImplementation(\"org.metaborg:spoofax.eclipse:0.1.3\")\n  bundleApi(project(\":tiger.eclipse\"))\n}\n```\n\nBesides these configurations, the following configurations from the `java-library` plugin are supported:\n\n* `compileOnly`: for compile-only dependencies to Java libraries, usually for compile-time annotations.\n* `annotationProcessor`: for annotation processor dependencies.\n\nThis enables us to use compile-time annotations and annotation processors in our plugin as usual. For example:\n\n```kotlin\ndependencies {\n  compileOnly(\"org.checkerframework:checker-qual-android\")\n  compileOnly(\"org.immutables:value-annotations\")\n  compileOnly(\"org.derive4j:derive4j-annotation\")\n\n  annotationProcessor(\"org.immutables:value\")\n  annotationProcessor(\"org.derive4j:derive4j\")\n}\n```\n\n### Customizing `META-INF/MANIFEST.MF`\n\nThe manifest of your plugin can be customized by just having a `META-INF/MANIFEST.MF` file in your project, with your modifications.\nCoronium will merge your manifest with the name, group, version, and dependencies of your Gradle project.\nFor example, we can create the following `META-INF/MANIFEST.MF` file to customize our plugin:\n\n```manifest\nBundle-Activator: mb.spoofax.eclipse.SpoofaxPlugin\nExport-Package: mb.spoofax.eclipse,\n  mb.spoofax.eclipse.build,\n  mb.spoofax.eclipse.command,\n  mb.spoofax.eclipse.editor,\n  mb.spoofax.eclipse.job,\n  mb.spoofax.eclipse.log,\n  mb.spoofax.eclipse.menu,\n  mb.spoofax.eclipse.nature,\n  mb.spoofax.eclipse.pie,\n  mb.spoofax.eclipse.resource,\n  mb.spoofax.eclipse.util\nBundle-RequiredExecutionEnvironment: JavaSE-1.8\nBundle-ActivationPolicy: lazy\n\n```\n\n### Customizing `plugin.xml`\n\nThe `plugin.xml` file of your plugin can be customized by just having that file.\nCoronium currently just copies it over.\n\n### Embedding Java libraries\n\nCoronium supports embedding Java libraries into your bundle with the `bundleEmbedApi`/`bundleEmbedImplementation` configurations.\nThis internally uses the [Gradle BND plugin](https://plugins.gradle.org/plugin/biz.aQute.bnd) to embed the libraries into the bundle.\n\nTo control what BND embeds and exports, either add entries to `Export-Package`/`Private-Package` in your `META-INF/MANIFEST.MF` file, or configure the BND plugin in Gradle.\nDo not mix `Export-Package`/`Private-Package` directives between `META-INF/MANIFEST.MF` and the Gradle build file, as the contents of these directives are not merged and one will be chosen.\n\nFor example, dependencies can be embedded as follows:\n\n```kotlin\nplugins {\n  id(\"org.metaborg.coronium.bundle\") version(\"0.4.0\")\n}\n\ndependencies {\n  bundleTargetPlatformApi(eclipse(\"javax.inject\"))\n\n  bundleEmbedApi(project(\":complex.spoofax\"))\n  bundleEmbedApi(\"org.metaborg:log.api\")\n  bundleEmbedApi(\"org.metaborg:pie.api\")\n  bundleEmbedApi(\"com.google.dagger:dagger\")\n\n  bundleEmbedImplementation(\"org.metaborg:log.backend.slf4j\")\n  bundleEmbedImplementation(\"org.slf4j:slf4j-simple\")\n}\n\n// For Java libraries that are embedded into the bundle, and are exported (i.e., bundleEmbedApi), we need to add an\n// Export-Package directive to the JAR manifest that determines which packages should be exported. Only classes from\n// these packages will be embedded. The BND plugin will perform the embedding. Therefore, the Export-Package\n// syntax from BND is supported: https://bnd.bndtools.org/heads/export_package.html\nval exportPackage = listOf(\n  // Regular packages to be exported. Note that this export cannot be written in META-INF/MANIFEST.MF, otherwise its\n  // Export-Package directive would overwrite this one, leading to embedded dependencies not being exported.\n  \"mb.spoofax.eclipse\",\n  // Embedded packages to be exported. Using ';provider=mb;mandatory:=provider' to prevent these packages from being\n  // imported with a regular Import-Package directive. They can only be used with a Require-Bundle dependency to this\n  // bundle, or by qualifying an Import-Package directive with ';provider=mb'.\n  \"mb.spoofax.*;provider=mb;mandatory:=provider\",\n  \"mb.log.api.*;provider=mb;mandatory:=provider\",\n  \"mb.pie.*;provider=mb;mandatory:=provider\",\n  \"dagger.*;provider=mb;mandatory:=provider\"\n)\n// Likewise, for Java libraries that are embedded into the bundle, but not exported (i.e., bundleEmbedImplementation),\n// we need to add a Private-Package directive to the JAR manifest that determines which packages should be included.\n// Only classes from these packages will be embedded. Again, the BND plugin will perform the embedding. Therefore, the\n// Private-Package syntax from BND is supported: https://bnd.bndtools.org/heads/private_package.html\nval privatePackage = listOf(\n  \"mb.log.slf4j.*\",\n  \"org.slf4j.*\"\n)\ntasks {\n  \"jar\"(Jar::class) {\n    manifest {\n      attributes(\n        // Pass the above lists as the Export-Package and Private-Package directives of the JAR manifest.\n        Pair(\"Export-Package\", exportPackage.joinToString(\", \")),\n        Pair(\"Private-Package\", privatePackage.joinToString(\", \"))\n      )\n    }\n  }\n}\n```\n\n## Building Eclipse features\n\nApply the feature plugin to a project (a build.gradle(.kts) file) as follows:\n\n```kotlin\nplugins {\n  id(\"org.metaborg.coronium.feature\") version(\"0.4.0\")\n}\n```\n\nInclude bundles and/or other in the feature by making dependencies:\n\n```kotlin\ndependencies {\n  bundle(project(\":tiger.eclipse\"))\n\n  featureInclude(project(\":spoofax.eclipse.feature\"))\n}\n```\n\nBy default, dependencies are transitive. You can use the regular exclude mechanisms in Gradle to exclude transitive dependencies. For example:\n\n```kotlin\ndependencies {\n  featureInclude(project(\":spoofax.eclipse.feature\"))\n  bundle(project(\":tiger.eclipse\")) {\n    // Including a bundle into a feature also includes all reexported bundles. In this case, we want to prevent this\n    // because 'complex.spoofax.eclipse' is included into the 'complex.spoofax.eclipse.feature' feature.\n    exclude(\"org.metaborg\", \"spoofax.eclipse\")\n  }\n}\n```\n\n## Building Eclipse repositories\n\nApply the repository plugin to a project (a build.gradle(.kts) file) as follows:\n\n```kotlin\nplugins {\n  id(\"org.metaborg.coronium.repository\") version(\"0.4.0\")\n}\n```\n\nInclude features into the repository by making dependencies:\n\n```kotlin\ndependencies {\n  feature(project(\":tiger.eclipse.feature\"))\n}\n```\n\n## Running the Eclipse IDE with plugins/features/repositories\n\nTo start an Eclipse IDE instance with your plugin, feature, or repository included in the IDE, simply execute the `runEclipse` task.\nCurrently, this will start [Eclipse IDE for Eclipse Committers 2020-06](https://www.eclipse.org/downloads/packages/release/2020-06/r/eclipse-ide-eclipse-committers).\nThis variant and version is currently hardcoded, but will be made configurable in the future.\n\nWhen `runEclipse` is used on a feature, all plugins that are (transitively) included in the feature will be loaded into the Eclipse instance.\nLikewise, when used on a repository, all plugins that are (transitively) included in the repository and included from features will be loaded into the Eclipse instance.\n\n\n## Generating Eclipse installations\n\nEclipse installations can be generated from repositories.\nOn an Eclipse repository project, run the `createEclipseInstallation` task to generate an Eclipse installation that includes the features and bundles of the repository.\nThe generated Eclipse installation will be located in the `build/eclipse-\u003cos\u003e-\u003carch\u003e` directory.\nRunning `archiveEclipseInstallation` will additionally create an archive of the installation at `build/dist/Eclipse-\u003cos\u003e-\u003carch\u003e.zip`.\nFinally, running `createEclipseInstallationWithJvm` and/or `archiveEclipseInstallationWithJvm` will create/archive an Eclipse installation with an embedded JVM, so that no JVM needs to be installed on the system to run that Eclipse installation.\nThese are located at `build/eclipse-\u003cos\u003e-\u003carch\u003e-jvm` and `build/dist/Eclipse-\u003cos\u003e-\u003carch\u003e-jvm.zip`\n\nTo generate Eclipse installations for all operating system and architecture combinations for distribution purposes, run the `archiveEclipseInstallations` and `archiveEclipseInstallationsWithJvm` tasks.\n\nThe name of the installation can be changed with the `eclipseInstallationAppName` property, and additional Eclipse repositories and units to install can be provided with the `eclipseInstallationAdditionalRepositories` and `eclipseInstallationAdditionalInstallUnits` properties. For example:\n\n```kotlin\nrepository {\n  eclipseInstallationAppName.set(\"Tiger\")\n  eclipseInstallationAdditionalRepositories.add(\"https://de-jcup.github.io/update-site-eclipse-yaml-editor/update-site/\")\n  eclipseInstallationAdditionalInstallUnits.add(\"de.jcup.yamleditor.feature.group\")\n}\n```\n\nCurrently, these tasks are hardcoded to generate Eclipse 2022-06 for Java developers instances, and JVMs are hardcoded to Eclipse Temurin 11.0.22+7 JDKs with HotSpot.\nThis will be made configurable in the future.\n\n## Publishing\n\nBundles, features, and repositories can all be published via the [standard Gradle `maven-publish` plugin](https://docs.gradle.org/current/userguide/publishing_maven.html).\nBundles are published as regular Java libraries with additional metadata. See the [Setting up basic publishing](https://docs.gradle.org/current/userguide/publishing_setup.html#sec:basic_publishing) guide to configure publications.\nFor example, to publish a Bundle:\n\n```kotlin\nplugins {\n  id(\"org.metaborg.coronium.bundle\") version(\"0.4.0\")\n  `maven-publish`\n}\n\npublishing {\n  publications {\n    create\u003cMavenPublication\u003e(\"myBundle\") {\n      from(components[\"java\"])\n    }\n  }\n}\n```\n\nFor features and repositories, Coronium will automatically configure *what* to publish.\nThe only thing that needs to be done is to enable the `maven-publish` plugin.\nFor features:\n\n```kotlin\nplugins {\n  id(\"org.metaborg.coronium.feature\") version(\"0.4.0\")\n  `maven-publish`\n}\n```\n\nFor repositories:\n\n```kotlin\nplugins {\n  id(\"org.metaborg.coronium.repository\") version(\"0.4.0\")\n  `maven-publish`\n}\n```\n\nIt is up to you to configure [*where* to publish to](https://docs.gradle.org/current/userguide/publishing_setup.html#publishing_overview:where).\n\nIf you would like to disable generating publications, set the `createPublication` property to `false` in the corresponding extension.\nFor features:\n\n```kotlin\nfeature {\n  createPublication.set(false)\n}\n```\n\nFor repositories:\n\n```kotlin\nrepository {\n  createPublication.set(false)\n}\n```\n\nFinally, it is possible to automatically publish the Eclipse installations generated from a repository by setting the `createEclipseInstallationPublications` and/or `createEclipseInstallationWithJvmPublications` property to `true`:\n\n```kotlin\nrepository {\n  createEclipseInstallationPublications.set(true)\n  createEclipseInstallationWithJvmPublications.set(true)\n}\n```\n\n## Development\n\nThis section details the development of this project.\n\n### Building\n\nThis repository is built with Gradle, which requires a JDK of at least version 8 to be installed. Higher versions may work depending on [which version of Gradle is used](https://docs.gradle.org/current/userguide/compatibility.html).\n\nTo build this repository, run `./gradlew buildAll` on Linux and macOS, or `gradlew buildAll` on Windows.\n\n### Automated Builds\n\nAll branches and tags of this repository are built on:\n- [GitHub actions](https://github.com/metaborg/coronium/actions/workflows/build.yml) via `.github/workflows/build.yml`.\n- Our [Jenkins buildfarm](https://buildfarm.metaborg.org/view/Devenv/job/metaborg/job/coronium/) via `Jenkinsfile` which uses our [Jenkins pipeline library](https://github.com/metaborg/jenkins.pipeline/).\n\n### Publishing\n\nThis repository is published via Gradle and Git with the [Gitonium](https://github.com/metaborg/gitonium) and [Gradle Config](https://github.com/metaborg/gradle.config) plugins.\nIt is published to our [artifact server](https://artifacts.metaborg.org) in the [releases repository](https://artifacts.metaborg.org/content/repositories/releases/).\n\nFirst update `CHANGELOG.md` with your changes, create a new release entry, and update the release links at the bottom of the file.\nThen, commit your changes.\n\nTo make a new release, create a tag in the form of `release-*` where `*` is the version of the release you'd like to make.\nThen first build the project with `./gradlew buildAll` to check if building succeeds.\n\nIf you want our buildfarm to publish this release, just push the tag you just made, and our buildfarm will build the repository and publish the release.\n\nIf you want to publish this release locally, you will need an account with write access to our artifact server, and tell Gradle about this account.\nCreate the `./gradle/gradle.properties` file if it does not exist.\nAdd the following lines to it, replacing `\u003cusername\u003e` and `\u003cpassword\u003e` with those of your artifact server account:\n```\npublish.repository.metaborg.artifacts.username=\u003cusername\u003e\npublish.repository.metaborg.artifacts.password=\u003cpassword\u003e\n```\nThen run `./gradlew publishAll` to publish all built artifacts.\nYou should also push the release tag you made such that this release is reproducible by others.\n\n\n## License\nCopyright 2018-2024 Delft University of Technology\n\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at \u003chttps://www.apache.org/licenses/LICENSE-2.0\u003e\n\nUnless required by applicable law or agreed to in writing, software distributed under the License is distributed on an **\"as is\" basis, without warranties or conditions of any kind**, either express or implied. See the License for the specific language governing permissions and limitations under the License.\n\n\n[github-build-badge]: https://img.shields.io/github/actions/workflow/status/metaborg/coronium/build.yaml\n[github-build]: https://github.com/metaborg/coronium/actions\n[license-badge]: https://img.shields.io/github/license/metaborg/coronium\n[license]: https://github.com/metaborg/coronium/blob/master/LICENSE\n[github-release-badge]: https://img.shields.io/github/v/release/metaborg/coronium\n[github-release]: https://github.com/metaborg/coronium/releases\n\n[maven-badge]: https://img.shields.io/maven-metadata/v?metadataUrl=https%3A%2F%2Fartifacts.metaborg.org%2Fcontent%2Frepositories%2Freleases%2Forg%2Fmetaborg%2Fcoronium%2Fmaven-metadata.xml\n[maven]: https://artifacts.metaborg.org/#nexus-search;gav~org.metaborg~coronium~~~\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmetaborg%2Fcoronium","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmetaborg%2Fcoronium","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmetaborg%2Fcoronium/lists"}