<#9988 feature: Add Backblaze B2 as a first-class ...
# meltano-repo-activity
g
#9988 feature: Add Backblaze B2 as a first-class state backend (subclass of S3 manager) Issue created by goanpeca Feature scope Configuration (settings parsing, validation, etc.) Description Feature scope Configuration (settings parsing, validation, etc.) Description Proposal Summary Add native Backblaze B2 support as a state backend at
src/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/meltano