Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Proposal] Plugin system #5593

Open
mantas-sidlauskas opened this issue Jan 15, 2024 · 0 comments
Open

[Proposal] Plugin system #5593

mantas-sidlauskas opened this issue Jan 15, 2024 · 0 comments

Comments

@mantas-sidlauskas
Copy link
Contributor

Is your feature request related to a problem? Please describe.
Cadence provides multiple options/clients for components like:

Storage:

  • Cassandra
  • MySQL
  • PostgreSQL
  • Others

Document search:

  • Elasticsearch
  • Opensearch

Archival:

  • S3
  • GCloud

Having so many components built-in makes dependency version control complicated. Adding another component/client most likely will bring more dependencies to the code.

This also makes problematic to keep up with dependency versioning and introducing/experimenting with additional features will require approval from Cadence team.

Proposed Solution
I propose to implement a "plugin" system where you could declare external repository to be used.
Plugins interface can be declared to represent a concrete component in Cadence, for example:

  • Storage plugin
  • RPC Middleware plugin
  • Archival plugin
  • Etc.

One of possible implementation method: generate an entry main.go file where "import" section would be generated based on plugins you defined.

This gives at least two benefits:

  • Having a possibility to declare a plugin as go module, community could use publicly available plugin which is not placed in Cadence github repository.
  • Cadence code will have less internal dependencies, or even some existing components could be placed on another repository.

Additional context
Relates to #5584

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant