Skip to content

1.3.0

Choose a tag to compare

@github-actions github-actions released this 19 Jul 13:46
· 9 commits to main since this release
f84ffbe

lite-bootstrap 1.3.0 — free-threaded Python support, orjson becomes opt-in

1.3.0 is a minor release. Backward compatible with 1.2.3, with one dependency
change
(orjson moves from a mandatory core dependency to an opt-in extra).
It lands free-threaded CPython (3.13t/3.14t) support for core and most extras,
plus two import-safety fixes surfaced while verifying it.

Features

  • Free-threaded CPython (3.13t/3.14t) support. lite-bootstrap is pure
    Python; the only thing that ever blocked it on a free-threaded interpreter
    was the mandatory orjson dependency (below). Core, logging, sentry,
    fastapi, and faststream (plus their -sentry/-logging/-metrics
    combos) now install and run on both 3.13t and 3.14t. litestar (+
    litestar-metrics) and fastmcp (+ fastmcp-metrics) land on 3.14t
    only
    msgspec (litestar) and cffi (fastmcp, via cryptography) both
    gate free-threaded support to Python 3.14+ and fail to build from source on
    3.13t. The gRPC otl exporter (grpcio has no ft wheels — use the new
    otl-http extra instead) and pyroscope (pyroscope-io is abi3-only and
    unmaintained) remain unavailable on free-threaded builds pending upstream
    fixes. See
    architecture/free-threading.md for
    the full support matrix and planning/deferred.md for the
    ecosystem blockers.

  • OTLP-http exporter: new opentelemetry_exporter_protocol config (grpc
    default | http) and an otl-http extra (no grpcio) so OTLP trace export
    works on free-threaded Python. otl now pulls
    opentelemetry-exporter-otlp-proto-grpc directly (was the opentelemetry-exporter-otlp
    meta); grpc behavior is unchanged.

  • orjson is now an opt-in extra (lite-bootstrap[orjson]) instead of a
    mandatory core dependency — it shipped no free-threaded wheels and its build
    refuses to compile under a free-threaded interpreter, which meant nothing,
    not even the pure extras, could install on ft before this change. The
    logging serializer falls back to the stdlib json accelerator when orjson
    is absent (byte-identical output for JSON-native values; ~2-5x slower;
    non-JSON-native types in log extra, e.g. datetime/UUID, render via repr
    instead of orjson's native encoding). Add [orjson] to keep the fast path
    on a standard (GIL) build. If your code relied on import lite_bootstrap
    pulling orjson in transitively, depend on orjson directly.

Bug fixes

  • import_checker's dotted find_spec checks no longer crash on an
    incomplete namespace.
    find_spec imports a dotted name's parent package
    first, so a present-but-incomplete opentelemetry install (e.g.
    opentelemetry-api without opentelemetry-instrumentation) previously
    raised ModuleNotFoundError instead of returning False, crashing import lite_bootstrap. Affected dotted checks now go through a
    ModuleNotFoundError-safe helper.
  • The gRPC OTLP exporter is no longer imported unconditionally.
    opentelemetry_instrument.py used to import
    opentelemetry.exporter.otlp.proto.grpc.trace_exporter whenever bare
    opentelemetry-api resolved, crashing import lite_bootstrap in any
    environment with opentelemetry-api present but the exporter package
    absent (e.g. lite-bootstrap[fastmcp], which pulls in bare
    opentelemetry-api transitively). The exporter import — and its use in
    bootstrap() — now sit behind their own is_otlp_grpc_exporter_installed
    guard. When opentelemetry_endpoint is set but the selected exporter package
    is absent, bootstrap() emits an InstrumentDependencyMissingWarning naming
    the extra to install ([otl] for gRPC, [otl-http] for HTTP); see
    architecture/instruments.md.
  • The OpenTelemetry instrument no longer assumes the SDK is present when only
    the API is.
    is_opentelemetry_installed (find_spec("opentelemetry")) is
    true with just opentelemetry-api, but the instrument imports
    opentelemetry.sdk.* — a separate distribution. An api-only environment
    (e.g. lite-bootstrap[fastmcp]) therefore still crashed at the sdk import
    even after the exporter guard above. A new is_opentelemetry_sdk_installed
    flag gates the sdk imports, and check_dependencies() requires both the api
    and the sdk. With all three fixes, lite-bootstrap[fastmcp] imports and runs
    on free-threaded 3.14t.

These bugs are not ft-specific — they affect any environment with a partial
opentelemetry stack — but ft verification work is what surfaced them.

Backwards compatibility

Fully backward compatible with 1.2.3 at the API level. The one dependency
change is the orjson move to opt-in described above; everything that imports
or configures lite-bootstrap continues to work unchanged on a standard (GIL)
build once orjson is installed (directly, or via the [orjson] extra).

References

  • Design bundle: planning/changes/2026-07-18.01-free-threaded-python-support.md,
    planning/changes/2026-07-19.01-fix-otel-api-sdk-conflation.md,
    planning/changes/2026-07-19.02-otlp-http-exporter.md.