Skip to content
Compatibility

Compatibility

This page documents what bunpy supports as of v0.10.29 and what it does not. Coverage numbers are updated each release; check the changelog for what changed.

Python version compatibility

bunpy embeds goipy, a Go-native CPython 3.14 interpreter. There is no system Python involved.

PropertyStatus
SyntaxPython 3.12+ required. f-strings with nested expressions (PEP 701), match/case (PEP 634), exception groups (PEP 654), type aliases (PEP 695) all work.
SemanticsCPython 3.14 target. goipy tracks the 3.14 reference implementation for semantics and standard library behaviour.
Python 2Not supported and never will be.
Python 3.11 and belowSyntax that was removed or changed in 3.12+ will error.
Type annotationsSupported. PEP 563 (from __future__ import annotations) and PEP 649 (lazy annotations, 3.14 default) both work.
C extension modulesNot supported. Packages that require compiled .so or .pyd extension wheels cannot be imported. Pure-Python wheels work.

If your code runs on CPython 3.12 or 3.13 without C extensions, it will almost certainly run on bunpy with no changes.

Python stdlib coverage

214 of 263 CPython 3.14 stdlib modules are supported as of v0.10.29. The tables below show coverage by category. Modules with partial support have the most commonly-used parts working; the gaps are documented in each module’s page.

Built-in types and core language

ModuleStatusNotes
builtinsSupportedAll built-in functions and types.
abcSupported
collectionsSupportedAll: deque, Counter, OrderedDict, defaultdict, namedtuple, ChainMap.
collections.abcSupported
dataclassesSupported
enumSupported
functoolsSupported
itertoolsSupported
operatorSupported
typesSupported
typingSupported
typing_extensionsPartialNot stdlib; available as a PyPI package.
weakrefSupported

Text and string processing

ModuleStatusNotes
reSupported
stringSupported
textwrapSupported
unicodedataSupported
difflibSupported
fnmatchSupported
globSupported

File and I/O

ModuleStatusNotes
ioSupported
osSupportedos.fork not available (goroutine model).
os.pathSupported
pathlibSupported
shutilSupported
tempfileSupported
statSupported
fileinputSupported
csvPartialReading works; writer missing quoting edge cases. Full support in v0.12.
configparserPartialCore read/write works; interpolation incomplete. Full support in v0.12.
zipfileSupported
tarfileSupported
gzipSupported
bz2Supported
lzmaSupported
pickleSupported
shelvePartialFull support targeted for v0.12.
structSupported
mmapNot supportedRequires OS memory-mapping primitives not yet wired in goipy.

Networking

ModuleStatusNotes
socketPartialTCP and UDP sockets work. Unix domain sockets work on macOS and Linux. Raw sockets not supported.
sslPartialTLS client connections work. Server-side TLS and client certificate authentication incomplete. Full support in v0.12.
http.clientSupported
http.serverSupportedUse bunpy.serve for production; http.server is available for compatibility.
urllib.requestSupported
urllib.parseSupported
emailSupported
smtplibSupported
ftplibSupported
imaplibNot supportedLow demand; file an issue if you need it.
poplibNot supportedLow demand.
nntplibNot supportedDeprecated in CPython 3.13; will not be added.
xmlrpc.clientSupported
xmlrpc.serverSupported
websocketsNot built-inUse the websockets PyPI package (pure Python). bunpy.websocket built-in planned for v0.12.

Data formats and serialization

ModuleStatusNotes
jsonSupported
xml.etree.ElementTreePartialBasic parsing and serialization work; XPath subset incomplete. Full support in v0.12.
xml.domPartial
xml.saxPartial
htmlSupported
html.parserSupported
base64Supported
hashlibPartialMD5, SHA-1, SHA-256, SHA-512 work. SHA-3 and BLAKE2 variants missing. Full suite in v0.12.
hmacSupported
binasciiSupported

Date, time, and math

ModuleStatusNotes
datetimeSupported
timeSupported
calendarSupported
mathSupported
cmathSupported
decimalSupported
fractionsSupported
randomSupported
statisticsSupported

Concurrency

ModuleStatusNotes
threadingSupportedThreads map to goroutines. The GIL does not exist in goipy; actual parallelism is available.
asyncioSupportedEvent loop, coroutines, tasks, asyncio.gather, asyncio.sleep, streams.
concurrent.futuresSupportedThreadPoolExecutor and ProcessPoolExecutor both work.
multiprocessingPartialProcess, Queue, Pipe work. Shared memory (multiprocessing.shared_memory) not yet supported.
queueSupported
subprocessSupported

