ARE WE NATIVE YET?

Live compatibility status of pyscriptc: which builtins, standard-library modules and PyPI packages compile to native code today, and which run on the island tier instead.

generated 2026-11-14 at commit a876d9e7eb05 · released version 0.10.0b1 · install uv tool install pyscriptc

99%85 of 86 probed builtins and stdlib modules compile (full or partial)

Two planes

A package can lower to machine code with no interpreter inside it, or it can run on the island tier, where an embedded CPython executes the code the subset cannot lower. The native column is the fence ratio over the package's own definitions. The island column is a run receipt: the package was compiled with the island fallback and its output was compared against CPython.

native51%1365 of 2684 definitions
island1%22 of 2684 definitions
blocked48%1297 of 2684 definitions

18 of 18pinned packages were measured to run on the island tieron 2026-11-14(18 of 18 receipts matched CPython).The probe is benchmarks/compat/top100/island_probe.py.

Builtins

3 full ·14 partial ·1 none

18 probed

Standard library

0 full ·68 partial ·0 none

68 probed

Pinned packages

2 full ·8 partial ·8 none

18 probed

Support at a glance

One square per probed item. Green is full, amber partial, red none. Hover for details; click a square to jump to its table row.

Adoption ladder

How far a script gets: compiles, and compiles plus passes its output checks. Lanes say where each import lands in the compiled tree.

RungCorpusScriptsCompiledPassed
R1 — Single-file scriptbenchmarks/scripts_corpus/scripts452219
R2 — Multi-module treebenchmarks/scripts_corpus/trees544
R0 — Vendored real scriptbenchmarks/real_scripts/scripts3922 of 39 (5%)
R0 rate5%2 of 39 vendored scripts lower with zero fences
R0 fences294fences across the corpus
statements3scripts released
call-table2scripts released
inference2scripts released
R0 trend: the last 4 nightly values.
DatePassedCorpusRate
2026-11-092395%
2026-11-102395%
2026-11-132395%
2026-11-142395%
native87%288 imports
pack0%1 imports
extern12%41 imports
island0%0 imports
absent0%0 imports

Builtins

ItemStatusCountUnsupportedFences
abs, all, any, bin, chr, divmod, enumerate, getattr, hasattr, hex, iter, len, map, next, oct, ord, pow, range, repr, reversed, round, sum, bool, setfull24——
printpartial1file= other than sys.stdout or sys.stderrPS2002
inputpartial1prompt argumentPS2003
intpartial1unknown keyword, int(bool)PS2003
floatpartial1float(bool)PS2003
strpartial1str of a user classPS2003
listpartial1list(str)PS2002
min, maxpartial2key= a function namePS2003
sortedpartial1key= a function name, sorted(dict)PS2003
zipfull1——
filterfull1——
isinstancepartial1tuple of typesPS2001
openpartial1keywords other than encoding=PS2003
idpartial1id of intPS2003
frozensetpartial1non-constant argumentPS2002
evalpartial1anything but a constant expressionPS2002
BaseException and subclassespartial7ExceptionGroupPS2003
bytes, bytearray, memoryview, callable, complex, dict, format, tuple, type, object, super, vars, dir, globals, locals, exec, issubclass, ascii, setattr, delattr, slice, hash, __import__none23all (`dict` displays and `{}` work; `dict(...)` does not)PS2002

Standard library

