Runtime coverage
leanprover/lean4:v4.35.0 · generated 2026-10-28
Most of the libraries that ship with Lean—Init, Std, and Lean—compile to JavaScript like any other Lean code. The exceptions are externs: functions that native Lean implements in C, which the LeanScript runtime has to implement in JavaScript instead. Of the 907 externs that a program can call, this page shows which ones the runtime implements on each target.
Externs that a Lean declaration implements through @[export] aren't counted, since the compiler calls that declaration instead.
| Library | Node | Browser |
|---|---|---|
| Init | 92.3%599 / 649 | 88.3%573 / 649 |
| Std | 0.0%0 / 100 | 0.0%0 / 100 |
| Lean | 0.0%0 / 158 | 0.0%0 / 158 |
| Total | 66.0%599 / 907 | 63.2%573 / 907 |
Every targetSome targetsNot implemented
InitNode 599/649 · Browser 573/649
IONode 17/21Browser 14/217 not on every target
IO.appPathno targetIO.currentDirNode onlyIO.getNumHeartbeatsno targetIO.getStdinNode onlyIO.getTIDno targetIO.setNumHeartbeatsno targetIO.setStdinNode only
FloatArrayNode 0/14Browser 0/1414 not on every target
FloatArray.datano targetFloatArray.emptyWithCapacityno targetFloatArray.getno targetFloatArray.get!no targetFloatArray.markLinearno targetFloatArray.mkno targetFloatArray.propagateMarkno targetFloatArray.pushno targetFloatArray.setno targetFloatArray.set!no targetFloatArray.sizeno targetFloatArray.ugetno targetFloatArray.usetno targetFloatArray.usizeno target
IO.FS.HandleNode 9/12Browser 0/1212 not on every target
IO.FS.Handle.flushNode onlyIO.FS.Handle.getLineNode onlyIO.FS.Handle.isTtyNode onlyIO.FS.Handle.lockno targetIO.FS.Handle.mkNode onlyIO.FS.Handle.putStrNode onlyIO.FS.Handle.readNode onlyIO.FS.Handle.rewindNode onlyIO.FS.Handle.truncateNode onlyIO.FS.Handle.tryLockno targetIO.FS.Handle.unlockno targetIO.FS.Handle.writeNode only
IO.FSNode 6/8Browser 0/88 not on every target
IO.FS.createDirNode onlyIO.FS.createTempDirno targetIO.FS.createTempFileno targetIO.FS.hardLinkNode onlyIO.FS.realPathNode onlyIO.FS.removeDirNode onlyIO.FS.removeFileNode onlyIO.FS.renameNode only
IO.ProcessNode 5/6Browser 0/66 not on every target
IO.Process.exitNode onlyIO.Process.forceExitNode onlyIO.Process.getCurrentDirNode onlyIO.Process.getPIDNode onlyIO.Process.setCurrentDirNode onlyIO.Process.spawnno target
System.PlatformNode 4/6Browser 4/62 not on every target
System.Platform.getIsLinuxno targetSystem.Platform.getTargetno target
IO.Process.ChildNode 0/5Browser 0/55 not on every target
IO.Process.Child.killno targetIO.Process.Child.pidno targetIO.Process.Child.takeStdinno targetIO.Process.Child.tryWaitno targetIO.Process.Child.waitno target
Lean.versionNode 0/5Browser 0/55 not on every target
Lean.version.getIsReleaseno targetLean.version.getSpecialDescno targetLean.version.getMajorno targetLean.version.getMinorno targetLean.version.getPatchno target
RuntimeNode 0/4Browser 0/44 not on every target
Runtime.forgetno targetRuntime.holdno targetRuntime.markMultiThreadedno targetRuntime.markPersistentno target
System.FilePathNode 3/3Browser 0/33 not on every target
System.FilePath.metadataNode onlySystem.FilePath.readDirNode onlySystem.FilePath.symlinkMetadataNode only
Lean.InternalNode 0/2Browser 0/22 not on every target
Lean.Internal.hasLLVMBackendno targetLean.Internal.isStage0no target
ShareCommon.ObjectNode 0/2Browser 0/22 not on every target
ShareCommon.Object.eqno targetShareCommon.Object.hashno target
System.Platform.InternalNode 0/1Browser 0/11 not on every target
StdNode 0/100 · Browser 0/100
Std.Internal.UV.SystemNode 0/28Browser 0/2828 not on every target
Std.Internal.UV.System.availableMemoryno targetStd.Internal.UV.System.chdirno targetStd.Internal.UV.System.constrainedMemoryno targetStd.Internal.UV.System.cpuInfono targetStd.Internal.UV.System.cwdno targetStd.Internal.UV.System.exePathno targetStd.Internal.UV.System.freeMemoryno targetStd.Internal.UV.System.getProcessTitleno targetStd.Internal.UV.System.getrusageno targetStd.Internal.UV.System.hrtimeno targetStd.Internal.UV.System.osEnvironno targetStd.Internal.UV.System.osGetGroupno targetStd.Internal.UV.System.osGetHostnameno targetStd.Internal.UV.System.osGetPasswdno targetStd.Internal.UV.System.osGetPidno targetStd.Internal.UV.System.osGetPpidno targetStd.Internal.UV.System.osGetPriorityno targetStd.Internal.UV.System.osGetenvno targetStd.Internal.UV.System.osHomedirno targetStd.Internal.UV.System.osSetPriorityno targetStd.Internal.UV.System.osSetenvno targetStd.Internal.UV.System.osTmpdirno targetStd.Internal.UV.System.osUnameno targetStd.Internal.UV.System.osUnsetenvno targetStd.Internal.UV.System.randomno targetStd.Internal.UV.System.setProcessTitleno targetStd.Internal.UV.System.totalMemoryno targetStd.Internal.UV.System.uptimeno target
Std.Internal.UV.TCP.SocketNode 0/16Browser 0/1616 not on every target
Std.Internal.UV.TCP.Socket.acceptno targetStd.Internal.UV.TCP.Socket.bindno targetStd.Internal.UV.TCP.Socket.cancelAcceptno targetStd.Internal.UV.TCP.Socket.cancelRecvno targetStd.Internal.UV.TCP.Socket.connectno targetStd.Internal.UV.TCP.Socket.getPeerNameno targetStd.Internal.UV.TCP.Socket.getSockNameno targetStd.Internal.UV.TCP.Socket.keepAliveno targetStd.Internal.UV.TCP.Socket.listenno targetStd.Internal.UV.TCP.Socket.newno targetStd.Internal.UV.TCP.Socket.noDelayno targetStd.Internal.UV.TCP.Socket.recv?no targetStd.Internal.UV.TCP.Socket.sendno targetStd.Internal.UV.TCP.Socket.shutdownno targetStd.Internal.UV.TCP.Socket.tryAcceptno targetStd.Internal.UV.TCP.Socket.waitReadableno target
Std.Internal.UV.UDP.SocketNode 0/15Browser 0/1515 not on every target
Std.Internal.UV.UDP.Socket.bindno targetStd.Internal.UV.UDP.Socket.cancelRecvno targetStd.Internal.UV.UDP.Socket.connectno targetStd.Internal.UV.UDP.Socket.getPeerNameno targetStd.Internal.UV.UDP.Socket.getSockNameno targetStd.Internal.UV.UDP.Socket.newno targetStd.Internal.UV.UDP.Socket.recvno targetStd.Internal.UV.UDP.Socket.sendno targetStd.Internal.UV.UDP.Socket.setBroadcastno targetStd.Internal.UV.UDP.Socket.setMembershipno targetStd.Internal.UV.UDP.Socket.setMulticastInterfaceno targetStd.Internal.UV.UDP.Socket.setMulticastLoopno targetStd.Internal.UV.UDP.Socket.setMulticastTTLno targetStd.Internal.UV.UDP.Socket.setTTLno targetStd.Internal.UV.UDP.Socket.waitReadableno target
Std.BaseSharedMutexNode 0/7Browser 0/77 not on every target
Std.BaseSharedMutex.newno targetStd.BaseSharedMutex.readno targetStd.BaseSharedMutex.tryReadno targetStd.BaseSharedMutex.tryWriteno targetStd.BaseSharedMutex.unlockReadno targetStd.BaseSharedMutex.unlockWriteno targetStd.BaseSharedMutex.writeno target
Std.Internal.UV.TimerNode 0/5Browser 0/55 not on every target
Std.Internal.UV.Timer.cancelno targetStd.Internal.UV.Timer.mkno targetStd.Internal.UV.Timer.nextno targetStd.Internal.UV.Timer.resetno targetStd.Internal.UV.Timer.stopno target
Std.BaseMutexNode 0/4Browser 0/44 not on every target
Std.BaseMutex.lockno targetStd.BaseMutex.newno targetStd.BaseMutex.tryLockno targetStd.BaseMutex.unlockno target
Std.BaseRecursiveMutexNode 0/4Browser 0/44 not on every target
Std.BaseRecursiveMutex.lockno targetStd.BaseRecursiveMutex.newno targetStd.BaseRecursiveMutex.tryLockno targetStd.BaseRecursiveMutex.unlockno target
Std.CondvarNode 0/4Browser 0/44 not on every target
Std.Condvar.newno targetStd.Condvar.notifyAllno targetStd.Condvar.notifyOneno targetStd.Condvar.waitno target
Std.Internal.UV.SignalNode 0/4Browser 0/44 not on every target
Std.Internal.UV.Signal.cancelno targetStd.Internal.UV.Signal.mkno targetStd.Internal.UV.Signal.nextno targetStd.Internal.UV.Signal.stopno target
Std.Internal.UV.DNSNode 0/2Browser 0/22 not on every target
Std.Internal.UV.DNS.getAddrInfono targetStd.Internal.UV.DNS.getNameInfono target
Std.Internal.UV.LoopNode 0/2Browser 0/22 not on every target
Std.Internal.UV.Loop.aliveno targetStd.Internal.UV.Loop.configureno target
Std.Net.IPv4AddrNode 0/2Browser 0/22 not on every target
Std.Net.IPv4Addr.ofStringno targetStd.Net.IPv4Addr.toStringno target
Std.Net.IPv6AddrNode 0/2Browser 0/22 not on every target
Std.Net.IPv6Addr.ofStringno targetStd.Net.IPv6Addr.toStringno target
Std.Time.Database.WindowsNode 0/2Browser 0/22 not on every target
LeanNode 0/158 · Browser 0/158
Lean.LLVMNode 0/81Browser 0/8181 not on every target
Lean.LLVM.addAttributeAtIndexno targetLean.LLVM.addCaseno targetLean.LLVM.addFunctionno targetLean.LLVM.addGlobalno targetLean.LLVM.appendBasicBlockInContextno targetLean.LLVM.arrayTypeno targetLean.LLVM.buildAddno targetLean.LLVM.buildAllocano targetLean.LLVM.buildBrno targetLean.LLVM.buildCall2no targetLean.LLVM.buildCondBrno targetLean.LLVM.buildGEP2no targetLean.LLVM.buildGlobalStringno targetLean.LLVM.buildICmpno targetLean.LLVM.buildInBoundsGEP2no targetLean.LLVM.buildLoad2no targetLean.LLVM.buildMulno targetLean.LLVM.buildNotno targetLean.LLVM.buildPtrToIntno targetLean.LLVM.buildRetno targetLean.LLVM.buildSextno targetLean.LLVM.buildSextOrTruncno targetLean.LLVM.buildStoreno targetLean.LLVM.buildSubno targetLean.LLVM.buildSwitchno targetLean.LLVM.buildUnreachableno targetLean.LLVM.buildZextno targetLean.LLVM.clearInsertionPositionno targetLean.LLVM.constArrayno targetLean.LLVM.constIntno targetLean.LLVM.constPointerNullno targetLean.LLVM.constStringno targetLean.LLVM.countBasicBlocksno targetLean.LLVM.countParamsno targetLean.LLVM.createBuilderInContextno targetLean.LLVM.createContextno targetLean.LLVM.createMemoryBufferWithContentsOfFileno targetLean.LLVM.createModuleno targetLean.LLVM.createStringAttributeno targetLean.LLVM.createTargetMachineno targetLean.LLVM.disposeModuleno targetLean.LLVM.disposeTargetMachineno targetLean.LLVM.doubleTypeInContextno targetLean.LLVM.floatTypeInContextno targetLean.LLVM.functionTypeno targetLean.LLVM.getBasicBlockParentno targetLean.LLVM.getDefaultTargetTripleno targetLean.LLVM.getEntryBasicBlockno targetLean.LLVM.getFirstFunctionno targetLean.LLVM.getFirstGlobalno targetLean.LLVM.getFirstInstructionno targetLean.LLVM.getInsertBlockno targetLean.LLVM.getNamedFunctionno targetLean.LLVM.getNamedGlobalno targetLean.LLVM.getNextFunctionno targetLean.LLVM.getNextGlobalno targetLean.LLVM.getParamno targetLean.LLVM.getTargetFromTripleno targetLean.LLVM.getUndefno targetLean.LLVM.intTypeInContextno targetLean.LLVM.isDeclarationno targetLean.LLVM.linkModulesno targetLean.LLVM.llvmInitializeTargetInfono targetLean.LLVM.moduleToStringno targetLean.LLVM.opaquePointerTypeInContextno targetLean.LLVM.parseBitcodeno targetLean.LLVM.pointerTypeno targetLean.LLVM.positionBuilderAtEndno targetLean.LLVM.positionBuilderBeforeno targetLean.LLVM.printModuletoFileno targetLean.LLVM.printModuletoStringno targetLean.LLVM.setDLLStorageClassno targetLean.LLVM.setInitializerno targetLean.LLVM.setLinkageno targetLean.LLVM.setTailCallno targetLean.LLVM.setVisibilityno targetLean.LLVM.targetMachineEmitToFileno targetLean.LLVM.typeOfno targetLean.LLVM.verifyModuleno targetLean.LLVM.voidTypeno targetLean.LLVM.writeBitcodeToFileno target
Lean.ExprNode 0/21Browser 0/2121 not on every target
Lean.Expr.abstractno targetLean.Expr.abstractRangeno targetLean.Expr.datano targetLean.Expr.dbgToStringno targetLean.Expr.equalno targetLean.Expr.eqvno targetLean.Expr.findExtImpl?no targetLean.Expr.findImpl?no targetLean.Expr.hasLooseBVarno targetLean.Expr.instantiateno targetLean.Expr.instantiate1no targetLean.Expr.instantiateRangeno targetLean.Expr.instantiateRevno targetLean.Expr.instantiateRevRangeno targetLean.Expr.liftLooseBVarsno targetLean.Expr.lowerLooseBVarsno targetLean.Expr.ltno targetLean.Expr.mkAppDatano targetLean.Expr.mkDatano targetLean.Expr.quickLtno targetLean.Expr.replaceImplno target
LeanNode 0/20Browser 0/2020 not on every target
Lean.closureMaxArgsFnno targetLean.displayCumulativeProfilingTimesno targetLean.getMaxCtorFieldsno targetLean.getMaxCtorScalarsSizeno targetLean.getMaxCtorTagno targetLean.getUSizeSizeno targetLean.instantiateExprMVarsImpno targetLean.instantiateLevelMVarsImpno targetLean.libUVVersionFnno targetLean.maxSmallNatFnno targetLean.mkCasesOnImpno targetLean.openSSLVersionFnno targetLean.profileitno targetLean.runInitno targetLean.runModInitCoreno targetLean.getManualRootno targetLean.decodeLossyUTF8no targetLean.emitLLVMno targetLean.initLLVMno targetLean.runMainno target
Lean.InternalNode 0/14Browser 0/1414 not on every target
Lean.Internal.enableDebugno targetLean.Internal.getBelieverTrustLevelno targetLean.Internal.getBuildTypeno targetLean.Internal.getDefaultMaxHeartbeatno targetLean.Internal.getDefaultMaxMemoryno targetLean.Internal.getDefaultVerboseno targetLean.Internal.getOptionOverridesno targetLean.Internal.hasAddressSanitizerno targetLean.Internal.isDebugno targetLean.Internal.isMultiThreadno targetLean.Internal.setExitOnPanicno targetLean.Internal.setMaxHeartbeatno targetLean.Internal.setMaxMemoryno targetLean.Internal.setThreadStackSizeno target
Lean.Compiler.FFINode 0/4Browser 0/44 not on every target
Lean.CompactedRegionNode 0/3Browser 0/33 not on every target
Lean.CompactedRegion.freeno targetLean.CompactedRegion.readno targetLean.CompactedRegion.saveno target
Lean.EnvironmentNode 0/3Browser 0/33 not on every target
Lean.Environment.addDeclCheckno targetLean.Environment.addDeclWithoutCheckingno targetLean.Environment.evalConstCoreno target
Lean.KernelNode 0/3Browser 0/33 not on every target
Lean.Kernel.checkno targetLean.Kernel.isDefEqno targetLean.Kernel.whnfno target
Lean.DynlibNode 0/2Browser 0/22 not on every target
Lean.Dynlib.get?no targetLean.Dynlib.loadno target
Lean.Kernel.EnvironmentNode 0/2Browser 0/22 not on every target
Lean.LevelNode 0/2Browser 0/22 not on every target
Lean.Level.beqno targetLean.Level.mkDatano target