GitHub
05/04/2026, 8:14 PMsrc/meltano/core/state_store/b2/, registered as the entry point b2 = meltano.core.state_store.b2.backend:B2StateStoreManager in pyproject.toml. The implementation is a thin subclass of the existing S3StateStoreManager that defaults endpoint_url to a B2 region (<https://s3.us-west-004.backblazeb2.com>) and surfaces B2_APPLICATION_KEY_ID / B2_APPLICATION_KEY as the canonical credential env vars.
Motivation
B2 is wire-compatible with S3, and users can already set the s3 backend with s3_endpoint_url pointing at B2 today. But:
1. There is no documented "Meltano + B2" path. New users following the docs configure AWS S3.
2. "Use the s3 backend, override endpoint_url" leaks an AWS-specific abstraction into a non-AWS deployment.
Details
Proposed layout, mirroring `src/meltano/core/state_store/s3/`:
• src/meltano/core/state_store/b2/__init__.py
• src/meltano/core/state_store/b2/backend.py — B2StateStoreManager(S3StateStoreManager) with B2 endpoint defaults, B2-flavored MeltanoError messages on auth failure.
• src/meltano/core/state_store/b2/settings.py — declares B2_APPLICATION_KEY_ID, B2_APPLICATION_KEY, B2_ENDPOINT_URL, B2_BUCKET, B2_PREFIX.
• pyproject.toml — register entry point under [project.entry-points."meltano.state_backends"] (alongside the existing s3, azure, gs, file) and the corresponding settings under [tool.meltano.settings] (mirroring the s3_* lines).
• tests/meltano/core/state_store/test_b2.py — mirror the S3 tests using moto (already in test deps via the s3 backend).
• Docs page on docs.meltano.com under "State Backends" with a meltano.yml snippet.
No new runtime dependencies — boto3>=1.35,<2 is already declared as the s3 extra; the B2 backend reuses it. Users install with meltano[s3] (no separate b2 extra needed).
Backward compatibility
Pure addition. Users currently using state_backend.uri: s3://... with s3_endpoint_url set to B2 keep working unchanged.
Willingness to contribute
Yes — I can prepare the PR. It will:
• Follow nox -t lint, nox -s typing, and nox -s pytest (per AGENTS.md).
• Use type hints throughout and raise MeltanoError for user-actionable failures.
• Mirror the test structure under tests/meltano/core/state_store/.
• Use the PR template, include the generative-AI disclosure if AI-assisted.
File references
• src/meltano/core/state_store/base.py — StateStoreManager ABC.
• src/meltano/core/state_store/s3/backend.py — pattern to mirror.
• pyproject.toml lines ~91–109 — settings + entry-point registration.
meltano/meltanoGitHub
05/06/2026, 11:09 PM