Skip to content

Split cloud storage and notification clients into optional extras #2155

@khoaanguyenn

Description

@khoaanguyenn

Is your feature request related to a problem? Please describe.

We use elementary-data[redshift] on an AWS-only stack. Installing elementary forces base dependencies that are irrelevant to our environment — google-cloud-storage (which pulls in google-auth, pyasn1, pyasn1-modules, rsa, and 6 more Google packages), azure-storage-blob (+ azure-core), and pymsteams.

These unused transitive dependencies regularly trigger CVE findings in vulnerability scanners (e.g., Trivy) and block our deployment pipelines. For example, pyasn1 v0.6.2 (CVE-2026-30922) was recently flagged — a package we don't use but can't avoid installing.

Describe the solution you'd like

Move cloud storage and notification clients behind optional extras:

[project.optional-dependencies]
s3 = ["boto3"]
gcs = ["google-cloud-storage"]
azure = ["azure-storage-blob"]
slack = ["slack-sdk"]
teams = ["pymsteams"]

Users would then install only what they need: elementary-data[redshift,s3,slack]

Describe alternatives you've considered

We currently use uv's exclude-dependencies to strip out google-cloud-storage and azure-storage-blob at install time. This works but is fragile — it shifts the maintenance burden to every consumer and must be re-verified on each elementary upgrade.

Additional context

The current base dependencies include clients for all three cloud providers (boto3, google-cloud-storage, azure-storage-blob) and both notification backends (slack-sdk, pymsteams), regardless of which dbt adapter extra is selected. The extras only control database adapters today.

Would you be willing to contribute this feature?

Yes, happy to submit a PR.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions