{"id":34514515,"url":"https://github.com/lonelycode/tyk-ai-studio-plugins","last_synced_at":"2026-03-15T15:06:47.405Z","repository":{"id":322343815,"uuid":"1085457927","full_name":"lonelycode/tyk-ai-studio-plugins","owner":"lonelycode","description":"Beta Studio Plugins Repo","archived":false,"fork":false,"pushed_at":"2026-03-09T09:34:43.000Z","size":118,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-09T14:14:36.683Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lonelycode.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2025-10-29T04:18:36.000Z","updated_at":"2026-03-09T09:34:47.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/lonelycode/tyk-ai-studio-plugins","commit_stats":null,"previous_names":["lonelycode/tyk-ai-studio-plugins"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lonelycode/tyk-ai-studio-plugins","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lonelycode%2Ftyk-ai-studio-plugins","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lonelycode%2Ftyk-ai-studio-plugins/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lonelycode%2Ftyk-ai-studio-plugins/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lonelycode%2Ftyk-ai-studio-plugins/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lonelycode","download_url":"https://codeload.github.com/lonelycode/tyk-ai-studio-plugins/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lonelycode%2Ftyk-ai-studio-plugins/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30545120,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-15T15:03:43.933Z","status":"ssl_error","status_checked_at":"2026-03-15T15:03:37.630Z","response_time":61,"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-12-24T04:19:20.822Z","updated_at":"2026-03-15T15:06:47.400Z","avatar_url":"https://github.com/lonelycode.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tyk AI Studio Plugin Marketplace (Community Edition)\n\nThis repository contains the community plugin marketplace catalog for Tyk AI Studio.\n\n## Repository Structure\n\n```\ntyk-ai-studio-plugins-ce/\n├── index.yaml                    # Auto-generated plugin index (DO NOT EDIT)\n├── plugins/\n│   ├── llm-firewall/\n│   │   └── 1.0.0/               # Version directory\n│   │       ├── manifest.yaml    # Plugin metadata (required)\n│   │       ├── README.md        # Plugin documentation\n│   │       ├── CHANGELOG.md     # Version history\n│   │       └── icon.svg         # Plugin icon (SVG recommended)\n│   └── \u003cother-plugins\u003e/\n│       ├── 1.0.0/\n│       ├── 1.1.0/               # Multiple versions supported\n│       └── 2.0.0/\n└── .github/\n    └── workflows/\n        └── generate-index.yml   # Auto-generates index.yaml on push\n```\n\n### Version Directory Structure\n\nEach plugin uses **version directories** to support multiple releases:\n\n```\nplugins/\n  my-plugin/\n    1.0.0/\n      manifest.yaml\n      README.md\n      CHANGELOG.md\n      icon.svg\n    1.1.0/\n      manifest.yaml\n      README.md\n      CHANGELOG.md\n      icon.svg\n```\n\nThis allows users to install specific versions and see version history in the marketplace UI.\n\n## How It Works\n\n1. **Plugin Submission**: Contributors add a new directory under `plugins/\u003cplugin-name\u003e/\u003cversion\u003e/` with a `manifest.yaml` file\n2. **CI/CD**: GitHub Actions automatically generates `index.yaml` from all plugin manifests when changes are pushed to `main`\n3. **Distribution**: Plugin binaries are hosted on OCI registries (GitHub Container Registry, Nexus, etc.)\n4. **Discovery**: AI Studio periodically fetches `index.yaml` to update the marketplace catalog\n5. **Versioning**: Multiple versions are supported - each version has its own directory with a complete manifest\n\n## Plugin Manifest Format\n\nEach plugin **must** have a `manifest.yaml` file. Below is the complete schema with all supported fields:\n\n```yaml\n# ============================================\n# IDENTITY \u0026 VERSIONING (Required)\n# ============================================\nid: \"com.tyk.plugin-name\"           # Unique identifier (reverse domain notation)\nname: \"Plugin Name\"                  # Human-readable name\nversion: \"1.0.0\"                     # Semantic version\ndescription: \"Brief description\"     # What the plugin does\n\n# ============================================\n# OCI DISTRIBUTION (Required)\n# ============================================\noci:\n  registry: \"ghcr.io\"                          # OCI registry hostname\n  repository: \"tyk-technologies/plugins/name\"  # Repository path\n  tag: \"1.0.0\"                                 # Image tag\n  digest: \"sha256:abc123...\"                   # Image digest for verification\n  platform:                                    # Supported platforms\n    - \"linux/amd64\"\n    - \"linux/arm64\"\n    - \"darwin/arm64\"\n\n# ============================================\n# DISCOVERY \u0026 CLASSIFICATION (Required)\n# ============================================\ncategory: \"security\"                 # Plugin category (see below)\nkeywords:                            # Search keywords\n  - \"security\"\n  - \"firewall\"\nmaturity: \"stable\"                   # alpha, beta, stable\n\n# ============================================\n# DOCUMENTATION \u0026 SUPPORT (Required)\n# ============================================\nlinks:\n  documentation: \"https://github.com/org/repo/tree/main/plugins/name\"\n  repository: \"https://github.com/org/repo\"\n  support: \"https://community.tyk.io\"\n  issues: \"https://github.com/org/repo/issues\"\n  homepage: \"https://tyk.io/ai-studio\"\n\n# ============================================\n# DISPLAY ASSETS (Required)\n# ============================================\nicon: \"https://raw.githubusercontent.com/org/repo/main/plugins/name/icon.svg\"\nscreenshots: []                      # Optional: Array of screenshot URLs\n\n# ============================================\n# MAINTAINERS (Required)\n# ============================================\nmaintainers:\n  - name: \"Your Name\"\n    email: \"you@example.com\"\n    organization: \"Your Organization\"\n\npublisher: \"tyk-community\"           # tyk-official, tyk-verified, tyk-community\nlicense: \"Apache-2.0\"                # SPDX license identifier\n\n# ============================================\n# CAPABILITIES (Required)\n# ============================================\ncapabilities:\n  hooks:                             # All hooks this plugin implements\n    - \"pre_auth\"\n    - \"post_auth\"\n  primary_hook: \"pre_auth\"           # Main hook type for categorization\n\n# ============================================\n# REQUIREMENTS (Required)\n# ============================================\nrequirements:\n  min_studio_version: \"2.0\"          # Minimum AI Studio version\n  api_versions:                      # Supported API versions\n    - \"gateway-v1\"\n  dependencies: []                   # Other plugins this depends on\n\n# ============================================\n# PERMISSIONS (Required)\n# ============================================\npermissions:\n  services: []                       # Service access: llms.proxy, llms.read, tools.call, etc.\n  kv: []                             # Key-value store access\n  rpc: []                            # RPC service access\n  ui: []                             # UI extension permissions\n\n# ============================================\n# ENTERPRISE (Required)\n# ============================================\nenterprise_only: false               # true if requires enterprise license\n\n# ============================================\n# OPTIONAL FIELDS\n# ============================================\nconfig_schema_url: \"\"                # URL to JSON schema for plugin config\n\n# Attestation/Signing (optional)\nattestation:\n  enabled: false\n  sigstore_bundle_url: \"\"\n\n# ============================================\n# METADATA (Required)\n# ============================================\ncreated_at: \"2025-01-15T10:00:00Z\"   # ISO 8601 timestamp\nupdated_at: \"2025-01-15T10:00:00Z\"   # ISO 8601 timestamp\ndeprecated: false                    # Set to true to mark as deprecated\ndeprecated_message: \"\"               # Message explaining deprecation\nreplacement: \"\"                      # Plugin ID of replacement (if deprecated)\n```\n\n## Required vs Optional Fields\n\n### Required Fields\nAll fields marked with `(Required)` sections above must be present for the plugin to be indexed correctly.\n\n### Key Required Fields Summary\n| Field | Description |\n|-------|-------------|\n| `id` | Unique plugin identifier (e.g., `com.tyk.llm-firewall`) |\n| `name` | Human-readable name |\n| `version` | Semantic version string |\n| `description` | Brief description |\n| `oci.*` | OCI registry distribution details |\n| `category` | Plugin category |\n| `maturity` | Release maturity level |\n| `publisher` | Publisher type |\n| `license` | SPDX license identifier |\n| `capabilities.hooks` | List of implemented hooks |\n| `capabilities.primary_hook` | Main hook type |\n| `requirements.min_studio_version` | Minimum compatible version |\n| `permissions.*` | Required permissions (can be empty arrays) |\n| `enterprise_only` | Enterprise-only flag |\n| `created_at` / `updated_at` | Timestamps |\n\n## Contributing a Plugin\n\n### Adding a New Plugin\n\n1. Fork this repository\n2. Create a new directory structure: `plugins/\u003cplugin-name\u003e/\u003cversion\u003e/` (e.g., `plugins/my-plugin/1.0.0/`)\n3. Add your `manifest.yaml` file with all required fields\n4. Add a `README.md` with plugin documentation\n5. Add an `icon.svg` (SVG recommended, or PNG at 256x256)\n6. Create a pull request\n\n### Releasing a New Version\n\nTo release a new version of an existing plugin:\n\n1. Copy the existing version directory to a new version directory:\n   ```bash\n   cp -r plugins/my-plugin/1.0.0 plugins/my-plugin/1.1.0\n   ```\n\n2. Update the manifest in the new directory:\n   - Update `version` field (e.g., `\"1.1.0\"`)\n   - Update `oci.tag` to match the new version\n   - Update `oci.digest` with the new image digest\n   - Update `updated_at` timestamp\n   - Update `description` if needed\n\n3. Update `CHANGELOG.md` with the new version's changes\n\n4. Push to main (or create a pull request)\n\nThe GitHub Action will automatically regenerate `index.yaml` with all versions, sorted by semver (newest first).\n\n### Example: Releasing v1.1.0\n\n```bash\n# Copy existing version\ncp -r plugins/llm-cache/1.0.0 plugins/llm-cache/1.1.0\n\n# Edit the manifest\n# - version: \"1.0.0\" → \"1.1.0\"\n# - oci.tag: \"1.0\" → \"1.1\"\n# - oci.digest: \"\u003cnew-digest\u003e\"\n# - updated_at: \"\u003ccurrent-timestamp\u003e\"\n\n# Commit and push\ngit add plugins/llm-cache/1.1.0\ngit commit -m \"Release llm-cache v1.1.0\"\ngit push\n```\n\n### Checklist Before Submitting\n\n- [ ] `manifest.yaml` includes all required fields\n- [ ] `id` follows reverse domain notation (e.g., `com.yourorg.plugin-name`)\n- [ ] `version` in manifest matches the directory name\n- [ ] OCI image is published and accessible\n- [ ] `oci.tag` matches the version being released\n- [ ] `icon` URL points to a valid image\n- [ ] All `links` URLs are valid and accessible\n- [ ] `enterprise_only` is set correctly\n- [ ] `created_at` and `updated_at` are valid ISO 8601 timestamps\n\n## Plugin Categories\n\n| Category | Description |\n|----------|-------------|\n| `security` | Security plugins (firewalls, content filtering, policy enforcement) |\n| `agents` | AI agent plugins that handle conversations |\n| `connectors` | Integration plugins for external services |\n| `tools` | Tool plugins that extend AI capabilities |\n| `ui-extensions` | UI plugins that add custom interfaces |\n| `analytics` | Analytics and monitoring plugins |\n| `data` | Data processing and transformation plugins |\n\n## Hook Types\n\nPlugins can implement one or more hooks:\n\n| Hook | Description |\n|------|-------------|\n| `pre_auth` | Runs before authentication, can modify/reject requests |\n| `post_auth` | Runs after authentication with user context |\n| `pre_request` | Runs before sending request to LLM |\n| `post_request` | Runs after receiving response from LLM |\n| `agent` | Full agent implementation |\n\n## Publisher Types\n\n| Publisher | Description |\n|-----------|-------------|\n| `tyk-official` | Plugins maintained by Tyk Technologies |\n| `tyk-verified` | Community plugins verified by Tyk |\n| `tyk-community` | Community-contributed plugins |\n\n## Permission Scopes\n\nAvailable service permissions:\n\n| Scope | Description |\n|-------|-------------|\n| `llms.proxy` | Access to call LLM services via the proxy |\n| `llms.read` | Read LLM configurations |\n| `llms.write` | Modify LLM configurations |\n| `tools.call` | Execute tool operations |\n| `tools.read` | Read tool configurations |\n| `datasources.query` | Query datasources |\n| `datasources.read` | Read datasource configurations |\n| `kv.readwrite` | Read and write plugin key-value storage |\n\n## Index Generation\n\nThe `index.yaml` file is automatically generated by GitHub Actions when changes are pushed to `main`. **Do not edit `index.yaml` directly** - your changes will be overwritten.\n\nThe index includes all fields from the manifest plus:\n- Auto-generated `manifest_url` pointing to the raw manifest file\n\n### How Versions Are Indexed\n\nThe GitHub Action scans for all `manifest.yaml` files under `plugins/`:\n- `plugins/\u003cplugin-name\u003e/\u003cversion\u003e/manifest.yaml` - Versioned structure (recommended)\n- `plugins/\u003cplugin-name\u003e/manifest.yaml` - Legacy single-version structure (still supported)\n\nAll versions of a plugin are grouped together in the index and sorted by semantic version (newest first). This allows:\n- Users to see all available versions in the marketplace UI\n- Installing specific versions\n- Detecting available updates for installed plugins\n\n## Support\n\nFor questions or issues:\n- [Tyk Community Forums](https://community.tyk.io)\n- [GitHub Issues](https://github.com/TykTechnologies/tyk-ai-studio-plugins-ce/issues)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flonelycode%2Ftyk-ai-studio-plugins","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flonelycode%2Ftyk-ai-studio-plugins","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flonelycode%2Ftyk-ai-studio-plugins/lists"}