{"id":49273827,"url":"https://github.com/appdevforall/plugin-examples","last_synced_at":"2026-04-25T15:04:56.090Z","repository":{"id":351372926,"uuid":"1205033873","full_name":"appdevforall/plugin-examples","owner":"appdevforall","description":"Plugins for Code On The Go","archived":false,"fork":false,"pushed_at":"2026-04-21T21:33:25.000Z","size":558,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-21T21:34:06.279Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/appdevforall.png","metadata":{"files":{"readme":"README.md","changelog":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-08T15:12:45.000Z","updated_at":"2026-04-21T21:33:29.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/appdevforall/plugin-examples","commit_stats":null,"previous_names":["appdevforall/plugin-examples"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/appdevforall/plugin-examples","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/appdevforall%2Fplugin-examples","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/appdevforall%2Fplugin-examples/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/appdevforall%2Fplugin-examples/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/appdevforall%2Fplugin-examples/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/appdevforall","download_url":"https://codeload.github.com/appdevforall/plugin-examples/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/appdevforall%2Fplugin-examples/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32266010,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-25T09:15:33.318Z","status":"ssl_error","status_checked_at":"2026-04-25T09:15:31.997Z","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":"2026-04-25T15:04:33.731Z","updated_at":"2026-04-25T15:04:56.081Z","avatar_url":"https://github.com/appdevforall.png","language":"Kotlin","readme":"# plugin-examples\n\nReference plugins for [CodeOnTheGo](https://github.com/appdevforall/CodeOnTheGo). Each folder is a fully self-contained Gradle project that builds to a `.cgp` installable plugin file.\n\nSee the official [plugin documentation](https://www.appdevforall.org/codeonthego/help/exp-plugins-top.html) for concepts, the plugin API surface, and install workflow.\n\n## Examples\n\n| Plugin                                             | Purpose                                                           |\n| -------------------------------------------------- | ----------------------------------------------------------------- |\n| [`Beepy/`](Beepy/)                                 | Plays a sound when a build starts, succeeds, or fails.            |\n| [`apk-viewer/`](apk-viewer/)                       | Inspects an APK's contents and surfaces a structural breakdown.   |\n| [`markdown-preview/`](markdown-preview/)           | Renders Markdown files with a live preview pane in the editor.    |\n| [`keystore-generator/`](keystore-generator/)       | Generates signing keystores from inside the IDE.                  |\n| [`snippets/`](snippets/)                           | Adds user-managed code snippets with prefix-triggered expansions. |\n\n## Building a plugin\n\nEvery plugin is a standalone Gradle project that shares two jars from this repo's root `libs/` folder.\n\n```sh\ncd Beepy\n./gradlew assemblePlugin\n```\n\nThe resulting `.cgp` file lands under the plugin's `build/plugin/` directory. Install it from inside CodeOnTheGo via the Plugin Manager.\n\n## The `libs/` folder\n\nEvery plugin depends on two jars produced by the CodeOnTheGo source tree:\n\n- **`plugin-api.jar`** — the interface surface a plugin implements (`IPlugin`, `BuildStatusListener`, etc.). Used as `compileOnly` at build time; provided by the IDE at runtime.\n- **`gradle-plugin.jar`** — the custom Gradle plugin (`com.itsaky.androidide.plugins.build`) that packages a compiled Android library into a `.cgp` file. Applied via `classpath` in each plugin's `settings.gradle.kts`.\n\nBoth jars live in `libs/` at the repo root; each plugin references them via `../libs/*.jar`. This means a plugin folder is **not standalone in isolation** — copying just `Beepy/` elsewhere will break its build until you also bring `libs/` along. The expected workflow is: clone the whole repo, work inside one of the example folders.\n\n## Refreshing `libs/`\n\nWhenever CodeOnTheGo changes the plugin API or the build plugin, the jars need to be rebuilt. Two ways to do that:\n\n### GitHub Action (normal path)\n\nGo to [Actions → **Update libs from CodeOnTheGo**](../../actions/workflows/update-libs.yml) and click **Run workflow**. It will clone CodeOnTheGo at the branch or tag you specify (default: `stage`), build both jars, and commit them directly to the default branch.\n\n### Locally\n\n```sh\n./scripts/update-libs.sh                          # builds from github.com/appdevforall/CodeOnTheGo@stage\n./scripts/update-libs.sh --ref v1.2.0             # pin to a tag or branch\n./scripts/update-libs.sh --local ../CodeOnTheGo   # use an existing local checkout instead of cloning\n```\n\nFirst local run clones CodeOnTheGo into `.cache/CodeOnTheGo/` (gitignored); subsequent runs `git pull` in place. Review the diff in `libs/` and commit if you're happy with it.\n\n## Adding a new plugin example\n\n1. Copy `Beepy/` to a new folder (e.g. `MyPlugin/`).\n2. In `MyPlugin/settings.gradle.kts`, change `rootProject.name` to `MyPlugin`.\n3. In `MyPlugin/build.gradle.kts`, update `pluginBuilder { pluginName = ... }` and `android { namespace ... applicationId ... }`.\n4. In `MyPlugin/src/main/AndroidManifest.xml`, update the `plugin.id`, `plugin.name`, `plugin.main_class`, and any other metadata.\n5. Replace the source under `MyPlugin/src/main/kotlin/...` with your implementation.\n6. Add a row to the **Examples** table above.","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fappdevforall%2Fplugin-examples","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fappdevforall%2Fplugin-examples","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fappdevforall%2Fplugin-examples/lists"}