1.3.0
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-bootstrapis pure
Python; the only thing that ever blocked it on a free-threaded interpreter
was the mandatoryorjsondependency (below). Core,logging,sentry,
fastapi, andfaststream(plus their-sentry/-logging/-metrics
combos) now install and run on both 3.13t and 3.14t.litestar(+
litestar-metrics) andfastmcp(+fastmcp-metrics) land on 3.14t
only —msgspec(litestar) andcffi(fastmcp, via cryptography) both
gate free-threaded support to Python 3.14+ and fail to build from source on
3.13t. The gRPCotlexporter (grpciohas no ft wheels — use the new
otl-httpextra instead) andpyroscope(pyroscope-iois abi3-only and
unmaintained) remain unavailable on free-threaded builds pending upstream
fixes. See
architecture/free-threading.mdfor
the full support matrix andplanning/deferred.mdfor the
ecosystem blockers. -
OTLP-http exporter: new
opentelemetry_exporter_protocolconfig (grpc
default |http) and anotl-httpextra (nogrpcio) so OTLP trace export
works on free-threaded Python.otlnow pulls
opentelemetry-exporter-otlp-proto-grpcdirectly (was theopentelemetry-exporter-otlp
meta); grpc behavior is unchanged. -
orjsonis 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 stdlibjsonaccelerator whenorjson
is absent (byte-identical output for JSON-native values; ~2-5x slower;
non-JSON-native types in logextra, 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 onimport lite_bootstrap
pullingorjsonin transitively, depend onorjsondirectly.
Bug fixes
import_checker's dottedfind_specchecks no longer crash on an
incomplete namespace.find_specimports a dotted name's parent package
first, so a present-but-incompleteopentelemetryinstall (e.g.
opentelemetry-apiwithoutopentelemetry-instrumentation) previously
raisedModuleNotFoundErrorinstead of returningFalse, crashingimport lite_bootstrap. Affected dotted checks now go through a
ModuleNotFoundError-safe helper.- The gRPC OTLP exporter is no longer imported unconditionally.
opentelemetry_instrument.pyused to import
opentelemetry.exporter.otlp.proto.grpc.trace_exporterwhenever bare
opentelemetry-apiresolved, crashingimport lite_bootstrapin any
environment withopentelemetry-apipresent but the exporter package
absent (e.g.lite-bootstrap[fastmcp], which pulls in bare
opentelemetry-apitransitively). The exporter import — and its use in
bootstrap()— now sit behind their ownis_otlp_grpc_exporter_installed
guard. Whenopentelemetry_endpointis set but the selected exporter package
is absent,bootstrap()emits anInstrumentDependencyMissingWarningnaming
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 justopentelemetry-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 newis_opentelemetry_sdk_installed
flag gates the sdk imports, andcheck_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.