ItemStatusCountUnsupportedFences
mathpartial1fsum, comb, perm, isqrt, copysign, cbrt, prod, erf, erfc, lgamma, gamma, log with a basePS2001, PS2003
repartial1finditer, 5+ groups, sub with a functionPS1001, PS2001, PS2002
jsonpartial1ensure_ascii=False, JSONDecodeErrorPS1106, PS2003
tomllibpartial1load (file object), keyword argumentsPS2001, PS2003
dotenvpartial1stream, verbose, interpolate, override, encoding arguments, other dotenv members (find_dotenv, set_key, DotEnv), interpolation ($VAR stays literal)PS2001, PS2003
yamlpartial1load, dump, safe_dump, keyword argumentsPS2001, PS2003
jwtpartial1RS256 and other asymmetric algorithms, non-literal algorithm, other jwt members (get_unverified_header, PyJWTError), claims beyond str values (exp, aud), options dict, headers argumentPS1003, PS2001, PS2003
orjsonpartial1default callable, other OPT_ flags, other orjson members (Fragment, JSONDecodeError)PS2001, PS2003
pyscriptc_ndarray, numpypartial2other module members (dot, linalg, random, fft, einsum), other methods (argsort, clip, cumsum, fill), dtype outside the four, negative slice stepPS2001, PS2003
urllib.request, urllib.errorpartial2urlopen header keyword, other urllib.request members (build_opener, install_opener, urlretrieve), HTTPError attribute readsPS2001, PS2003
urllib.parsepartial1urlparse, urljoin, urlunsplit, parse_qslPS2001
base64partial1b32, b16, a85, encodebytesPS2001
hashlibpartial1blake2, sha3, sha224, new, pbkdf2_hmac, incremental update (no-argument constructor)PS2001, PS2003
structpartial1non-literal format, native-alignment format (no byte-order prefix), pack_into, iter_unpack, StructPS2001
datetimepartial1timezone and tzinfo, utcnow, datetime.strftimePS2001
timepartial1time_ns, ctime, process_timePS2001
collectionspartial1ChainMapPS1106
functoolspartial1reduce with a lambda, reduce with an initializer, partial, wraps, lru_cache, cmp_to_key, cache, total_orderingPS2001, PS2002
itertoolspartial1count, cycle (infinite), tee (returns a pair, not an iterator), permutations without a countPS2001, PS2002, PS2003
operatorpartial1itemgetter, attrgetter, methodcaller, and_, not_, getitemPS2001
contextlibpartial1closing, redirect_stdout, ExitStack, contextmanagerPS2001
ospartial1scandir, system, urandom, cpu_count, kill, rmdir, getuid, keyword arguments (makedirs exist_ok)PS2001, PS2003
posixpathpartial1commonpath, ismount, lexistsPS2001
pathlibpartial1rglob, absolute, rmdir, with_suffix, relative_to, resolve to str, PurePathPS2001
statpartial1S_IMODE, S_ISFIFO, S_ISSOCK, filemodePS2001
fnmatchpartial1fnmatchcase, translatePS2001
warningspartial1warn with a category, simplefilterPS2001
iopartial1TextIOWrapper, BufferedReader, io.openPS1106
syspartial1stdin, path, modules, getsizeof, getrecursionlimit, stdout.flushPS2001
importlibpartial1import_module, reloadPS2001
inspectpartial1getsource, isclass, signature, iscoroutinefunctionPS2001
threadingpartial1main_thread, Thread target is a callable, Timer, Lock in `with`PS1003, PS1106, PS2001, PS2002
queuepartial1PriorityQueue, a queue without an element annotation, an unknown queue method, a bool element typePS1001, PS1106, PS2001, PS2002
loggingpartial1basicConfig(level=...), format args (`logging.info(fmt, a)`), exception, handlers (StreamHandler)PS2001, PS2003
asynciopartial1bare Queue annotation (element type needed), get_event_loop, sleep outside a coroutinePS1001, PS2001, PS2002
subprocesspartial1Popen, getoutputPS2001
socketpartial1socket(), gethostbynamePS2001
sslpartial1contexts (create_default_context)PS2001
ctypespartial1CDLL, c_int(...), sizeof of other typesPS2001
stringpartial1capwords, TemplatePS2001
bisectpartial1key=, lo=, hi=PS2001
heapqpartial1merge, heapreplace, heappushpop, the *_max family, key=PS2001
statisticspartial1multimode, median_grouped, correlation, linear_regression, mode over float data, quantiles n= outside 2, 4, 8PS1003, PS2001, PS2003
errnopartial1errorcodePS2001
importlib.resourcespartial1read_text, is_resourcePS2001
hmacpartial1hexdigest, digestmod=PS2001
unicodedatapartial1ucd_3_2_0 (also: Latin-1 only)PS2001
tempfilepartial1TemporaryDirectory, mkstemp with suffix/prefix/dir/textPS2003
uuidpartial1.int, .urn, .bytes and other names, names outside the subsetPS2001
binasciipartial1hexlify of str, names outside the subsetPS1003, PS2001
shlexpartial1comments as a variable, the shlex class and modesPS1003, PS2001
secretspartial1the count as a variable, names outside the subsetPS1003, PS2001
atexitpartial1register of a function with arguments, unregisterPS2001
shutilpartial1make_archive, disk_usage, chownPS2001
enumpartial1Flag, str-valued members, methods on the enumPS2002
dataclassespartial1field(), asdict, order= and other optionsPS1201, PS2001
randompartial1Random, vonmisesvariate, paretovariate, choices(cum_weights=)PS2001, PS2003
csvpartial1restkey, restval, Sniffer, Sniffer, DialectPS2001, PS2003
textwrappartial1TextWrapperPS2001
copypartial1copy of a user classPS2001
argparsepartial1subparsers, nargs=, choices=PS2003
platformpartial1processorPS2001
calendarpartial1monthcalendarPS2001
zipfilepartial1ZipFilePS2001
tarfilepartial1TarFilePS2001
selectorspartial1a fileobj argument (the typed socket handle is #229), other selector classes (EpollSelector, PollSelector, KqueueSelector, DevpollSelector, BaseSelector), get_map, the key's fileobj and data (they ride the #229 handle)PS1003, PS1106, PS2001
typing, typing_extensionspartial2Any annotation, bare Callable, multi-arm union, optional of a multi-arm union, Literal annotation, Self return, TypeAlias declaration, PEP 695 type alias, PEP 695 TypeVar parameter, forward reference string, TypedDict class base, NamedTuple class base, NewType value, ParamSpec value, cast value, get_type_hints reflection, isinstance with a generic, __annotations__ readPS1101, PS1102, PS1103, PS1104, PS1105, PS1106, PS2001, PS2002
collections.abcpartial1name as a value, isinstance with an abstract basePS2001, PS2002

Pinned packages

The pinned corpus of PyPI packages, one consumer program each. The native column is the fence ratio over the package's own definitions: how much of it lowers to machine code without an interpreter. The island column is the run receipt: the package compiled with the island fallback and its output was compared against CPython.

PackageVersionNativeIslandPlane splitDefinitionsFencedTop fences
certifi2026.7.22fullruns100% native · 0% island · 0% blocked50—
colorama0.4.6noneruns40% native · 0% island · 60% blocked7742PS2002 (42), PS1001 (36), PS2003 (3)
python-dotenv1.2.4noneruns39% native · 0% island · 61% blocked7542PS2002 (81), PS1106 (16), PS1001 (8)
filelock4.1.1partialruns58% native · 1% island · 41% blocked641246PS2002 (433), PS2001 (101), PS1103 (49)
h110.16.0noneruns38% native · 13% island · 50% blocked13374PS2002 (107), PS1106 (17), PS1203 (15)
idna3.20noneruns32% native · 0% island · 68% blocked5637PS2002 (48), PS2003 (29), PS1101 (7)
iniconfig2.3.1partialruns56% native · 0% island · 44% blocked3413PS2002 (8), PS1003 (5), PS1101 (4)
jmespath1.1.0noneruns42% native · 1% island · 58% blocked200109PS1001 (101), PS2002 (16), PS2001 (1)
pyjwt2.15.1partialruns66% native · 0% island · 34% blocked17151PS2002 (51), PS1101 (14), PS2001 (13)
mdurl0.1.2partialruns42% native · 0% island · 58% blocked126PS2002 (15), PS2003 (2), PS2001 (1)
packaging26.3partialruns49% native · 0% island · 51% blocked558271PS2002 (222), PS1106 (90), PS1103 (53)
pathspec1.1.1noneruns36% native · 0% island · 64% blocked13276PS2002 (107), PS1106 (19), PS1003 (19)
platformdirs4.13.0partialruns58% native · 0% island · 42% blocked388155PS2002 (145), PS1102 (33), PS2001 (23)
pytz2026.5partialruns69% native · 0% island · 31% blocked10232PS2002 (31), PS1001 (18), PS2001 (3)
shellingham1.5.4noneruns24% native · 0% island · 76% blocked2519PS2002 (27), PS1001 (18), PS2001 (1)
trove-classifiers2026.9.21.13partialruns—00PS2002 (1)
tzdata2026.5fullruns—00—
zipp4.1.1noneruns21% native · 0% island · 79% blocked7557PS1001 (52), PS2002 (15), PS2001 (3)

Fence census

Fence diagnostics across the pinned PyPI corpus, by code. A fence is a reported, numbered divergence — never a silent miscompile.

CodeTitleCountPackages
PS2002construct not supported134916
PS1001annotation missing or not supported33113
PS2001stdlib name not supported22214
PS1106annotation names a type the compiler does not take2099
PS1103generic alias annotation1339
PS1101union annotation999
PS2003call arguments not supported9310
PS1003type mismatch578
PS1104dynamic or structural annotation526
PS1102Optional annotation446
PS1201decorator314
PS1203class header form255
PS1105forward reference annotation146
PS2004operator or operand not supported125
PS2006decorator expression is not a typed callable62
PS1204class body statement42
PS4203finalizer refused11
PS4201dynamic attribute protocol refused11

History

DateCommitPackages fullPartialNoneFences
2026-11-1391ef7017c7c62882585
2026-11-14a876d9e7eb052882683