Databases

ModuleStatusNotes
sqlite3PartialWired to bunpy.sqlite internally. Full parity with CPython’s sqlite3 targeted for v0.12.
dbmNot supported

Development and introspection

ModuleStatusNotes
sysSupportedsys.platform, sys.argv, sys.path, sys.version, sys.exit, and most others. sys.settrace and sys.setprofile work (used by the coverage tool).
inspectSupported
tracebackSupported
warningsSupported
loggingSupported
unittestSupportedAll of unittest works. bunpy test is preferred but not required.
pdbPartialBasic breakpoint and stepping. TUI line-editor not available in all terminals.
profile / cProfileSupported
disSupportedDisassembles to goipy’s internal bytecode format, not CPython bytecode.
astSupported
tokenizeSupported
importlibSupportedimportlib.import_module, importlib.util, importlib.resources all work.

GUI and multimedia (not supported)

tkinter, turtle, idlelib, curses, readline, ossaudiodev, winsound – these modules are permanently out of scope. bunpy is a server-side runtime. If you need a GUI, use a separate Python install.

Platform support

PlatformArchitectureStatusNotes
macOSarm64 (Apple Silicon)SupportedPrimary development platform.
macOSx86_64SupportedTested on every release.
Linuxx86_64SupportedTested in CI.
Linuxarm64SupportedTested in CI; used for AWS Graviton and Raspberry Pi deployments.
Windowsx86_64SupportedPowerShell install, GitHub Actions tested.
Windowsarm64Not supportedNo demand signal yet. File an issue if you need it.
FreeBSDanyNot supported

All platforms receive binary releases on every tagged commit starting from v0.10.29.

Bun API coverage

bunpy exposes a subset of the Bun global APIs. The goal is not full compatibility with Bun’s JavaScript API surface – it is to give Python code the same ergonomic primitives that make Bun pleasant to use.

Globals

GlobalStatusNotes
fetchSupportedFull WHATWG Fetch API. Returns a Response with .text(), .json(), .bytes(), .status, .headers, .ok.
AbortControllerSupported
AbortSignalSupportedAbortSignal.timeout(ms) supported.
URLSupportedWHATWG URL standard.
URLSearchParamsSupported
TextEncoder / TextDecoderSupported
setTimeout / setIntervalSupportedAvailable in async contexts and in bunpy.serve handlers.
clearTimeout / clearIntervalSupported
consoleSupportedconsole.log, console.error, console.warn, console.time, console.timeEnd.
cryptoPartialcrypto.randomUUID() and crypto.getRandomValues() work. SubtleCrypto not yet available.
performancePartialperformance.now() works. performance.mark and performance.measure not yet available.

Bun namespace

APIStatusNotes
Bun.serve(options)SupportedAvailable via from bunpy.serve import serve. The Bun.serve spelling is also accepted.
Bun.file(path)SupportedReturns a lazy file handle. .text(), .json(), .bytes(), .stream(), .size, .type.
Bun.write(path, data)SupportedWrites a string, bytes, or Bun.file to disk.
Bun.spawn(cmd)SupportedSpawns a subprocess. .stdout, .stderr, .stdin are streams. .exited is an awaitable.
Bun.which(name)SupportedResolves an executable name to its full path.
Bun.envSupportedDict-like access to environment variables.
Bun.versionSupportedReturns the bunpy version string.
Bun.hash(data)SupportedWyhash of a string or bytes.
Bun.sleep(ms)SupportedAwaitable sleep. await Bun.sleep(100).
Bun.gc()SupportedTriggers a GC cycle on the goipy heap.
Bun.inspect(value)SupportedPretty-prints any value to a string, similar to repr but richer.
Bun.build(options)Not supportedJavaScript bundler API; not applicable to Python.
Bun.plugin(plugin)Not supportedJavaScript plugin system; not applicable.
Bun.websocketNot supportedPlanned for v0.12 via bunpy.websocket.
Bun.sqlNot supportedPlanned for v0.12 via bunpy.sqlite.

What is intentionally absent

Some Bun APIs exist specifically because JavaScript/TypeScript has module systems and compilation models that do not apply to Python. Bun.Transpiler, Bun.resolveSync, import.meta, and the --preload mechanism have no Python equivalent. They are absent by design, not by oversight.