[{"url":"/ai/","title":"AI entrypoint","description":"Overview and key resources for LLMs and AI agents using the Ende docs","headings":[{"text":"Ende overview","slug":"ende-overview"},{"text":"Usage highlights for agents","slug":"usage-highlights-for-agents"},{"text":"Everything starts with the CLI","slug":"everything-starts-with-the-cli"},{"text":"“Secure by default” means you must think about permissions","slug":"secure-by-default-means-you-must-think-about-permissions"},{"text":"Ende projects are usually centered around ende.json","slug":"ende-projects-are-usually-centered-around-endejson"},{"text":"Built-in testing, formatting, linting (use them)","slug":"built-in-testing-formatting-linting-use-them"},{"text":"Bootstrapping: ende init gets you to a working project fast","slug":"bootstrapping-ende-init-gets-you-to-a-working-project-fast"},{"text":"Key resources","slug":"key-resources"},{"text":"Usage notes","slug":"usage-notes"}],"text":"This page is a short entrypoint for LLMs and AI agents consuming the Ende documentation. Ende is a secure JavaScript and TypeScript runtime built on V8 and Rust that ships as a single binary with batteries included: TypeScript transpilation, formatting, linting, testing, and a rich standard library all work out of the box. Its explicit permission model (--allow-net, --allow-read, etc.) keeps programs sandboxed by default, which is especially useful for AI agents that need predictable side effects when running untrusted code snippets. Ende is fundamentally a command-line program. Most workflows boil down to learning a handful of subcommands and flags. Common starting points: By default, ende run executes in a sandbox. If code needs the network or filesystem, you grant it explicitly with --allow-* flags (or accept an interactive prompt, when applicable). Example: A ende.json (or ende.jsonc) file configures the runtime and tooling: TypeScript settings, lint/format behavior, import maps, tasks, and more. Ende will auto-detect it up the directory tree. Ende projects import packages from JSR with jsr: specifiers. Ende does not support npm packages, Node built-ins (node:), or CommonJS. Two fields in the ende.json matter constantly: Tasks: lightweight “scripts” you run with ende task: Tasks are the easiest way to standardize permissions and flags so users don’t have to remember them. Imports: an import map that lets you use clean “bare specifiers”: Then in code: Dependencies can be added with the ende add command. Ende uses ES modules and can import from multiple sources: JSR (third-party modules and the Ende Standard Library) HTTPS URLs Ende’s standard workflow expects you to lean on the CLI: ende test finds and runs tests by convention ende fmt formats code ende lint lints code For agents: when someone asks “how do I run this?” in Ende, the answer is usually a combination of (a) the right permissions and (b) the right built-in command. To start a project, Ende provides"},{"url":"/api/","title":"API reference","description":"The APIs built into Ende and its standard library."},{"url":"/api/ende/","title":"Ende namespace","description":"The Ende global holds the APIs that aren’t web standards: files, networking, subprocesses, permissions, testing and more. Deno is an alias of Ende."},{"url":"/api/ende/cloud/","title":"Cloud — Ende namespace","description":"Schedule recurring tasks."},{"url":"/api/ende/desktop/","title":"Desktop — Ende namespace","description":"Windows, menus, the tray, the dock and updates for apps built with `ende desktop`. Only available in desktop apps."},{"url":"/api/ende/errors/","title":"Errors — Ende namespace","description":"Error types raised by Ende APIs, for handling specific failures."},{"url":"/api/ende/fetch/","title":"Fetch — Ende namespace","description":"HTTP client options for `fetch`: proxies, certificates and connection settings."},{"url":"/api/ende/ffi/","title":"FFI — Ende namespace","description":"Foreign Function Interface. Call functions from shared libraries (e.g., C/C++) directly from Ende."},{"url":"/api/ende/file-system/","title":"File System — Ende namespace","description":"File System APIs for working with files, directories, and file metadata. Includes functions for reading, writing, and manipulating file paths."},{"url":"/api/ende/gpu/","title":"GPU — Ende namespace","description":"GPU programming and rendering. Efficiently use a device’s graphics processing unit (GPU) for high-performance computations and complex image rendering."},{"url":"/api/ende/http-server/","title":"HTTP Server — Ende namespace","description":"Handling HTTP requests, serving responses, and managing server behavior."},{"url":"/api/ende/io/","title":"I/O — Ende namespace","description":"Interfaces for reading, writing, seeking, and managing resources. For handling of data streams, file I/O, and console interactions."},{"url":"/api/ende/linter/","title":"Linter — Ende namespace","description":"Interfaces and helpers for writing and testing custom lint rules."},{"url":"/api/ende/network/","title":"Network — Ende namespace","description":"A wide range of networking tasks, from low-level connections to high-level server creation. Handle HTTP requests, WebSocket communication, and DNS resolution. Useful for building web servers, clients, and networking tools."},{"url":"/api/ende/permissions/","title":"Permissions — Ende namespace","description":"Permission system controls access to resources (e.g., file system, network, environment variables)."},{"url":"/api/ende/runtime/","title":"Runtime — Ende namespace","description":"System-related functionality, process management, and observability."},{"url":"/api/ende/subprocess/","title":"Subprocess — Ende namespace","description":"Spawn and manage child processes, execute commands, and collect output. Useful for executing external programs from Ende."},{"url":"/api/ende/telemetry/","title":"Telemetry — Ende namespace","description":"OpenTelemetry observability integration tools."},{"url":"/api/ende/testing/","title":"Testing — Ende namespace","description":"Robust testing and benchmarking capabilities to ensure code quality and performance."},{"url":"/api/ende/websockets/","title":"WebSockets — Ende namespace","description":"Upgrade HTTP requests to WebSocket connections on the server."},{"url":"/api/ende/~/Ende.Addr/","title":"Ende.Addr","description":"The address of a network connection or listener, regardless of transport."},{"url":"/api/ende/~/Ende.AutoUpdateOptions/","title":"Ende.AutoUpdateOptions"},{"url":"/api/ende/~/Ende.BasicAuth/","title":"Ende.BasicAuth","description":"Basic authentication credentials to be used with a Ende.Proxy server when specifying Ende.CreateHttpClientOptions."},{"url":"/api/ende/~/Ende.BenchContext/","title":"Ende.BenchContext","description":"Context that is passed to a benchmarked function. The instance is shared between iterations of the benchmark. Its methods can be used for example to override of the measured portion of the function."},{"url":"/api/ende/~/Ende.BenchDefinition/","title":"Ende.BenchDefinition","description":"The interface for defining a benchmark test using Ende.bench."},{"url":"/api/ende/~/Ende.BrowserWindow/","title":"Ende.BrowserWindow"},{"url":"/api/ende/~/Ende.BrowserWindowEventHandlers/","title":"Ende.BrowserWindowEventHandlers"},{"url":"/api/ende/~/Ende.BrowserWindowEventMap/","title":"Ende.BrowserWindowEventMap"},{"url":"/api/ende/~/Ende.BrowserWindowLeaf/","title":"Ende.BrowserWindowLeaf","description":"The leaf types that survive the trip across the webview boundary."},{"url":"/api/ende/~/Ende.BrowserWindowMoveDetail/","title":"Ende.BrowserWindowMoveDetail"},{"url":"/api/ende/~/Ende.BrowserWindowObject/","title":"Ende.BrowserWindowObject"},{"url":"/api/ende/~/Ende.BrowserWindowOptions/","title":"Ende.BrowserWindowOptions"},{"url":"/api/ende/~/Ende.BrowserWindowResizeDetail/","title":"Ende.BrowserWindowResizeDetail"},{"url":"/api/ende/~/Ende.BrowserWindowSerializable/","title":"Ende.BrowserWindowSerializable","description":"Maps `T` to itself if every value it can hold survives the trip across the webview boundary, and to `never` at the first member that does not. `T` is serializable when `[T] extends [BrowserWindowSerializable<T>]`."},{"url":"/api/ende/~/Ende.BrowserWindowSerializableCheck/","title":"Ende.BrowserWindowSerializableCheck","description":"Intersected with a handler's own type to reject non-serializable return values at the call site of BrowserWindow.bind."},{"url":"/api/ende/~/Ende.BrowserWindowValue/","title":"Ende.BrowserWindowValue"},{"url":"/api/ende/~/Ende.CaaRecord/","title":"Ende.CaaRecord","description":"If Ende.resolveDns is called with `\"CAA\"` record type specified, it will resolve with an array of objects with this interface."},{"url":"/api/ende/~/Ende.ChildProcess/","title":"Ende.ChildProcess","description":"The interface for handling a child process returned from Ende.Command.spawn."},{"url":"/api/ende/~/Ende.Command/","title":"Ende.Command","description":"Create a child process."},{"url":"/api/ende/~/Ende.CommandOptions/","title":"Ende.CommandOptions","description":"Options which can be set when calling Ende.Command."},{"url":"/api/ende/~/Ende.CommandOutput/","title":"Ende.CommandOutput","description":"The interface returned from calling Ende.Command.output or Ende.Command.outputSync which represents the result of spawning the child process."},{"url":"/api/ende/~/Ende.CommandStatus/","title":"Ende.CommandStatus"},{"url":"/api/ende/~/Ende.ConditionalAsync/","title":"Ende.ConditionalAsync"},{"url":"/api/ende/~/Ende.Conn/","title":"Ende.Conn","description":"A generic stream-oriented network connection that can be read from and written to."},{"url":"/api/ende/~/Ende.ConnectOptions/","title":"Ende.ConnectOptions","description":"Options which can be set when connecting via Ende.connect."},{"url":"/api/ende/~/Ende.ConnectQuicOptions/","title":"Ende.ConnectQuicOptions","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/ende/~/Ende.ConnectTlsOptions/","title":"Ende.ConnectTlsOptions","description":"Options which can be set when establishing a TLS connection via Ende.connectTls."},{"url":"/api/ende/~/Ende.CreateHttpClientOptions/","title":"Ende.CreateHttpClientOptions","description":"The options used when creating a Ende.HttpClient."},{"url":"/api/ende/~/Ende.CronSchedule/","title":"Ende.CronSchedule","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/ende/~/Ende.CronScheduleExpression/","title":"Ende.CronScheduleExpression","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/ende/~/Ende.DatagramConn/","title":"Ende.DatagramConn","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/ende/~/Ende.DenoTest/","title":"Ende.DenoTest"},{"url":"/api/ende/~/Ende.DirEntry/","title":"Ende.DirEntry","description":"Information about a directory entry returned from Ende.readDir and Ende.readDirSync."},{"url":"/api/ende/~/Ende.Dock/","title":"Ende.Dock"},{"url":"/api/ende/~/Ende.DockEventHandlers/","title":"Ende.DockEventHandlers"},{"url":"/api/ende/~/Ende.DockEventMap/","title":"Ende.DockEventMap"},{"url":"/api/ende/~/Ende.DockReopenDetail/","title":"Ende.DockReopenDetail"},{"url":"/api/ende/~/Ende.DynamicLibrary/","title":"Ende.DynamicLibrary","description":"A dynamic library resource. Use Ende.dlopen to load a dynamic library and return this interface."},{"url":"/api/ende/~/Ende.EndeTest/","title":"Ende.EndeTest"},{"url":"/api/ende/~/Ende.Env/","title":"Ende.Env","description":"An interface containing methods to interact with the process environment variables."},{"url":"/api/ende/~/Ende.EnvPermissionDescriptor/","title":"Ende.EnvPermissionDescriptor","description":"The permission descriptor for the `allow-env` and `deny-env` permissions, which controls access to being able to read and write to the process environment variables as well as access other information about the environment. The option `variable` allows scoping the permission to a specific environment variable."},{"url":"/api/ende/~/Ende.FfiPermissionDescriptor/","title":"Ende.FfiPermissionDescriptor","description":"The permission descriptor for the `allow-ffi` and `deny-ffi` permissions, which controls access to loading _foreign_ code and interfacing with it via the Foreign Function Interface API available in Ende. The option `path` allows scoping the permission to a specific path on the host."},{"url":"/api/ende/~/Ende.FileInfo/","title":"Ende.FileInfo","description":"Provides information about a file and is returned by Ende.stat, Ende.lstat, Ende.statSync, and Ende.lstatSync or from calling `stat()` and `statSync()` on an Ende.FsFile instance."},{"url":"/api/ende/~/Ende.ForeignFunction/","title":"Ende.ForeignFunction","description":"The interface for a foreign function as defined by its parameter and result types."},{"url":"/api/ende/~/Ende.ForeignLibraryInterface/","title":"Ende.ForeignLibraryInterface","description":"A foreign library interface descriptor."},{"url":"/api/ende/~/Ende.ForeignStatic/","title":"Ende.ForeignStatic"},{"url":"/api/ende/~/Ende.FromForeignFunction/","title":"Ende.FromForeignFunction"},{"url":"/api/ende/~/Ende.FromNativeParameterTypes/","title":"Ende.FromNativeParameterTypes"},{"url":"/api/ende/~/Ende.FromNativeResultType/","title":"Ende.FromNativeResultType","description":"Type conversion for foreign symbol return types."},{"url":"/api/ende/~/Ende.FromNativeType/","title":"Ende.FromNativeType","description":"Type conversion for foreign symbol return types and unsafe callback parameters."},{"url":"/api/ende/~/Ende.FsEvent/","title":"Ende.FsEvent","description":"Represents a unique file system event yielded by a Ende.FsWatcher."},{"url":"/api/ende/~/Ende.FsEventFlag/","title":"Ende.FsEventFlag","description":"Additional information for FsEvent objects with the \"other\" kind."},{"url":"/api/ende/~/Ende.FsFile/","title":"Ende.FsFile","description":"The Ende abstraction for reading and writing files."},{"url":"/api/ende/~/Ende.FsWatcher/","title":"Ende.FsWatcher","description":"Returned by Ende.watchFs. It is an async iterator yielding up system events. To stop watching the file system by calling `.close()` method."},{"url":"/api/ende/~/Ende.HttpClient/","title":"Ende.HttpClient","description":"A custom `HttpClient` for use with fetch function. This is designed to allow custom certificates or proxies to be used with `fetch()`."},{"url":"/api/ende/~/Ende.HttpServer/","title":"Ende.HttpServer","description":"An instance of the server created using `Ende.serve()` API."},{"url":"/api/ende/~/Ende.ImportPermissionDescriptor/","title":"Ende.ImportPermissionDescriptor","description":"The permission descriptor for the `allow-import` and `deny-import` permissions, which controls access to importing from remote hosts via the network. The option `host` allows scoping the permission for outbound connection to a specific host and port."},{"url":"/api/ende/~/Ende.InspectOptions/","title":"Ende.InspectOptions","description":"Option which can be specified when performing Ende.inspect."},{"url":"/api/ende/~/Ende.ListenOptions/","title":"Ende.ListenOptions","description":"Options which can be set when opening a listener via Ende.listen."},{"url":"/api/ende/~/Ende.ListenTlsOptions/","title":"Ende.ListenTlsOptions","description":"Options which can be set when opening a TLS listener via Ende.listenTls."},{"url":"/api/ende/~/Ende.Listener/","title":"Ende.Listener","description":"A generic network listener for stream-oriented protocols."},{"url":"/api/ende/~/Ende.MakeTempOptions/","title":"Ende.MakeTempOptions","description":"Options which can be set when using Ende.makeTempDir, Ende.makeTempDirSync, Ende.makeTempFile, and Ende.makeTempFileSync."},{"url":"/api/ende/~/Ende.MemoryUsage/","title":"Ende.MemoryUsage"},{"url":"/api/ende/~/Ende.MenuClickDetail/","title":"Ende.MenuClickDetail"},{"url":"/api/ende/~/Ende.MenuItem/","title":"Ende.MenuItem"},{"url":"/api/ende/~/Ende.MkdirOptions/","title":"Ende.MkdirOptions","description":"Options which can be set when using Ende.mkdir and Ende.mkdirSync."},{"url":"/api/ende/~/Ende.MulticastV4Membership/","title":"Ende.MulticastV4Membership","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/ende/~/Ende.MulticastV6Membership/","title":"Ende.MulticastV6Membership","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/ende/~/Ende.MxRecord/","title":"Ende.MxRecord","description":"If Ende.resolveDns is called with `\"MX\"` record type specified, it will return an array of objects with this interface."},{"url":"/api/ende/~/Ende.NaptrRecord/","title":"Ende.NaptrRecord","description":"If Ende.resolveDns is called with `\"NAPTR\"` record type specified, it will return an array of objects with this interface."},{"url":"/api/ende/~/Ende.NativeBigIntType/","title":"Ende.NativeBigIntType","description":"All BigInt number types for interfacing with foreign functions."},{"url":"/api/ende/~/Ende.NativeBooleanType/","title":"Ende.NativeBooleanType","description":"The native boolean type for interfacing to foreign functions."},{"url":"/api/ende/~/Ende.NativeBufferType/","title":"Ende.NativeBufferType","description":"The native buffer type for interfacing to foreign functions."},{"url":"/api/ende/~/Ende.NativeFunctionType/","title":"Ende.NativeFunctionType","description":"The native function type for interfacing with foreign functions."},{"url":"/api/ende/~/Ende.NativeI16Enum/","title":"Ende.NativeI16Enum"},{"url":"/api/ende/~/Ende.NativeI32Enum/","title":"Ende.NativeI32Enum"},{"url":"/api/ende/~/Ende.NativeI8Enum/","title":"Ende.NativeI8Enum"},{"url":"/api/ende/~/Ende.NativeNumberType/","title":"Ende.NativeNumberType","description":"All plain number types for interfacing with foreign functions."},{"url":"/api/ende/~/Ende.NativePointerType/","title":"Ende.NativePointerType","description":"The native pointer type for interfacing to foreign functions."},{"url":"/api/ende/~/Ende.NativeResultType/","title":"Ende.NativeResultType"},{"url":"/api/ende/~/Ende.NativeStructType/","title":"Ende.NativeStructType","description":"The native struct type for interfacing with foreign functions."},{"url":"/api/ende/~/Ende.NativeType/","title":"Ende.NativeType","description":"All supported types for interfacing with foreign functions."},{"url":"/api/ende/~/Ende.NativeTypedFunction/","title":"Ende.NativeTypedFunction"},{"url":"/api/ende/~/Ende.NativeTypedPointer/","title":"Ende.NativeTypedPointer"},{"url":"/api/ende/~/Ende.NativeU16Enum/","title":"Ende.NativeU16Enum"},{"url":"/api/ende/~/Ende.NativeU32Enum/","title":"Ende.NativeU32Enum"},{"url":"/api/ende/~/Ende.NativeU8Enum/","title":"Ende.NativeU8Enum"},{"url":"/api/ende/~/Ende.NativeVoidType/","title":"Ende.NativeVoidType","description":"The native void type for interfacing with foreign functions."},{"url":"/api/ende/~/Ende.NetAddr/","title":"Ende.NetAddr","description":"The address of a network connection or listener using an IP-based transport."},{"url":"/api/ende/~/Ende.NetPermissionDescriptor/","title":"Ende.NetPermissionDescriptor","description":"The permission descriptor for the `allow-net` and `deny-net` permissions, which controls access to opening network ports and connecting to remote hosts via the network. The option `host` allows scoping the permission for outbound connection to a specific host and port."},{"url":"/api/ende/~/Ende.NetworkInterfaceInfo/","title":"Ende.NetworkInterfaceInfo","description":"The information for a network interface returned from a call to Ende.networkInterfaces."},{"url":"/api/ende/~/Ende.OpenDevtoolsOptions/","title":"Ende.OpenDevtoolsOptions"},{"url":"/api/ende/~/Ende.OpenOptions/","title":"Ende.OpenOptions","description":"Options which can be set when doing Ende.open and Ende.openSync."},{"url":"/api/ende/~/Ende.PermissionDescriptor/","title":"Ende.PermissionDescriptor","description":"Permission descriptors which define a permission and can be queried, requested, or revoked."},{"url":"/api/ende/~/Ende.PermissionName/","title":"Ende.PermissionName","description":"The name of a privileged feature which needs permission."},{"url":"/api/ende/~/Ende.PermissionOptions/","title":"Ende.PermissionOptions","description":"Options which define the permissions within a test or worker context."},{"url":"/api/ende/~/Ende.PermissionOptionsObject/","title":"Ende.PermissionOptionsObject","description":"A set of options which can define the permissions within a test or worker context at a highly specific level."},{"url":"/api/ende/~/Ende.PermissionState/","title":"Ende.PermissionState","description":"The current status of the permission:"},{"url":"/api/ende/~/Ende.PermissionStatus/","title":"Ende.PermissionStatus","description":"An EventTarget returned from the Ende.permissions API which can provide updates to any state changes of the permission."},{"url":"/api/ende/~/Ende.PermissionStatusEventMap/","title":"Ende.PermissionStatusEventMap","description":"The interface which defines what event types are supported by PermissionStatus instances."},{"url":"/api/ende/~/Ende.Permissions/","title":"Ende.Permissions","description":"Ende's permission management API."},{"url":"/api/ende/~/Ende.PointerObject/","title":"Ende.PointerObject","description":"A non-null pointer, represented as an object at runtime. The object's prototype is `null` and cannot be changed. The object cannot be assigned to either and is thus entirely read-only."},{"url":"/api/ende/~/Ende.PointerValue/","title":"Ende.PointerValue","description":"Pointers are represented either with a PointerObject object or a `null` if the pointer is null."},{"url":"/api/ende/~/Ende.Proxy/","title":"Ende.Proxy","description":"The definition for alternative transports (or proxies) in Ende.CreateHttpClientOptions."},{"url":"/api/ende/~/Ende.QuicAcceptOptions/","title":"Ende.QuicAcceptOptions","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/ende/~/Ende.QuicBidirectionalStream/","title":"Ende.QuicBidirectionalStream","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/ende/~/Ende.QuicCloseInfo/","title":"Ende.QuicCloseInfo","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/ende/~/Ende.QuicConn/","title":"Ende.QuicConn","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/ende/~/Ende.QuicEndpoint/","title":"Ende.QuicEndpoint","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/ende/~/Ende.QuicEndpointOptions/","title":"Ende.QuicEndpointOptions","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/ende/~/Ende.QuicIncoming/","title":"Ende.QuicIncoming","description":"**UNSTABLE**: New API, yet to be vetted. An incoming connection for which the server has not yet begun its part of the handshake."},{"url":"/api/ende/~/Ende.QuicListenOptions/","title":"Ende.QuicListenOptions","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/ende/~/Ende.QuicListener/","title":"Ende.QuicListener","description":"**UNSTABLE**: New API, yet to be vetted. Specialized listener that accepts QUIC connections."},{"url":"/api/ende/~/Ende.QuicReceiveStream/","title":"Ende.QuicReceiveStream","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/ende/~/Ende.QuicSendStream/","title":"Ende.QuicSendStream","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/ende/~/Ende.QuicSendStreamOptions/","title":"Ende.QuicSendStreamOptions","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/ende/~/Ende.QuicServerTransportOptions/","title":"Ende.QuicServerTransportOptions","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/ende/~/Ende.QuicTransportOptions/","title":"Ende.QuicTransportOptions","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/ende/~/Ende.ReadFileOptions/","title":"Ende.ReadFileOptions","description":"Options which can be set when using Ende.readFile or Ende.readFileSync."},{"url":"/api/ende/~/Ende.ReadPermissionDescriptor/","title":"Ende.ReadPermissionDescriptor","description":"The permission descriptor for the `allow-read` and `deny-read` permissions, which controls access to reading resources from the local host. The option `path` allows scoping the permission to a specific path (and if the path is a directory any sub paths)."},{"url":"/api/ende/~/Ende.RecordType/","title":"Ende.RecordType","description":"The type of the resource record to resolve via DNS using Ende.resolveDns."},{"url":"/api/ende/~/Ende.RemoveOptions/","title":"Ende.RemoveOptions","description":"Options which can be set when using Ende.remove and Ende.removeSync."},{"url":"/api/ende/~/Ende.ResolveDnsOptions/","title":"Ende.ResolveDnsOptions","description":"Options which can be set when using Ende.resolveDns."},{"url":"/api/ende/~/Ende.RunPermissionDescriptor/","title":"Ende.RunPermissionDescriptor","description":"The permission descriptor for the `allow-run` and `deny-run` permissions, which controls access to what sub-processes can be executed by Ende. The option `command` allows scoping the permission to a specific executable."},{"url":"/api/ende/~/Ende.SeekMode/","title":"Ende.SeekMode","description":"A enum which defines the seek mode for IO related APIs that support seeking."},{"url":"/api/ende/~/Ende.ServeDefaultExport/","title":"Ende.ServeDefaultExport","description":"Interface that module run with `ende serve` subcommand must conform to."},{"url":"/api/ende/~/Ende.ServeHandler/","title":"Ende.ServeHandler","description":"A handler for HTTP requests. Consumes a request and returns a response."},{"url":"/api/ende/~/Ende.ServeHandlerInfo/","title":"Ende.ServeHandlerInfo","description":"Additional information for an HTTP request and its connection."},{"url":"/api/ende/~/Ende.ServeInit/","title":"Ende.ServeInit"},{"url":"/api/ende/~/Ende.ServeOptions/","title":"Ende.ServeOptions","description":"Options which can be set when calling Ende.serve."},{"url":"/api/ende/~/Ende.ServeTcpOptions/","title":"Ende.ServeTcpOptions","description":"Options that can be passed to `Ende.serve` to create a server listening on a TCP port."},{"url":"/api/ende/~/Ende.ServeUnixOptions/","title":"Ende.ServeUnixOptions","description":"Options that can be passed to `Ende.serve` to create a server listening on a Unix domain socket."},{"url":"/api/ende/~/Ende.ServeVsockOptions/","title":"Ende.ServeVsockOptions","description":"Options that can be passed to `Ende.serve` to create a server listening on a VSOCK socket."},{"url":"/api/ende/~/Ende.SetRawOptions/","title":"Ende.SetRawOptions"},{"url":"/api/ende/~/Ende.Signal/","title":"Ende.Signal","description":"Operating signals which can be listened for or sent to sub-processes. What signals and what their standard behaviors are OS dependent."},{"url":"/api/ende/~/Ende.SoaRecord/","title":"Ende.SoaRecord","description":"If Ende.resolveDns is called with `\"SOA\"` record type specified, it will return an array of objects with this interface."},{"url":"/api/ende/~/Ende.SrvRecord/","title":"Ende.SrvRecord","description":"If Ende.resolveDns is called with `\"SRV\"` record type specified, it will return an array of objects with this interface."},{"url":"/api/ende/~/Ende.StartTlsOptions/","title":"Ende.StartTlsOptions","description":"Options which can be set when upgrading an existing connection to TLS via Ende.startTls."},{"url":"/api/ende/~/Ende.StaticForeignLibraryInterface/","title":"Ende.StaticForeignLibraryInterface","description":"A utility type that infers a foreign library interface."},{"url":"/api/ende/~/Ende.StaticForeignSymbol/","title":"Ende.StaticForeignSymbol","description":"A utility type that infers a foreign symbol."},{"url":"/api/ende/~/Ende.StaticForeignSymbolReturnType/","title":"Ende.StaticForeignSymbolReturnType"},{"url":"/api/ende/~/Ende.SubprocessReadableStream/","title":"Ende.SubprocessReadableStream","description":"The interface for stdout and stderr streams for child process returned from Ende.Command.spawn."},{"url":"/api/ende/~/Ende.SymlinkOptions/","title":"Ende.SymlinkOptions","description":"Options that can be used with symlink and symlinkSync."},{"url":"/api/ende/~/Ende.SysPermissionDescriptor/","title":"Ende.SysPermissionDescriptor","description":"The permission descriptor for the `allow-sys` and `deny-sys` permissions, which controls access to sensitive host system information, which malicious code might attempt to exploit. The option `kind` allows scoping the permission to a specific piece of information."},{"url":"/api/ende/~/Ende.SystemMemoryInfo/","title":"Ende.SystemMemoryInfo","description":"Information returned from a call to Ende.systemMemoryInfo."},{"url":"/api/ende/~/Ende.TcpConn/","title":"Ende.TcpConn","description":"A TCP stream connection."},{"url":"/api/ende/~/Ende.TcpListenOptions/","title":"Ende.TcpListenOptions"},{"url":"/api/ende/~/Ende.TcpListener/","title":"Ende.TcpListener","description":"Specialized listener that accepts TCP connections."},{"url":"/api/ende/~/Ende.TestContext/","title":"Ende.TestContext","description":"Context that is passed to a testing function, which can be used to either gain information about the current test, or register additional test steps within the current test."},{"url":"/api/ende/~/Ende.TestDefinition/","title":"Ende.TestDefinition"},{"url":"/api/ende/~/Ende.TestEach/","title":"Ende.TestEach","description":"Register a parameterized group of tests. See EndeTest.each."},{"url":"/api/ende/~/Ende.TestIgnore/","title":"Ende.TestIgnore","description":"Shorthand property for ignoring a particular test case. See EndeTest.ignore."},{"url":"/api/ende/~/Ende.TestOnly/","title":"Ende.TestOnly","description":"Shorthand property for focusing a particular test case. See EndeTest.only."},{"url":"/api/ende/~/Ende.TestSnapshotOptions/","title":"Ende.TestSnapshotOptions","description":"Options which can be set when calling Ende.TestContext.assertSnapshot."},{"url":"/api/ende/~/Ende.TestStepDefinition/","title":"Ende.TestStepDefinition"},{"url":"/api/ende/~/Ende.TlsCertifiedKeyPem/","title":"Ende.TlsCertifiedKeyPem","description":"Provides certified key material from strings. The key material is provided in `PEM`-format (Privacy Enhanced Mail, https://www.rfc-editor.org/rfc/rfc1422) which can be identified by having `-----BEGIN-----` and `-----END-----` markers at the beginning and end of the strings. This type of key is not compatible with `DER`-format keys which are binary."},{"url":"/api/ende/~/Ende.TlsConn/","title":"Ende.TlsConn","description":"A TLS-encrypted stream connection over an IP-based transport."},{"url":"/api/ende/~/Ende.TlsHandshakeInfo/","title":"Ende.TlsHandshakeInfo","description":"Information about a completed TLS handshake."},{"url":"/api/ende/~/Ende.TlsListener/","title":"Ende.TlsListener","description":"Specialized listener that accepts TLS connections."},{"url":"/api/ende/~/Ende.ToNativeParameterTypes/","title":"Ende.ToNativeParameterTypes","description":"A utility type for conversion of parameter types of foreign functions."},{"url":"/api/ende/~/Ende.ToNativeResultType/","title":"Ende.ToNativeResultType","description":"Type conversion for unsafe callback return types."},{"url":"/api/ende/~/Ende.ToNativeType/","title":"Ende.ToNativeType","description":"Type conversion for foreign symbol parameters and unsafe callback return types."},{"url":"/api/ende/~/Ende.Tray/","title":"Ende.Tray"},{"url":"/api/ende/~/Ende.TrayBounds/","title":"Ende.TrayBounds","description":"The tray icon's bounding rectangle in screen coordinates, in the same top-left-origin space as BrowserWindow.setPosition. Use it to anchor a popover window under the icon."},{"url":"/api/ende/~/Ende.TrayEventHandlers/","title":"Ende.TrayEventHandlers"},{"url":"/api/ende/~/Ende.TrayEventMap/","title":"Ende.TrayEventMap"},{"url":"/api/ende/~/Ende.TrayPanel/","title":"Ende.TrayPanel","description":"Handle to a tray-attached popover window created by Tray.attachPanel."},{"url":"/api/ende/~/Ende.TrayPanelOptions/","title":"Ende.TrayPanelOptions"},{"url":"/api/ende/~/Ende.UdpListenOptions/","title":"Ende.UdpListenOptions","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/ende/~/Ende.UnixAddr/","title":"Ende.UnixAddr","description":"The address of a network connection or listener using a Unix domain socket."},{"url":"/api/ende/~/Ende.UnixConn/","title":"Ende.UnixConn","description":"A Unix domain socket stream connection."},{"url":"/api/ende/~/Ende.UnixConnectOptions/","title":"Ende.UnixConnectOptions","description":"Options which can be set when connecting to a Unix domain socket via Ende.connect."},{"url":"/api/ende/~/Ende.UnixListenDatagramOptions/","title":"Ende.UnixListenDatagramOptions","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/ende/~/Ende.UnixListenOptions/","title":"Ende.UnixListenOptions","description":"Options which can be set when opening a Unix listener via Ende.listen or Ende.listenDatagram."},{"url":"/api/ende/~/Ende.UnixListener/","title":"Ende.UnixListener","description":"Specialized listener that accepts Unix connections."},{"url":"/api/ende/~/Ende.UnsafeCallback/","title":"Ende.UnsafeCallback","description":"An unsafe function pointer for passing JavaScript functions as C function pointers to foreign function calls."},{"url":"/api/ende/~/Ende.UnsafeCallbackDefinition/","title":"Ende.UnsafeCallbackDefinition","description":"Definition of a unsafe callback function."},{"url":"/api/ende/~/Ende.UnsafeCallbackFunction/","title":"Ende.UnsafeCallbackFunction","description":"An unsafe callback function."},{"url":"/api/ende/~/Ende.UnsafeFnPointer/","title":"Ende.UnsafeFnPointer","description":"An unsafe pointer to a function, for calling functions that are not present as symbols."},{"url":"/api/ende/~/Ende.UnsafePointer/","title":"Ende.UnsafePointer","description":"A collection of static functions for interacting with pointer objects."},{"url":"/api/ende/~/Ende.UnsafePointerView/","title":"Ende.UnsafePointerView","description":"An unsafe pointer view to a memory location as specified by the `pointer` value. The `UnsafePointerView` API follows the standard built in interface DataView for accessing the underlying types at an memory location (numbers, strings and raw bytes)."},{"url":"/api/ende/~/Ende.UnsafeWindowSurface/","title":"Ende.UnsafeWindowSurface","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/ende/~/Ende.UpgradeWebSocketOptions/","title":"Ende.UpgradeWebSocketOptions","description":"Options which can be set when performing a Ende.upgradeWebSocket upgrade of a Request"},{"url":"/api/ende/~/Ende.ValidBindings/","title":"Ende.ValidBindings","description":"Constrains T to a record of async binding functions taking and resolving with serializable values."},{"url":"/api/ende/~/Ende.VsockAddr/","title":"Ende.VsockAddr","description":"The address of a network connection or listener using the VSOCK transport for communication between a virtual machine and its host."},{"url":"/api/ende/~/Ende.VsockConn/","title":"Ende.VsockConn","description":"A VSOCK stream connection."},{"url":"/api/ende/~/Ende.VsockConnectOptions/","title":"Ende.VsockConnectOptions","description":"Options which can be set when connecting over VSOCK via Ende.connect."},{"url":"/api/ende/~/Ende.VsockListenOptions/","title":"Ende.VsockListenOptions","description":"Options which can be set when opening a VSOCK listener via Ende.listen."},{"url":"/api/ende/~/Ende.VsockListener/","title":"Ende.VsockListener","description":"Specialized listener that accepts VSOCK connections."},{"url":"/api/ende/~/Ende.WebSocketUpgrade/","title":"Ende.WebSocketUpgrade","description":"The object that is returned from a Ende.upgradeWebSocket request."},{"url":"/api/ende/~/Ende.WindowBindings/","title":"Ende.WindowBindings","description":"The default bindings type: any set of async handlers."},{"url":"/api/ende/~/Ende.WriteFileOptions/","title":"Ende.WriteFileOptions","description":"Options for writing to a file."},{"url":"/api/ende/~/Ende.WritePermissionDescriptor/","title":"Ende.WritePermissionDescriptor","description":"The permission descriptor for the `allow-write` and `deny-write` permissions, which controls access to writing to resources from the local host. The option `path` allow scoping the permission to a specific path (and if the path is a directory any sub paths)."},{"url":"/api/ende/~/Ende.addSignalListener/","title":"Ende.addSignalListener","description":"Registers the given function as a listener of the given signal event."},{"url":"/api/ende/~/Ende.args/","title":"Ende.args","description":"Returns the script arguments to the program."},{"url":"/api/ende/~/Ende.autoUpdate/","title":"Ende.autoUpdate","description":"Start checking a release server for over-the-air updates."},{"url":"/api/ende/~/Ende.bench/","title":"Ende.bench","description":"Register a benchmark test which will be run when `ende bench` is used on the command line and the containing module looks like a bench module."},{"url":"/api/ende/~/Ende.brand/","title":"Ende.brand"},{"url":"/api/ende/~/Ende.build/","title":"Ende.build","description":"Information related to the build of the current Ende runtime."},{"url":"/api/ende/~/Ende.chdir/","title":"Ende.chdir","description":"Change the current working directory to the specified path."},{"url":"/api/ende/~/Ende.chmod/","title":"Ende.chmod","description":"Changes the permission of a specific file/directory of specified path. Ignores the process's umask."},{"url":"/api/ende/~/Ende.chmodSync/","title":"Ende.chmodSync","description":"Synchronously changes the permission of a specific file/directory of specified path. Ignores the process's umask."},{"url":"/api/ende/~/Ende.chown/","title":"Ende.chown","description":"Change owner of a regular file or directory."},{"url":"/api/ende/~/Ende.chownSync/","title":"Ende.chownSync","description":"Synchronously change owner of a regular file or directory."},{"url":"/api/ende/~/Ende.connect/","title":"Ende.connect","description":"Connects to the hostname (default is \"127.0.0.1\") and port on the named transport (default is \"tcp\"), and resolves to the connection (`Conn`)."},{"url":"/api/ende/~/Ende.connectQuic/","title":"Ende.connectQuic","description":"**UNSTABLE**: New API, yet to be vetted. Establishes a secure connection over QUIC using a hostname and port. The cert file is optional and if not included Mozilla's root certificates will be used. See also https://github.com/ctz/webpki-roots for specifics."},{"url":"/api/ende/~/Ende.connectTls/","title":"Ende.connectTls","description":"Establishes a secure connection over TLS (transport layer security) using an optional list of CA certs, hostname (default is \"127.0.0.1\") and port."},{"url":"/api/ende/~/Ende.consoleSize/","title":"Ende.consoleSize","description":"Gets the size of the console as columns/rows."},{"url":"/api/ende/~/Ende.copyFile/","title":"Ende.copyFile","description":"Copies the contents and permissions of one file to another specified path, by default creating a new file if needed, else overwriting. Fails if target path is a directory or is unwritable."},{"url":"/api/ende/~/Ende.copyFileSync/","title":"Ende.copyFileSync","description":"Synchronously copies the contents and permissions of one file to another specified path, by default creating a new file if needed, else overwriting. Fails if target path is a directory or is unwritable."},{"url":"/api/ende/~/Ende.create/","title":"Ende.create","description":"Creates a file if none exists or truncates an existing file and resolves to an instance of Ende.FsFile."},{"url":"/api/ende/~/Ende.createHttpClient/","title":"Ende.createHttpClient","description":"Create a custom HttpClient to use with fetch. This is an extension of the web platform Fetch API which allows Ende to use custom TLS CA certificates and connect via a proxy while using `fetch()`."},{"url":"/api/ende/~/Ende.createSync/","title":"Ende.createSync","description":"Creates a file if none exists or truncates an existing file and returns an instance of Ende.FsFile."},{"url":"/api/ende/~/Ende.cron/","title":"Ende.cron","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/ende/~/Ende.cwd/","title":"Ende.cwd","description":"Return a string representing the current working directory."},{"url":"/api/ende/~/Ende.desktopVersion/","title":"Ende.desktopVersion","description":"The application version read from `ende.json` at compile time, or `null` if no version was configured. Only available in apps compiled with `ende desktop`."},{"url":"/api/ende/~/Ende.dlopen/","title":"Ende.dlopen","description":"Opens an external dynamic library and registers symbols, making foreign functions available to be called."},{"url":"/api/ende/~/Ende.errors.AddrInUse/","title":"Ende.errors.AddrInUse","description":"Raised when attempting to open a server listener on an address and port that already has a listener."},{"url":"/api/ende/~/Ende.errors.AddrNotAvailable/","title":"Ende.errors.AddrNotAvailable","description":"Raised when the underlying operating system reports an `EADDRNOTAVAIL` error."},{"url":"/api/ende/~/Ende.errors.AlreadyExists/","title":"Ende.errors.AlreadyExists","description":"Raised when trying to create a resource, like a file, that already exits."},{"url":"/api/ende/~/Ende.errors.BadResource/","title":"Ende.errors.BadResource","description":"The underlying IO resource is invalid or closed, and so the operation could not be performed."},{"url":"/api/ende/~/Ende.errors.BrokenPipe/","title":"Ende.errors.BrokenPipe","description":"Raised when trying to write to a resource and a broken pipe error occurs. This can happen when trying to write directly to `stdout` or `stderr` and the operating system is unable to pipe the output for a reason external to the Ende runtime."},{"url":"/api/ende/~/Ende.errors.Busy/","title":"Ende.errors.Busy","description":"Raised when the underlying IO resource is not available because it is being awaited on in another block of code."},{"url":"/api/ende/~/Ende.errors.ConnectionAborted/","title":"Ende.errors.ConnectionAborted","description":"Raised when the underlying operating system reports an `ECONNABORTED` error."},{"url":"/api/ende/~/Ende.errors.ConnectionRefused/","title":"Ende.errors.ConnectionRefused","description":"Raised when the underlying operating system reports that a connection to a resource is refused."},{"url":"/api/ende/~/Ende.errors.ConnectionReset/","title":"Ende.errors.ConnectionReset","description":"Raised when the underlying operating system reports that a connection has been reset. With network servers, it can be a _normal_ occurrence where a client will abort a connection instead of properly shutting it down."},{"url":"/api/ende/~/Ende.errors.FilesystemLoop/","title":"Ende.errors.FilesystemLoop","description":"Raised when too many symbolic links were encountered when resolving the filename."},{"url":"/api/ende/~/Ende.errors.Http/","title":"Ende.errors.Http","description":"Raised in situations where when attempting to load a dynamic import, too many redirects were encountered."},{"url":"/api/ende/~/Ende.errors.Interrupted/","title":"Ende.errors.Interrupted","description":"Raised when the underlying operating system reports an `EINTR` error. In many cases, this underlying IO error will be handled internally within Ende, or result in an BadResource error instead."},{"url":"/api/ende/~/Ende.errors.InvalidData/","title":"Ende.errors.InvalidData","description":"Raised when an operation returns data that is invalid for the operation being performed."},{"url":"/api/ende/~/Ende.errors.IsADirectory/","title":"Ende.errors.IsADirectory","description":"Raised when trying to open, create or write to a directory."},{"url":"/api/ende/~/Ende.errors.NetworkUnreachable/","title":"Ende.errors.NetworkUnreachable","description":"Raised when performing a socket operation but the remote host is not reachable."},{"url":"/api/ende/~/Ende.errors.NotADirectory/","title":"Ende.errors.NotADirectory","description":"Raised when trying to perform an operation on a path that is not a directory, when directory is required."},{"url":"/api/ende/~/Ende.errors.NotCapable/","title":"Ende.errors.NotCapable","description":"Raised when trying to perform an operation while the relevant Ende permission (like `--allow-read`) has not been granted."},{"url":"/api/ende/~/Ende.errors.NotConnected/","title":"Ende.errors.NotConnected","description":"Raised when the underlying operating system reports an `ENOTCONN` error."},{"url":"/api/ende/~/Ende.errors.NotFound/","title":"Ende.errors.NotFound","description":"Raised when the underlying operating system indicates that the file was not found."},{"url":"/api/ende/~/Ende.errors.NotSupported/","title":"Ende.errors.NotSupported","description":"Raised when the underlying Ende API is asked to perform a function that is not currently supported."},{"url":"/api/ende/~/Ende.errors.PermissionDenied/","title":"Ende.errors.PermissionDenied","description":"Raised when the underlying operating system indicates the current user which the Ende process is running under does not have the appropriate permissions to a file or resource."},{"url":"/api/ende/~/Ende.errors.TimedOut/","title":"Ende.errors.TimedOut","description":"Raised when the underlying operating system reports that an I/O operation has timed out (`ETIMEDOUT`)."},{"url":"/api/ende/~/Ende.errors.UnexpectedEof/","title":"Ende.errors.UnexpectedEof","description":"Raised when attempting to read bytes from a resource, but the EOF was unexpectedly encountered."},{"url":"/api/ende/~/Ende.errors.WouldBlock/","title":"Ende.errors.WouldBlock","description":"Raised when the underlying operating system would need to block to complete but an asynchronous (non-blocking) API is used."},{"url":"/api/ende/~/Ende.errors.WriteZero/","title":"Ende.errors.WriteZero","description":"Raised when expecting to write to a IO buffer resulted in zero bytes being written."},{"url":"/api/ende/~/Ende.errors/","title":"Ende.errors","description":"A set of error constructors that are raised by Ende APIs."},{"url":"/api/ende/~/Ende.execPath/","title":"Ende.execPath","description":"Returns the path to the current ende executable."},{"url":"/api/ende/~/Ende.exit/","title":"Ende.exit","description":"Exit the Ende process with optional exit code."},{"url":"/api/ende/~/Ende.exitCode/","title":"Ende.exitCode","description":"The exit code for the Ende process."},{"url":"/api/ende/~/Ende.gid/","title":"Ende.gid","description":"Returns the group id of the process on POSIX platforms. Returns null on windows."},{"url":"/api/ende/~/Ende.hostname/","title":"Ende.hostname","description":"Get the `hostname` of the machine the Ende process is running on."},{"url":"/api/ende/~/Ende.inspect/","title":"Ende.inspect","description":"Converts the input into a string that has the same format as printed by `console.log()`."},{"url":"/api/ende/~/Ende.kill/","title":"Ende.kill","description":"Send a signal to process under given `pid`. The value and meaning of the `signal` to the process is operating system and process dependant. Signal provides the most common signals. Default signal is `\"SIGTERM\"`."},{"url":"/api/ende/~/Ende.link/","title":"Ende.link","description":"Creates `newpath` as a hard link to `oldpath`."},{"url":"/api/ende/~/Ende.linkSync/","title":"Ende.linkSync","description":"Synchronously creates `newpath` as a hard link to `oldpath`."},{"url":"/api/ende/~/Ende.lint.Accessibility/","title":"Ende.lint.Accessibility","description":"TypeScript accessibility modifiers used in classes"},{"url":"/api/ende/~/Ende.lint.AccessorProperty/","title":"Ende.lint.AccessorProperty"},{"url":"/api/ende/~/Ende.lint.ArrayExpression/","title":"Ende.lint.ArrayExpression","description":"An array literal"},{"url":"/api/ende/~/Ende.lint.ArrayPattern/","title":"Ende.lint.ArrayPattern","description":"Destructure an array."},{"url":"/api/ende/~/Ende.lint.ArrowFunctionExpression/","title":"Ende.lint.ArrowFunctionExpression","description":"Arrow function expression"},{"url":"/api/ende/~/Ende.lint.AssignmentExpression/","title":"Ende.lint.AssignmentExpression","description":"Updaate a variable or property."},{"url":"/api/ende/~/Ende.lint.AssignmentPattern/","title":"Ende.lint.AssignmentPattern","description":"Assign default values in parameters."},{"url":"/api/ende/~/Ende.lint.AwaitExpression/","title":"Ende.lint.AwaitExpression","description":"Await a `Promise` and get its fulfilled value."},{"url":"/api/ende/~/Ende.lint.BigIntLiteral/","title":"Ende.lint.BigIntLiteral","description":"Represents numbers that are too high or too low to be represented by the `number` type."},{"url":"/api/ende/~/Ende.lint.BinaryExpression/","title":"Ende.lint.BinaryExpression","description":"Compare left and right value with the specifier operator."},{"url":"/api/ende/~/Ende.lint.BlockComment/","title":"Ende.lint.BlockComment","description":"A potentially multi-line block comment"},{"url":"/api/ende/~/Ende.lint.BlockStatement/","title":"Ende.lint.BlockStatement"},{"url":"/api/ende/~/Ende.lint.BooleanLiteral/","title":"Ende.lint.BooleanLiteral","description":"Either `true` or `false`"},{"url":"/api/ende/~/Ende.lint.BreakStatement/","title":"Ende.lint.BreakStatement","description":"Break any loop or labeled statement, example:"},{"url":"/api/ende/~/Ende.lint.CallExpression/","title":"Ende.lint.CallExpression","description":"A function call."},{"url":"/api/ende/~/Ende.lint.CatchClause/","title":"Ende.lint.CatchClause","description":"The catch clause of a try/catch statement"},{"url":"/api/ende/~/Ende.lint.ChainExpression/","title":"Ende.lint.ChainExpression","description":"ChainExpression"},{"url":"/api/ende/~/Ende.lint.ClassBody/","title":"Ende.lint.ClassBody","description":"Represents the body of a class and contains all members"},{"url":"/api/ende/~/Ende.lint.ClassDeclaration/","title":"Ende.lint.ClassDeclaration","description":"Declares a class in the current scope"},{"url":"/api/ende/~/Ende.lint.ClassExpression/","title":"Ende.lint.ClassExpression","description":"Similar to ClassDeclaration but for declaring a class as an expression. The main difference is that the class name(=id) can be omitted."},{"url":"/api/ende/~/Ende.lint.ConditionalExpression/","title":"Ende.lint.ConditionalExpression","description":"Inline if-statement."},{"url":"/api/ende/~/Ende.lint.ContinueStatement/","title":"Ende.lint.ContinueStatement","description":"Terminates the current loop and continues with the next iteration."},{"url":"/api/ende/~/Ende.lint.DebuggerStatement/","title":"Ende.lint.DebuggerStatement","description":"The `debugger;` statement."},{"url":"/api/ende/~/Ende.lint.Decorator/","title":"Ende.lint.Decorator","description":"Experimental: Decorators"},{"url":"/api/ende/~/Ende.lint.Diagnostic/","title":"Ende.lint.Diagnostic"},{"url":"/api/ende/~/Ende.lint.DoWhileStatement/","title":"Ende.lint.DoWhileStatement","description":"Re-run loop for as long as test expression is truthy."},{"url":"/api/ende/~/Ende.lint.ExportAllDeclaration/","title":"Ende.lint.ExportAllDeclaration"},{"url":"/api/ende/~/Ende.lint.ExportDefaultDeclaration/","title":"Ende.lint.ExportDefaultDeclaration"},{"url":"/api/ende/~/Ende.lint.ExportNamedDeclaration/","title":"Ende.lint.ExportNamedDeclaration"},{"url":"/api/ende/~/Ende.lint.ExportSpecifier/","title":"Ende.lint.ExportSpecifier"},{"url":"/api/ende/~/Ende.lint.Expression/","title":"Ende.lint.Expression","description":"Union type of all possible expression nodes"},{"url":"/api/ende/~/Ende.lint.ExpressionStatement/","title":"Ende.lint.ExpressionStatement","description":"Statement that holds an expression."},{"url":"/api/ende/~/Ende.lint.Fix/","title":"Ende.lint.Fix"},{"url":"/api/ende/~/Ende.lint.Fixer/","title":"Ende.lint.Fixer"},{"url":"/api/ende/~/Ende.lint.ForInStatement/","title":"Ende.lint.ForInStatement","description":"Enumerate over all enumerable string properties of an object."},{"url":"/api/ende/~/Ende.lint.ForOfStatement/","title":"Ende.lint.ForOfStatement","description":"Iterate over sequence of values from an iterator."},{"url":"/api/ende/~/Ende.lint.ForStatement/","title":"Ende.lint.ForStatement","description":"Classic for-loop."},{"url":"/api/ende/~/Ende.lint.FunctionDeclaration/","title":"Ende.lint.FunctionDeclaration","description":"Declares a function in the current scope"},{"url":"/api/ende/~/Ende.lint.FunctionExpression/","title":"Ende.lint.FunctionExpression","description":"Declare a function as an expression. Similar to `FunctionDeclaration`, with an optional name (=id)."},{"url":"/api/ende/~/Ende.lint.Identifier/","title":"Ende.lint.Identifier","description":"Custom named node by the developer. Can be a variable name, a function name, parameter, etc."},{"url":"/api/ende/~/Ende.lint.IfStatement/","title":"Ende.lint.IfStatement","description":"Execute a statement the test passes, otherwise the alternate statement, if it was defined."},{"url":"/api/ende/~/Ende.lint.ImportAttribute/","title":"Ende.lint.ImportAttribute"},{"url":"/api/ende/~/Ende.lint.ImportDeclaration/","title":"Ende.lint.ImportDeclaration","description":"An import declaration, examples:"},{"url":"/api/ende/~/Ende.lint.ImportDefaultSpecifier/","title":"Ende.lint.ImportDefaultSpecifier"},{"url":"/api/ende/~/Ende.lint.ImportExpression/","title":"Ende.lint.ImportExpression","description":"Dynamically import a module."},{"url":"/api/ende/~/Ende.lint.ImportNamespaceSpecifier/","title":"Ende.lint.ImportNamespaceSpecifier"},{"url":"/api/ende/~/Ende.lint.ImportSpecifier/","title":"Ende.lint.ImportSpecifier"},{"url":"/api/ende/~/Ende.lint.JSXAttribute/","title":"Ende.lint.JSXAttribute","description":"A JSX attribute"},{"url":"/api/ende/~/Ende.lint.JSXChild/","title":"Ende.lint.JSXChild","description":"Union type of all possible child nodes in JSX"},{"url":"/api/ende/~/Ende.lint.JSXClosingElement/","title":"Ende.lint.JSXClosingElement","description":"The closing tag of a JSXElement. Only used when the element is not self-closing."},{"url":"/api/ende/~/Ende.lint.JSXClosingFragment/","title":"Ende.lint.JSXClosingFragment","description":"The closing tag of a JSXFragment."},{"url":"/api/ende/~/Ende.lint.JSXElement/","title":"Ende.lint.JSXElement","description":"A JSX element."},{"url":"/api/ende/~/Ende.lint.JSXEmptyExpression/","title":"Ende.lint.JSXEmptyExpression","description":"Empty JSX expression."},{"url":"/api/ende/~/Ende.lint.JSXExpressionContainer/","title":"Ende.lint.JSXExpressionContainer","description":"Inserts a normal JS expression into JSX."},{"url":"/api/ende/~/Ende.lint.JSXFragment/","title":"Ende.lint.JSXFragment","description":"Usually a passthrough node to pass multiple sibling elements as the JSX syntax requires one root element."},{"url":"/api/ende/~/Ende.lint.JSXIdentifier/","title":"Ende.lint.JSXIdentifier","description":"User named identifier inside JSX."},{"url":"/api/ende/~/Ende.lint.JSXMemberExpression/","title":"Ende.lint.JSXMemberExpression","description":"JSX member expression."},{"url":"/api/ende/~/Ende.lint.JSXNamespacedName/","title":"Ende.lint.JSXNamespacedName","description":"Namespaced name in JSX"},{"url":"/api/ende/~/Ende.lint.JSXOpeningElement/","title":"Ende.lint.JSXOpeningElement","description":"The opening tag of a JSXElement"},{"url":"/api/ende/~/Ende.lint.JSXOpeningFragment/","title":"Ende.lint.JSXOpeningFragment","description":"The opening tag of a JSXFragment."},{"url":"/api/ende/~/Ende.lint.JSXSpreadAttribute/","title":"Ende.lint.JSXSpreadAttribute","description":"Spreads an object as JSX attributes."},{"url":"/api/ende/~/Ende.lint.JSXText/","title":"Ende.lint.JSXText","description":"Plain text in JSX."},{"url":"/api/ende/~/Ende.lint.LabeledStatement/","title":"Ende.lint.LabeledStatement","description":"Custom control flow based on labels."},{"url":"/api/ende/~/Ende.lint.LineComment/","title":"Ende.lint.LineComment","description":"A single line comment"},{"url":"/api/ende/~/Ende.lint.LintVisitor/","title":"Ende.lint.LintVisitor"},{"url":"/api/ende/~/Ende.lint.Literal/","title":"Ende.lint.Literal","description":"Union type of all Literals"},{"url":"/api/ende/~/Ende.lint.LogicalExpression/","title":"Ende.lint.LogicalExpression","description":"Chain expressions based on the operator specified"},{"url":"/api/ende/~/Ende.lint.MemberExpression/","title":"Ende.lint.MemberExpression","description":"MemberExpression"},{"url":"/api/ende/~/Ende.lint.MetaProperty/","title":"Ende.lint.MetaProperty","description":"Can either be `import.meta` or `new.target`."},{"url":"/api/ende/~/Ende.lint.MethodDefinition/","title":"Ende.lint.MethodDefinition"},{"url":"/api/ende/~/Ende.lint.NewExpression/","title":"Ende.lint.NewExpression","description":"Create a new instance of a class."},{"url":"/api/ende/~/Ende.lint.Node/","title":"Ende.lint.Node","description":"Union type of all possible AST nodes"},{"url":"/api/ende/~/Ende.lint.NullLiteral/","title":"Ende.lint.NullLiteral","description":"The `null` literal"},{"url":"/api/ende/~/Ende.lint.NumberLiteral/","title":"Ende.lint.NumberLiteral","description":"A number literal"},{"url":"/api/ende/~/Ende.lint.ObjectExpression/","title":"Ende.lint.ObjectExpression","description":"An object literal."},{"url":"/api/ende/~/Ende.lint.ObjectPattern/","title":"Ende.lint.ObjectPattern","description":"Destructure an object."},{"url":"/api/ende/~/Ende.lint.Parameter/","title":"Ende.lint.Parameter","description":"Function/Method parameter"},{"url":"/api/ende/~/Ende.lint.Plugin/","title":"Ende.lint.Plugin","description":"In your plugins file do something like"},{"url":"/api/ende/~/Ende.lint.PrivateIdentifier/","title":"Ende.lint.PrivateIdentifier","description":"Private members inside of classes, must start with `#`."},{"url":"/api/ende/~/Ende.lint.Program/","title":"Ende.lint.Program"},{"url":"/api/ende/~/Ende.lint.Property/","title":"Ende.lint.Property"},{"url":"/api/ende/~/Ende.lint.PropertyDefinition/","title":"Ende.lint.PropertyDefinition"},{"url":"/api/ende/~/Ende.lint.Range/","title":"Ende.lint.Range"},{"url":"/api/ende/~/Ende.lint.RegExpLiteral/","title":"Ende.lint.RegExpLiteral","description":"A regex literal:"},{"url":"/api/ende/~/Ende.lint.ReportData/","title":"Ende.lint.ReportData"},{"url":"/api/ende/~/Ende.lint.RestElement/","title":"Ende.lint.RestElement","description":"The rest of function parameters."},{"url":"/api/ende/~/Ende.lint.ReturnStatement/","title":"Ende.lint.ReturnStatement","description":"Returns a value from a function."},{"url":"/api/ende/~/Ende.lint.Rule/","title":"Ende.lint.Rule"},{"url":"/api/ende/~/Ende.lint.RuleContext/","title":"Ende.lint.RuleContext"},{"url":"/api/ende/~/Ende.lint.SequenceExpression/","title":"Ende.lint.SequenceExpression","description":"Execute multiple expressions in sequence."},{"url":"/api/ende/~/Ende.lint.SourceCode/","title":"Ende.lint.SourceCode"},{"url":"/api/ende/~/Ende.lint.SpreadElement/","title":"Ende.lint.SpreadElement"},{"url":"/api/ende/~/Ende.lint.Statement/","title":"Ende.lint.Statement","description":"Union type of all possible statement nodes"},{"url":"/api/ende/~/Ende.lint.StaticBlock/","title":"Ende.lint.StaticBlock","description":"Static class initializiation block."},{"url":"/api/ende/~/Ende.lint.StringLiteral/","title":"Ende.lint.StringLiteral","description":"A string literal"},{"url":"/api/ende/~/Ende.lint.Super/","title":"Ende.lint.Super","description":"The `super` keyword used in classes."},{"url":"/api/ende/~/Ende.lint.SwitchCase/","title":"Ende.lint.SwitchCase","description":"A single case of a SwitchStatement."},{"url":"/api/ende/~/Ende.lint.SwitchStatement/","title":"Ende.lint.SwitchStatement","description":"Match an expression against a series of cases."},{"url":"/api/ende/~/Ende.lint.TSAbstractMethodDefinition/","title":"Ende.lint.TSAbstractMethodDefinition"},{"url":"/api/ende/~/Ende.lint.TSAbstractPropertyDefinition/","title":"Ende.lint.TSAbstractPropertyDefinition"},{"url":"/api/ende/~/Ende.lint.TSAnyKeyword/","title":"Ende.lint.TSAnyKeyword"},{"url":"/api/ende/~/Ende.lint.TSArrayType/","title":"Ende.lint.TSArrayType"},{"url":"/api/ende/~/Ende.lint.TSAsExpression/","title":"Ende.lint.TSAsExpression"},{"url":"/api/ende/~/Ende.lint.TSBigIntKeyword/","title":"Ende.lint.TSBigIntKeyword"},{"url":"/api/ende/~/Ende.lint.TSBooleanKeyword/","title":"Ende.lint.TSBooleanKeyword"},{"url":"/api/ende/~/Ende.lint.TSCallSignatureDeclaration/","title":"Ende.lint.TSCallSignatureDeclaration"},{"url":"/api/ende/~/Ende.lint.TSClassImplements/","title":"Ende.lint.TSClassImplements"},{"url":"/api/ende/~/Ende.lint.TSConditionalType/","title":"Ende.lint.TSConditionalType"},{"url":"/api/ende/~/Ende.lint.TSConstructSignatureDeclaration/","title":"Ende.lint.TSConstructSignatureDeclaration"},{"url":"/api/ende/~/Ende.lint.TSDeclareFunction/","title":"Ende.lint.TSDeclareFunction"},{"url":"/api/ende/~/Ende.lint.TSEmptyBodyFunctionExpression/","title":"Ende.lint.TSEmptyBodyFunctionExpression"},{"url":"/api/ende/~/Ende.lint.TSEnumBody/","title":"Ende.lint.TSEnumBody","description":"The body of a `TSEnumDeclaration`"},{"url":"/api/ende/~/Ende.lint.TSEnumDeclaration/","title":"Ende.lint.TSEnumDeclaration"},{"url":"/api/ende/~/Ende.lint.TSEnumMember/","title":"Ende.lint.TSEnumMember","description":"A member of a `TSEnumDeclaration`"},{"url":"/api/ende/~/Ende.lint.TSExportAssignment/","title":"Ende.lint.TSExportAssignment"},{"url":"/api/ende/~/Ende.lint.TSExternalModuleReference/","title":"Ende.lint.TSExternalModuleReference"},{"url":"/api/ende/~/Ende.lint.TSFunctionType/","title":"Ende.lint.TSFunctionType"},{"url":"/api/ende/~/Ende.lint.TSImportEqualsDeclaration/","title":"Ende.lint.TSImportEqualsDeclaration"},{"url":"/api/ende/~/Ende.lint.TSImportType/","title":"Ende.lint.TSImportType"},{"url":"/api/ende/~/Ende.lint.TSIndexSignature/","title":"Ende.lint.TSIndexSignature"},{"url":"/api/ende/~/Ende.lint.TSIndexedAccessType/","title":"Ende.lint.TSIndexedAccessType"},{"url":"/api/ende/~/Ende.lint.TSInferType/","title":"Ende.lint.TSInferType"},{"url":"/api/ende/~/Ende.lint.TSInstantiationExpression/","title":"Ende.lint.TSInstantiationExpression"},{"url":"/api/ende/~/Ende.lint.TSInterfaceBody/","title":"Ende.lint.TSInterfaceBody"},{"url":"/api/ende/~/Ende.lint.TSInterfaceDeclaration/","title":"Ende.lint.TSInterfaceDeclaration"},{"url":"/api/ende/~/Ende.lint.TSInterfaceHeritage/","title":"Ende.lint.TSInterfaceHeritage"},{"url":"/api/ende/~/Ende.lint.TSIntersectionType/","title":"Ende.lint.TSIntersectionType"},{"url":"/api/ende/~/Ende.lint.TSIntrinsicKeyword/","title":"Ende.lint.TSIntrinsicKeyword"},{"url":"/api/ende/~/Ende.lint.TSLiteralType/","title":"Ende.lint.TSLiteralType"},{"url":"/api/ende/~/Ende.lint.TSMappedType/","title":"Ende.lint.TSMappedType"},{"url":"/api/ende/~/Ende.lint.TSMethodSignature/","title":"Ende.lint.TSMethodSignature"},{"url":"/api/ende/~/Ende.lint.TSModuleBlock/","title":"Ende.lint.TSModuleBlock","description":"Body of a `TSModuleDeclaration`"},{"url":"/api/ende/~/Ende.lint.TSModuleDeclaration/","title":"Ende.lint.TSModuleDeclaration"},{"url":"/api/ende/~/Ende.lint.TSNamedTupleMember/","title":"Ende.lint.TSNamedTupleMember"},{"url":"/api/ende/~/Ende.lint.TSNamespaceExportDeclaration/","title":"Ende.lint.TSNamespaceExportDeclaration"},{"url":"/api/ende/~/Ende.lint.TSNeverKeyword/","title":"Ende.lint.TSNeverKeyword"},{"url":"/api/ende/~/Ende.lint.TSNonNullExpression/","title":"Ende.lint.TSNonNullExpression"},{"url":"/api/ende/~/Ende.lint.TSNullKeyword/","title":"Ende.lint.TSNullKeyword"},{"url":"/api/ende/~/Ende.lint.TSNumberKeyword/","title":"Ende.lint.TSNumberKeyword"},{"url":"/api/ende/~/Ende.lint.TSObjectKeyword/","title":"Ende.lint.TSObjectKeyword"},{"url":"/api/ende/~/Ende.lint.TSOptionalType/","title":"Ende.lint.TSOptionalType"},{"url":"/api/ende/~/Ende.lint.TSParameterProperty/","title":"Ende.lint.TSParameterProperty"},{"url":"/api/ende/~/Ende.lint.TSPropertySignature/","title":"Ende.lint.TSPropertySignature"},{"url":"/api/ende/~/Ende.lint.TSQualifiedName/","title":"Ende.lint.TSQualifiedName"},{"url":"/api/ende/~/Ende.lint.TSRestType/","title":"Ende.lint.TSRestType"},{"url":"/api/ende/~/Ende.lint.TSSatisfiesExpression/","title":"Ende.lint.TSSatisfiesExpression"},{"url":"/api/ende/~/Ende.lint.TSStringKeyword/","title":"Ende.lint.TSStringKeyword"},{"url":"/api/ende/~/Ende.lint.TSSymbolKeyword/","title":"Ende.lint.TSSymbolKeyword"},{"url":"/api/ende/~/Ende.lint.TSTemplateLiteralType/","title":"Ende.lint.TSTemplateLiteralType"},{"url":"/api/ende/~/Ende.lint.TSThisType/","title":"Ende.lint.TSThisType"},{"url":"/api/ende/~/Ende.lint.TSTupleType/","title":"Ende.lint.TSTupleType"},{"url":"/api/ende/~/Ende.lint.TSTypeAliasDeclaration/","title":"Ende.lint.TSTypeAliasDeclaration"},{"url":"/api/ende/~/Ende.lint.TSTypeAnnotation/","title":"Ende.lint.TSTypeAnnotation"},{"url":"/api/ende/~/Ende.lint.TSTypeAssertion/","title":"Ende.lint.TSTypeAssertion"},{"url":"/api/ende/~/Ende.lint.TSTypeLiteral/","title":"Ende.lint.TSTypeLiteral"},{"url":"/api/ende/~/Ende.lint.TSTypeOperator/","title":"Ende.lint.TSTypeOperator"},{"url":"/api/ende/~/Ende.lint.TSTypeParameter/","title":"Ende.lint.TSTypeParameter"},{"url":"/api/ende/~/Ende.lint.TSTypeParameterDeclaration/","title":"Ende.lint.TSTypeParameterDeclaration"},{"url":"/api/ende/~/Ende.lint.TSTypeParameterInstantiation/","title":"Ende.lint.TSTypeParameterInstantiation"},{"url":"/api/ende/~/Ende.lint.TSTypePredicate/","title":"Ende.lint.TSTypePredicate"},{"url":"/api/ende/~/Ende.lint.TSTypeQuery/","title":"Ende.lint.TSTypeQuery"},{"url":"/api/ende/~/Ende.lint.TSTypeReference/","title":"Ende.lint.TSTypeReference"},{"url":"/api/ende/~/Ende.lint.TSUndefinedKeyword/","title":"Ende.lint.TSUndefinedKeyword"},{"url":"/api/ende/~/Ende.lint.TSUnionType/","title":"Ende.lint.TSUnionType"},{"url":"/api/ende/~/Ende.lint.TSUnknownKeyword/","title":"Ende.lint.TSUnknownKeyword"},{"url":"/api/ende/~/Ende.lint.TSVoidKeyword/","title":"Ende.lint.TSVoidKeyword"},{"url":"/api/ende/~/Ende.lint.TaggedTemplateExpression/","title":"Ende.lint.TaggedTemplateExpression","description":"Tagged template expression."},{"url":"/api/ende/~/Ende.lint.TemplateElement/","title":"Ende.lint.TemplateElement","description":"The static portion of a template literal."},{"url":"/api/ende/~/Ende.lint.TemplateLiteral/","title":"Ende.lint.TemplateLiteral","description":"A template literal string."},{"url":"/api/ende/~/Ende.lint.ThisExpression/","title":"Ende.lint.ThisExpression","description":"The `this` keyword used in classes."},{"url":"/api/ende/~/Ende.lint.ThrowStatement/","title":"Ende.lint.ThrowStatement","description":"Throw a user defined exception. Stops execution of the current function."},{"url":"/api/ende/~/Ende.lint.TryStatement/","title":"Ende.lint.TryStatement","description":"Try/catch statement"},{"url":"/api/ende/~/Ende.lint.TypeNode/","title":"Ende.lint.TypeNode","description":"Union type of all possible type nodes in TypeScript"},{"url":"/api/ende/~/Ende.lint.UnaryExpression/","title":"Ende.lint.UnaryExpression","description":"Apply operand on value based on the specified operator."},{"url":"/api/ende/~/Ende.lint.UpdateExpression/","title":"Ende.lint.UpdateExpression","description":"Syntactic sugar to increment or decrement a value."},{"url":"/api/ende/~/Ende.lint.VariableDeclaration/","title":"Ende.lint.VariableDeclaration","description":"Variable declaration."},{"url":"/api/ende/~/Ende.lint.VariableDeclarator/","title":"Ende.lint.VariableDeclarator","description":"A VariableDeclaration can declare multiple variables. This node represents a single declaration out of that."},{"url":"/api/ende/~/Ende.lint.WhileStatement/","title":"Ende.lint.WhileStatement","description":"Run a loop while the test expression is truthy."},{"url":"/api/ende/~/Ende.lint.WithStatement/","title":"Ende.lint.WithStatement","description":"Legacy JavaScript feature, that's discouraged from being used today."},{"url":"/api/ende/~/Ende.lint.YieldExpression/","title":"Ende.lint.YieldExpression","description":"Pause or resume a generator function."},{"url":"/api/ende/~/Ende.lint.runPlugin/","title":"Ende.lint.runPlugin","description":"This API is useful for testing lint plugins."},{"url":"/api/ende/~/Ende.lint/","title":"Ende.lint"},{"url":"/api/ende/~/Ende.listen/","title":"Ende.listen","description":"Listen announces on the local transport address."},{"url":"/api/ende/~/Ende.listenDatagram/","title":"Ende.listenDatagram","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/ende/~/Ende.listenTls/","title":"Ende.listenTls","description":"Listen announces on the local transport address over TLS (transport layer security)."},{"url":"/api/ende/~/Ende.loadavg/","title":"Ende.loadavg","description":"Returns an array containing the 1, 5, and 15 minute load averages. The load average is a measure of CPU and IO utilization of the last one, five, and 15 minute periods expressed as a fractional number. Zero means there is no load. On Windows, the three values are always the same and represent the current load, not the 1, 5 and 15 minute load averages."},{"url":"/api/ende/~/Ende.lstat/","title":"Ende.lstat","description":"Resolves to a Ende.FileInfo for the specified `path`. If `path` is a symlink, information for the symlink will be returned instead of what it points to."},{"url":"/api/ende/~/Ende.lstatSync/","title":"Ende.lstatSync","description":"Synchronously returns a Ende.FileInfo for the specified `path`. If `path` is a symlink, information for the symlink will be returned instead of what it points to."},{"url":"/api/ende/~/Ende.mainModule/","title":"Ende.mainModule","description":"The URL of the entrypoint module entered from the command-line. It requires read permission to the CWD."},{"url":"/api/ende/~/Ende.makeTempDir/","title":"Ende.makeTempDir","description":"Creates a new temporary directory in the default directory for temporary files, unless `dir` is specified. Other optional options include prefixing and suffixing the directory name with `prefix` and `suffix` respectively."},{"url":"/api/ende/~/Ende.makeTempDirSync/","title":"Ende.makeTempDirSync","description":"Synchronously creates a new temporary directory in the default directory for temporary files, unless `dir` is specified. Other optional options include prefixing and suffixing the directory name with `prefix` and `suffix` respectively."},{"url":"/api/ende/~/Ende.makeTempFile/","title":"Ende.makeTempFile","description":"Creates a new temporary file in the default directory for temporary files, unless `dir` is specified."},{"url":"/api/ende/~/Ende.makeTempFileSync/","title":"Ende.makeTempFileSync","description":"Synchronously creates a new temporary file in the default directory for temporary files, unless `dir` is specified."},{"url":"/api/ende/~/Ende.mkdir/","title":"Ende.mkdir","description":"Creates a new directory with the specified path."},{"url":"/api/ende/~/Ende.mkdirSync/","title":"Ende.mkdirSync","description":"Synchronously creates a new directory with the specified path."},{"url":"/api/ende/~/Ende.networkInterfaces/","title":"Ende.networkInterfaces","description":"Returns an array of the network interface information."},{"url":"/api/ende/~/Ende.noColor/","title":"Ende.noColor","description":"Reflects the `NO_COLOR` environment variable at program start."},{"url":"/api/ende/~/Ende.open/","title":"Ende.open","description":"Open a file and resolve to an instance of Ende.FsFile. The file does not need to previously exist if using the `create` or `createNew` open options. The caller may have the resulting file automatically closed by the runtime once it's out of scope by declaring the file variable with the `using` keyword."},{"url":"/api/ende/~/Ende.openSync/","title":"Ende.openSync","description":"Synchronously open a file and return an instance of Ende.FsFile. The file does not need to previously exist if using the `create` or `createNew` open options. The caller may have the resulting file automatically closed by the runtime once it's out of scope by declaring the file variable with the `using` keyword."},{"url":"/api/ende/~/Ende.osRelease/","title":"Ende.osRelease","description":"Returns the release version of the Operating System."},{"url":"/api/ende/~/Ende.osUptime/","title":"Ende.osUptime","description":"Returns the Operating System uptime in number of seconds."},{"url":"/api/ende/~/Ende.pid/","title":"Ende.pid","description":"The current process ID of this instance of the Ende CLI."},{"url":"/api/ende/~/Ende.ppid/","title":"Ende.ppid","description":"The process ID of parent process of this instance of the Ende CLI."},{"url":"/api/ende/~/Ende.readDir/","title":"Ende.readDir","description":"Reads the directory given by `path` and returns an async iterable of Ende.DirEntry. The order of entries is not guaranteed."},{"url":"/api/ende/~/Ende.readDirSync/","title":"Ende.readDirSync","description":"Synchronously reads the directory given by `path` and returns an iterable of Ende.DirEntry. The order of entries is not guaranteed."},{"url":"/api/ende/~/Ende.readFile/","title":"Ende.readFile","description":"Reads and resolves to the entire contents of a file as an array of bytes. `TextDecoder` can be used to transform the bytes to string if required. Rejects with an error when reading a directory."},{"url":"/api/ende/~/Ende.readFileSync/","title":"Ende.readFileSync","description":"Synchronously reads and returns the entire contents of a file as an array of bytes. `TextDecoder` can be used to transform the bytes to string if required. Throws an error when reading a directory."},{"url":"/api/ende/~/Ende.readLink/","title":"Ende.readLink","description":"Resolves to the full path destination of the named symbolic link."},{"url":"/api/ende/~/Ende.readLinkSync/","title":"Ende.readLinkSync","description":"Synchronously returns the full path destination of the named symbolic link."},{"url":"/api/ende/~/Ende.readTextFile/","title":"Ende.readTextFile","description":"Asynchronously reads and returns the entire contents of a file as an UTF-8 decoded string."},{"url":"/api/ende/~/Ende.readTextFileSync/","title":"Ende.readTextFileSync","description":"Synchronously reads and returns the entire contents of a file as an UTF-8 decoded string."},{"url":"/api/ende/~/Ende.realPath/","title":"Ende.realPath","description":"Resolves to the absolute normalized path, with symbolic links resolved."},{"url":"/api/ende/~/Ende.realPathSync/","title":"Ende.realPathSync","description":"Synchronously returns absolute normalized path, with symbolic links resolved."},{"url":"/api/ende/~/Ende.refTimer/","title":"Ende.refTimer","description":"Make the timer of the given `id` block the event loop from finishing."},{"url":"/api/ende/~/Ende.remove/","title":"Ende.remove","description":"Removes the named file or directory."},{"url":"/api/ende/~/Ende.removeSignalListener/","title":"Ende.removeSignalListener","description":"Removes the given signal listener that has been registered with Ende.addSignalListener."},{"url":"/api/ende/~/Ende.removeSync/","title":"Ende.removeSync","description":"Synchronously removes the named file or directory."},{"url":"/api/ende/~/Ende.rename/","title":"Ende.rename","description":"Renames (moves) `oldpath` to `newpath`. Paths may be files or directories. If `newpath` already exists and is not a directory, `rename()` replaces it. OS-specific restrictions may apply when `oldpath` and `newpath` are in different directories."},{"url":"/api/ende/~/Ende.renameSync/","title":"Ende.renameSync","description":"Synchronously renames (moves) `oldpath` to `newpath`. Paths may be files or directories. If `newpath` already exists and is not a directory, `renameSync()` replaces it. OS-specific restrictions may apply when `oldpath` and `newpath` are in different directories."},{"url":"/api/ende/~/Ende.resolveDns/","title":"Ende.resolveDns","description":"Performs DNS resolution against the given query, returning resolved records."},{"url":"/api/ende/~/Ende.serve/","title":"Ende.serve","description":"Serves HTTP requests with the given handler."},{"url":"/api/ende/~/Ende.spawn/","title":"Ende.spawn","description":"Spawns a new subprocess, returning a Ende.ChildProcess handle."},{"url":"/api/ende/~/Ende.spawnAndWait/","title":"Ende.spawnAndWait","description":"Spawns a subprocess, waits for it to finish, and returns the output."},{"url":"/api/ende/~/Ende.spawnAndWaitSync/","title":"Ende.spawnAndWaitSync","description":"Synchronously spawns a subprocess, waits for it to finish, and returns the output."},{"url":"/api/ende/~/Ende.startTls/","title":"Ende.startTls","description":"Start TLS handshake from an existing connection using an optional list of CA certificates, and hostname (default is \"127.0.0.1\"). Specifying CA certs is optional. By default the configured root certificates are used. Using this function requires that the other end of the connection is prepared for a TLS handshake."},{"url":"/api/ende/~/Ende.stat/","title":"Ende.stat","description":"Resolves to a Ende.FileInfo for the specified `path`. Will always follow symlinks."},{"url":"/api/ende/~/Ende.statSync/","title":"Ende.statSync","description":"Synchronously returns a Ende.FileInfo for the specified `path`. Will always follow symlinks."},{"url":"/api/ende/~/Ende.stderr/","title":"Ende.stderr","description":"A reference to `stderr` which can be used to write directly to `stderr`. It implements the Ende specific Writer, WriterSync, and Closer interfaces as well as provides a WritableStream interface."},{"url":"/api/ende/~/Ende.stdin/","title":"Ende.stdin","description":"A reference to `stdin` which can be used to read directly from `stdin`."},{"url":"/api/ende/~/Ende.stdout/","title":"Ende.stdout","description":"A reference to `stdout` which can be used to write directly to `stdout`. It implements the Ende specific Writer, WriterSync, and Closer interfaces as well as provides a WritableStream interface."},{"url":"/api/ende/~/Ende.symlink/","title":"Ende.symlink","description":"Creates `newpath` as a symbolic link to `oldpath`."},{"url":"/api/ende/~/Ende.symlinkSync/","title":"Ende.symlinkSync","description":"Creates `newpath` as a symbolic link to `oldpath`."},{"url":"/api/ende/~/Ende.telemetry.contextManager/","title":"Ende.telemetry.contextManager","description":"A ContextManager compatible with OpenTelemetry.js https://open-telemetry.github.io/opentelemetry-js/interfaces/_opentelemetry_api.ContextManager.html"},{"url":"/api/ende/~/Ende.telemetry.meterProvider/","title":"Ende.telemetry.meterProvider","description":"A MeterProvider compatible with OpenTelemetry.js https://open-telemetry.github.io/opentelemetry-js/interfaces/_opentelemetry_api.MeterProvider.html"},{"url":"/api/ende/~/Ende.telemetry.tracerProvider/","title":"Ende.telemetry.tracerProvider","description":"A TracerProvider compatible with OpenTelemetry.js https://open-telemetry.github.io/opentelemetry-js/interfaces/_opentelemetry_api.TracerProvider.html"},{"url":"/api/ende/~/Ende.telemetry/","title":"Ende.telemetry","description":"APIs for working with the OpenTelemetry observability framework. Ende can export traces, metrics, and logs to OpenTelemetry compatible backends via the OTLP protocol."},{"url":"/api/ende/~/Ende.test/","title":"Ende.test","description":"Register a test which will be run when `ende test` is used on the command line and the containing module looks like a test module."},{"url":"/api/ende/~/Ende.truncate/","title":"Ende.truncate","description":"Truncates (or extends) the specified file, to reach the specified `len`. If `len` is not specified then the entire file contents are truncated."},{"url":"/api/ende/~/Ende.truncateSync/","title":"Ende.truncateSync","description":"Synchronously truncates (or extends) the specified file, to reach the specified `len`. If `len` is not specified then the entire file contents are truncated."},{"url":"/api/ende/~/Ende.uid/","title":"Ende.uid","description":"Returns the user id of the process on POSIX platforms. Returns null on Windows."},{"url":"/api/ende/~/Ende.umask/","title":"Ende.umask","description":"Retrieve the process umask. If `mask` is provided, sets the process umask. This call always returns what the umask was before the call."},{"url":"/api/ende/~/Ende.unrefTimer/","title":"Ende.unrefTimer","description":"Make the timer of the given `id` not block the event loop from finishing."},{"url":"/api/ende/~/Ende.upgradeWebSocket/","title":"Ende.upgradeWebSocket","description":"Upgrade an incoming HTTP request to a WebSocket."},{"url":"/api/ende/~/Ende.upgradeWebTransport/","title":"Ende.upgradeWebTransport","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/ende/~/Ende.utime/","title":"Ende.utime","description":"Changes the access (`atime`) and modification (`mtime`) times of a file system object referenced by `path`. Given times are either in seconds (UNIX epoch time) or as `Date` objects."},{"url":"/api/ende/~/Ende.utimeSync/","title":"Ende.utimeSync","description":"Synchronously changes the access (`atime`) and modification (`mtime`) times of a file system object referenced by `path`. Given times are either in seconds (UNIX epoch time) or as `Date` objects."},{"url":"/api/ende/~/Ende.version/","title":"Ende.version","description":"Version information related to the current Ende CLI runtime environment."},{"url":"/api/ende/~/Ende.watchFs/","title":"Ende.watchFs","description":"Watch for file system events against one or more `paths`, which can be files or directories. These paths must exist already. One user action (e.g. `touch test.file`) can generate multiple file system events. Likewise, one user action can result in multiple file paths in one event (e.g. `mv old_name.txt new_name.txt`)."},{"url":"/api/ende/~/Ende.webgpu.deviceStartCapture/","title":"Ende.webgpu.deviceStartCapture","description":"Starts a frame capture."},{"url":"/api/ende/~/Ende.webgpu.deviceStopCapture/","title":"Ende.webgpu.deviceStopCapture","description":"Stops a frame capture."},{"url":"/api/ende/~/Ende.webgpu/","title":"Ende.webgpu","description":"The webgpu namespace provides additional APIs that the WebGPU specification does not specify."},{"url":"/api/ende/~/Ende.writeFile/","title":"Ende.writeFile","description":"Write `data` to the given `path`, by default creating a new file if needed, else overwriting."},{"url":"/api/ende/~/Ende.writeFileSync/","title":"Ende.writeFileSync","description":"Synchronously write `data` to the given `path`, by default creating a new file if needed, else overwriting."},{"url":"/api/ende/~/Ende.writeTextFile/","title":"Ende.writeTextFile","description":"Write string `data` to the given `path`, by default creating a new file if needed, else overwriting."},{"url":"/api/ende/~/Ende.writeTextFileSync/","title":"Ende.writeTextFileSync","description":"Synchronously write string `data` to the given `path`, by default creating a new file if needed, else overwriting."},{"url":"/api/web/","title":"Web platform APIs","description":"The web standard globals Ende implements, such as fetch, streams, URLs, Web Crypto, WebSockets and WebGPU."},{"url":"/api/web/cache/","title":"Cache — Web platform APIs","description":"Tools for caching and managing data. Store and retrieve data from the cache, manage cache storage limits, and handle cache-related events."},{"url":"/api/web/canvas/","title":"Canvas — Web platform APIs","description":"Create, transform, and display images and graphics."},{"url":"/api/web/crypto/","title":"Crypto — Web platform APIs","description":"Cryptographic functionality for secure communication, data protection, and key management. Generate secure random numbers, encrypt and decrypt data, and manage cryptographic keys."},{"url":"/api/web/encoding/","title":"Encoding — Web platform APIs","description":"Handle character encoding, decoding, and binary data conversion."},{"url":"/api/web/events/","title":"Events — Web platform APIs","description":"Handle events and interactions. Listen for and respond to various events, including custom events, errors, progress, and promise rejections."},{"url":"/api/web/fetch/","title":"Fetch — Web platform APIs","description":"HTTP client for fetching data across a network. Retrieve resources from servers, handle responses, and manage network requests."},{"url":"/api/web/file/","title":"File — Web platform APIs","description":"File and data manipulation tools. Handle files, read data and work with binary content."},{"url":"/api/web/geometry-interfaces-module-api/","title":"Geometry Interfaces Module API — Web platform APIs","description":"Points, rectangles, quadrilaterals and matrices for 2D and 3D geometry."},{"url":"/api/web/gpu/","title":"GPU — Web platform APIs","description":"GPU programming and rendering. Efficiently use a device’s graphics processing unit (GPU) for high-performance computations and complex image rendering."},{"url":"/api/web/intl/","title":"Intl — Web platform APIs","description":"Tools for internationalization and localization. Create language-aware applications, handle date and time formatting, and adapt content for different locales."},{"url":"/api/web/io/","title":"I/O — Web platform APIs","description":"Interfaces for reading, writing and managing data in console interactions."},{"url":"/api/web/messaging/","title":"Messaging — Web platform APIs","description":"Facilitate communication between different parts of an application, allowing data exchange and coordination."},{"url":"/api/web/other/","title":"Other — Web platform APIs"},{"url":"/api/web/performance/","title":"Performance — Web platform APIs","description":"Measure, analyze, and optimize application performance."},{"url":"/api/web/platform/","title":"Platform — Web platform APIs","description":"Essential interfaces and functions for the runtime environment: scheduling and cancelling tasks, user prompts, and the global object."},{"url":"/api/web/storage/","title":"Storage — Web platform APIs","description":"Store data locally. Manage session storage and local storage."},{"url":"/api/web/streams/","title":"Streams — Web platform APIs","description":"Manage data streams, queuing strategies, and transformations. Handle data in chunks, process large datasets, and optimize memory usage."},{"url":"/api/web/url/","title":"URL — Web platform APIs","description":"Manipulate URLs, extract data from URLs and manage query parameters."},{"url":"/api/web/wasm/","title":"Wasm — Web platform APIs","description":"Efficiently execute computationally intensive tasks. Wasm module compilation, instantiation, memory management, and interaction with imports and exports."},{"url":"/api/web/websockets/","title":"WebSockets — Web platform APIs","description":"Enable real-time communication between clients and servers using WebSockets."},{"url":"/api/web/workers/","title":"Workers — Web platform APIs","description":"Run script operations in background threads. Manage worker threads, communicate with workers, and handle data transfer between workers and the main thread."},{"url":"/api/web/~/AbortController/","title":"AbortController","description":"A controller object that allows you to abort one or more DOM requests as and when desired."},{"url":"/api/web/~/AbortSignal/","title":"AbortSignal","description":"A signal object that allows you to communicate with a DOM request (such as a Fetch) and abort it if required via an AbortController object."},{"url":"/api/web/~/AbortSignalEventMap/","title":"AbortSignalEventMap"},{"url":"/api/web/~/AbstractWorkerEventMap/","title":"AbstractWorkerEventMap"},{"url":"/api/web/~/AddEventListenerOptions/","title":"AddEventListenerOptions","description":"Options for configuring an event listener via `addEventListener`."},{"url":"/api/web/~/AesCbcParams/","title":"AesCbcParams"},{"url":"/api/web/~/AesCtrParams/","title":"AesCtrParams"},{"url":"/api/web/~/AesDerivedKeyParams/","title":"AesDerivedKeyParams"},{"url":"/api/web/~/AesGcmParams/","title":"AesGcmParams"},{"url":"/api/web/~/AesKeyAlgorithm/","title":"AesKeyAlgorithm"},{"url":"/api/web/~/AesKeyGenParams/","title":"AesKeyGenParams"},{"url":"/api/web/~/Algorithm/","title":"Algorithm"},{"url":"/api/web/~/AlgorithmIdentifier/","title":"AlgorithmIdentifier"},{"url":"/api/web/~/AllowSharedBufferSource/","title":"AllowSharedBufferSource"},{"url":"/api/web/~/BigInteger/","title":"BigInteger"},{"url":"/api/web/~/BinaryType/","title":"BinaryType","description":"Specifies the type of binary data being received over a `WebSocket` connection."},{"url":"/api/web/~/Blob/","title":"Blob","description":"A file-like object of immutable, raw data. Blobs represent data that isn't necessarily in a JavaScript-native format. The File interface is based on Blob, inheriting blob functionality and expanding it to support files on the user's system."},{"url":"/api/web/~/BlobPart/","title":"BlobPart"},{"url":"/api/web/~/BlobPropertyBag/","title":"BlobPropertyBag"},{"url":"/api/web/~/Body/","title":"Body"},{"url":"/api/web/~/BodyInit/","title":"BodyInit"},{"url":"/api/web/~/BroadcastChannel/","title":"BroadcastChannel","description":"Represents a named channel that any BroadcastChannel with the same name (across workers or isolates in the same Ende process) can use to send and receive messages, allowing one-to-many communication between execution contexts."},{"url":"/api/web/~/BroadcastChannelEventMap/","title":"BroadcastChannelEventMap"},{"url":"/api/web/~/BufferSource/","title":"BufferSource"},{"url":"/api/web/~/ByteLengthQueuingStrategy/","title":"ByteLengthQueuingStrategy"},{"url":"/api/web/~/CSSRule/","title":"CSSRule","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/web/~/CSSStyleSheet/","title":"CSSStyleSheet","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/web/~/Cache/","title":"Cache","description":"Represents a single named store of `Request`/`Response` pairs. Obtain a `Cache` via CacheStorage.open and use it to persist responses and later match incoming requests against them."},{"url":"/api/web/~/CacheQueryOptions/","title":"CacheQueryOptions"},{"url":"/api/web/~/CacheStorage/","title":"CacheStorage","description":"Represents the storage for named Cache objects. It provides the methods used to open, enumerate, look up, and delete caches, and is accessed via the global caches property."},{"url":"/api/web/~/CloseEvent/","title":"CloseEvent","description":"The `CloseEvent` interface represents an event that occurs when a `WebSocket` connection is closed."},{"url":"/api/web/~/CloseEventInit/","title":"CloseEventInit","description":"Configuration options for a `WebSocket` \"close\" event."},{"url":"/api/web/~/ColorSpaceConversion/","title":"ColorSpaceConversion","description":"Specifies whether the image should be decoded using color space conversion. Either none or default (default). The value default indicates that implementation-specific behavior is used."},{"url":"/api/web/~/CompressionFormat/","title":"CompressionFormat"},{"url":"/api/web/~/CompressionStream/","title":"CompressionStream","description":"An API for compressing a stream of data."},{"url":"/api/web/~/Console/","title":"Console","description":"The Console interface provides methods for logging information to the console, as well as other utility methods for debugging and inspecting code. Methods include logging, debugging, and timing functionality."},{"url":"/api/web/~/CountQueuingStrategy/","title":"CountQueuingStrategy","description":"This Streams API interface provides a built-in byte length queuing strategy that can be used when constructing streams."},{"url":"/api/web/~/Crypto/","title":"Crypto","description":"This Web Crypto API interface provides basic cryptographic functionality. It is accessed via the global crypto property, which gives access to cryptographically strong random number generation and to the low-level primitives exposed by SubtleCrypto through Crypto.subtle."},{"url":"/api/web/~/CryptoKey/","title":"CryptoKey","description":"The CryptoKey dictionary of the Web Crypto API represents a cryptographic key."},{"url":"/api/web/~/CryptoKeyPair/","title":"CryptoKeyPair","description":"The CryptoKeyPair dictionary of the Web Crypto API represents a key pair for an asymmetric cryptography algorithm, also known as a public-key algorithm."},{"url":"/api/web/~/CustomEvent/","title":"CustomEvent"},{"url":"/api/web/~/CustomEventInit/","title":"CustomEventInit"},{"url":"/api/web/~/DOMException/","title":"DOMException"},{"url":"/api/web/~/DOMMatrix/","title":"DOMMatrix","description":"The **`DOMMatrix`** interface represents 4×4 matrices, suitable for 2D and 3D operations including rotation and translation. It is a mutable version of the DOMMatrixReadOnly interface. The interface is available inside web workers."},{"url":"/api/web/~/DOMMatrix2DInit/","title":"DOMMatrix2DInit"},{"url":"/api/web/~/DOMMatrixInit/","title":"DOMMatrixInit"},{"url":"/api/web/~/DOMMatrixReadOnly/","title":"DOMMatrixReadOnly","description":"The **`DOMMatrixReadOnly`** interface represents a read-only 4×4 matrix, suitable for 2D and 3D operations. The DOMMatrix interface — which is based upon DOMMatrixReadOnly—adds mutability, allowing you to alter the matrix after creating it."},{"url":"/api/web/~/DOMPoint/","title":"DOMPoint","description":"A **`DOMPoint`** object represents a 2D or 3D point in a coordinate system; it includes values for the coordinates in up to three dimensions, as well as an optional perspective value. DOMPoint is based on DOMPointReadOnly but allows its properties' values to be changed."},{"url":"/api/web/~/DOMPointInit/","title":"DOMPointInit"},{"url":"/api/web/~/DOMPointReadOnly/","title":"DOMPointReadOnly","description":"The **`DOMPointReadOnly`** interface specifies the coordinate and perspective fields used by DOMPoint to define a 2D or 3D point in a coordinate system."},{"url":"/api/web/~/DOMQuad/","title":"DOMQuad","description":"A **`DOMQuad`** is a collection of four DOMPoints defining the corners of an arbitrary quadrilateral. Returning DOMQuads lets getBoxQuads() return accurate information even when arbitrary 2D or 3D transforms are present. It has a handy bounds attribute returning a DOMRectReadOnly for those cases where you just want an axis-aligned bounding rectangle."},{"url":"/api/web/~/DOMQuadInit/","title":"DOMQuadInit"},{"url":"/api/web/~/DOMRect/","title":"DOMRect","description":"A **`DOMRect`** describes the size and position of a rectangle."},{"url":"/api/web/~/DOMRectInit/","title":"DOMRectInit"},{"url":"/api/web/~/DOMRectReadOnly/","title":"DOMRectReadOnly","description":"The **`DOMRectReadOnly`** interface specifies the standard properties (also used by DOMRect) to define a rectangle whose properties are immutable."},{"url":"/api/web/~/DOMStringList/","title":"DOMStringList"},{"url":"/api/web/~/DecompressionStream/","title":"DecompressionStream","description":"An API for decompressing a stream of data."},{"url":"/api/web/~/DomIterable/","title":"DomIterable"},{"url":"/api/web/~/EcKeyAlgorithm/","title":"EcKeyAlgorithm"},{"url":"/api/web/~/EcKeyGenParams/","title":"EcKeyGenParams"},{"url":"/api/web/~/EcKeyImportParams/","title":"EcKeyImportParams"},{"url":"/api/web/~/EcdhKeyDeriveParams/","title":"EcdhKeyDeriveParams"},{"url":"/api/web/~/EcdsaParams/","title":"EcdsaParams"},{"url":"/api/web/~/EndingType/","title":"EndingType"},{"url":"/api/web/~/ErrorConstructor/","title":"ErrorConstructor"},{"url":"/api/web/~/ErrorEvent/","title":"ErrorEvent"},{"url":"/api/web/~/ErrorEventInit/","title":"ErrorEventInit"},{"url":"/api/web/~/Event/","title":"Event","description":"An event which takes place in the DOM."},{"url":"/api/web/~/EventInit/","title":"EventInit"},{"url":"/api/web/~/EventListener/","title":"EventListener"},{"url":"/api/web/~/EventListenerObject/","title":"EventListenerObject","description":"The `EventListenerObject` interface represents an object that can handle events dispatched by an `EventTarget` object."},{"url":"/api/web/~/EventListenerOptions/","title":"EventListenerOptions"},{"url":"/api/web/~/EventListenerOrEventListenerObject/","title":"EventListenerOrEventListenerObject"},{"url":"/api/web/~/EventSource/","title":"EventSource","description":"Represents a connection to a server that sends server-sent events, receiving updates pushed by the server as a stream of `message` events over a persistent HTTP connection that automatically reconnects when interrupted."},{"url":"/api/web/~/EventSourceEventMap/","title":"EventSourceEventMap"},{"url":"/api/web/~/EventSourceInit/","title":"EventSourceInit"},{"url":"/api/web/~/EventTarget/","title":"EventTarget","description":"EventTarget is a DOM interface implemented by objects that can receive events and may have listeners for them."},{"url":"/api/web/~/File/","title":"File","description":"Provides information about files and allows JavaScript in a web page to access their content."},{"url":"/api/web/~/FilePropertyBag/","title":"FilePropertyBag"},{"url":"/api/web/~/FileReader/","title":"FileReader","description":"Lets web applications asynchronously read the contents of files (or raw data buffers) stored on the user's computer, using File or Blob objects to specify the file or data to read."},{"url":"/api/web/~/FileReaderEventMap/","title":"FileReaderEventMap"},{"url":"/api/web/~/FormData/","title":"FormData","description":"Provides a way to easily construct a set of key/value pairs representing form fields and their values, which can then be easily sent using the XMLHttpRequest.send() method. It uses the same format a form would use if the encoding type were set to \"multipart/form-data\"."},{"url":"/api/web/~/FormDataEntryValue/","title":"FormDataEntryValue"},{"url":"/api/web/~/GPU/","title":"GPU","description":"The entry point to WebGPU in Ende, accessed via the global navigator.gpu property."},{"url":"/api/web/~/GPUAdapter/","title":"GPUAdapter","description":"Represents a physical GPU device that can be used to create a logical GPU device."},{"url":"/api/web/~/GPUAdapterInfo/","title":"GPUAdapterInfo"},{"url":"/api/web/~/GPUAddressMode/","title":"GPUAddressMode"},{"url":"/api/web/~/GPUAutoLayoutMode/","title":"GPUAutoLayoutMode"},{"url":"/api/web/~/GPUBindGroup/","title":"GPUBindGroup"},{"url":"/api/web/~/GPUBindGroupDescriptor/","title":"GPUBindGroupDescriptor"},{"url":"/api/web/~/GPUBindGroupEntry/","title":"GPUBindGroupEntry"},{"url":"/api/web/~/GPUBindGroupLayout/","title":"GPUBindGroupLayout"},{"url":"/api/web/~/GPUBindGroupLayoutDescriptor/","title":"GPUBindGroupLayoutDescriptor"},{"url":"/api/web/~/GPUBindGroupLayoutEntry/","title":"GPUBindGroupLayoutEntry"},{"url":"/api/web/~/GPUBindingResource/","title":"GPUBindingResource"},{"url":"/api/web/~/GPUBlendComponent/","title":"GPUBlendComponent"},{"url":"/api/web/~/GPUBlendFactor/","title":"GPUBlendFactor"},{"url":"/api/web/~/GPUBlendOperation/","title":"GPUBlendOperation"},{"url":"/api/web/~/GPUBlendState/","title":"GPUBlendState"},{"url":"/api/web/~/GPUBuffer/","title":"GPUBuffer","description":"Represents a block of memory allocated on the GPU."},{"url":"/api/web/~/GPUBufferBinding/","title":"GPUBufferBinding"},{"url":"/api/web/~/GPUBufferBindingLayout/","title":"GPUBufferBindingLayout"},{"url":"/api/web/~/GPUBufferBindingType/","title":"GPUBufferBindingType"},{"url":"/api/web/~/GPUBufferDescriptor/","title":"GPUBufferDescriptor"},{"url":"/api/web/~/GPUBufferMapState/","title":"GPUBufferMapState"},{"url":"/api/web/~/GPUBufferUsage/","title":"GPUBufferUsage"},{"url":"/api/web/~/GPUBufferUsageFlags/","title":"GPUBufferUsageFlags"},{"url":"/api/web/~/GPUCanvasAlphaMode/","title":"GPUCanvasAlphaMode"},{"url":"/api/web/~/GPUCanvasConfiguration/","title":"GPUCanvasConfiguration"},{"url":"/api/web/~/GPUCanvasContext/","title":"GPUCanvasContext","description":"The rendering context that presents WebGPU-rendered images on an OffscreenCanvas. Obtained from OffscreenCanvas.getContext with the `\"webgpu\"` context id."},{"url":"/api/web/~/GPUColor/","title":"GPUColor"},{"url":"/api/web/~/GPUColorDict/","title":"GPUColorDict"},{"url":"/api/web/~/GPUColorTargetState/","title":"GPUColorTargetState"},{"url":"/api/web/~/GPUColorWrite/","title":"GPUColorWrite"},{"url":"/api/web/~/GPUColorWriteFlags/","title":"GPUColorWriteFlags"},{"url":"/api/web/~/GPUCommandBuffer/","title":"GPUCommandBuffer"},{"url":"/api/web/~/GPUCommandBufferDescriptor/","title":"GPUCommandBufferDescriptor"},{"url":"/api/web/~/GPUCommandEncoder/","title":"GPUCommandEncoder","description":"Used to record GPU commands for later execution by the GPU."},{"url":"/api/web/~/GPUCommandEncoderDescriptor/","title":"GPUCommandEncoderDescriptor"},{"url":"/api/web/~/GPUCompareFunction/","title":"GPUCompareFunction"},{"url":"/api/web/~/GPUCompilationInfo/","title":"GPUCompilationInfo"},{"url":"/api/web/~/GPUCompilationMessage/","title":"GPUCompilationMessage"},{"url":"/api/web/~/GPUCompilationMessageType/","title":"GPUCompilationMessageType"},{"url":"/api/web/~/GPUComputePassDescriptor/","title":"GPUComputePassDescriptor"},{"url":"/api/web/~/GPUComputePassEncoder/","title":"GPUComputePassEncoder"},{"url":"/api/web/~/GPUComputePassTimestampWrites/","title":"GPUComputePassTimestampWrites"},{"url":"/api/web/~/GPUComputePipeline/","title":"GPUComputePipeline"},{"url":"/api/web/~/GPUComputePipelineDescriptor/","title":"GPUComputePipelineDescriptor"},{"url":"/api/web/~/GPUCullMode/","title":"GPUCullMode"},{"url":"/api/web/~/GPUDepthStencilState/","title":"GPUDepthStencilState"},{"url":"/api/web/~/GPUDevice/","title":"GPUDevice","description":"The primary interface for interacting with a WebGPU device."},{"url":"/api/web/~/GPUDeviceDescriptor/","title":"GPUDeviceDescriptor"},{"url":"/api/web/~/GPUDeviceLostInfo/","title":"GPUDeviceLostInfo"},{"url":"/api/web/~/GPUDeviceLostReason/","title":"GPUDeviceLostReason"},{"url":"/api/web/~/GPUError/","title":"GPUError","description":"The **`GPUError`** interface of the WebGPU API is the base interface for errors surfaced by GPUDevice.popErrorScope and the GPUDevice.uncapturederror_event event. Available only in secure contexts."},{"url":"/api/web/~/GPUErrorFilter/","title":"GPUErrorFilter"},{"url":"/api/web/~/GPUExtent3D/","title":"GPUExtent3D"},{"url":"/api/web/~/GPUExtent3DDict/","title":"GPUExtent3DDict"},{"url":"/api/web/~/GPUFeatureName/","title":"GPUFeatureName"},{"url":"/api/web/~/GPUFilterMode/","title":"GPUFilterMode"},{"url":"/api/web/~/GPUFlagsConstant/","title":"GPUFlagsConstant"},{"url":"/api/web/~/GPUFragmentState/","title":"GPUFragmentState"},{"url":"/api/web/~/GPUFrontFace/","title":"GPUFrontFace"},{"url":"/api/web/~/GPUIndexFormat/","title":"GPUIndexFormat"},{"url":"/api/web/~/GPUInternalError/","title":"GPUInternalError"},{"url":"/api/web/~/GPULoadOp/","title":"GPULoadOp"},{"url":"/api/web/~/GPUMapMode/","title":"GPUMapMode"},{"url":"/api/web/~/GPUMapModeFlags/","title":"GPUMapModeFlags"},{"url":"/api/web/~/GPUMipmapFilterMode/","title":"GPUMipmapFilterMode"},{"url":"/api/web/~/GPUMultisampleState/","title":"GPUMultisampleState"},{"url":"/api/web/~/GPUObjectBase/","title":"GPUObjectBase"},{"url":"/api/web/~/GPUObjectDescriptorBase/","title":"GPUObjectDescriptorBase"},{"url":"/api/web/~/GPUOrigin3D/","title":"GPUOrigin3D"},{"url":"/api/web/~/GPUOrigin3DDict/","title":"GPUOrigin3DDict"},{"url":"/api/web/~/GPUOutOfMemoryError/","title":"GPUOutOfMemoryError"},{"url":"/api/web/~/GPUPipelineBase/","title":"GPUPipelineBase"},{"url":"/api/web/~/GPUPipelineDescriptorBase/","title":"GPUPipelineDescriptorBase"},{"url":"/api/web/~/GPUPipelineError/","title":"GPUPipelineError","description":"The **`GPUPipelineError`** interface of the WebGPU API describes a pipeline failure. Available only in secure contexts."},{"url":"/api/web/~/GPUPipelineErrorInit/","title":"GPUPipelineErrorInit"},{"url":"/api/web/~/GPUPipelineLayout/","title":"GPUPipelineLayout"},{"url":"/api/web/~/GPUPipelineLayoutDescriptor/","title":"GPUPipelineLayoutDescriptor"},{"url":"/api/web/~/GPUPowerPreference/","title":"GPUPowerPreference"},{"url":"/api/web/~/GPUPresentMode/","title":"GPUPresentMode"},{"url":"/api/web/~/GPUPrimitiveState/","title":"GPUPrimitiveState"},{"url":"/api/web/~/GPUPrimitiveTopology/","title":"GPUPrimitiveTopology"},{"url":"/api/web/~/GPUProgrammablePassEncoder/","title":"GPUProgrammablePassEncoder"},{"url":"/api/web/~/GPUProgrammableStage/","title":"GPUProgrammableStage"},{"url":"/api/web/~/GPUQuerySet/","title":"GPUQuerySet"},{"url":"/api/web/~/GPUQuerySetDescriptor/","title":"GPUQuerySetDescriptor"},{"url":"/api/web/~/GPUQueryType/","title":"GPUQueryType"},{"url":"/api/web/~/GPUQueue/","title":"GPUQueue","description":"Represents a queue to submit commands to the GPU."},{"url":"/api/web/~/GPURenderBundle/","title":"GPURenderBundle"},{"url":"/api/web/~/GPURenderBundleDescriptor/","title":"GPURenderBundleDescriptor"},{"url":"/api/web/~/GPURenderBundleEncoder/","title":"GPURenderBundleEncoder"},{"url":"/api/web/~/GPURenderBundleEncoderDescriptor/","title":"GPURenderBundleEncoderDescriptor"},{"url":"/api/web/~/GPURenderEncoderBase/","title":"GPURenderEncoderBase"},{"url":"/api/web/~/GPURenderPassColorAttachment/","title":"GPURenderPassColorAttachment"},{"url":"/api/web/~/GPURenderPassDepthStencilAttachment/","title":"GPURenderPassDepthStencilAttachment"},{"url":"/api/web/~/GPURenderPassDescriptor/","title":"GPURenderPassDescriptor"},{"url":"/api/web/~/GPURenderPassEncoder/","title":"GPURenderPassEncoder"},{"url":"/api/web/~/GPURenderPassLayout/","title":"GPURenderPassLayout"},{"url":"/api/web/~/GPURenderPassTimestampWrites/","title":"GPURenderPassTimestampWrites"},{"url":"/api/web/~/GPURenderPipeline/","title":"GPURenderPipeline"},{"url":"/api/web/~/GPURenderPipelineDescriptor/","title":"GPURenderPipelineDescriptor"},{"url":"/api/web/~/GPURequestAdapterOptions/","title":"GPURequestAdapterOptions"},{"url":"/api/web/~/GPUSampler/","title":"GPUSampler"},{"url":"/api/web/~/GPUSamplerBindingLayout/","title":"GPUSamplerBindingLayout"},{"url":"/api/web/~/GPUSamplerBindingType/","title":"GPUSamplerBindingType"},{"url":"/api/web/~/GPUSamplerDescriptor/","title":"GPUSamplerDescriptor"},{"url":"/api/web/~/GPUShaderModule/","title":"GPUShaderModule","description":"Represents a compiled shader module that can be used to create graphics or compute pipelines."},{"url":"/api/web/~/GPUShaderModuleDescriptor/","title":"GPUShaderModuleDescriptor"},{"url":"/api/web/~/GPUShaderStage/","title":"GPUShaderStage"},{"url":"/api/web/~/GPUShaderStageFlags/","title":"GPUShaderStageFlags"},{"url":"/api/web/~/GPUStencilFaceState/","title":"GPUStencilFaceState"},{"url":"/api/web/~/GPUStencilOperation/","title":"GPUStencilOperation"},{"url":"/api/web/~/GPUStorageTextureAccess/","title":"GPUStorageTextureAccess"},{"url":"/api/web/~/GPUStorageTextureBindingLayout/","title":"GPUStorageTextureBindingLayout"},{"url":"/api/web/~/GPUStoreOp/","title":"GPUStoreOp"},{"url":"/api/web/~/GPUSupportedFeatures/","title":"GPUSupportedFeatures"},{"url":"/api/web/~/GPUSupportedLimits/","title":"GPUSupportedLimits"},{"url":"/api/web/~/GPUTexelCopyBufferInfo/","title":"GPUTexelCopyBufferInfo"},{"url":"/api/web/~/GPUTexelCopyBufferLayout/","title":"GPUTexelCopyBufferLayout"},{"url":"/api/web/~/GPUTexelCopyTextureInfo/","title":"GPUTexelCopyTextureInfo"},{"url":"/api/web/~/GPUTexture/","title":"GPUTexture","description":"Represents a texture (image) in GPU memory."},{"url":"/api/web/~/GPUTextureAspect/","title":"GPUTextureAspect"},{"url":"/api/web/~/GPUTextureBindingLayout/","title":"GPUTextureBindingLayout"},{"url":"/api/web/~/GPUTextureDescriptor/","title":"GPUTextureDescriptor"},{"url":"/api/web/~/GPUTextureDimension/","title":"GPUTextureDimension"},{"url":"/api/web/~/GPUTextureFormat/","title":"GPUTextureFormat"},{"url":"/api/web/~/GPUTextureSampleType/","title":"GPUTextureSampleType"},{"url":"/api/web/~/GPUTextureUsage/","title":"GPUTextureUsage"},{"url":"/api/web/~/GPUTextureUsageFlags/","title":"GPUTextureUsageFlags"},{"url":"/api/web/~/GPUTextureView/","title":"GPUTextureView"},{"url":"/api/web/~/GPUTextureViewDescriptor/","title":"GPUTextureViewDescriptor"},{"url":"/api/web/~/GPUTextureViewDimension/","title":"GPUTextureViewDimension"},{"url":"/api/web/~/GPUUncapturedErrorEvent/","title":"GPUUncapturedErrorEvent"},{"url":"/api/web/~/GPUUncapturedErrorEventInit/","title":"GPUUncapturedErrorEventInit"},{"url":"/api/web/~/GPUValidationError/","title":"GPUValidationError"},{"url":"/api/web/~/GPUVertexAttribute/","title":"GPUVertexAttribute"},{"url":"/api/web/~/GPUVertexBufferLayout/","title":"GPUVertexBufferLayout"},{"url":"/api/web/~/GPUVertexFormat/","title":"GPUVertexFormat"},{"url":"/api/web/~/GPUVertexState/","title":"GPUVertexState"},{"url":"/api/web/~/GPUVertexStepMode/","title":"GPUVertexStepMode"},{"url":"/api/web/~/GenericTransformStream/","title":"GenericTransformStream"},{"url":"/api/web/~/HashAlgorithmIdentifier/","title":"HashAlgorithmIdentifier"},{"url":"/api/web/~/Headers/","title":"Headers","description":"This Fetch API interface allows you to perform various actions on HTTP request and response headers. These actions include retrieving, setting, adding to, and removing. A Headers object has an associated header list, which is initially empty and consists of zero or more name and value pairs. You can add to this using methods like append() (see Examples). In all methods of this interface, header names are matched by case-insensitive byte sequence."},{"url":"/api/web/~/HeadersInit/","title":"HeadersInit"},{"url":"/api/web/~/HkdfParams/","title":"HkdfParams"},{"url":"/api/web/~/HmacImportParams/","title":"HmacImportParams"},{"url":"/api/web/~/HmacKeyAlgorithm/","title":"HmacKeyAlgorithm"},{"url":"/api/web/~/HmacKeyGenParams/","title":"HmacKeyGenParams"},{"url":"/api/web/~/ImageBitmap/","title":"ImageBitmap","description":"`ImageBitmap` interface represents a bitmap image which can be drawn to a canvas."},{"url":"/api/web/~/ImageBitmapOptions/","title":"ImageBitmapOptions","description":"The options of createImageBitmap."},{"url":"/api/web/~/ImageBitmapRenderingContext/","title":"ImageBitmapRenderingContext","description":"A rendering context that displays the contents of an ImageBitmap on an OffscreenCanvas. Obtained from OffscreenCanvas.getContext with the `\"bitmaprenderer\"` context id."},{"url":"/api/web/~/ImageBitmapSource/","title":"ImageBitmapSource","description":"The `ImageBitmapSource` type represents an image data source that can be used to create an `ImageBitmap`."},{"url":"/api/web/~/ImageData/","title":"ImageData"},{"url":"/api/web/~/ImageDataArray/","title":"ImageDataArray"},{"url":"/api/web/~/ImageDataPixelFormat/","title":"ImageDataPixelFormat"},{"url":"/api/web/~/ImageDataSettings/","title":"ImageDataSettings"},{"url":"/api/web/~/ImageEncodeOptions/","title":"ImageEncodeOptions"},{"url":"/api/web/~/ImageOrientation/","title":"ImageOrientation","description":"Specifies how the bitmap image should be oriented."},{"url":"/api/web/~/ImportMeta/","title":"ImportMeta","description":"Ende provides extra properties on `import.meta`. These are included here to ensure that these are still available when using the Ende namespace in conjunction with other type libs, like `dom`."},{"url":"/api/web/~/Intl.DateTimeFormat/","title":"Intl.DateTimeFormat"},{"url":"/api/web/~/Intl.DateTimeFormatOptions/","title":"Intl.DateTimeFormatOptions"},{"url":"/api/web/~/Intl.DateTimeFormatRangePart/","title":"Intl.DateTimeFormatRangePart","description":"Represents a part of a formatted date range produced by Intl.DateTimeFormat.formatRange()."},{"url":"/api/web/~/Intl.Formattable/","title":"Intl.Formattable","description":"Types that can be formatted using Intl.DateTimeFormat methods."},{"url":"/api/web/~/Intl.Locale/","title":"Intl.Locale","description":"Augments the standard Intl.Locale interface with members not yet present in the bundled TypeScript library definitions."},{"url":"/api/web/~/Intl/","title":"Intl","description":"The `Intl` namespace groups the ECMAScript Internationalization API constructors and functions."},{"url":"/api/web/~/JsonWebKey/","title":"JsonWebKey"},{"url":"/api/web/~/KeyAlgorithm/","title":"KeyAlgorithm"},{"url":"/api/web/~/KeyFormat/","title":"KeyFormat"},{"url":"/api/web/~/KeyType/","title":"KeyType"},{"url":"/api/web/~/KeyUsage/","title":"KeyUsage"},{"url":"/api/web/~/Location/","title":"Location","description":"The location (URL) of the object it is linked to. Changes done on it are reflected on the object it relates to. Accessible via `globalThis.location`."},{"url":"/api/web/~/Math/","title":"Math"},{"url":"/api/web/~/MessageChannel/","title":"MessageChannel","description":"The MessageChannel interface of the Channel Messaging API allows us to create a new message channel and send data through it via its two MessagePort properties."},{"url":"/api/web/~/MessageEvent/","title":"MessageEvent"},{"url":"/api/web/~/MessageEventInit/","title":"MessageEventInit"},{"url":"/api/web/~/MessageEventSource/","title":"MessageEventSource"},{"url":"/api/web/~/MessagePort/","title":"MessagePort","description":"The MessagePort interface of the Channel Messaging API represents one of the two ports of a MessageChannel, allowing messages to be sent from one port and listening out for them arriving at the other."},{"url":"/api/web/~/MessagePortEventMap/","title":"MessagePortEventMap"},{"url":"/api/web/~/MultiCacheQueryOptions/","title":"MultiCacheQueryOptions"},{"url":"/api/web/~/NamedCurve/","title":"NamedCurve"},{"url":"/api/web/~/Navigator/","title":"Navigator","description":"Provides information about the Ende runtime environment and the system on which it's running. Similar to the browser `Navigator` object but adapted for the Ende context."},{"url":"/api/web/~/NavigatorUABrandVersion/","title":"NavigatorUABrandVersion","description":"A brand and version pair describing a user agent, as returned by NavigatorUAData."},{"url":"/api/web/~/NavigatorUAData/","title":"NavigatorUAData","description":"Gives access to information about the runtime's user agent, exposed via Navigator.userAgentData. This is the User-Agent Client Hints API."},{"url":"/api/web/~/OffscreenCanvas/","title":"OffscreenCanvas","description":"A canvas that can be rendered to off the main thread and without being attached to the DOM. It exposes drawing contexts via OffscreenCanvas.getContext and can produce a Blob or ImageBitmap from its contents."},{"url":"/api/web/~/OffscreenRenderingContext/","title":"OffscreenRenderingContext"},{"url":"/api/web/~/OffscreenRenderingContextId/","title":"OffscreenRenderingContextId"},{"url":"/api/web/~/Pbkdf2Params/","title":"Pbkdf2Params"},{"url":"/api/web/~/Performance/","title":"Performance","description":"Ende supports User Timing Level 3 which is not widely supported yet in other runtimes."},{"url":"/api/web/~/PerformanceEntry/","title":"PerformanceEntry","description":"Encapsulates a single performance metric that is part of the performance timeline. A performance entry can be directly created by making a performance mark or measure (for example by calling the `.mark()` method) at an explicit point in an application."},{"url":"/api/web/~/PerformanceEntryList/","title":"PerformanceEntryList"},{"url":"/api/web/~/PerformanceMark/","title":"PerformanceMark","description":"`PerformanceMark` is an abstract interface for `PerformanceEntry` objects with an entryType of `\"mark\"`. Entries of this type are created by calling `performance.mark()` to add a named `DOMHighResTimeStamp` (the mark) to the performance timeline."},{"url":"/api/web/~/PerformanceMarkOptions/","title":"PerformanceMarkOptions","description":"Options which are used in conjunction with `performance.mark`. Check out the MDN `performance.mark()` documentation for more details."},{"url":"/api/web/~/PerformanceMeasure/","title":"PerformanceMeasure","description":"`PerformanceMeasure` is an abstract interface for `PerformanceEntry` objects with an entryType of `\"measure\"`. Entries of this type are created by calling `performance.measure()` to add a named `DOMHighResTimeStamp` (the measure) between two marks to the performance timeline."},{"url":"/api/web/~/PerformanceMeasureOptions/","title":"PerformanceMeasureOptions","description":"Options which are used in conjunction with `performance.measure`. Check out the MDN `performance.mark()` documentation for more details."},{"url":"/api/web/~/PerformanceObserver/","title":"PerformanceObserver","description":"Observes performance measurement events and is notified of new PerformanceEntry objects as they are recorded in the performance timeline."},{"url":"/api/web/~/PerformanceObserverCallback/","title":"PerformanceObserverCallback","description":"The callback invoked when the observed set of performance entries grows."},{"url":"/api/web/~/PerformanceObserverEntryList/","title":"PerformanceObserverEntryList","description":"A list of PerformanceEntry objects passed to a PerformanceObserver callback via its `observe()` method."},{"url":"/api/web/~/PredefinedColorSpace/","title":"PredefinedColorSpace"},{"url":"/api/web/~/PremultiplyAlpha/","title":"PremultiplyAlpha","description":"Specifies whether the bitmap's color channels should be premultiplied by the alpha channel."},{"url":"/api/web/~/ProgressEvent/","title":"ProgressEvent","description":"Events measuring progress of an underlying process, like an HTTP request (for an XMLHttpRequest, or the loading of the underlying resource of an <img>, <audio>, <video>, <style> or <link>)."},{"url":"/api/web/~/ProgressEventInit/","title":"ProgressEventInit"},{"url":"/api/web/~/PromiseRejectionEvent/","title":"PromiseRejectionEvent"},{"url":"/api/web/~/PromiseRejectionEventInit/","title":"PromiseRejectionEventInit"},{"url":"/api/web/~/QueuingStrategy/","title":"QueuingStrategy"},{"url":"/api/web/~/QueuingStrategyInit/","title":"QueuingStrategyInit"},{"url":"/api/web/~/QueuingStrategySize/","title":"QueuingStrategySize"},{"url":"/api/web/~/QuotaExceededError/","title":"QuotaExceededError","description":"Represents an error when a quota has been exceeded."},{"url":"/api/web/~/QuotaExceededErrorOptions/","title":"QuotaExceededErrorOptions"},{"url":"/api/web/~/ReadableByteStreamController/","title":"ReadableByteStreamController"},{"url":"/api/web/~/ReadableStream/","title":"ReadableStream","description":"This Streams API interface represents a readable stream of byte data. The Fetch API offers a concrete instance of a ReadableStream through the body property of a Response object."},{"url":"/api/web/~/ReadableStreamBYOBReader/","title":"ReadableStreamBYOBReader"},{"url":"/api/web/~/ReadableStreamBYOBReaderReadOptions/","title":"ReadableStreamBYOBReaderReadOptions"},{"url":"/api/web/~/ReadableStreamBYOBRequest/","title":"ReadableStreamBYOBRequest"},{"url":"/api/web/~/ReadableStreamController/","title":"ReadableStreamController"},{"url":"/api/web/~/ReadableStreamDefaultController/","title":"ReadableStreamDefaultController"},{"url":"/api/web/~/ReadableStreamDefaultReader/","title":"ReadableStreamDefaultReader"},{"url":"/api/web/~/ReadableStreamGenericReader/","title":"ReadableStreamGenericReader"},{"url":"/api/web/~/ReadableStreamGetReaderOptions/","title":"ReadableStreamGetReaderOptions"},{"url":"/api/web/~/ReadableStreamIteratorOptions/","title":"ReadableStreamIteratorOptions"},{"url":"/api/web/~/ReadableStreamReadDoneResult/","title":"ReadableStreamReadDoneResult"},{"url":"/api/web/~/ReadableStreamReadResult/","title":"ReadableStreamReadResult"},{"url":"/api/web/~/ReadableStreamReadValueResult/","title":"ReadableStreamReadValueResult"},{"url":"/api/web/~/ReadableStreamReader/","title":"ReadableStreamReader"},{"url":"/api/web/~/ReadableStreamReaderMode/","title":"ReadableStreamReaderMode"},{"url":"/api/web/~/ReadableStreamType/","title":"ReadableStreamType"},{"url":"/api/web/~/ReadableWritablePair/","title":"ReadableWritablePair"},{"url":"/api/web/~/ReferrerPolicy/","title":"ReferrerPolicy"},{"url":"/api/web/~/RegExpConstructor/","title":"RegExpConstructor"},{"url":"/api/web/~/Request/","title":"Request","description":"This Fetch API interface represents a resource request."},{"url":"/api/web/~/RequestCache/","title":"RequestCache"},{"url":"/api/web/~/RequestCredentials/","title":"RequestCredentials"},{"url":"/api/web/~/RequestDestination/","title":"RequestDestination"},{"url":"/api/web/~/RequestInfo/","title":"RequestInfo"},{"url":"/api/web/~/RequestInit/","title":"RequestInit"},{"url":"/api/web/~/RequestMode/","title":"RequestMode"},{"url":"/api/web/~/RequestPriority/","title":"RequestPriority"},{"url":"/api/web/~/RequestRedirect/","title":"RequestRedirect"},{"url":"/api/web/~/ResizeQuality/","title":"ResizeQuality","description":"Specifies the algorithm to be used for resizing the input to match the output dimensions. One of `pixelated`, `low` (default), `medium`, or `high`."},{"url":"/api/web/~/Response/","title":"Response","description":"This Fetch API interface represents the response to a request."},{"url":"/api/web/~/ResponseInit/","title":"ResponseInit"},{"url":"/api/web/~/ResponseType/","title":"ResponseType"},{"url":"/api/web/~/RsaHashedImportParams/","title":"RsaHashedImportParams"},{"url":"/api/web/~/RsaHashedKeyAlgorithm/","title":"RsaHashedKeyAlgorithm"},{"url":"/api/web/~/RsaHashedKeyGenParams/","title":"RsaHashedKeyGenParams"},{"url":"/api/web/~/RsaKeyAlgorithm/","title":"RsaKeyAlgorithm"},{"url":"/api/web/~/RsaKeyGenParams/","title":"RsaKeyGenParams"},{"url":"/api/web/~/RsaOaepParams/","title":"RsaOaepParams"},{"url":"/api/web/~/RsaOtherPrimesInfo/","title":"RsaOtherPrimesInfo"},{"url":"/api/web/~/RsaPssParams/","title":"RsaPssParams"},{"url":"/api/web/~/Storage/","title":"Storage","description":"This Web Storage API interface provides access to a particular domain's session or local storage. It allows, for example, the addition, modification, or deletion of stored data items."},{"url":"/api/web/~/StreamPipeOptions/","title":"StreamPipeOptions"},{"url":"/api/web/~/StructuredSerializeOptions/","title":"StructuredSerializeOptions","description":"Options that control structured serialization operations such as `structuredClone(value, options)` and `MessagePort.postMessage(message, options)`."},{"url":"/api/web/~/SubtleCrypto/","title":"SubtleCrypto","description":"This Web Crypto API interface provides a number of low-level cryptographic functions. It is accessed via the Crypto.subtle properties available in a window context (via globalThis.crypto)."},{"url":"/api/web/~/Temporal.CalendarLike/","title":"Temporal.CalendarLike"},{"url":"/api/web/~/Temporal.DateLikeObject/","title":"Temporal.DateLikeObject"},{"url":"/api/web/~/Temporal.DateTimeLikeObject/","title":"Temporal.DateTimeLikeObject"},{"url":"/api/web/~/Temporal.DateUnit/","title":"Temporal.DateUnit"},{"url":"/api/web/~/Temporal.DisambiguationOptions/","title":"Temporal.DisambiguationOptions"},{"url":"/api/web/~/Temporal.Duration/","title":"Temporal.Duration"},{"url":"/api/web/~/Temporal.DurationConstructor/","title":"Temporal.DurationConstructor"},{"url":"/api/web/~/Temporal.DurationLike/","title":"Temporal.DurationLike"},{"url":"/api/web/~/Temporal.DurationLikeObject/","title":"Temporal.DurationLikeObject"},{"url":"/api/web/~/Temporal.DurationRelativeToOptions/","title":"Temporal.DurationRelativeToOptions"},{"url":"/api/web/~/Temporal.DurationRoundingOptions/","title":"Temporal.DurationRoundingOptions"},{"url":"/api/web/~/Temporal.DurationToStringOptions/","title":"Temporal.DurationToStringOptions"},{"url":"/api/web/~/Temporal.DurationTotalOptions/","title":"Temporal.DurationTotalOptions"},{"url":"/api/web/~/Temporal.Instant/","title":"Temporal.Instant"},{"url":"/api/web/~/Temporal.InstantConstructor/","title":"Temporal.InstantConstructor"},{"url":"/api/web/~/Temporal.InstantLike/","title":"Temporal.InstantLike"},{"url":"/api/web/~/Temporal.InstantToStringOptions/","title":"Temporal.InstantToStringOptions"},{"url":"/api/web/~/Temporal.Now.instant/","title":"Temporal.Now.instant"},{"url":"/api/web/~/Temporal.Now.plainDateISO/","title":"Temporal.Now.plainDateISO"},{"url":"/api/web/~/Temporal.Now.plainDateTimeISO/","title":"Temporal.Now.plainDateTimeISO"},{"url":"/api/web/~/Temporal.Now.plainTimeISO/","title":"Temporal.Now.plainTimeISO"},{"url":"/api/web/~/Temporal.Now.timeZoneId/","title":"Temporal.Now.timeZoneId"},{"url":"/api/web/~/Temporal.Now.zonedDateTimeISO/","title":"Temporal.Now.zonedDateTimeISO"},{"url":"/api/web/~/Temporal.Now/","title":"Temporal.Now"},{"url":"/api/web/~/Temporal.OverflowOptions/","title":"Temporal.OverflowOptions"},{"url":"/api/web/~/Temporal.PartialTemporalLike/","title":"Temporal.PartialTemporalLike"},{"url":"/api/web/~/Temporal.PlainDate/","title":"Temporal.PlainDate"},{"url":"/api/web/~/Temporal.PlainDateConstructor/","title":"Temporal.PlainDateConstructor"},{"url":"/api/web/~/Temporal.PlainDateLike/","title":"Temporal.PlainDateLike"},{"url":"/api/web/~/Temporal.PlainDateTime/","title":"Temporal.PlainDateTime"},{"url":"/api/web/~/Temporal.PlainDateTimeConstructor/","title":"Temporal.PlainDateTimeConstructor"},{"url":"/api/web/~/Temporal.PlainDateTimeLike/","title":"Temporal.PlainDateTimeLike"},{"url":"/api/web/~/Temporal.PlainDateTimeToStringOptions/","title":"Temporal.PlainDateTimeToStringOptions"},{"url":"/api/web/~/Temporal.PlainDateToStringOptions/","title":"Temporal.PlainDateToStringOptions"},{"url":"/api/web/~/Temporal.PlainDateToZonedDateTimeOptions/","title":"Temporal.PlainDateToZonedDateTimeOptions"},{"url":"/api/web/~/Temporal.PlainMonthDay/","title":"Temporal.PlainMonthDay"},{"url":"/api/web/~/Temporal.PlainMonthDayConstructor/","title":"Temporal.PlainMonthDayConstructor"},{"url":"/api/web/~/Temporal.PlainMonthDayLike/","title":"Temporal.PlainMonthDayLike"},{"url":"/api/web/~/Temporal.PlainMonthDayToPlainDateOptions/","title":"Temporal.PlainMonthDayToPlainDateOptions"},{"url":"/api/web/~/Temporal.PlainTime/","title":"Temporal.PlainTime"},{"url":"/api/web/~/Temporal.PlainTimeConstructor/","title":"Temporal.PlainTimeConstructor"},{"url":"/api/web/~/Temporal.PlainTimeLike/","title":"Temporal.PlainTimeLike"},{"url":"/api/web/~/Temporal.PlainTimeToStringOptions/","title":"Temporal.PlainTimeToStringOptions"},{"url":"/api/web/~/Temporal.PlainYearMonth/","title":"Temporal.PlainYearMonth"},{"url":"/api/web/~/Temporal.PlainYearMonthConstructor/","title":"Temporal.PlainYearMonthConstructor"},{"url":"/api/web/~/Temporal.PlainYearMonthLike/","title":"Temporal.PlainYearMonthLike"},{"url":"/api/web/~/Temporal.PlainYearMonthToPlainDateOptions/","title":"Temporal.PlainYearMonthToPlainDateOptions"},{"url":"/api/web/~/Temporal.PluralizeUnit/","title":"Temporal.PluralizeUnit"},{"url":"/api/web/~/Temporal.RoundingOptions/","title":"Temporal.RoundingOptions"},{"url":"/api/web/~/Temporal.RoundingOptionsWithLargestUnit/","title":"Temporal.RoundingOptionsWithLargestUnit"},{"url":"/api/web/~/Temporal.TimeLikeObject/","title":"Temporal.TimeLikeObject"},{"url":"/api/web/~/Temporal.TimeUnit/","title":"Temporal.TimeUnit"},{"url":"/api/web/~/Temporal.TimeZoneLike/","title":"Temporal.TimeZoneLike"},{"url":"/api/web/~/Temporal.ToStringRoundingOptions/","title":"Temporal.ToStringRoundingOptions"},{"url":"/api/web/~/Temporal.ToStringRoundingOptionsWithFractionalSeconds/","title":"Temporal.ToStringRoundingOptionsWithFractionalSeconds"},{"url":"/api/web/~/Temporal.TransitionOptions/","title":"Temporal.TransitionOptions"},{"url":"/api/web/~/Temporal.YearMonthLikeObject/","title":"Temporal.YearMonthLikeObject"},{"url":"/api/web/~/Temporal.ZonedDateTime/","title":"Temporal.ZonedDateTime"},{"url":"/api/web/~/Temporal.ZonedDateTimeConstructor/","title":"Temporal.ZonedDateTimeConstructor"},{"url":"/api/web/~/Temporal.ZonedDateTimeFromOptions/","title":"Temporal.ZonedDateTimeFromOptions"},{"url":"/api/web/~/Temporal.ZonedDateTimeLike/","title":"Temporal.ZonedDateTimeLike"},{"url":"/api/web/~/Temporal.ZonedDateTimeLikeObject/","title":"Temporal.ZonedDateTimeLikeObject"},{"url":"/api/web/~/Temporal.ZonedDateTimeToStringOptions/","title":"Temporal.ZonedDateTimeToStringOptions"},{"url":"/api/web/~/Temporal/","title":"Temporal"},{"url":"/api/web/~/TextDecodeOptions/","title":"TextDecodeOptions"},{"url":"/api/web/~/TextDecoder/","title":"TextDecoder","description":"Represents a decoder for a specific text encoding, allowing you to convert binary data into a string given the encoding."},{"url":"/api/web/~/TextDecoderCommon/","title":"TextDecoderCommon"},{"url":"/api/web/~/TextDecoderOptions/","title":"TextDecoderOptions"},{"url":"/api/web/~/TextDecoderStream/","title":"TextDecoderStream"},{"url":"/api/web/~/TextEncoder/","title":"TextEncoder","description":"Allows you to convert a string into binary data (in the form of a Uint8Array) given the encoding."},{"url":"/api/web/~/TextEncoderCommon/","title":"TextEncoderCommon"},{"url":"/api/web/~/TextEncoderEncodeIntoResult/","title":"TextEncoderEncodeIntoResult"},{"url":"/api/web/~/TextEncoderStream/","title":"TextEncoderStream"},{"url":"/api/web/~/Transferable/","title":"Transferable"},{"url":"/api/web/~/TransformStream/","title":"TransformStream"},{"url":"/api/web/~/TransformStreamDefaultController/","title":"TransformStreamDefaultController"},{"url":"/api/web/~/Transformer/","title":"Transformer"},{"url":"/api/web/~/TransformerCancelCallback/","title":"TransformerCancelCallback"},{"url":"/api/web/~/TransformerFlushCallback/","title":"TransformerFlushCallback"},{"url":"/api/web/~/TransformerStartCallback/","title":"TransformerStartCallback"},{"url":"/api/web/~/TransformerTransformCallback/","title":"TransformerTransformCallback"},{"url":"/api/web/~/UADataValues/","title":"UADataValues","description":"The values returned by NavigatorUAData.getHighEntropyValues."},{"url":"/api/web/~/UALowEntropyJSON/","title":"UALowEntropyJSON","description":"The low-entropy values returned by NavigatorUAData.toJSON."},{"url":"/api/web/~/URL/","title":"URL","description":"The URL interface represents an object providing static methods used for creating, parsing, and manipulating URLs in Ende."},{"url":"/api/web/~/URLPattern/","title":"URLPattern","description":"The URLPattern API provides a web platform primitive for matching URLs based on a convenient pattern syntax."},{"url":"/api/web/~/URLPatternComponentResult/","title":"URLPatternComponentResult"},{"url":"/api/web/~/URLPatternInit/","title":"URLPatternInit"},{"url":"/api/web/~/URLPatternInput/","title":"URLPatternInput"},{"url":"/api/web/~/URLPatternOptions/","title":"URLPatternOptions","description":"Options for the URLPattern constructor."},{"url":"/api/web/~/URLPatternResult/","title":"URLPatternResult","description":"`URLPatternResult` is the object returned from `URLPattern.exec`."},{"url":"/api/web/~/URLSearchParams/","title":"URLSearchParams","description":"URLSearchParams provides methods for working with the query string of a URL."},{"url":"/api/web/~/URLSearchParamsIterator/","title":"URLSearchParamsIterator","description":"Iterator for the URLSearchParams class, used to iterate over key-value pairs in search parameters."},{"url":"/api/web/~/Uint8Array/","title":"Uint8Array"},{"url":"/api/web/~/Uint8ArrayConstructor/","title":"Uint8ArrayConstructor"},{"url":"/api/web/~/UnderlyingByteSource/","title":"UnderlyingByteSource"},{"url":"/api/web/~/UnderlyingDefaultSource/","title":"UnderlyingDefaultSource"},{"url":"/api/web/~/UnderlyingSink/","title":"UnderlyingSink"},{"url":"/api/web/~/UnderlyingSinkAbortCallback/","title":"UnderlyingSinkAbortCallback"},{"url":"/api/web/~/UnderlyingSinkCloseCallback/","title":"UnderlyingSinkCloseCallback"},{"url":"/api/web/~/UnderlyingSinkStartCallback/","title":"UnderlyingSinkStartCallback"},{"url":"/api/web/~/UnderlyingSinkWriteCallback/","title":"UnderlyingSinkWriteCallback"},{"url":"/api/web/~/UnderlyingSource/","title":"UnderlyingSource"},{"url":"/api/web/~/UnderlyingSourceCancelCallback/","title":"UnderlyingSourceCancelCallback"},{"url":"/api/web/~/UnderlyingSourcePullCallback/","title":"UnderlyingSourcePullCallback"},{"url":"/api/web/~/UnderlyingSourceStartCallback/","title":"UnderlyingSourceStartCallback"},{"url":"/api/web/~/VoidFunction/","title":"VoidFunction"},{"url":"/api/web/~/WebAssembly.CompileError/","title":"WebAssembly.CompileError","description":"The `WebAssembly.CompileError` object indicates an error during WebAssembly decoding or validation."},{"url":"/api/web/~/WebAssembly.ExportValue/","title":"WebAssembly.ExportValue","description":"A value that can be exported from a WebAssembly module instance."},{"url":"/api/web/~/WebAssembly.Exports/","title":"WebAssembly.Exports","description":"The set of values exported by a WebAssembly module instance, keyed by export name."},{"url":"/api/web/~/WebAssembly.Global/","title":"WebAssembly.Global","description":"A `WebAssembly.Global` object represents a global variable instance, accessible from both JavaScript and importable/exportable across one or more `WebAssembly.Module` instances. This allows dynamic linking of multiple modules."},{"url":"/api/web/~/WebAssembly.GlobalDescriptor/","title":"WebAssembly.GlobalDescriptor","description":"The `GlobalDescriptor` describes the options you can pass to `new WebAssembly.Global()`."},{"url":"/api/web/~/WebAssembly.ImportExportKind/","title":"WebAssembly.ImportExportKind","description":"The kind of entity referenced by a module import or export descriptor."},{"url":"/api/web/~/WebAssembly.ImportValue/","title":"WebAssembly.ImportValue","description":"A value that can be supplied to a WebAssembly module as an import."},{"url":"/api/web/~/WebAssembly.Imports/","title":"WebAssembly.Imports","description":"The import object supplied when instantiating a WebAssembly module, grouping imported values by module name."},{"url":"/api/web/~/WebAssembly.Instance/","title":"WebAssembly.Instance","description":"A `WebAssembly.Instance` object is a stateful, executable instance of a `WebAssembly.Module`. Instance objects contain all the Exported WebAssembly functions that allow calling into WebAssembly code from JavaScript."},{"url":"/api/web/~/WebAssembly.LinkError/","title":"WebAssembly.LinkError","description":"The `WebAssembly.LinkError` object indicates an error during module instantiation (besides traps from the start function)."},{"url":"/api/web/~/WebAssembly.Memory/","title":"WebAssembly.Memory","description":"The `WebAssembly.Memory` object is a resizable `ArrayBuffer` or `SharedArrayBuffer` that holds the raw bytes of memory accessed by a WebAssembly Instance."},{"url":"/api/web/~/WebAssembly.MemoryDescriptor/","title":"WebAssembly.MemoryDescriptor","description":"The `MemoryDescriptor` describes the options you can pass to `new WebAssembly.Memory()`."},{"url":"/api/web/~/WebAssembly.Module/","title":"WebAssembly.Module","description":"A `WebAssembly.Module` object contains stateless WebAssembly code that has already been compiled by the browser — this can be efficiently shared with Workers, and instantiated multiple times."},{"url":"/api/web/~/WebAssembly.ModuleExportDescriptor/","title":"WebAssembly.ModuleExportDescriptor","description":"A `ModuleExportDescriptor` is the description of a declared export in a `WebAssembly.Module`."},{"url":"/api/web/~/WebAssembly.ModuleImportDescriptor/","title":"WebAssembly.ModuleImportDescriptor","description":"A `ModuleImportDescriptor` is the description of a declared import in a `WebAssembly.Module`."},{"url":"/api/web/~/WebAssembly.ModuleImports/","title":"WebAssembly.ModuleImports","description":"The set of values imported from a single module, keyed by import name."},{"url":"/api/web/~/WebAssembly.RuntimeError/","title":"WebAssembly.RuntimeError","description":"The `WebAssembly.RuntimeError` object is the error type that is thrown whenever WebAssembly specifies a trap."},{"url":"/api/web/~/WebAssembly.Table/","title":"WebAssembly.Table","description":"The `WebAssembly.Table()` object is a JavaScript wrapper object — an array-like structure representing a WebAssembly Table, which stores function references. A table created by JavaScript or in WebAssembly code will be accessible and mutable from both JavaScript and WebAssembly."},{"url":"/api/web/~/WebAssembly.TableDescriptor/","title":"WebAssembly.TableDescriptor","description":"The `TableDescriptor` describes the options you can pass to `new WebAssembly.Table()`."},{"url":"/api/web/~/WebAssembly.TableKind/","title":"WebAssembly.TableKind","description":"The type of value stored in a `WebAssembly.Table`."},{"url":"/api/web/~/WebAssembly.ValueType/","title":"WebAssembly.ValueType","description":"The data type of a WebAssembly value, used to describe globals."},{"url":"/api/web/~/WebAssembly.WebAssemblyInstantiatedSource/","title":"WebAssembly.WebAssemblyInstantiatedSource","description":"The value returned from `WebAssembly.instantiate`."},{"url":"/api/web/~/WebAssembly.compile/","title":"WebAssembly.compile","description":"The `WebAssembly.compile()` function compiles WebAssembly binary code into a `WebAssembly.Module` object. This function is useful if it is necessary to compile a module before it can be instantiated (otherwise, the `WebAssembly.instantiate()` function should be used)."},{"url":"/api/web/~/WebAssembly.compileStreaming/","title":"WebAssembly.compileStreaming","description":"The `WebAssembly.compileStreaming()` function compiles a `WebAssembly.Module` directly from a streamed underlying source. This function is useful if it is necessary to a compile a module before it can be instantiated (otherwise, the `WebAssembly.instantiateStreaming()` function should be used)."},{"url":"/api/web/~/WebAssembly.instantiate/","title":"WebAssembly.instantiate","description":"The WebAssembly.instantiate() function allows you to compile and instantiate WebAssembly code."},{"url":"/api/web/~/WebAssembly.instantiateStreaming/","title":"WebAssembly.instantiateStreaming","description":"The `WebAssembly.instantiateStreaming()` function compiles and instantiates a WebAssembly module directly from a streamed underlying source. This is the most efficient, optimized way to load wasm code."},{"url":"/api/web/~/WebAssembly.validate/","title":"WebAssembly.validate","description":"The `WebAssembly.validate()` function validates a given typed array of WebAssembly binary code, returning whether the bytes form a valid wasm module (`true`) or not (`false`)."},{"url":"/api/web/~/WebAssembly/","title":"WebAssembly","description":"The `WebAssembly` JavaScript object acts as the namespace for all WebAssembly-related functionality. Unlike most global objects, it is not a constructor; it groups the functions used to compile and instantiate WebAssembly modules together with the classes (`Module`, `Instance`, `Memory`, `Table`, `Global`) and error types used to work with them."},{"url":"/api/web/~/WebSocket/","title":"WebSocket","description":"Provides the API for creating and managing a WebSocket connection to a server, as well as for sending and receiving data on the connection."},{"url":"/api/web/~/WebSocketCloseInfo/","title":"WebSocketCloseInfo","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/web/~/WebSocketConnection/","title":"WebSocketConnection","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/web/~/WebSocketError/","title":"WebSocketError","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/web/~/WebSocketEventMap/","title":"WebSocketEventMap","description":"Interface mapping `WebSocket` event names to their corresponding event types. Used for strongly typed event handling with `addEventListener` and `removeEventListener`."},{"url":"/api/web/~/WebSocketOptions/","title":"WebSocketOptions","description":"Options for a WebSocket instance. This feature is non-standard."},{"url":"/api/web/~/WebSocketStream/","title":"WebSocketStream","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/web/~/WebSocketStreamOptions/","title":"WebSocketStreamOptions","description":"**UNSTABLE**: New API, yet to be vetted."},{"url":"/api/web/~/WebTransport/","title":"WebTransport","description":"MDN Reference"},{"url":"/api/web/~/WebTransportBidirectionalStream/","title":"WebTransportBidirectionalStream","description":"MDN Reference"},{"url":"/api/web/~/WebTransportCloseInfo/","title":"WebTransportCloseInfo"},{"url":"/api/web/~/WebTransportCongestionControl/","title":"WebTransportCongestionControl"},{"url":"/api/web/~/WebTransportDatagramDuplexStream/","title":"WebTransportDatagramDuplexStream","description":"MDN Reference"},{"url":"/api/web/~/WebTransportError/","title":"WebTransportError","description":"MDN Reference"},{"url":"/api/web/~/WebTransportErrorOptions/","title":"WebTransportErrorOptions"},{"url":"/api/web/~/WebTransportErrorSource/","title":"WebTransportErrorSource"},{"url":"/api/web/~/WebTransportHash/","title":"WebTransportHash"},{"url":"/api/web/~/WebTransportOptions/","title":"WebTransportOptions"},{"url":"/api/web/~/WebTransportReceiveStream/","title":"WebTransportReceiveStream","description":"MDN Reference"},{"url":"/api/web/~/WebTransportReceiveStreamStats/","title":"WebTransportReceiveStreamStats"},{"url":"/api/web/~/WebTransportSendGroup/","title":"WebTransportSendGroup","description":"MDN Reference"},{"url":"/api/web/~/WebTransportSendStream/","title":"WebTransportSendStream","description":"MDN Reference"},{"url":"/api/web/~/WebTransportSendStreamOptions/","title":"WebTransportSendStreamOptions"},{"url":"/api/web/~/WebTransportSendStreamStats/","title":"WebTransportSendStreamStats"},{"url":"/api/web/~/WebTransportWriter/","title":"WebTransportWriter","description":"MDN Reference"},{"url":"/api/web/~/Window/","title":"Window","description":"Represents the global window object in the Ende runtime environment."},{"url":"/api/web/~/WindowEventMap/","title":"WindowEventMap","description":"Defines the mapping between event names and their corresponding event types for the `Window` interface in Ende."},{"url":"/api/web/~/Worker/","title":"Worker","description":"The Worker interface represents a background task that can be created via the `new Worker()` constructor. Workers run in a separate thread, allowing for parallel execution without blocking the main thread."},{"url":"/api/web/~/WorkerEventMap/","title":"WorkerEventMap"},{"url":"/api/web/~/WorkerOptions/","title":"WorkerOptions"},{"url":"/api/web/~/WritableStream/","title":"WritableStream","description":"This Streams API interface provides a standard abstraction for writing streaming data to a destination, known as a sink. This object comes with built-in backpressure and queuing."},{"url":"/api/web/~/WritableStreamDefaultController/","title":"WritableStreamDefaultController","description":"This Streams API interface represents a controller allowing control of a WritableStream's state. When constructing a WritableStream, the underlying sink is given a corresponding WritableStreamDefaultController instance to manipulate."},{"url":"/api/web/~/WritableStreamDefaultWriter/","title":"WritableStreamDefaultWriter","description":"This Streams API interface is the object returned by WritableStream.getWriter() and once created locks the < writer to the WritableStream ensuring that no other streams can write to the underlying sink."},{"url":"/api/web/~/addEventListener/","title":"addEventListener","description":"Registers an event listener in the global scope, which will be called synchronously whenever the event `type` is dispatched."},{"url":"/api/web/~/alert/","title":"alert","description":"Shows the given message and waits for the enter key pressed."},{"url":"/api/web/~/atob/","title":"atob","description":"Decodes a string of data which has been encoded using base-64 encoding."},{"url":"/api/web/~/btoa/","title":"btoa","description":"Creates a base-64 ASCII encoded string from the input string."},{"url":"/api/web/~/caches/","title":"caches","description":"The global CacheStorage instance, providing access to the named Cache objects used to store and retrieve `Request`/`Response` pairs."},{"url":"/api/web/~/clearInterval/","title":"clearInterval","description":"Cancels a timed, repeating action which was previously started by a call to `setInterval()`"},{"url":"/api/web/~/clearTimeout/","title":"clearTimeout","description":"Cancels a scheduled action initiated by `setTimeout()`"},{"url":"/api/web/~/close/","title":"close","description":"Exits the current Ende process."},{"url":"/api/web/~/closed/","title":"closed","description":"Indicates whether the current window (context) is closed. In Ende, this property is primarily for API compatibility with browsers."},{"url":"/api/web/~/confirm/","title":"confirm","description":"Shows the given message and waits for the answer. Returns the user's answer as boolean."},{"url":"/api/web/~/createImageBitmap/","title":"createImageBitmap","description":"Create a new ImageBitmap object from a given source."},{"url":"/api/web/~/dispatchEvent/","title":"dispatchEvent","description":"Dispatches an event in the global scope, synchronously invoking any registered event listeners for this event in the appropriate order. Returns false if event is cancelable and at least one of the event handlers which handled this event called Event.preventDefault(). Otherwise it returns true."},{"url":"/api/web/~/fetch/","title":"fetch","description":"Fetch a resource from the network. It returns a `Promise` that resolves to the `Response` to that `Request`, whether it is successful or not."},{"url":"/api/web/~/localStorage/","title":"localStorage","description":"Ende's `localStorage` API provides a way to store key-value pairs in a web-like environment, similar to the Web Storage API found in browsers. It allows developers to persist data across sessions in an Ende application. This API is particularly useful for applications that require a simple and effective way to store data locally."},{"url":"/api/web/~/name/","title":"name","description":"Gets or sets the name of the global scope's browsing context."},{"url":"/api/web/~/onbeforeunload/","title":"onbeforeunload","description":"Before unload event handler for the window. In Ende, this is primarily for API compatibility with browsers."},{"url":"/api/web/~/onerror/","title":"onerror","description":"Error event handler for the window. Triggered when an uncaught error occurs in the global scope."},{"url":"/api/web/~/onload/","title":"onload","description":"Load event handler for the window. In Ende, this is primarily for API compatibility with browsers."},{"url":"/api/web/~/onunhandledrejection/","title":"onunhandledrejection","description":"Event handler for unhandled promise rejections. Triggered when a `Promise` is rejected and no rejection handler is attached to it."},{"url":"/api/web/~/onunload/","title":"onunload","description":"Unload event handler for the window. In Ende, this is primarily for API compatibility with browsers."},{"url":"/api/web/~/prompt/","title":"prompt","description":"Shows the given message and waits for the user's input. Returns the user's input as string."},{"url":"/api/web/~/queueMicrotask/","title":"queueMicrotask","description":"A microtask is a short function which is executed after the function or module which created it exits and only if the JavaScript execution stack is empty, but before returning control to the event loop being used to drive the script's execution environment. This event loop may be either the main event loop or the event loop driving a web worker."},{"url":"/api/web/~/removeEventListener/","title":"removeEventListener","description":"Remove a previously registered event listener from the global scope"},{"url":"/api/web/~/reportError/","title":"reportError","description":"Dispatch an uncaught exception. Similar to a synchronous version of: ```ts setTimeout(() => { throw error; }, 0); ``` The error can not be caught with a `try/catch` block. An error event will be dispatched to the global scope. You can prevent the error from being reported to the console with `Event.prototype.preventDefault()`: ```ts addEventListener(\"error\", (event) => { event.preventDefault(); }); reportError(new Error(\"foo\")); // Will not be reported. ``` In Ende, this error will terminate the process if not intercepted like above."},{"url":"/api/web/~/self/","title":"self","description":"Reference to the global object itself. Equivalent to the global `window` object in browser environments."},{"url":"/api/web/~/sessionStorage/","title":"sessionStorage","description":"Ende's `sessionStorage` API operates similarly to the localStorage API, but it is intended for storing data temporarily for the duration of a session. Data stored in sessionStorage is cleared when the application session or process ends. This makes it suitable for temporary data that you do not need to persist across user sessions."},{"url":"/api/web/~/setInterval/","title":"setInterval","description":"Repeatedly calls a function , with a fixed time delay between each call."},{"url":"/api/web/~/setTimeout/","title":"setTimeout","description":"Sets a timer which executes a function once after the delay (in milliseconds) elapses. Returns an id which may be used to cancel the timeout."},{"url":"/api/web/~/structuredClone/","title":"structuredClone","description":"Creates a deep copy of a given value using the structured clone algorithm."},{"url":"/examples/","title":"Ende examples and tutorials"},{"url":"/examples/abort_controller/","title":"Cancel async work with AbortController"},{"url":"/examples/add_remove_dependencies_tutorial/","title":"Add and remove dependencies","description":"Manage project dependencies with ende add and ende remove: JSR packages, version pinning, and aliasing packages in your import map.","headings":[{"text":"Adding packages","slug":"adding-packages"},{"text":"Aliasing a package","slug":"aliasing-a-package"},{"text":"Removing packages","slug":"removing-packages"}],"text":"Ende manages dependencies through your project’s ende.json import map. The ende add and ende remove commands edit it for you, and ende install with a package argument does the same. Use the jsr: prefix for JSR packages: ende install jsr:@ende/path is equivalent: it records the dependency the same way and installs everything in one step. Both end up in the imports map of ende.json, with a caret range: Import them by their bare name anywhere in the project: To pin an exact version instead of a caret range, pass --save-exact. To request a specific version, spell it out: The import map maps any name you like to any specifier. Aliases are also the way to use two versions of one package side by side: For overriding a dependency with a local copy, or remapping your own imports, see Overriding dependencies and Re-map import paths. ende remove deletes the entry by its import-map name (not the package name, if they differ): The lockfile keeps records of removed packages until you run ende install again; see the lockfile documentation for how ende.lock tracks all of this."},{"url":"/examples/aes_encryption/","title":"AES Encryption and Decryption"},{"url":"/examples/ansi_terminal/","title":"Control the terminal with ANSI escape codes"},{"url":"/examples/basic_opentelemetry_tutorial/","title":"Getting Started with OpenTelemetry in Ende","description":"Set up basic OpenTelemetry instrumentation in an Ende application. This tutorial covers creating a simple HTTP server with custom metrics and traces, and viewing the telemetry data.","headings":[{"text":"Prerequisites","slug":"prerequisites"},{"text":"Step 1: Create a Simple HTTP Server","slug":"step-1-create-a-simple-http-server"},{"text":"Step 2: Run the Server with OpenTelemetry Enabled","slug":"step-2-run-the-server-with-opentelemetry-enabled"},{"text":"Step 3: Create a Test Client","slug":"step-3-create-a-test-client"},{"text":"Step 4: Run the Client","slug":"step-4-run-the-client"},{"text":"Step 5: View the Telemetry Data","slug":"step-5-view-the-telemetry-data"},{"text":"Setting up a Local Collector","slug":"setting-up-a-local-collector"},{"text":"Understanding What You’re Seeing","slug":"understanding-what-youre-seeing"},{"text":"Traces","slug":"traces"},{"text":"Metrics","slug":"metrics"},{"text":"Logs","slug":"logs"},{"text":"Troubleshooting","slug":"troubleshooting"}],"text":"OpenTelemetry provides powerful observability tools for your applications. With Ende’s built-in OpenTelemetry support, you can easily instrument your code to collect metrics, traces, and logs. This tutorial will walk you through setting up a simple Ende application with OpenTelemetry instrumentation. Ende Let’s start by creating a basic HTTP server that simulates a small web application: This server: Creates a tracer and meter for our application Sets up metrics to count requests and measure their duration Creates a span for each request with attributes and events Simulates some processing time Records metrics for each request To run the server with OpenTelemetry, use these flags: To quickly see telemetry output without setting up a collector, you can use the built-in console exporter which prints spans, logs, and metrics directly to stderr: Let’s create a simple client to send requests to our server: In a separate terminal, run the client: By default, Ende exports telemetry data to http://localhost:4318 using the OTLP protocol. You’ll need an OpenTelemetry collector to receive and visualize this data. The quickest way to get started is with a local LGTM stack (Loki, Grafana, Tempo, Mimir) in Docker: Then access Grafana at http://localhost:3000 (username: admin, password: admin). In Grafana, you can: View Traces in Tempo to see the individual request spans View Metrics in Mimir/Prometheus to see request counts and durations View Logs in Loki to see any logs from your application In the Traces view, you’ll see spans for: Each HTTP request processed by your server Each fetch request made by your client The relationships between these spans Click on any span to see its details, including: Duration Attributes (http.route, http.method, etc.) Events (request_started, processing_completed) In the Metrics view, you can query for: http_requests_total - The counter tracking the number of HTTP requests http_request_duration_ms - The histogram of request durations You can also"},{"url":"/examples/bdd_tutorial/","title":"Behavior-Driven Development (BDD)","description":"Implementing Behavior-Driven Development with Ende’s Standard Library’s BDD module. Create readable, well organised tests with effective assertions.","headings":[{"text":"Introduction to BDD","slug":"introduction-to-bdd"},{"text":"Using Ende’s BDD module","slug":"using-endes-bdd-module"},{"text":"Writing your first BDD test","slug":"writing-your-first-bdd-test"},{"text":"Organizing tests with nested describe blocks","slug":"organizing-tests-with-nested-describe-blocks"},{"text":"Hooks","slug":"hooks"},{"text":"beforeEach/afterEach","slug":"beforeeachaftereach"},{"text":"beforeAll/afterAll","slug":"beforeallafterall"},{"text":"Aborting a suite when a precondition isn’t met","slug":"aborting-a-suite-when-a-precondition-isnt-met"},{"text":"Gherkin vs. JavaScript-style BDD","slug":"gherkin-vs-javascript-style-bdd"},{"text":"Best Practices for BDD with Ende","slug":"best-practices-for-bdd-with-ende"},{"text":"Write your tests for humans to read","slug":"write-your-tests-for-humans-to-read"},{"text":"Keep tests focused","slug":"keep-tests-focused"},{"text":"Use context-specific setup","slug":"use-context-specific-setup"},{"text":"Handle asynchronous tests properly","slug":"handle-asynchronous-tests-properly"}],"text":"Behavior-Driven Development (BDD) is an approach to software development that encourages collaboration between developers, QA, and non-technical stakeholders. BDD focuses on defining the behavior of an application through examples written in a natural, ubiquitous language that all stakeholders can understand. Ende’s Standard Library provides a BDD-style testing module that allows you to structure tests in a way that’s both readable for non-technical stakeholders and practical for implementation. In this tutorial, we’ll explore how to use the BDD module to create descriptive test suites for your applications. BDD extends Test-Driven Development (TDD) by writing tests in a natural language that is easy to read. Rather than thinking about \"tests,\" BDD encourages us to consider \"specifications\" or \"specs\" that describe how software should behave from the user’s perspective. This approach helps to keep tests focused on what the code should do rather than how it is implemented. The basic elements of BDD include: Describe blocks that group related specifications It statements that express a single behavior Before/After hooks for setup and teardown operations To get started with BDD testing in Ende, we’ll use the @ende/testing/bdd module from the Ende Standard Library. First, let’s import the necessary functions: These imports provide the core BDD functions: describe creates a block that groups related tests it declares a test case that verifies a specific behavior beforeEach/afterEach run before or after each test case beforeAll/afterAll run once before or after all tests in a describe block We’ll also use assertion functions from @ende/assert to verify our expectations. Let’s create a simple calculator module and test it using BDD: Now, let’s test this calculator using the BDD style: To run this test, use the ende test command: You’ll see output similar to this: One of the powerful features of BDD is the ability to nest describe blocks, which helps organize tests"},{"url":"/examples/broadcast_channel/","title":"Communicate between workers with BroadcastChannel"},{"url":"/examples/byte_manipulation/","title":"Manipulating byte arrays"},{"url":"/examples/cbor_encoding/","title":"Encode and decode CBOR"},{"url":"/examples/checking_directory_existence/","title":"Checking for directory existence"},{"url":"/examples/checking_file_existence/","title":"Checking for file existence"},{"url":"/examples/cli_subcommands/","title":"Build a CLI with subcommands"},{"url":"/examples/color_logging/","title":"Logging with colors"},{"url":"/examples/command_line_arguments/","title":"Command line arguments"},{"url":"/examples/compress_decompress/","title":"Compress and decompress data"},{"url":"/examples/concurrency_limit/","title":"Run async tasks with a concurrency limit"},{"url":"/examples/connecting_to_databases_tutorial/","title":"Connecting to databases","description":"Connect Ende to SQLite and PostgreSQL with database drivers from JSR.","headings":[{"text":"SQLite","slug":"sqlite"},{"text":"Postgres","slug":"postgres"}],"text":"It is common for applications to store and retrieve data from databases. Ende supports connecting to many database management systems. You can find database drivers on JSR. This page connects to SQLite and PostgreSQL. SQLite is a self-contained, serverless, zero-configuration, and transactional SQL database engine. It is a popular choice for local storage in applications. To use the sqlite module to connect to SQLite in your Ende apps: Then, import the Database class from the module and create a new database instance. You can then execute SQL queries against the database: This module depends on Ende FFI, so you need to run your script with the --allow-ffi flag: PostgreSQL is a powerful, open source object-relational database system. The postgres module on JSR connects to it: Import the Client class, create a client with the connection details, and connect: The driver needs network and environment access:"},{"url":"/examples/convert_arraybuffer/","title":"Convert an ArrayBuffer"},{"url":"/examples/convert_blob/","title":"Convert a Blob"},{"url":"/examples/convert_readablestream/","title":"Convert a ReadableStream"},{"url":"/examples/convert_string/","title":"Convert a string to bytes and back"},{"url":"/examples/convert_uint8array/","title":"Convert a Uint8Array"},{"url":"/examples/copy_file/","title":"Copy a file"},{"url":"/examples/create_remove_directories/","title":"Creating & removing directories"},{"url":"/examples/cron/","title":"Ende.cron"},{"url":"/examples/csv_streaming/","title":"Parse large CSV files as streams"},{"url":"/examples/data_processing/","title":"User Data Processing with Ende Collections"},{"url":"/examples/date_format_parse/","title":"Parse and format dates"},{"url":"/examples/debounce_function/","title":"Debounce a function"},{"url":"/examples/debugging_with_console_tutorial/","title":"Better debugging with the console API","description":"An in-depth guide to advanced console debugging in Ende. Learn about console.table, timers, counters, tracers, and how to leverage the full console API beyond basic logging for better debugging workflows.","headings":[{"text":"console.log()","slug":"consolelog"},{"text":"console.table()","slug":"consoletable"},{"text":"Timer methods","slug":"timer-methods"},{"text":"Counting things with console.count()","slug":"counting-things-with-consolecount"},{"text":"Going deeper with console.trace()","slug":"going-deeper-with-consoletrace"}],"text":"Some of the console API is probably muscle memory for web developers, but there is so much more than just console.log() for you to use. Ende has great support for this API, so whether you’re writing JavaScript for the browser of for the server it’s worth learning about these helpful utilities. Let’s take a look at some of this API’s most useful methods. Your debugging is going to get so much easier! Hello, old friend! You’ll most likely be using this to output logging messages to the console to help you debug. You can output multiple items by separated by commas like so: Or you can use string literals: You can also apply some styling using CSS using the %c directive: …but there is much more you can do with the console API. The table method is helpful for outputting structured data like objects for easier inspection. You can also specify the properties of your object that you’d like to include in the table. Great for inspecting a summary of those detailed objects to see just the part you are concerned with. Understanding how long specific parts of your application take is key to removing performance bottlenecks and expensive operations. If you’ve ever reached for JavaScript’s date method to make yourself a timer, you’ll wish you’d know this one long ago. It’s more convenient and more accurate. Try usingconsole.time(), console.timeLog(), and console.timeEnd() instead. You can create multiple timers each with their own label. Very handy! It can be helpful to keep a count of how many times specific operations in your code have been executed. Rather than doing this manually you can use console.count() which can maintain multiple counters for you based on the label you provide. This can be very handy inside a function and passing in a label, like so: For a detailed view of what is happening in your application, you can output a stack trace to the console with console.trace(): There’s more to explore, but these handy methods can give your JavaScript debugging a boost and"},{"url":"/examples/deep_equal/","title":"Check if two values are deeply equal"},{"url":"/examples/deleting_files/","title":"Deleting files"},{"url":"/examples/dependency_lockfile_tutorial/","title":"Lock dependencies with ende.lock","description":"Use ende.lock for reproducible installs: what the lockfile records, reviewing lockfile diffs, frozen lockfiles for CI with --frozen-lockfile and ende ci, and regenerating or relocating the lockfile.","headings":[{"text":"What ende.lock records","slug":"what-endelock-records"},{"text":"Reviewing lockfile diffs","slug":"reviewing-lockfile-diffs"},{"text":"Freeze the lockfile for CI","slug":"freeze-the-lockfile-for-ci"},{"text":"Updating and regenerating","slug":"updating-and-regenerating"},{"text":"Custom path or disabling","slug":"custom-path-or-disabling"}],"text":"ende.lock pins every dependency to an exact resolved version with an integrity hash, so every machine (and your CI) runs identical code. Ende creates and updates it automatically whenever an ende.json is present; your job is just to commit it and decide when it may change. Add a dependency (for example ende add jsr:@ende/fmt@2026.10.14) and Ende writes the lockfile alongside your config: Each version range from your config is mapped to one exact version, and each package gets a hash that Ende verifies on every install. Commit ende.lock to git; on other machines and in CI, ende ci then installs exactly what the lockfile says. A version bump shows up as a changed resolution plus a changed hash: A new dependency adds entries instead, including its transitive dependencies, listed under dependencies: Unexpected new packages in a lockfile diff are worth a closer look in review. By default the lockfile is additive: new dependencies are recorded without complaint. In CI you usually want the opposite: fail if anything is not already locked: The same is available ad hoc as the --frozen-lockfile flag. With a frozen lockfile, any command that would modify ende.lock exits with an error showing the changes it wanted to make: ende ci wraps the recommended CI flow: it installs strictly from the lockfile, and errors if the lockfile is missing or out of date. To intentionally update dependencies, disable freezing for one command: Because the lockfile is additive, entries for removed dependencies can linger. To regenerate it from scratch, delete it and reinstall: Set \"lock\": false to disable the lockfile entirely (not recommended for applications). For the full picture, including supply chain practices built on the lockfile, see Integrity checking and lock files."},{"url":"/examples/derive_aes_key/","title":"Derive encryption keys from passwords"},{"url":"/examples/dns_queries/","title":"Running DNS queries"},{"url":"/examples/download_progress/","title":"Download a file with progress"},{"url":"/examples/ecdsa_signing/","title":"Sign and verify data with ECDSA"},{"url":"/examples/ende_compile/","title":"Compile a script into an executable"},{"url":"/examples/ende_doc_tutorial/","title":"Generating documentation with ende doc","description":"Learn how to generate professional documentation for your Ende projects using the built-in ende doc command. This tutorial covers JSDoc comments, HTML output, linting, and best practices for documenting your code.","headings":[{"text":"Setting up a sample project","slug":"setting-up-a-sample-project"},{"text":"Basic documentation generation","slug":"basic-documentation-generation"},{"text":"Generating HTML documentation","slug":"generating-html-documentation"},{"text":"Documentation linting","slug":"documentation-linting"},{"text":"Working with multiple files","slug":"working-with-multiple-files"},{"text":"JSON output for automation","slug":"json-output-for-automation"},{"text":"Best practices for JSDoc comments","slug":"best-practices-for-jsdoc-comments"},{"text":"1. Use descriptive summaries","slug":"1-use-descriptive-summaries"},{"text":"2. Provide concrete examples","slug":"2-provide-concrete-examples"},{"text":"3. Document parameters and return values","slug":"3-document-parameters-and-return-values"},{"text":"4. Use module-level documentation","slug":"4-use-module-level-documentation"},{"text":"5. Mark deprecated or experimental features","slug":"5-mark-deprecated-or-experimental-features"},{"text":"Integrating with CI/CD","slug":"integrating-with-cicd"},{"text":"Configuration in ende.json","slug":"configuration-in-endejson"}],"text":"Good documentation is essential for any software project. It helps other developers understand your code, makes maintenance easier, and improves the overall quality of your project. Ende includes a built-in documentation generator called ende doc that can automatically generate searchable documentation from your TypeScript and JavaScript code. ende doc works out of the box, with no setup required and can generate HTML, JSON or terminal output. It leverages JSDoc comments for documentation and automatically extracts type information from TypeScript type annotations in your code. If you’re publishing your package to JSR (JavaScript Registry), you get beautiful documentation automatically generated for free! JSR uses the same ende doc technology under the hood to create searchable, web-based documentation for all published packages. Simply publish your well-documented code with ende publish and JSR handles the rest. Let’s create a sample library to demonstrate ende doc features. We’ll build a simple mathematics utilities library with proper documentation. The simplest way to generate documentation is to run ende doc with your source files: This will output the documentation to your terminal, showing all exported functions, classes, and interfaces with their JSDoc comments. To create a documentation website with HTML, CSS and JS, use the --html flag: This generates a static site in the ./docs/ directory. The site includes: A searchable interface Syntax highlighting Cross-references between symbols Mobile-friendly responsive design You can also specify a custom output directory: Use the --lint flag to check for documentation issues: The linter reports three categories of problems, each with a named error code so you can grep for them or filter them in tooling: missing-jsdoc — an exported symbol has no JSDoc comment. missing-return-type — an exported function has no explicit return type annotation. private-type-ref — a public export references a type that is not itself"},{"url":"/examples/ende_github_actions_tutorial/","title":"Run Ende in GitHub Actions","description":"Set up a GitHub Actions workflow for an Ende project: install Ende with its install script, run fmt, lint and test, install with a frozen lockfile, and pin an Ende version.","headings":[{"text":"A minimal workflow","slug":"a-minimal-workflow"},{"text":"Installing with a frozen lockfile","slug":"installing-with-a-frozen-lockfile"}],"text":"Ende ships its formatter, linter, and test runner in the ende binary, so a CI pipeline needs little more than installing Ende and running the corresponding subcommands. Ende’s install script installs it on the runner. This workflow checks formatting, lints, and runs tests on every push and pull request: The script installs the latest release. To pin one, pass its version: curl -fsSL https://ende.sh/install.sh | sh -s v2026.10.17. ende ci installs exactly what ende.lock records: it errors out if ende.lock is missing, and fails if ende.json changed without the lockfile being refreshed. That catches \"bumped a version but forgot to commit the lockfile\" mistakes before they reach production. ende ci requires a committed ende.lock. If your repository doesn’t have one yet, run ende install locally and commit the resulting lockfile. For cross-platform matrices, coverage uploads, and other CI providers, see Continuous integration."},{"url":"/examples/ende_outdated/","title":"Find and update outdated dependencies"},{"url":"/examples/ende_version/","title":"Getting the Ende version"},{"url":"/examples/environment_variables/","title":"Environment variables"},{"url":"/examples/escape_html/","title":"Escape an HTML string"},{"url":"/examples/event_target/","title":"Create and dispatch custom events"},{"url":"/examples/exit_codes/","title":"Set and read process exit codes"},{"url":"/examples/exponential_backoff/","title":"Exponential backoff"},{"url":"/examples/extract_html_data/","title":"Extract links and metadata from HTML"},{"url":"/examples/fetch_data_tutorial/","title":"Fetch and stream data","description":"A tutorial on working with network requests in Ende. Learn how to use the fetch API for HTTP requests, handle responses, implement data streaming, and manage file uploads and downloads.","headings":[{"text":"Fetching data","slug":"fetching-data"},{"text":"HTTP/2","slug":"http2"},{"text":"Streaming data","slug":"streaming-data"}],"text":"Ende brings several familiar Web APIs to the server-side environment. If you’ve worked with browsers you may recognize the fetch() method and the streams API, which are used to make network requests and access streams of data over the network. Ende implements these APIs, allowing you to fetch and stream data from the web. When building a web application, developers will often need to retrieve resources from somewhere else on the web. We can do so with the fetch API. We’ll look at how to fetch different shapes of data from a url and how to handle an error if the request fails. Create a new file called fetch.js and add the following code: You can run this code with the ende run command. Because it is fetching data across the network, you need to grant the --allow-net permission: You should see the JSON data, HTML data as text, and an error message in the console. You don’t need to do anything special to use HTTP/2. When you fetch() an https:// URL, Ende negotiates the protocol with the server over TLS (via ALPN) and uses HTTP/2 automatically when the server supports it, falling back to HTTP/1.1 otherwise. The fetch API is the same either way, so the same code talks to HTTP/1.1 and HTTP/2 servers without changes. On the server side, Ende.serve() also speaks HTTP/2 automatically when serving over TLS. Sometimes you may want to send or receive large files over the network. When you don’t know the size of a file in advance, streaming is a more efficient way to handle the data. The client can read from the stream until it says it is done. Ende provides a way to stream data using the Streams API. We’ll look at how to convert a file into a readable or writable stream and how to send and receive files using streams. Create a new file called stream.js. We’ll use the fetch API to retrieve a file. Then we’ll use the Ende.open method to create and open a writable file and the pipeTo method from the Streams API to send the byte stream to the created file. Next, we’ll use the"},{"url":"/examples/fetch_http_proxy/","title":"Route fetch through an HTTP proxy"},{"url":"/examples/fetch_timeout/","title":"Set a timeout on fetch"},{"url":"/examples/fetch_unix_socket/","title":"Fetch over a Unix socket"},{"url":"/examples/ffi/","title":"Call C functions with FFI"},{"url":"/examples/file_based_routing_tutorial/","title":"File-based routing","description":"Tutorial on implementing file-based routing in Ende. Learn how to create a dynamic routing system similar to Next.js, handle HTTP methods, manage nested routes, and build a flexible server architecture.","headings":[{"text":"Route requests","slug":"route-requests"},{"text":"Handle requests","slug":"handle-requests"},{"text":"Start the server","slug":"start-the-server"}],"text":"If you’ve used frameworks like Next.js, you might be familiar with file based routing - you add a file in a specific directory and it automatically becomes a route. This tutorial demonstrates how to create a simple HTTP server that uses file based routing. Create a new file called server.ts. This file will be used to route requests. Set up an async function called handler that takes a request object as an argument: The handler function sets up a path variable which contains the path, extracted from the request URL, and a method variable which contains the request method. It then tries to import a module based on the path. If the module is not found, it returns a 404 response. If the module is found, it checks if the module has a method handler for the request method. If the method handler is found, it calls the method handler with the request object. If the method handler is not found, it returns a 501 response. Finally, it serves the handler function using Ende.serve. The path could be any valid URL path such as /users, /posts, etc. For paths like /users, the file ./users.ts will be imported. However, deeper paths like /org/users will require a file ./org/users.ts. You can create nested routes by creating nested directories and files. Create a new file called users.ts in the same directory as server.ts. This file will be used to handle requests to the /users path. We’ll use a GET request as an example. You could add more HTTP methods such as POST, PUT, DELETE, etc. In users.ts, set up an async function called GET that takes a request object as an argument: To start the server, run the following command: This will start the server on localhost:8080. You can now make a GET request to localhost:8000/users and you should see the response Hello from user.ts. This command requires the --allow-net and --allow-read permissions flags to allow access to the network to start the server and to read the users.ts file from the file system. 💀 Now you can set up routing in your"},{"url":"/examples/file_locking/","title":"Lock files across processes"},{"url":"/examples/file_metadata/","title":"Read and change file metadata"},{"url":"/examples/file_server_tutorial/","title":"Write a file server","description":"Tutorial on building a file server with Ende. Learn how to handle HTTP requests, serve static files, implement streaming responses, and use the standard library’s file server module for production deployments.","headings":[{"text":"Write a simple File Server","slug":"write-a-simple-file-server"},{"text":"Open a file and stream its contents","slug":"open-a-file-and-stream-its-contents"},{"text":"Run the file server","slug":"run-the-file-server"},{"text":"Using the file server provided by the Ende Standard Library","slug":"using-the-file-server-provided-by-the-ende-standard-library"},{"text":"Using the @ende/http file server in an Ende project","slug":"using-the-endehttp-file-server-in-an-ende-project"}],"text":"A file server listens for incoming HTTP requests and serves files from the local file system. This tutorial demonstrates how to create a simple file server using Ende’s built-in file system APIs. To start, create a new file called file-server.ts. We’ll use Ende’s built in HTTP server to listen for incoming requests. In your new file-server.ts file, add the following code: If you’re not familiar with the URL object, you can learn more about it in the URL API documentation. The decodeURIComponent function is used to decode the URL-encoded path, in the case that characters have been percent-encoded.) When a request is received, we’ll attempt to open the file specified in the request URL with Ende.open. If the requested file exists, we’ll convert it into a readable stream of data with the ReadableStream API, and stream its contents to the response. We don’t know how large the requested file might be, so streaming it will prevent memory issues when serving large files or multiple requests concurrently. If the file does not exist, we’ll return a \"404 Not Found\" response. In the body of the request handler, below the two variables, add the following code: Run your new file server with the ende run command, allowing read access and network access: Writing a file server from scratch is a good exercise to understand how Ende’s HTTP server works. However, writing production ready file server from scratch can be complex and error-prone. It’s better to use a tested and reliable solution. The Ende Standard Library provides you with a file server so that you don’t have to write your own. To use it, first install the remote script to your local file system: This will install the script to the Ende installation root, e.g. /home/user/.ende/bin/file-server. You can now run the script with the simplified script name: To see the complete list of options available with the file server, run file-server --help. If you visit http://0.0.0.0:8000/ in your web browser you will see the contents"},{"url":"/examples/file_system_events_tutorial/","title":"File system events","description":"Tutorial on monitoring file system changes with Ende. Learn how to watch directories for file modifications, handle change events, and understand platform-specific behaviors across Linux, macOS, and Windows.","headings":[{"text":"Concepts","slug":"concepts"},{"text":"Example","slug":"example"}],"text":"Use Ende.watchFs to watch for file system events. Results may vary between operating systems. To poll for file system events in the current directory: Run with: Now try adding, removing and modifying files in the same directory as watcher.ts. Note that the exact ordering of the events can vary between operating systems. This feature uses different syscalls depending on the platform: Linux: inotify macOS: FSEvents Windows: ReadDirectoryChangesW"},{"url":"/examples/file_url_path/","title":"Convert between file URLs and paths"},{"url":"/examples/find_executable/","title":"Find an executable on the PATH"},{"url":"/examples/find_free_port/","title":"Find a free port"},{"url":"/examples/form_data/","title":"Build and send forms with FormData"},{"url":"/examples/format_bytes_duration/","title":"Format bytes and durations for humans"},{"url":"/examples/front_matter/","title":"Extract front matter from markdown"},{"url":"/examples/generate_qr_code/","title":"Generate a QR code"},{"url":"/examples/glob_patterns/","title":"Find files with glob patterns"},{"url":"/examples/grafana_tutorial/","title":"How to export telemetry data to Grafana","description":"Complete guide to exporting telemetry data with OpenTelemetry and Grafana. Learn how to configure collectors, visualize traces, and monitor application performance.","headings":[{"text":"Set up your chat app","slug":"set-up-your-chat-app"},{"text":"Set up a Docker collector","slug":"set-up-a-docker-collector"},{"text":"Generating telemetry data","slug":"generating-telemetry-data"},{"text":"Viewing telemetry data","slug":"viewing-telemetry-data"}],"text":"OpenTelemetry (often abbreviated as OTel) is an open-source observability framework that provides a standardized way to collect and export telemetry data such as traces, metrics and logs. Ende has built-in support for OpenTelemetry, making it easy to instrument your applications without adding external dependencies. This integration works out of the box with observability platforms like Grafana. Grafana is an open-source observability platform that lets DevOps teams visualize, query, and alert on metrics, logs, and traces from diverse data sources in real time. It’s widely used for building dashboards to monitor infrastructure, applications, and systems health. Grafana also offers a hosted version called Grafana Cloud. This tutorial will help you configure your project to export OTel data to Grafana Cloud. In this tutorial, we’ll build a simple application and export its telemetry data to Grafana Cloud. We’ll cover: Set up your chat app Set up a Docker collector Generating telemetry data Viewing telemetry data You can find the complete source code for this tutorial on GitHub. For this tutorial, we’ll use a simple chat application to demonstrate how to export telemetry data. You can find the code for the app on GitHub. Either take a copy of that repository or create a main.ts file and a .env file. In order to run the app you will need an OpenAI API key. You can get one by signing up for an account at OpenAI and creating a new secret key. You can find your API key in the API keys section of your OpenAI account. Once you have an API key, set up an OPENAI_API-KEY environment variable in your .env file: Next, we’ll set up a Docker container to run the OpenTelemetry collector. The collector is responsible for receiving telemetry data from your application and exporting it to Grafana Cloud. In the same directory as your main.ts file, create a Dockerfile and an otel-collector.yml file. The Dockerfile will be used to build a Docker image: FROM"},{"url":"/examples/hard_links/","title":"Create hard links"},{"url":"/examples/hash_file_streams/","title":"Hash large files with streams"},{"url":"/examples/hash_password/","title":"Hashing and verifying passwords"},{"url":"/examples/hashbang_tutorial/","title":"Executable scripts","description":"Guide to creating executable scripts with Ende. Learn about hashbangs, file permissions, cross-platform compatibility, and how to create command-line tools that can run directly from the terminal.","headings":[{"text":"Creating an example script","slug":"creating-an-example-script"},{"text":"Execute the script","slug":"execute-the-script"},{"text":"Using hashbang in files with no extension","slug":"using-hashbang-in-files-with-no-extension"}],"text":"Making Ende scripts executable can come in handy when creating small tools or utilities for tasks like file manipulation, data processing or repetitive tasks that you might want to run from the command line. Executable scripts allow you to create ad-hoc solutions without setting up an entire project. To make a script executable, start the script with a hashbang, (sometimes called a shebang). This is a sequence of characters (#!) that tells your operating system how to execute a script. It is followed by the path to the interpreter that should be used to run the script. To use a hashbang on Windows you will need to install the Windows Subsystem for Linux (WSL) or use a Unix-like shell like Git Bash. We’ll make a small command-line greeter that reads its first argument from Ende.args and falls back to a default when none is supplied. This is the shape almost every Ende CLI tool starts with. Create a file named hashbang.ts with the following content: The first line is the hashbang. It tells the system to run the file with /usr/bin/env, which then locates ende on your PATH and invokes ende run on the script. The -S flag splits ende run into separate arguments so env treats them correctly; without -S the whole string would be passed as a single argument name and env would fail to find a program called ende run. There are no --allow-* flags here because the script only reads from Ende.args, which is always available. Ende prompts for permissions only when the script tries to use a sandboxed API. The -S flag is an extension provided by GNU coreutils and BSD/macOS env. It is not part of POSIX, so on systems that ship a more minimal env (for example some embedded or BusyBox environments) the hashbang may not work. On those systems, run the script explicitly with ende run script.ts instead. Ende.args is an array of the arguments that follow the script name on the command line. Ende.args[0] is the first one; ?? \"world\" substitutes \"world\" when no argument was supplied. Before"},{"url":"/examples/hashing/","title":"Hashing"},{"url":"/examples/hello_world/","title":"Hello world"},{"url":"/examples/hex_base64_encoding/","title":"Hex and base64 encoding"},{"url":"/examples/hmac_generate_verify/","title":"HMAC Generation and Verification"},{"url":"/examples/honeycomb_tutorial/","title":"How to export telemetry data to Honeycomb","description":"Complete guide to exporting telemetry data with OpenTelemetry and Honeycomb.io. Learn how to configure collectors, visualize traces, and monitor application performance.","headings":[{"text":"Set up your chat app","slug":"set-up-your-chat-app"},{"text":"Set up a Docker collector","slug":"set-up-a-docker-collector"},{"text":"Generating telemetry data","slug":"generating-telemetry-data"},{"text":"Viewing telemetry data","slug":"viewing-telemetry-data"}],"text":"OpenTelemetry (often abbreviated as OTel) is an open-source observability framework that provides a standardized way to collect and export telemetry data such as traces, metrics and logs. Ende has built-in support for OpenTelemetry, making it easy to instrument your applications without adding external dependencies. This integration works out of the box with observability platforms like Honeycomb. Honeycomb is an observability platform designed for debugging and understanding complex, modern distributed systems. In this tutorial, we’ll build a simple application and export its telemetry data to Honeycomb. We’ll cover: Set up your chat app Set up a Docker collector Generating telemetry data Viewing telemetry data You can find the complete source code for this tutorial on GitHub. For this tutorial, we’ll use a simple chat application to demonstrate how to export telemetry data. You can find the code for the app on GitHub. Either take a copy of that repository or create a main.ts file and a .env file. In order to run the app you will need an OpenAI API key. You can get one by signing up for an account at OpenAI and creating a new secret key. You can find your API key in the API keys section of your OpenAI account. Once you have an API key, set up an OPENAI_API-KEY environment variable in your .env file: Next, we’ll set up a Docker container to run the OpenTelemetry collector. The collector is responsible for receiving telemetry data from your application and exporting it to Honeycomb. If you have not already, create a free Honeycomb account and set up an ingest API key. In the same directory as your main.ts file, create a Dockerfile and an otel-collector.yml file. The Dockerfile will be used to build a Docker image: FROM otel/opentelemetry-collector:latest - This line specifies the base image for the container. It uses the official OpenTelemetry Collector image and pulls the latest version. COPY otel-collector.yml /otel-config.yml - This instruction copies our"},{"url":"/examples/hono/","title":"Hono HTTP server"},{"url":"/examples/http_proxy/","title":"Proxy HTTP requests"},{"url":"/examples/http_requests/","title":"HTTP requests"},{"url":"/examples/http_server/","title":"HTTP Server: Hello world"},{"url":"/examples/http_server_basic_auth/","title":"HTTP server: Basic authentication"},{"url":"/examples/http_server_cookies/","title":"HTTP server: Cookies"},{"url":"/examples/http_server_cors/","title":"HTTP server: CORS"},{"url":"/examples/http_server_file_upload/","title":"HTTP server: File upload"},{"url":"/examples/http_server_files/","title":"HTTP server: Serving files"},{"url":"/examples/http_server_graceful_shutdown/","title":"HTTP server: Graceful shutdown"},{"url":"/examples/http_server_health_checks/","title":"HTTP server: Health checks"},{"url":"/examples/http_server_hot_reload/","title":"HTTP server: Hot reload"},{"url":"/examples/http_server_pagination/","title":"HTTP server: Paginating results"},{"url":"/examples/http_server_parallel/","title":"HTTP server: Scaling across CPU cores"},{"url":"/examples/http_server_rate_limit/","title":"HTTP server: Rate limiting"},{"url":"/examples/http_server_request_timeouts/","title":"HTTP server: Request timeouts"},{"url":"/examples/http_server_routing/","title":"HTTP server: Routing"},{"url":"/examples/http_server_rss/","title":"Generate an RSS feed"},{"url":"/examples/http_server_sessions/","title":"HTTP server: Sessions"},{"url":"/examples/http_server_sitemap/","title":"Generate sitemap.xml and robots.txt"},{"url":"/examples/http_server_sse/","title":"HTTP server: Server-sent events"},{"url":"/examples/http_server_static_caching/","title":"HTTP server: Caching headers"},{"url":"/examples/http_server_streaming/","title":"HTTP server: Streaming"},{"url":"/examples/http_server_tls/","title":"HTTP server: TLS"},{"url":"/examples/http_server_webhooks/","title":"HTTP server: Verifying webhook signatures"},{"url":"/examples/http_server_websocket/","title":"HTTP server: WebSockets"},{"url":"/examples/hyperdx_tutorial/","title":"How to export telemetry data to HyperDX","description":"Complete guide to exporting telemetry data with OpenTelemetry and HyperDX. Learn how to configure collectors, visualize traces, logs, metrics, and debug distributed applications effectively.","headings":[{"text":"Set up the app","slug":"set-up-the-app"},{"text":"Set up the collector","slug":"set-up-the-collector"},{"text":"Generating telemetry data","slug":"generating-telemetry-data"},{"text":"Viewing telemetry data","slug":"viewing-telemetry-data"},{"text":"Logs View","slug":"logs-view"},{"text":"Request Traces","slug":"request-traces"},{"text":"Metrics Dashboard","slug":"metrics-dashboard"}],"text":"HyperDX is an open source observability platform that unifies logs, traces, metrics, exceptions, and session replays into a single interface. It helps developers debug applications faster by providing a complete view of your system’s behavior and performance. OpenTelemetry (often abbreviated as OTel) provides a standardized way to collect and export telemetry data. Ende includes built-in OpenTelemetry support, allowing you to instrument your applications without additional dependencies. This integration works seamlessly with platforms like HyperDX to collect and visualize telemetry data. In this tutorial, we’ll build a simple application and export its telemetry data to HyperDX: Set up your chat app Set up a Docker collector Generating telemetry data Viewing telemetry data You can find the complete source code for this tutorial on GitHub. For this tutorial, we’ll use a simple chat application to demonstrate how to export telemetry data. You can find the code for the app on GitHub. Either take a copy of that repository or create a main.ts file and a .env file. In order to run the app you will need an OpenAI API key. You can get one by signing up for an account at OpenAI and creating a new secret key. You can find your API key in the API keys section of your OpenAI account. Once you have an API key, set up an OPENAI_API-KEY environment variable in your .env file: First, create a free HyperDX account to get your API key. Then, we’ll set up two files to configure the OpenTelemetry collector: Create a Dockerfile: This Dockerfile: Uses the official OpenTelemetry Collector as the base image Copies your configuration into the container Sets up the collector to use your config when it starts Create a file called otel-collector.yml: This configuration file sets up the OpenTelemetry collector to receive telemetry data from your application and export it to HyperDX. It includes: The receivers section accepts data via gRPC (4317) and HTTP (4318) The Exporters section sends data"},{"url":"/examples/import_export/","title":"Importing & exporting"},{"url":"/examples/import_maps_tutorial/","title":"Re-map import paths","description":"Use the imports field in ende.json as an import map: path aliases like @/ for src/, bare names for local modules, and scoped overrides for transitive imports.","headings":[{"text":"Alias a directory","slug":"alias-a-directory"},{"text":"Alias a single module","slug":"alias-a-single-module"},{"text":"Editor support","slug":"editor-support"},{"text":"Scoped overrides","slug":"scoped-overrides"}],"text":"The imports field in ende.json is an import map: any specifier prefix can be re-mapped to any location. Besides naming packages, it replaces the paths section of tsconfig.json for path aliases like @/. A key ending in / maps a whole prefix. The common convention aliases the source root: Imports anywhere in the project can now address files from the root instead of counting ../ segments: A key without a trailing slash maps one bare name to one file, which reads nicely for modules used everywhere: The Ende language server reads the same file, so completions and go-to-definition follow the aliases with no extra tsconfig.json configuration. If you migrate a project that has compilerOptions.paths, move those entries into imports. The standard import map scopes field also works, remapping a specifier only for imports that originate under a given path prefix: Modules under vendor/ get the legacy logger; everything else gets the default. The import map redirects specifiers in your own code. To replace a dependency with a local copy, see Overriding dependencies. For how packages themselves are named and versioned in the import map, see Add and remove dependencies and the modules documentation."},{"url":"/examples/importing_bytes/","title":"Importing binary files"},{"url":"/examples/importing_json/","title":"Importing JSON"},{"url":"/examples/importing_text/","title":"Importing text files"},{"url":"/examples/initialize_project_tutorial/","title":"Initialize a project","description":"Guide to creating and structuring new Ende projects. Learn about starting a new project, task configuration, dependency management, and best practices for growing applications.","headings":[{"text":"Run your project","slug":"run-your-project"},{"text":"Run the tests","slug":"run-the-tests"},{"text":"Adding to your project","slug":"adding-to-your-project"}],"text":"While it is possible to run scripts directly with ende run, for larger projects it is recommended to create a sensible directory structure. This way you can organize your code, manage dependencies, script tasks and run tests more easily. Initialize a new project by running the following command: Where my_project is the name of your project. You can read more about the project structure. Navigate to the project directory: Then you can run the project directly using the ende task command: Take a look in the ende.json file in your new project. You should see a dev task in the \"tasks\" field. The dev task is a common task that runs the project in development mode. As you can see, it runs the main.ts file with the --watch flag, which will automatically reload the script when changes are made. You can see this in action if you open the main.ts file and make a change. In the project directory run: This will execute all the tests in the project. You can read more about testing in Ende and we’ll cover tests in a little more depth in a later tutorial. At the moment you have one test file, main_test.ts, which tests the request handler in main.ts. The main.ts file serves as the entry point for your application. It’s where you’ll write your main program logic. When developing your project you will start by replacing the default HTTP server with your own code; its routes and request handler are a starting point to build on. Beyond the initial files, you’ll likely create additional modules (files) to organize your code. Consider grouping related functionality into separate files. Remember that Ende supports ES modules, so you can use import and export statements to structure your code. Example folder structure for a ende project: This kind of structure keeps your project clean and makes it easier to find and manage files. 💀 Congratulations! Now you know how to create a brand new project with ende init. Remember that Ende encourages simplicity and avoids complex build tools. Keep"},{"url":"/examples/intl_date_format/","title":"Format dates for any locale"},{"url":"/examples/intl_number_format/","title":"Format numbers and currencies"},{"url":"/examples/intl_plural_list/","title":"Pluralize and format lists"},{"url":"/examples/intl_relative_time/","title":"Format relative time"},{"url":"/examples/intl_segmenter/","title":"Split text by words, sentences, and graphemes"},{"url":"/examples/json_lines/","title":"Stream JSON Lines data"},{"url":"/examples/llm_tutorial/","title":"Build a Real-time LLM Chat App with Ende","description":"Learn how to integrate Large Language Models (LLM) with Ende to create an interactive roleplay chat application with AI characters using OpenAI or Anthropic APIs.","headings":[{"text":"Initialize a new project","slug":"initialize-a-new-project"},{"text":"Project structure","slug":"project-structure"},{"text":"Set up dependencies","slug":"set-up-dependencies"},{"text":"Configure environment variables","slug":"configure-environment-variables"},{"text":"Build the LLM Provider","slug":"build-the-llm-provider"},{"text":"Create AI Characters","slug":"create-ai-characters"},{"text":"Set up character configurations","slug":"set-up-character-configurations"},{"text":"Build the Game Manager","slug":"build-the-game-manager"},{"text":"Add WebSocket Support","slug":"add-websocket-support"},{"text":"Create the main server","slug":"create-the-main-server"},{"text":"Add a frontend","slug":"add-a-frontend"},{"text":"index.html","slug":"indexhtml"},{"text":"app.js","slug":"appjs"},{"text":"style.css","slug":"stylecss"},{"text":"Run your application","slug":"run-your-application"},{"text":"Testing","slug":"testing"}],"text":"Large Language Models (LLMs) like OpenAI’s GPT and Anthropic’s Claude are powerful tools for creating intelligent, conversational applications. In this tutorial, we’ll build a real-time chat application where AI characters powered by LLMs interact with users in a roleplay game setting. You can see the code for the finished app on GitHub. First, create a new directory for your project and initialize it: We’ll create a modular structure that separates concerns between LLM integration, game logic, and server management: Add the required dependencies to your ende.json: Create a .env file for your API keys. The application supports both OpenAI and Anthropic. Comment out the config that you won’t be using with a #. You can get API keys from: OpenAI Platform Anthropic Console The core of our application is the LLM provider that handles communication with AI services. Create src/llm/LLMProvider.ts: In this file we set an LLM provider, this allows us to easily switch between different LLM APIs or mock responses for testing. We also add a retry mechanism for handling API errors. Characters are the heart of our roleplay application. Create src/game/Character.ts: Here we define the Character class, which represents each player character in the game. This class will handle generating responses based on the character’s personality and the current game context. Create predefined character templates in src/config/characters.ts: These templates are what the Character class will use to instantiate each character with their unique traits. The LLM will use these traits to generate responses that are consistent with each character’s personality and backstory. The Game Manager coordinates characters and maintains game state. Create src/game/GameManager.ts: The game manager will handle all game-related logic, including starting new games, processing player messages, and managing game state. When a player sends a message, the game manager will route it to the appropriate character for"},{"url":"/examples/local_unpublished_packages_tutorial/","title":"Use local and unpublished packages","description":"Work with code that isn’t on a registry: link a local package copy with the links field, import straight from HTTPS URLs including private GitHub repos, and know which specifiers Ende does not support.","headings":[{"text":"Link a local package with links","slug":"link-a-local-package-with-links"},{"text":"Import straight from an HTTPS URL","slug":"import-straight-from-an-https-url"},{"text":"What is not supported","slug":"what-is-not-supported"}],"text":"Not every dependency lives on JSR. Ende has two supported ways to use code that isn’t published anywhere: the links field for local directories, and plain HTTPS imports for code reachable by URL. The links field in ende.json overrides a dependency with a local directory during development. Given a local package with a name, version, and exports: Point your application at it with links, and import it like a registry package: The linked directory is used instead of the registry; the package doesn’t even have to be published. Edits in greeter/ are picked up directly. links is only respected in the workspace root. Any module reachable over HTTPS can be imported directly, including raw files from a GitHub repository: Pin the URL to a tag or commit hash rather than a branch, so the code can’t change underneath you. For private repositories, set ENDE_AUTH_TOKENS to a personal access token scoped to the host, e.g. ENDE_AUTH_TOKENS=a1b2c3d4e5f6@raw.githubusercontent.com; see Private repositories for details. Only import over HTTPS from sources you trust, and prefer a registry for anything beyond small projects. HTTPS imports are not supported by ende add/ende install. Ende does not support git dependency specifiers (git+https:/git+ssh:) or tarball URL dependencies. The supported alternatives are: the links field for local directories HTTPS imports for code hosted in a (possibly private) git repository vendoring remote modules you need to patch or build offline, with \"vendor\": true in ende.json publishing the package to JSR For lockfiles, version ranges, and everything else about dependencies, see the packages documentation."},{"url":"/examples/memoize_function/","title":"Memoize an expensive function"},{"url":"/examples/mime_type/","title":"Get the MIME type of a file"},{"url":"/examples/module_metadata_tutorial/","title":"Module metadata","description":"A guide to working with module metadata in Ende. Learn about import.meta properties, main module detection, file paths, URL resolution, and how to access module context information in your applications.","headings":[{"text":"Concepts","slug":"concepts"},{"text":"Example","slug":"example"}],"text":"import.meta can provide information on the context of the module. The boolean import.meta.main will let you know if the current module is the program entry point. The string import.meta.url will give you the URL of the current module. The string import.meta.filename will give you the fully resolved path to the current module. For local modules only. The string import.meta.dirname will give you the fully resolved path to the directory containing the current module. For local modules only. The import.meta.resolve allows you to resolve specifier relative to the current module. This function takes into account an import map (if one was provided on startup). The string Ende.mainModule will give you the URL of the main module entry point, i.e. the module invoked by the ende runtime. The example below uses two modules to show the difference between import.meta.url, import.meta.main and Ende.mainModule. In this example, module_a.ts is the main module entry point: If module_a.ts is located in /home/alice/ende then the output of ende run --allow-read module_a.ts is:"},{"url":"/examples/moving_renaming_files/","title":"Moving/Renaming files"},{"url":"/examples/msgpack_encoding/","title":"Encode and decode MessagePack"},{"url":"/examples/network_interfaces/","title":"List network interfaces"},{"url":"/examples/oauth_github/","title":"Sign in with GitHub (OAuth)"},{"url":"/examples/os_info/","title":"Get operating system information"},{"url":"/examples/os_signals/","title":"Listen for OS signals"},{"url":"/examples/os_signals_tutorial/","title":"Handle OS signals","description":"Tutorial on handling operating system signals in Ende. Learn how to capture SIGINT and SIGBREAK events, manage signal listeners, and implement graceful shutdown handlers in your applications.","headings":[{"text":"Concepts","slug":"concepts"},{"text":"Set up an OS signal listener","slug":"set-up-an-os-signal-listener"},{"text":"Windows support","slug":"windows-support"}],"text":"⚠️ Windows supports listening for SIGINT, SIGBREAK, SIGTERM, SIGQUIT, SIGHUP, and SIGWINCH (all except SIGINT/SIGBREAK go through libuv’s Windows signal emulation). Ende.addSignalListener() can be used to capture and monitor OS signals. Ende.removeSignalListener() can be used to stop watching the signal. APIs for handling OS signals are modelled after already familiar addEventListener and removeEventListener APIs. ⚠️ Note that listening for OS signals doesn’t prevent event loop from finishing, ie. if there are no more pending async operations the process will exit. You can use Ende.addSignalListener() function for handling OS signals: Run with: You can use Ende.removeSignalListener() function to unregister previously added signal handler. Run with: The supported signal set differs between platforms. The Windows-specific behavior is: Use case Supported signals on Windows Ende.addSignalListener(sig, …) SIGINT, SIGBREAK, SIGTERM, SIGQUIT, SIGHUP, SIGWINCH Ende.kill(pid, sig) SIGINT, SIGBREAK, SIGTERM, SIGQUIT, SIGHUP, SIGWINCH, SIGKILL, SIGABRT, plus signal 0 for a process-health check SIGKILL and SIGABRT are deliberately not registerable via addSignalListener — they’re uncatchable / fatal, matching Unix semantics. On Windows the catchable signals all forward to libuv’s emulation layer; signals sent via Ende.kill ultimately invoke TerminateProcess."},{"url":"/examples/otel_span_propagation_tutorial/","title":"Distributed Tracing with Context Propagation in Ende","description":"Implement end-to-end distributed tracing with automatic context propagation in Ende applications. This tutorial covers creating traced services, automatic propagation of trace context, and visualizing distributed traces.","headings":[{"text":"Setting up a distributed system","slug":"setting-up-a-distributed-system"},{"text":"The server","slug":"the-server"},{"text":"The client","slug":"the-client"},{"text":"Tracing with OpenTelemetry","slug":"tracing-with-opentelemetry"},{"text":"Automatic context propagation","slug":"automatic-context-propagation"},{"text":"Running the example","slug":"running-the-example"},{"text":"Viewing traces","slug":"viewing-traces"}],"text":"Modern applications are often built as distributed systems with multiple services communicating with each other. When debugging issues or optimizing performance in these systems, it’s crucial to be able to trace requests as they flow through different services. This is where distributed tracing comes in. The runtime now automatically preserves trace context across service boundaries, making end-to-end tracing in distributed systems simpler and more powerful. This means that when one service makes a request to another, the trace context is automatically propagated, allowing you to see the entire request flow as a single trace. Our example system will consist of two parts: A server that provides an API endpoint A client that makes requests to the server We’ll set up a simple HTTP server that responds to GET requests with a JSON message: Now, let’s create a client that will make requests to our server: Both the client and server code already include basic OpenTelemetry instrumentation: Create a tracer - both files create a tracer using Ende.telemetry.tracerProvider.getTracer() with a name and version. Create spans - We use startActiveSpan() to create spans that represent operations. Add context - We add attributes and events to spans to provide more context. Ending spans - We make sure to end spans when operations are complete. The magic happens when the client makes a request to the server. In the client code there is a fetch call to the server: Since this fetch call happens inside an active span, Ende automatically creates a child span for the fetch operation and Injects the trace context into the outgoing request headers. When the server receives this request, Ende extracts the trace context from the request headers and establishes the server span as a child of the client’s span. To run this example, first, start the server, giving your otel service a name: Then, in another terminal, run the client, giving the client a different service name to make observing the"},{"url":"/examples/parse_xml/","title":"Parse and generate XML"},{"url":"/examples/parsing_jsonc/","title":"Parsing JSONC"},{"url":"/examples/parsing_serializing_csv/","title":"Parsing and serializing CSV"},{"url":"/examples/parsing_serializing_ini/","title":"Parsing and serializing INI"},{"url":"/examples/parsing_serializing_json/","title":"Parsing and serializing JSON"},{"url":"/examples/parsing_serializing_toml/","title":"Parsing and serializing TOML"},{"url":"/examples/parsing_serializing_yaml/","title":"Parsing and serializing YAML"},{"url":"/examples/path_operations/","title":"Path operations"},{"url":"/examples/performance_timing/","title":"Measure performance with marks and measures"},{"url":"/examples/permissions/","title":"Permission management"},{"url":"/examples/pid/","title":"Process information"},{"url":"/examples/piping_streams/","title":"Piping streams"},{"url":"/examples/progress_spinners/","title":"Show progress bars and spinners"},{"url":"/examples/promise_timeout/","title":"Add a timeout to any promise"},{"url":"/examples/prompts/","title":"Input prompts"},{"url":"/examples/quic/","title":"Communicate over QUIC"},{"url":"/examples/reading_files/","title":"Reading files"},{"url":"/examples/reading_stdin/","title":"Read from stdin"},{"url":"/examples/reading_system_metrics/","title":"Reading system metrics"},{"url":"/examples/regexp_escape/","title":"Escape text for regular expressions"},{"url":"/examples/render_markdown/","title":"Render markdown to HTML"},{"url":"/examples/rsa_signature/","title":"RSASSA-PKCS1-v1_5 Signature and Verification"},{"url":"/examples/run_script_tutorial/","title":"Run a script","description":"A guide to creating and running basic scripts with Ende. Learn how to write and execute JavaScript and TypeScript code, understand runtime environments, and get started with fundamental Ende concepts.","headings":[{"text":"Running a script","slug":"running-a-script"},{"text":"JavaScript","slug":"javascript"},{"text":"TypeScript","slug":"typescript"},{"text":"Next steps","slug":"next-steps"}],"text":"Ende is a secure runtime for JavaScript and TypeScript. A runtime is the environment where your code executes. It provides the necessary infrastructure for your programs to run, handling things like memory management, I/O operations, and interaction with external resources. The runtime is responsible for translating your high-level code (JavaScript or TypeScript) into machine instructions that the computer can understand. When you run JavaScript in a web browser (like Chrome, Firefox, or Edge), you’re using a browser runtime. Browser runtimes are tightly coupled with the browser itself. They provide APIs for manipulating the Document Object Model (DOM), handling events, making network requests, and more. These runtimes are sandboxed, they operate within the browser’s security model. They can’t access resources outside the browser, such as the file system or environment variables. When you run your code with Ende, you’re executing your JavaScript or TypeScript code directly on your machine, outside the browser context. Therefore, Ende programs can access resources on the host computer, such as the file system, environment variables, and network sockets. Ende provides a seamless experience for running JavaScript and TypeScript code. Whether you prefer the dynamic nature of JavaScript or the type safety of TypeScript, Ende has you covered. In this tutorial we’ll create a simple \"Hello World\" example in both JavaScript and TypeScript using Ende. We’ll define a capitalize function that capitalizes the first letter of a word. Then, we define a hello function that returns a greeting message with the capitalized name. Finally, we call the hello function with different names and print the output to the console. First, create a hello-world.js file and add the following code: Run the script using the ende run command: This TypeScript example is exactly the same as the JavaScript example above, the code just has the additional type information which TypeScript supports. Create"},{"url":"/examples/secure_random_values/","title":"Generate secure random values"},{"url":"/examples/seeded_random/","title":"Generate seeded random numbers"},{"url":"/examples/semver_versions/","title":"Parse and compare semver versions"},{"url":"/examples/set_timezone/","title":"Set the time zone"},{"url":"/examples/sleep_delay/","title":"Sleep and delay execution"},{"url":"/examples/spy_functions/","title":"Spy functions"},{"url":"/examples/sss/","title":"Shamir’s Secret Sharing"},{"url":"/examples/starttls/","title":"Upgrade a TCP connection to TLS (STARTTLS)"},{"url":"/examples/streaming_files/","title":"Streaming file operations"},{"url":"/examples/string_case/","title":"Convert string case"},{"url":"/examples/structured_clone/","title":"Deep clone objects with structuredClone"},{"url":"/examples/structured_logging/","title":"Structured logging"},{"url":"/examples/subprocess_env_cwd/","title":"Run a subprocess with custom env and cwd"},{"url":"/examples/subprocess_stdin/","title":"Pipe data into a subprocess"},{"url":"/examples/subprocess_tutorial/","title":"Creating a subprocess","description":"A guide to working with subprocesses in Ende. Learn how to spawn processes, handle input/output streams, manage process lifecycles, and implement inter-process communication patterns safely.","headings":[{"text":"Concepts","slug":"concepts"},{"text":"Simple example","slug":"simple-example"},{"text":"Security","slug":"security"},{"text":"Communicating with subprocesses","slug":"communicating-with-subprocesses"},{"text":"Piping to files","slug":"piping-to-files"},{"text":"Reading subprocess output with convenience methods","slug":"reading-subprocess-output-with-convenience-methods"},{"text":"Convenience spawn functions","slug":"convenience-spawn-functions"},{"text":"Convenience methods on output streams","slug":"convenience-methods-on-output-streams"}],"text":"Ende is capable of spawning a subprocess via Ende.Command. --allow-run permission is required to spawn a subprocess. Spawned subprocesses do not run in a security sandbox. Communicate with the subprocess via the stdin, stdout and stderr streams. This example is the equivalent of running echo \"Hello from Ende!\" from the command line. Run it: The --allow-run permission is required for creation of a subprocess. Be aware that subprocesses are not run in an Ende sandbox and therefore have the same permissions as if you were to run the command from the command line yourself. By default when you use Ende.Command() the subprocess inherits stdin, stdout and stderr of the parent process. If you want to communicate with a started subprocess you must use the \"piped\" option. This example is the equivalent of running yes &> ./process_output in bash. Run it: When working with spawned subprocesses, you can use convenience methods on the stdout and stderr streams to easily collect and parse output. These methods are similar to those available on Response objects: Ende.spawn(), Ende.spawnAndWait(), and Ende.spawnAndWaitSync() are unstable APIs. They may evolve before being stabilized. Three shorthand functions provide a more concise alternative to Ende.Command: Ende.spawn(command, args, options?) — spawns a subprocess and returns a ChildProcess (equivalent to new Ende.Command(cmd, { args }).spawn()) Ende.spawnAndWait(command, args, options?) — spawns a subprocess and returns a promise resolving to CommandOutput (equivalent to new Ende.Command(cmd, { args }).output()) Ende.spawnAndWaitSync(command, args, options?) — synchronous variant that blocks until the subprocess completes These functions accept the command and arguments as separate parameters, which can be more readable than the Ende.Command constructor options pattern. Available convenience methods include: .text() - Returns the output as a UTF-8 string .bytes() - Returns the output as a Uint8Array .arrayBuffer() - Returns the"},{"url":"/examples/subprocesses_output/","title":"Subprocesses: Collecting output"},{"url":"/examples/subprocesses_spawn/","title":"Subprocesses: Spawning"},{"url":"/examples/symlinks/","title":"Creating & resolving symlinks"},{"url":"/examples/tar_archives/","title":"Create and extract tar archives"},{"url":"/examples/tcp_connector/","title":"TCP connector: Ping"},{"url":"/examples/tcp_echo_server/","title":"TCP Echo Server"},{"url":"/examples/tcp_listener/","title":"TCP listener: Ping"},{"url":"/examples/temporal/","title":"Temporal API"},{"url":"/examples/temporary_files/","title":"Temporary files & directories"},{"url":"/examples/terminal_detection/","title":"Detect a TTY and get terminal size"},{"url":"/examples/testing_tutorial/","title":"Writing tests","description":"Learn key concepts like test setup and structure, assertions, async testing, mocking, test fixtures, and code coverage","headings":[{"text":"Why testing matters","slug":"why-testing-matters"},{"text":"Writing tests with Ende.test","slug":"writing-tests-with-endetest"},{"text":"A simple example test","slug":"a-simple-example-test"},{"text":"Test structure and organization","slug":"test-structure-and-organization"},{"text":"Assertions","slug":"assertions"},{"text":"Real-world Example","slug":"real-world-example"},{"text":"Async testing","slug":"async-testing"},{"text":"Testing async functions","slug":"testing-async-functions"},{"text":"Mocking in tests","slug":"mocking-in-tests"},{"text":"Basic Mocking","slug":"basic-mocking"},{"text":"Using Spy Functions","slug":"using-spy-functions"},{"text":"Test hooks","slug":"test-hooks"},{"text":"Coverage","slug":"coverage"},{"text":"Coverage Configuration","slug":"coverage-configuration"},{"text":"Integrating with CI","slug":"integrating-with-ci"},{"text":"Comparison with other testing frameworks","slug":"comparison-with-other-testing-frameworks"},{"text":"Testing Style Comparison","slug":"testing-style-comparison"},{"text":"Next steps","slug":"next-steps"}],"text":"Testing is critical in software development to ensure your code works as expected, and continues to work as you make changes. Tests verify that your functions, modules, and applications behave correctly, handle edge cases appropriately, and maintain expected performance characteristics. Testing your code allows you to catch bugs, issues or regressions before they reach production, saving time and resources. Tests are also useful to help plan out the logic of your application, they can serve as a human readable description of how your code is meant to be used. Ende provides built-in testing capabilities, making it straightforward to implement robust testing practices in your projects. Defining a test in Ende is straightforward - use the Ende.test() function to register your test with the test runner. This function accepts either a test name and function, or a configuration object with more detailed options. All test functions in files that match patterns like *_test.{ts,js,mjs,jsx,tsx} or *.test.{ts,js,mjs,jsx,tsx} are automatically discovered and executed when you run the ende test command. Here are the basic ways to define tests: Let’s start with a simple test. Create a file called main_test.ts, in it we will test a basic addition operation using Ende’s testing API and the assertEquals function from the Ende Standard Library. We use Ende.test and provide a name that describes what the test will do: To run this test, use the ende test command: You should see output indicating that your test has passed: Try changing the function implementation to make the test fail: You’ll see an error message that clearly shows what went wrong: This clear feedback helps you quickly identify and fix issues in your code. Ende will automatically find and run tests that match naming patterns like *_test.{ts,js,mjs,jsx,tsx} or *.test.{ts,js,mjs,jsx,tsx}. There are plenty of ways to organize your test files, we recommend co-locating your unit tests with the code they are testing, and"},{"url":"/examples/tests_run_control/","title":"Filtering and controlling test runs"},{"url":"/examples/tests_skip_focus/","title":"Skipping and focusing tests"},{"url":"/examples/timers/","title":"Timeouts & intervals"},{"url":"/examples/timing_safe_comparison/","title":"Compare secrets in constant time"},{"url":"/examples/tls_connector/","title":"TCP/TLS connector: Ping"},{"url":"/examples/tls_listener/","title":"TCP/TLS listener: Ping"},{"url":"/examples/transform_stream/","title":"Transform data with TransformStream"},{"url":"/examples/truncate_file/","title":"Truncate a file"},{"url":"/examples/typescript_support/","title":"Built-in TypeScript support"},{"url":"/examples/udp_connector/","title":"UDP connector: Ping"},{"url":"/examples/udp_listener/","title":"UDP listener: Ping"},{"url":"/examples/ulid/","title":"ULID"},{"url":"/examples/unix_cat/","title":"Unix cat"},{"url":"/examples/url_parsing/","title":"Manipulating & parsing URLs"},{"url":"/examples/url_pattern/","title":"Match URLs with URLPattern"},{"url":"/examples/uuids/","title":"Generating & validating UUIDs"},{"url":"/examples/walking_directories/","title":"Walking directories"},{"url":"/examples/watching_files/","title":"Watching the filesystem"},{"url":"/examples/web_cache_api/","title":"Cache HTTP responses with the Web Cache API"},{"url":"/examples/web_testing_tutorial/","title":"Testing web apps","description":"A comprehensive guide to testing web applications with Ende","headings":[{"text":"Testing UI components and DOM manipulation","slug":"testing-ui-components-and-dom-manipulation"},{"text":"Testing Event Handling","slug":"testing-event-handling"},{"text":"Testing Fetch Requests","slug":"testing-fetch-requests"},{"text":"Using Testing Steps to set up and teardown","slug":"using-testing-steps-to-set-up-and-teardown"},{"text":"Best Practices for Web Testing in Ende","slug":"best-practices-for-web-testing-in-ende"},{"text":"Running Your Tests","slug":"running-your-tests"}],"text":"Ende is a JavaScript runtime that operates outside of the browser, as such, you cannot directly manipulate the Document Object Model in Ende as you would in a browser. However you can use a library like deno-dom from JSR to work with the DOM. This tutorial will guide you through how to effectively test your web applications using Ende. Let’s say you have a website that shows a user’s profile, you can set up a test function to verify that the DOM element creation works correctly. This code sets up a basic card element then tests whether the created DOM structure matches what was expected. Web applications often handle user interactions through events. Here’s how to test event handlers. This code sets up a button that tracks its active/inactive state and updates its appearance when clicked. The accompanying test verifies the toggle functionality by creating a button, checking its initial state, simulating clicks, and asserting that the button correctly updates its state after each interaction: Testing components that make network requests requires mocking the fetch API. In the below example we will mock the fetch API to test a function that retrieves user data from an external API. The test creates a spy function that returns predefined responses based on the requested URL, allowing you to test both successful requests and error handling without making actual network calls: For complex tests, you can use steps to organize test logic into discrete sections, making tests more readable and maintainable. Steps also enable better isolation between different parts of your test. Using step naming you can implement a setup and teardown of the test conditions. Maintain isolation - Each test should be self-contained and not depend on other tests. Use names to show intent - descriptive names for tests make it clear what is being tested and give more readable output in the console Clean up after your tests - remove any DOM elements created during tests to prevent test pollution."},{"url":"/examples/web_transport/","title":"Connect two peers with WebTransport"},{"url":"/examples/web_workers/","title":"Web workers"},{"url":"/examples/webassembly/","title":"Web assembly"},{"url":"/examples/webgpu_compute/","title":"Run a compute shader with WebGPU"},{"url":"/examples/websocket/","title":"Outbound WebSockets"},{"url":"/examples/websocket_context/","title":"WebSocket server: Per-socket state"},{"url":"/examples/websocket_pubsub/","title":"WebSocket server: Broadcasting messages"},{"url":"/examples/websocket_stream/","title":"Two-way streaming with WebSocketStream"},{"url":"/examples/word_finder_tutorial/","title":"Building a word finder app with Ende","description":"A tutorial on creating a word search application with Ende. Learn how to build a web server, implement pattern matching, handle HTTP requests, and create an interactive web interface using Oak framework.","headings":[{"text":"Getting Started","slug":"getting-started"},{"text":"Introduction","slug":"introduction"},{"text":"Building the View","slug":"building-the-view"},{"text":"Searching the Dictionary","slug":"searching-the-dictionary"},{"text":"Running an Ende Server","slug":"running-an-ende-server"},{"text":"Example Code","slug":"example-code"}],"text":"In this tutorial we’ll create a simple Word Finder web application using Ende. No prior knowledge of Ende is required. Our Word Finder application will take a pattern string provided by the user and return all words in the English dictionary that match the pattern. The pattern can include alphabetical characters as well as _ and ?. The ? can stand for any letter that isn’t present in the pattern. _ can stand for any letter. For example, the pattern c?t matches \"cat\" and \"cut\". The pattern go?d matches the words \"goad\" and \"gold\" (but not \"good\"). The function below renders the HTML that creates the simple UI displayed above. You can specify a pattern and list of words to customize the HTML content. If a pattern is specified then it will show up in the search text box. If the word list is specified, then a bulleted list of words will be rendered. We also need a simple search function which scans the dictionary and returns all words that match the specified pattern. The function below takes a pattern and dictionary and then returns all matched words. Oak is a framework that lets you easily setup a server in Ende (analogous to JavaScript’s Express) and we’ll be using it to host our application. Our server will use our search function to populate our HTML template with data and then return the customized HTML back to the viewer. We can conveniently rely on the /usr/share/dict/words file as our dictionary which is a standard file present on most Unix-like operating systems. We can start our server with the following command. Note we need to explicitly grant access to the file system and network because Ende is secure by default. Now if you visit http://localhost:8080 you should be able to view the Word Finder app. You can find the entire example code here."},{"url":"/examples/worker_pool/","title":"Distribute work across a worker pool"},{"url":"/examples/workspaces_monorepo_tutorial/","title":"Configure a monorepo with workspaces","description":"Set up an Ende workspace with multiple packages: member names and exports, glob patterns, root-only options, and shared imports.","headings":[{"text":"Create the workspace","slug":"create-the-workspace"},{"text":"Matching members with globs","slug":"matching-members-with-globs"},{"text":"Options that must live at the root","slug":"options-that-must-live-at-the-root"},{"text":"Sharing dependencies from the root","slug":"sharing-dependencies-from-the-root"}],"text":"A workspace is a collection of folders, each with its own ende.json, managed from a single root. Members can import each other by name, share dependencies, and run tools like ende test and ende fmt across the whole repository at once. The root ende.json lists the member directories: Each member gets its own ende.json with a name, a version, and an exports field pointing at its entry point: Other members import @acme/utils by its bare name: no relative paths and no import map entry needed. Ende finds the member through the root workspace list and resolves the import through its exports: Listing every member gets tedious in larger repositories. Each /* segment matches one folder depth: packages/* matches packages/foo but not packages/foo/subpackage. Some options control resolution for the whole workspace and are only read from the root ende.json: nodeModulesDir, vendor, minimumDependencyAge, links, lock, and allowScripts. Setting them in a member has no effect and Ende will warn about it. name, version, and exports go the other way: they belong in members, not in the root. Members inherit the root imports map, so common dependencies can be declared once: A member can declare its own imports too; within that member’s folder, its entries override the root’s."},{"url":"/examples/write_benchmarks/","title":"Write benchmarks with Ende.bench"},{"url":"/examples/write_file_incremental/","title":"Write a file incrementally"},{"url":"/examples/write_stdout/","title":"Write to stdout"},{"url":"/examples/writing_files/","title":"Writing files"},{"url":"/examples/writing_tests/","title":"Writing tests"},{"url":"/lint/","title":"List of rules"},{"url":"/lint/rules/adjacent-overload-signatures/","title":"adjacent-overload-signatures","text":"Requires overload signatures to be adjacent to each other. Overloaded signatures which are not next to each other can lead to code which is hard to read and maintain. Invalid: (bar is declared in-between foo overloads) Valid: (bar is declared after foo)"},{"url":"/lint/rules/ban-ts-comment/","title":"ban-ts-comment","text":"Disallows the use of Typescript directives without a comment. Typescript directives reduce the effectiveness of the compiler, something which should only be done in exceptional circumstances. The reason why should be documented in a comment alongside the directive. Invalid: Valid:"},{"url":"/lint/rules/ban-types/","title":"ban-types","text":"Bans the use of primitive wrapper objects (e.g. String the object is a wrapper of string the primitive) in addition to the non-explicit Function type and the misunderstood Object type. There are very few situations where primitive wrapper objects are desired and far more often a mistake was made with the case of the primitive type. You also cannot assign a primitive wrapper object to a primitive leading to type issues down the line. For reference, the TypeScript handbook also says we shouldn't ever use these wrapper objects. With Function, it is better to explicitly define the entire function signature rather than use the non-specific Function type which won't give you type safety with the function. Finally, Object and {} means \"any non-nullish value\" rather than \"any object type\". object is a good choice for a meaning of \"any object type\". Invalid: Valid:"},{"url":"/lint/rules/ban-unknown-rule-code/","title":"ban-unknown-rule-code","text":"Warns the usage of unknown rule codes in ignore directives. We sometimes have to suppress and ignore lint errors for some reasons. We can do so using ignore directives with rule names that should be ignored like so: This rule checks for the validity of the specified rule names (i.e. whether deno_lint provides the rule or not). Invalid: Valid:"},{"url":"/lint/rules/ban-untagged-ignore/","title":"ban-untagged-ignore","text":"Requires deno-lint-ignore to be annotated with one or more rule names. Ignoring all rules can mask unexpected or future problems. Therefore you need to explicitly specify which rule(s) are to be ignored. Invalid: Valid:"},{"url":"/lint/rules/ban-untagged-todo/","title":"ban-untagged-todo","text":"Requires TODOs to be annotated with either a user tag (@user) or an issue reference (#issue). TODOs without reference to a user or an issue become stale with no easy way to get more information. Invalid: Valid:"},{"url":"/lint/rules/ban-unused-ignore/","title":"ban-unused-ignore","text":"Warns unused ignore directives. We sometimes have to suppress and ignore lint errors for some reasons and we can do so using ignore directives. In some cases, however, like after refactoring, we may end up having ignore directives that are no longer necessary. Such superfluous ignore directives are likely to confuse future code readers, and to make matters worse, might hide future lint errors unintentionally. To prevent such situations, this rule detects unused, superfluous ignore directives. Invalid: Valid:"},{"url":"/lint/rules/camelcase/","title":"camelcase","text":"Enforces the use of camelCase in variable names. Consistency in a code base is key for readability and maintainability. This rule enforces variable declarations and object property names which you create to be in camelCase. Of note: _ is allowed at the start or end of a variable All uppercase variable names (e.g. constants) may have _ in their name If you have to use a snake_case key in an object for some reasons, wrap it in quotation mark This rule also applies to variables imported or exported via ES modules, but not to object properties of those variables Invalid: Valid:"},{"url":"/lint/rules/constructor-super/","title":"constructor-super","text":"Verifies the correct usage of constructors and calls to super(). Defined constructors of derived classes (e.g. class A extends B) must always call super(). Classes which extend non-constructors (e.g. class A extends null) must not have a constructor. Invalid: Valid:"},{"url":"/lint/rules/default-param-last/","title":"default-param-last","text":"Enforces default parameter(s) to be last in the function signature. Parameters with default values are optional by nature but cannot be left out of the function call without mapping the function inputs to different parameters which is confusing and error prone. Specifying them last allows them to be left out without changing the semantics of the other parameters. Invalid: Valid:"},{"url":"/lint/rules/eqeqeq/","title":"eqeqeq","text":"Enforces the use of type-safe equality operators === and !== instead of the more error prone == and != operators. === and !== ensure the comparators are of the same type as well as the same value. On the other hand == and != do type coercion before value checking which can lead to unexpected results. For example 5 == \"5\" is true, while 5 === \"5\" is false. Invalid: Valid: This rule has no configuration options. If you intentionally want to use == or != for a specific comparison (for example value != null to match both null and undefined), suppress the rule on that line with an ignore directive:"},{"url":"/lint/rules/explicit-function-return-type/","title":"explicit-function-return-type","text":"Requires all functions to have explicit return types. Explicit return types have a number of advantages including easier to understand code and better type safety. It is clear from the signature what the return type of the function (if any) will be. Invalid: Valid:"},{"url":"/lint/rules/explicit-module-boundary-types/","title":"explicit-module-boundary-types","text":"Requires all module exports to have fully typed declarations. Having fully typed function arguments and return values clearly defines the inputs and outputs of a module (known as the module boundary). This will make it very clear to any users of the module how to supply inputs and handle outputs in a type safe manner. Invalid: Valid:"},{"url":"/lint/rules/for-direction/","title":"for-direction","text":"Requires for loop control variables to increment in the correct direction. Incrementing for loop control variables in the wrong direction leads to infinite loops. This can occur through incorrect initialization, bad continuation step logic or wrong direction incrementing of the loop control variable. Invalid: Valid:"},{"url":"/lint/rules/getter-return/","title":"getter-return","text":"Requires all property getter functions to return a value. Getter functions return the value of a property. If the function returns no value then this contract is broken. Invalid: Valid:"},{"url":"/lint/rules/guard-for-in/","title":"guard-for-in","text":"Require for-in loops to include an if statement. Looping over objects with a for-in loop will include properties that are inherited through the prototype chain. This behavior can lead to unexpected items in your for loop. Invalid: Valid:"},{"url":"/lint/rules/jsx-boolean-value/","title":"jsx-boolean-value","text":"Enforce a consistent JSX boolean value style. Passing true as the boolean value can be omitted with the shorthand syntax. Invalid: Valid:"},{"url":"/lint/rules/jsx-button-has-type/","title":"jsx-button-has-type","text":"Enforce <button> elements to have a type attribute. If a <button> is placed inside a <form> element it will act as a submit button by default which can be unexpected. Invalid: Valid:"},{"url":"/lint/rules/jsx-curly-braces/","title":"jsx-curly-braces","text":"Ensure consistent use of curly braces around JSX expressions. Invalid: Valid:"},{"url":"/lint/rules/jsx-key/","title":"jsx-key","text":"Ensure the key attribute is present when passing iterables into JSX. It allows frameworks to optimize checking the order of elements. Invalid: Valid:"},{"url":"/lint/rules/jsx-no-children-prop/","title":"jsx-no-children-prop","text":"Pass children as JSX children instead of as an attribute. Invalid: Valid:"},{"url":"/lint/rules/jsx-no-comment-text-nodes/","title":"jsx-no-comment-text-nodes","text":"JavaScript comments inside text nodes are rendered as plain text in JSX. This is often unexpected. Invalid: Valid:"},{"url":"/lint/rules/jsx-no-duplicate-props/","title":"jsx-no-duplicate-props","text":"Disallow duplicated JSX props. Later props will always overwrite earlier props often leading to unexpected results. Invalid: Valid:"},{"url":"/lint/rules/jsx-no-unescaped-entities/","title":"jsx-no-unescaped-entities","text":"Leaving the > or } character in JSX is often undesired and difficult to spot. Enforce that these characters must be passed as strings. Invalid: Valid:"},{"url":"/lint/rules/jsx-no-useless-fragment/","title":"jsx-no-useless-fragment","text":"Fragments are only necessary at the top of a JSX \"block\" and only when there are multiple children. Fragments are not needed in other scenarios. Invalid: Valid:"},{"url":"/lint/rules/jsx-props-no-spread-multi/","title":"jsx-props-no-spread-multi","text":"Spreading the same expression twice is typically a mistake and causes unnecessary computations. Invalid: Valid:"},{"url":"/lint/rules/jsx-void-dom-elements-no-children/","title":"jsx-void-dom-elements-no-children","text":"Ensure that void elements in HTML don't have any children as that is not valid HTML. See Void element article on MDN for more information. Invalid: Valid:"},{"url":"/lint/rules/no-array-constructor/","title":"no-array-constructor","text":"Enforce conventional usage of array construction. Array construction is conventionally done via literal notation such as [] or [1, 2, 3]. Using the new Array() is discouraged as is new Array(1, 2, 3). There are two reasons for this. The first is that a single supplied argument defines the array length, while multiple arguments instead populate the array of no fixed size. This confusion is avoided when pre-populated arrays are only created using literal notation. The second argument to avoiding the Array constructor is that the Array global may be redefined. The one exception to this rule is when creating a new array of fixed size, e.g. new Array(6). This is the conventional way to create arrays of fixed length. Invalid: Valid:"},{"url":"/lint/rules/no-async-promise-executor/","title":"no-async-promise-executor","text":"Requires that async promise executor functions are not used. Promise constructors take an executor function as an argument with resolve and reject parameters that can be used to control the state of the created Promise. This function is allowed to be async but this is generally not a good idea for several reasons: If an async executor function throws an error, the error will be lost and won't cause the newly-constructed Promise to reject. This could make it difficult to debug and handle some errors. If an async Promise executor function is using await, then this is usually a sign that it is not actually necessary to use the new Promise constructor and the code can be restructured to avoid the use of a promise, or the scope of the new Promise constructor can be reduced, extracting the async code and changing it to be synchronous. Invalid: Valid:"},{"url":"/lint/rules/no-await-in-loop/","title":"no-await-in-loop","text":"Requires await is not used in a for loop body. Async and await are used in Javascript to provide parallel execution. If each element in the for loop is waited upon using await, then this negates the benefits of using async/await as no more elements in the loop can be processed until the current element finishes. A common solution is to refactor the code to run the loop body asynchronously and capture the promises generated. After the loop finishes you can then await all the promises at once. Invalid: Valid:"},{"url":"/lint/rules/no-await-in-sync-fn/","title":"no-await-in-sync-fn","text":"Disallow await keyword inside a non-async function. Using the await keyword inside a non-async function is a syntax error. To be able to use await inside a function, the function needs to be marked as async via the async keyword. Invalid: Valid:"},{"url":"/lint/rules/no-boolean-literal-for-arguments/","title":"no-boolean-literal-for-arguments","text":"Requires all functions called with any amount of boolean literals as parameters to use a self-documenting constant instead. Is common to define functions that can take booleans as arguments. However, passing boolean literals as parameters can lead to lack of context regarding the role of the argument inside the function in question. A simple fix for the points mentioned above is the use of self documenting constants that will end up working as \"named booleans\", that allow for a better understanding on what the parameters mean in the context of the function call. Invalid: Valid:"},{"url":"/lint/rules/no-case-declarations/","title":"no-case-declarations","text":"Requires lexical declarations (let, const, function and class) in switch case or default clauses to be scoped with brackets. Without brackets in the case or default block, the lexical declarations are visible to the entire switch block but only get initialized when they are assigned, which only happens if that case/default is reached. This can lead to unexpected errors. The solution is to ensure each case or default block is wrapped in brackets to scope limit the declarations. Invalid: Valid:"},{"url":"/lint/rules/no-class-assign/","title":"no-class-assign","text":"Disallows modifying variables of class declarations. Declaring a class such as class A {}, creates a variable A. Like any variable this can be modified or reassigned. In most cases this is a mistake and not what was intended. Invalid: Valid:"},{"url":"/lint/rules/no-compare-neg-zero/","title":"no-compare-neg-zero","text":"Disallows comparing against negative zero (-0). Comparing a value directly against negative may not work as expected as it will also pass for non-negative zero (i.e. 0 and +0). Explicit comparison with negative zero can be performed using Object.is. Invalid: Valid:"},{"url":"/lint/rules/no-cond-assign/","title":"no-cond-assign","text":"Disallows the use of the assignment operator, =, in conditional statements. Use of the assignment operator within a conditional statement is often the result of mistyping the equality operator, ==. If an assignment within a conditional statement is required then this rule allows it by wrapping the assignment in parentheses. Invalid: Valid:"},{"url":"/lint/rules/no-console/","title":"no-console","text":"Disallows the use of the console global. Oftentimes, developers accidentally commit console.log/console.error statements, left in particularly after debugging. Moreover, using these in code may leak sensitive information to the output or clutter the console with unnecessary information. This rule helps maintain clean and secure code by disallowing the use of console. This rule is especially useful in libraries where you almost never want to output to the console. Invalid: Valid: It is recommended to explicitly enable the console via a deno-lint-ignore comment for any calls where you actually want to use it."},{"url":"/lint/rules/no-const-assign/","title":"no-const-assign","text":"Disallows modifying a variable declared as const. Modifying a variable declared as const will result in a runtime error. Invalid: Valid:"},{"url":"/lint/rules/no-constant-condition/","title":"no-constant-condition","text":"Disallows the use of a constant expression in conditional test. Using a constant expression in a conditional test is often either a mistake or a temporary situation introduced during development and is not ready for production. Invalid: Valid:"},{"url":"/lint/rules/no-control-regex/","title":"no-control-regex","text":"Disallows the use ASCII control characters in regular expressions. Control characters are invisible characters in the ASCII range of 0-31. It is uncommon to use these in a regular expression and more often it is a mistake in the regular expression. Invalid: Valid:"},{"url":"/lint/rules/no-debugger/","title":"no-debugger","text":"Disallows the use of the debugger statement. debugger is a statement which is meant for stopping the javascript execution environment and start the debugger at the statement. Modern debuggers and tooling no longer need this statement and leaving it in can cause the execution of your code to stop in production. Invalid: Valid:"},{"url":"/lint/rules/no-delete-var/","title":"no-delete-var","text":"Disallows the deletion of variables. delete is used to remove a property from an object. Variables declared via var, let and const cannot be deleted (delete will return false). Setting strict mode on will raise a syntax error when attempting to delete a variable. Invalid: Valid:"},{"url":"/lint/rules/no-deprecated-deno-api/","title":"no-deprecated-deno-api","text":"Warns the usage of the deprecated - Ende APIs. The following APIs will be removed from the Ende.* namespace but have newer APIs to migrate to. See the Removed and deprecated APIs page for migration instructions. Ende.Buffer Ende.Closer Ende.close() Ende.Conn.rid Ende.copy() Ende.customInspect Ende.File Ende.fstatSync() Ende.fstat() Ende.FsWatcher.rid Ende.ftruncateSync() Ende.ftruncate() Ende.futimeSync() Ende.futime() Ende.isatty() Ende.Listener.rid Ende.ListenTlsOptions.certFile Ende.ListenTlsOptions.keyFile Ende.readAllSync() Ende.readAll() Ende.Reader Ende.ReaderSync Ende.readSync() Ende.read() Ende.run() Ende.seekSync() Ende.seek() Ende.serveHttp() Ende.Server Ende.shutdown Ende.stderr.rid Ende.stdin.rid Ende.stdout.rid Ende.TlsConn.rid Ende.UnixConn.rid Ende.writeAllSync() Ende.writeAll() Ende.Writer Ende.WriterSync Ende.writeSync() Ende.write() new Ende.FsFile() The following APIs will be removed from the Ende.* namespace without replacement. Ende.resources() Ende.metrics()"},{"url":"/lint/rules/no-dupe-args/","title":"no-dupe-args","text":"Disallows using an argument name more than once in a function signature. If you supply multiple arguments of the same name to a function, the last instance will shadow the preceding one(s). This is most likely an unintentional typo. Invalid: Valid:"},{"url":"/lint/rules/no-dupe-class-members/","title":"no-dupe-class-members","text":"Disallows using a class member function name more than once. Declaring a function of the same name twice in a class will cause the previous declaration(s) to be overwritten, causing unexpected behaviors. Invalid: Valid:"},{"url":"/lint/rules/no-dupe-else-if/","title":"no-dupe-else-if","text":"Disallows using the same condition twice in an if/else if statement. When you reuse a condition in an if/else if statement, the duplicate condition will never be reached (without unusual side-effects) meaning this is almost always a bug. Invalid: Valid:"},{"url":"/lint/rules/no-dupe-keys/","title":"no-dupe-keys","text":"Disallows duplicate keys in object literals. Setting the same key multiple times in an object literal will override other assignments to that key and can cause unexpected behaviour. Invalid: Valid:"},{"url":"/lint/rules/no-duplicate-case/","title":"no-duplicate-case","text":"Disallows using the same case clause in a switch statement more than once. When you reuse a case test expression in a switch statement, the duplicate case will never be reached meaning this is almost always a bug. Invalid: Valid:"},{"url":"/lint/rules/no-empty-character-class/","title":"no-empty-character-class","text":"Disallows using the empty character class in a regular expression. Regular expression character classes are a series of characters in brackets, e.g. [abc]. if nothing is supplied in the brackets it will not match anything which is likely a typo or mistake. Invalid: Valid:"},{"url":"/lint/rules/no-empty-enum/","title":"no-empty-enum","text":"Disallows the declaration of an empty enum. An enum with no members serves no purpose. This rule will capture these situations as either unnecessary code or a mistaken empty implementation. Invalid: Valid:"},{"url":"/lint/rules/no-empty-interface/","title":"no-empty-interface","text":"Disallows the declaration of an empty interface. An interface with no members serves no purpose. This rule will capture these situations as either unnecessary code or a mistaken empty implementation. Invalid: Valid:"},{"url":"/lint/rules/no-empty-pattern/","title":"no-empty-pattern","text":"Disallows the use of empty patterns in destructuring. In destructuring, it is possible to use empty patterns such as {} or [] which have no effect, most likely not what the author intended. Invalid: Valid:"},{"url":"/lint/rules/no-empty/","title":"no-empty","text":"Disallows the use of empty block statements. Empty block statements are legal but often represent that something was missed and can make code less readable. This rule ignores block statements that only contain comments. This rule also ignores empty constructors and function bodies (including arrow functions). Invalid: Valid:"},{"url":"/lint/rules/no-eval/","title":"no-eval","text":"Disallows the use of eval. eval is a potentially dangerous function which can open your code to a number of security vulnerabilities. In addition to being slow, eval is also often unnecessary with better solutions available. Invalid: Valid:"},{"url":"/lint/rules/no-ex-assign/","title":"no-ex-assign","text":"Disallows the reassignment of exception parameters. There is generally no good reason to reassign an exception parameter. Once reassigned the code from that point on has no reference to the error anymore. Invalid: Valid:"},{"url":"/lint/rules/no-explicit-any/","title":"no-explicit-any","text":"Disallows use of the any type. Use of the any type disables the type check system around that variable, defeating the purpose of Typescript which is to provide type safe code. Additionally, the use of any hinders code readability, since it is not immediately clear what type of value is being referenced. It is better to be explicit about all types. For a more type-safe alternative to any, use unknown if you are unable to choose a more specific type. Invalid: Valid:"},{"url":"/lint/rules/no-external-import/","title":"no-external-import","text":"Disallows the use of external imports. What's the motivation of this lint rule? This rule emits warnings if external modules are imported via URL. \"deps.ts\" and import maps are exception. Why is linted code considered bad? Importing external modules just works fine, but it will take time and effort when you want to upgrade those modules if they are imported in multiple places in your project. When should it be used? To avoid it you could use \"deps.ts convention\" or import maps, where you import all external modules and then re-export them or assign aliases to them. If you'd like to follow the \"deps.ts convention\" or use import maps. Invalid: Valid: you can refer to the explanation of this convention here https://docs.ende.sh/runtime/manual/basics/modules/#it-seems-unwieldy-to-import-urls-everywhere"},{"url":"/lint/rules/no-extra-boolean-cast/","title":"no-extra-boolean-cast","text":"Disallows unnecessary boolean casts. In certain contexts, such as if, while or for statements, expressions are automatically coerced into a boolean. Therefore, techniques such as double negation (!!foo) or casting (Boolean(foo)) are unnecessary and produce the same result as without the negation or casting. Invalid: Valid:"},{"url":"/lint/rules/no-extra-non-null-assertion/","title":"no-extra-non-null-assertion","text":"Disallows unnecessary non-null assertions. Non-null assertions are specified with an ! saying to the compiler that you know this value is not null. Specifying this operator more than once in a row, or in combination with the optional chaining operator (?) is confusing and unnecessary. Invalid: Valid:"},{"url":"/lint/rules/no-fallthrough/","title":"no-fallthrough","text":"Disallows the implicit fallthrough of case statements. Case statements without a break will execute their body and then fallthrough to the next case or default block and execute this block as well. While this is sometimes intentional, many times the developer has forgotten to add a break statement, intending only for a single case statement to be executed. This rule enforces that you either end each case statement with a break statement or an explicit comment that fallthrough was intentional. The fallthrough comment must contain one of fallthrough, falls through or fall through. Invalid: Valid:"},{"url":"/lint/rules/no-func-assign/","title":"no-func-assign","text":"Disallows the overwriting/reassignment of an existing function. Javascript allows for the reassignment of a function definition. This is generally a mistake on the developers part, or poor coding practice as code readability and maintainability will suffer. Invalid: Valid:"},{"url":"/lint/rules/no-global-assign/","title":"no-global-assign","text":"Disallows assignment to native Javascript objects. In Javascript, String and Object for example are native objects. Like any object, they can be reassigned, but it is almost never wise to do so as this can lead to unexpected results and difficult to track down bugs. Invalid:"},{"url":"/lint/rules/no-implicit-declare-namespace-export/","title":"no-implicit-declare-namespace-export","text":"Disallows the use of implicit exports in \"ambient\" namespaces. TypeScript implicitly export all members of an \"ambient\" namespaces, except whether a named export is present. Invalid: Valid:"},{"url":"/lint/rules/no-import-assertions/","title":"no-import-assertions","text":"Disallows the assert keyword for import attributes. ES import attributes (previously called import assertions) has been changed to use the with keyword. The old syntax using assert is still supported, but deprecated. Invalid: Valid:"},{"url":"/lint/rules/no-import-assign/","title":"no-import-assign","text":"Disallows reassignment of imported module bindings. ES module import bindings should be treated as read-only since modifying them during code execution will likely result in runtime errors. It also makes for poor code readability and difficult maintenance. Invalid: Valid:"},{"url":"/lint/rules/no-import-prefix/","title":"no-import-prefix","headings":[{"text":"Invalid:","slug":"invalid"},{"text":"Valid:","slug":"valid"}],"text":"Ensure that all dependencies are declared in either ende.json or package.json. This promotes better dependency management and makes it easier to track and update dependencies. It also helps Ende purge the lockfile when removing a dependency. With a corresponding entry in the ende.json or package.json file:"},{"url":"/lint/rules/no-inferrable-types/","title":"no-inferrable-types","text":"Disallows easily inferrable types. Variable initializations to JavaScript primitives (and null) are obvious in their type. Specifying their type can add additional verbosity to the code. For example, with const x: number = 5, specifying number is unnecessary as it is obvious that 5 is a number. Invalid: Valid:"},{"url":"/lint/rules/no-inner-declarations/","title":"no-inner-declarations","text":"Disallows variable or function definitions in nested blocks. Function declarations in nested blocks can lead to less readable code and potentially unexpected results due to compatibility issues in different JavaScript runtimes. This does not apply to named or anonymous functions which are valid in a nested block context. Variables declared with var in nested blocks can also lead to less readable code. Because these variables are hoisted to the module root, it is best to declare them there for clarity. Note that variables declared with let or const are block scoped and therefore this rule does not apply to them. Invalid: Valid:"},{"url":"/lint/rules/no-invalid-regexp/","title":"no-invalid-regexp","text":"Disallows specifying invalid regular expressions in RegExp constructors. Specifying an invalid regular expression literal will result in a SyntaxError at compile time, however specifying an invalid regular expression string in the RegExp constructor will only be discovered at runtime. Invalid: Valid:"},{"url":"/lint/rules/no-invalid-triple-slash-reference/","title":"no-invalid-triple-slash-reference","text":"Warns the wrong usage of triple-slash reference directives. Ende supports the triple-slash reference directives of types, path, lib, and no-default-lib. This lint rule checks if there is an invalid, badly-formed directive because it is most likely a mistake. Additionally, note that only the types directive is allowed in JavaScript files. This directive is useful for telling the TypeScript compiler the location of a type definition file that corresponds to a certain JavaScript file. However, even in the Ende manual of the versions prior to v1.10 (e.g. v1.9.2), there was a wrong statement describing that one should use the path directive in such cases. Actually, the types directive should be used. See the latest manual for more detail. So this rule also detects the usage of the directive other than types in JavaScript files and suggests replacing it with the types directive. Invalid: JavaScript TypeScript Valid: JavaScript TypeScript"},{"url":"/lint/rules/no-irregular-whitespace/","title":"no-irregular-whitespace","text":"Disallows the use of non-space or non-tab whitespace characters. Non-space or non-tab whitespace characters can be very difficult to spot in your code as editors will often render them invisibly. These invisible characters can cause issues or unexpected behaviors. Sometimes these characters are added inadvertently through copy/paste or incorrect keyboard shortcuts. The following characters are disallowed: To fix this linting issue, replace instances of the above with regular spaces, tabs or new lines. If it's not obvious where the offending character(s) are try retyping the line from scratch."},{"url":"/lint/rules/no-misused-new/","title":"no-misused-new","text":"Disallows defining constructors for interfaces or new for classes Specifying a constructor for an interface or defining a new method for a class is incorrect and should be avoided. Invalid: Valid:"},{"url":"/lint/rules/no-namespace/","title":"no-namespace","text":"Disallows the use of namespace and module keywords in TypeScript code. namespace and module are both thought of as outdated keywords to organize the code. Instead, it is generally preferable to use ES2015 module syntax (e.g. import/export). However, this rule still allows the use of these keywords in the following two cases: they are used for defining \"ambient\" namespaces along with declare keywords they are written in TypeScript's type definition files: .d.ts Invalid: Valid:"},{"url":"/lint/rules/no-new-symbol/","title":"no-new-symbol","text":"Disallows the use of new operators with built-in Symbols. Symbols are created by being called as a function, but we sometimes call it with the new operator by mistake. This rule detects such wrong usage of the new operator. Invalid: Valid:"},{"url":"/lint/rules/no-node-globals/","title":"no-node-globals","text":"Disallows the use of NodeJS global objects. NodeJS exposes a set of global objects that differs from ende (and the web), so code should not assume they are available. Instead, import the objects from their defining modules as needed. This rule is off by default . To opt in, add it to your ende.json: Invalid: Valid:"},{"url":"/lint/rules/no-non-null-asserted-optional-chain/","title":"no-non-null-asserted-optional-chain","text":"Disallow non-null assertions after an optional chain expression. ?. optional chain expressions provide undefined if an object is null or undefined. Using a ! non-null assertion to assert the result of an ?. optional chain expression is non-nullable is likely wrong. Invalid: Valid:"},{"url":"/lint/rules/no-non-null-assertion/","title":"no-non-null-assertion","text":"Disallow non-null assertions using the ! postfix operator. TypeScript's ! non-null assertion operator asserts to the type system that an expression is non-nullable, as in not null or undefined. Using assertions to tell the type system new information is often a sign that code is not fully type-safe. It's generally better to structure program logic so that TypeScript understands when values may be nullable. Invalid: Valid:"},{"url":"/lint/rules/no-obj-calls/","title":"no-obj-calls","text":"Disallows calling built-in global objects like functions. The following built-in objects should not be invoked like functions, even though they look like constructors: Math JSON Reflect Atomics Calling these as functions would result in runtime errors. This rule statically prevents such wrong usage of them. Invalid: Valid:"},{"url":"/lint/rules/no-octal/","title":"no-octal","text":"Disallows expressing octal numbers via numeric literals beginning with 0. Octal numbers can be expressed via numeric literals with leading 0 like 042, but this expression often confuses programmers. That's why ECMAScript's strict mode throws SyntaxError for the expression. Since ES2015, the other prefix 0o has been introduced as an alternative. This new one is always encouraged to use in today's code. Invalid: Valid:"},{"url":"/lint/rules/no-process-global/","title":"no-process-global","text":"Disallows the use of NodeJS process global. NodeJS and Ende expose process global but they are hard to statically analyze by tools, so code should not assume they are available. Instead, import process from \"node:process\". This rule is off by default . To opt in, add it to your ende.json: Invalid: Valid:"},{"url":"/lint/rules/no-prototype-builtins/","title":"no-prototype-builtins","text":"Disallows the use of Object.prototype builtins directly. If objects are created via Object.create(null) they have no prototype specified. This can lead to runtime errors when you assume objects have properties from Object.prototype and attempt to call the following methods: hasOwnProperty isPrototypeOf propertyIsEnumerable Instead, it's always encouraged to call these methods from Object.prototype explicitly. Invalid: Valid:"},{"url":"/lint/rules/no-redeclare/","title":"no-redeclare","text":"Disallows redeclaration of variables, functions, parameters with the same name. JavaScript allows us to redeclare variables with the same name using var, but redeclaration should not be used since it can make variables hard to trace. In addition, this lint rule disallows redeclaration using let or const as well, although ESLint allows. This is useful because we can notice a syntax error before actually running the code. As for functions and parameters, JavaScript just treats these as runtime errors, throwing SyntaxError when being run. It's also beneficial to detect this sort of errors statically. Invalid: Valid:"},{"url":"/lint/rules/no-regex-spaces/","title":"no-regex-spaces","text":"Disallows multiple spaces in regular expression literals. Multiple spaces in regular expression literals are generally hard to read when the regex gets complicated. Instead, it's better to use only one space character and specify how many times spaces should appear with the {n} syntax, for example: Invalid: Valid:"},{"url":"/lint/rules/no-self-assign/","title":"no-self-assign","text":"Disallows self assignments. Self assignments like a = a; have no effect at all. If there are self assignments in the code, most likely it means that the author is still in the process of refactoring and there's remaining work they have to do. Invalid: Valid:"},{"url":"/lint/rules/no-self-compare/","title":"no-self-compare","text":"Disallows comparisons where both sides are exactly the same. Comparing a variable or value against itself is usually an error, either a typo or refactoring error. It is confusing to the reader and may potentially introduce a runtime error. Invalid: Valid:"},{"url":"/lint/rules/no-setter-return/","title":"no-setter-return","text":"Disallows returning values from setters. Setters are supposed to be used for setting some value to the property, which means that returning a value from a setter makes no sense. In fact, returned values are ignored and cannot ever be used at all although returning a value from a setter produces no error. This is why static check for this mistake by the linter is quite beneficial. Note that returning without a value is allowed; this is a useful technique to do early-return from a function. Invalid: Valid:"},{"url":"/lint/rules/no-shadow-restricted-names/","title":"no-shadow-restricted-names","text":"Disallows shadowing of restricted names. The following (a) properties of the global object, or (b) identifiers are \"restricted\" names in JavaScript: NaN Infinity undefined eval arguments These names are NOT reserved in JavaScript, which means that nothing prevents one from assigning other values into them (i.e. shadowing). In other words, you are allowed to use, say, undefined as an identifier or variable name. (For more details see MDN) Of course, shadowing like this most likely confuse other developers and should be avoided. This lint rule detects and warn them. Invalid: Valid:"},{"url":"/lint/rules/no-sloppy-imports/","title":"no-sloppy-imports","headings":[{"text":"Invalid:","slug":"invalid"},{"text":"Valid:","slug":"valid"}],"text":"Enforces specifying explicit references to paths in module specifiers. Non-explicit specifiers are ambiguous and require probing for the correct file path on every run, which has a performance overhead. Note: This lint rule is only active when using --unstable-sloppy-imports."},{"url":"/lint/rules/no-slow-types/","title":"no-slow-types","text":"Enforces using types that are explicit or can be simply inferred. Read more: https://jsr.io/docs/about-slow-types"},{"url":"/lint/rules/no-sparse-arrays/","title":"no-sparse-arrays","text":"Disallows sparse arrays. Sparse arrays are arrays that contain empty slots, which later could be handled either as undefined value or skipped by array methods, and this may lead to unexpected behavior: Invalid: Valid:"},{"url":"/lint/rules/no-sync-fn-in-async-fn/","title":"no-sync-fn-in-async-fn","text":"Disallow sync function inside async function. Using sync functions like Ende.readTextFileSync blocks the ende event loop so it's not recommended to use it inside of an async function, because it stops progress of all other async tasks. Invalid: Valid:"},{"url":"/lint/rules/no-this-alias/","title":"no-this-alias","text":"Disallows assigning variables to this. In most cases, storing a reference to this in a variable could be avoided by using arrow functions properly, since they establish this based on the scope where the arrow function is defined. Let's take a look at a concrete example: In the above example, this in the function passed to setTimeout evaluates to globalThis, which results in the expected value 1 not being printed. If you wanted to work around it without arrow functions, you would store a reference to this in another variable: But in this case arrow functions come in handy. With arrow functions, the code becomes way clearer and easier to understand: This example is taken from MDN. Invalid: Valid:"},{"url":"/lint/rules/no-this-before-super/","title":"no-this-before-super","text":"Disallows use of this or super before calling super() in constructors. The access to this or super before calling super() in the constructor of derived classes leads to ReferenceError. To prevent it, this lint rule checks if there are accesses to this or super before calling super() in constructors. Invalid: Valid:"},{"url":"/lint/rules/no-throw-literal/","title":"no-throw-literal","text":"Disallow throwing literals as exceptions. It is considered good practice to only throw the Error object itself or an object using the Error object as base objects for user-defined exceptions. The fundamental benefit of Error objects is that they automatically keep track of where they were built and originated. Invalid: Valid:"},{"url":"/lint/rules/no-top-level-await/","title":"no-top-level-await","text":"Disallows the use of top level await expressions. Top level await cannot be used when distributing CommonJS/UMD via dnt. Invalid: Valid:"},{"url":"/lint/rules/no-undef/","title":"no-undef","text":"Disallow the use of undeclared variables. Invalid:"},{"url":"/lint/rules/no-unreachable/","title":"no-unreachable","text":"Disallows the unreachable code after the control flow statements. Because the control flow statements (return, throw, break and continue) unconditionally exit a block of code, any statements after them cannot be executed. Invalid: Valid:"},{"url":"/lint/rules/no-unsafe-finally/","title":"no-unsafe-finally","text":"Disallows the use of control flow statements within finally blocks. Use of the control flow statements (return, throw, break and continue) overrides the usage of any control flow statements that might have been used in the try or catch blocks, which is usually not the desired behaviour. Invalid: Valid:"},{"url":"/lint/rules/no-unsafe-negation/","title":"no-unsafe-negation","text":"Disallows the usage of negation operator ! as the left operand of relational operators. ! operators appearing in the left operand of the following operators will sometimes cause an unexpected behavior because of the operator precedence: in operator instanceof operator For example, when developers write a code like !key in someObject, most likely they want it to behave just like !(key in someObject), but actually it behaves like (!key) in someObject. This lint rule warns such usage of ! operator so it will be less confusing. Invalid: Valid:"},{"url":"/lint/rules/no-unused-labels/","title":"no-unused-labels","text":"Disallows unused labels. A label that is declared but never used is most likely developer's mistake. If that label is meant to be used, then write a code so that it will be used. Otherwise, remove the label. Invalid: Valid:"},{"url":"/lint/rules/no-unused-vars/","title":"no-unused-vars","text":"Enforces all variables are used at least once. If there are variables that are declared but not used anywhere, it's most likely because of incomplete refactoring. This lint rule detects and warns such unused variables. Variable a is considered to be \"used\" if any of the following conditions are satisfied: its value is read out, like console.log(a) or let otherVariable = a; it's called or constructed, like a() or new a() it's exported, like export const a = 42; If a variable is just assigned to a value but never read out, then it's considered to be \"not used\". If you want to declare unused variables intentionally, prefix them with the underscore character _, like _a. This rule ignores variables that are prefixed with _. Invalid: Valid:"},{"url":"/lint/rules/no-unversioned-import/","title":"no-unversioned-import","headings":[{"text":"Invalid:","slug":"invalid"},{"text":"Valid:","slug":"valid"}],"text":"Ensure that inline dependency imports have a version specifier."},{"url":"/lint/rules/no-useless-rename/","title":"no-useless-rename","text":"Disallow useless rename operations where both the original and new name are exactly the same. This is often a leftover from a refactoring procedure and can be safely removed. Invalid: Valid:"},{"url":"/lint/rules/no-var/","title":"no-var","text":"Enforces the use of block scoped variables over more error prone function scoped variables. Block scoped variables are defined using const and let keywords. const and let keywords ensure the variables defined using these keywords are not accessible outside their block scope. On the other hand, variables defined using var keyword are only limited by their function scope. Invalid: Valid:"},{"url":"/lint/rules/no-window-prefix/","title":"no-window-prefix","text":"Disallows the use of Web APIs via the window object. In most situations, the global variable window works like globalThis. For example, you could call the fetch API like window.fetch(..) instead of fetch(..) or globalThis.fetch(..). In Web Workers, however, window is not available, but instead self, globalThis, or no prefix work fine. Therefore, for compatibility between Web Workers and other contexts, it's highly recommended to not access global properties via window. Some APIs, including window.alert, window.location and window.history, are allowed to call with window because these APIs are not supported or have different meanings in Workers. In other words, this lint rule complains about the use of window only if it's completely replaceable with self, globalThis, or no prefix. Invalid: Valid:"},{"url":"/lint/rules/no-window/","title":"no-window","text":"Disallows the use of the window object. The window global is no longer available in Ende. Ende does not have a window and typeof window === \"undefined\" is often used to tell if the code is running in the browser. Invalid: Valid:"},{"url":"/lint/rules/no-with/","title":"no-with","text":"Disallows the usage of with statements. The with statement is discouraged as it may be the source of confusing bugs and compatibility issues. For more details, see with - JavaScript | MDN. Invalid:"},{"url":"/lint/rules/prefer-as-const/","title":"prefer-as-const","text":"Recommends using const assertion (as const) over explicitly specifying literal types or using type assertion. When declaring a new variable of a primitive literal type, there are three ways: adding an explicit type annotation using normal type assertion (like as \"foo\", or <\"foo\">) using const assertion (as const) This lint rule suggests using const assertion because it will generally lead to a safer code. For more details about const assertion, see the official handbook. Invalid: Valid:"},{"url":"/lint/rules/prefer-ascii/","title":"prefer-ascii","text":"Ensures that the code is fully written in ASCII characters. V8, the JavaScript engine Ende relies on, provides a method that strings get populated outside V8's heap. In particular, if they are composed of one-byte characters only, V8 can handle them much more efficiently through v8::String::ExternalOneByteStringResource. In order to leverage this V8 feature in the internal of Ende, this rule checks if all characters in the code are ASCII. That said, you can also make use of this lint rule for something other than Ende's internal JavaScript code. If you want to make sure your codebase is made up of ASCII characters only (e.g. want to disallow non-ASCII identifiers) for some reasons, then this rule will be helpful. Invalid: Valid:"},{"url":"/lint/rules/prefer-const/","title":"prefer-const","text":"Recommends declaring variables with const over let. Since ES2015, JavaScript supports let and const for declaring variables. If variables are declared with let, then they become mutable; we can set other values to them afterwards. Meanwhile, if declared with const, they are immutable; we cannot perform re-assignment to them. In general, to make the codebase more robust, maintainable, and readable, it is highly recommended to use const instead of let wherever possible. The fewer mutable variables are, the easier it should be to keep track of the variable states while reading through the code, and thus it is less likely to write buggy code. So this lint rule checks if there are let variables that could potentially be declared with const instead. Note that this rule does not check for var variables. Instead, the no-var rule is responsible for detecting and warning var variables. Invalid: Valid:"},{"url":"/lint/rules/prefer-namespace-keyword/","title":"prefer-namespace-keyword","text":"Recommends the use of namespace keyword over module keyword when declaring TypeScript module. TypeScript supports the module keyword for organizing code, but this wording can lead to a confusion with the ECMAScript's module. Since TypeScript v1.5, it has provided us with the alternative keyword namespace, encouraging us to always use namespace instead whenever we write TypeScript these days. See TypeScript v1.5 release note for more details. Invalid: Valid:"},{"url":"/lint/rules/prefer-primordials/","title":"prefer-primordials","text":"Suggests using frozen intrinsics from primordials rather than the default globals. This lint rule is designed to be dedicated to Ende's internal code. Normal users don't have to run this rule for their code. Primordials are a frozen set of all intrinsic objects in the runtime, which we should use in the Ende's internal to avoid the risk of prototype pollution. This rule detects the direct use of global intrinsics and suggests replacing it with the corresponding one from the primordials object. One such example is: The second line of this example should be: Invalid: Valid:"},{"url":"/lint/rules/react-no-danger-with-children/","title":"react-no-danger-with-children","text":"Using JSX children together with dangerouslySetInnerHTML is invalid as they will be ignored. Invalid: Valid:"},{"url":"/lint/rules/react-no-danger/","title":"react-no-danger","text":"Prevent the use of dangerouslySetInnerHTML which can lead to XSS vulnerabilities if used incorrectly. Invalid: Valid:"},{"url":"/lint/rules/react-rules-of-hooks/","title":"react-rules-of-hooks","text":"Ensure that hooks are called correctly in React/Preact components. They must be called at the top level of a component and not inside a conditional statement or a loop. Invalid: Valid:"},{"url":"/lint/rules/require-await/","title":"require-await","text":"Disallows async functions that have no await expression or await using declaration. In general, the primary reason to use async functions is to use await expressions or await using declarations inside. If an async function has neither, it is most likely an unintentional mistake. Invalid: Valid:"},{"url":"/lint/rules/require-yield/","title":"require-yield","text":"Disallows generator functions that have no yield. JavaScript provides generator functions expressed as function*, where we can pause and later resume the function execution at the middle points. At these points we use the yield keyword. In other words, it makes no sense at all to create generator functions that contain no yield keyword, since such functions could be written as normal functions. Invalid: Valid:"},{"url":"/lint/rules/single-var-declarator/","title":"single-var-declarator","text":"Disallows multiple variable definitions in the same declaration statement. Invalid: Valid:"},{"url":"/lint/rules/triple-slash-reference/","title":"triple-slash-reference","text":"Disallow certain triple slash directives in favor of ES6-style import declarations. TypeScript's /// triple-slash references are a way to indicate that types from another module are available in a file. Use of triple-slash reference type directives is generally discouraged in favor of ECMAScript Module imports. This rule reports on the use of /// <reference path=\"...\" />, /// <reference types=\"...\" />, or /// <reference lib=\"...\" /> directives. Invalid: Valid:"},{"url":"/lint/rules/use-isnan/","title":"use-isnan","text":"Disallows comparisons to NaN. Because NaN is unique in JavaScript by not being equal to anything, including itself, the results of comparisons to NaN are confusing: NaN === NaN or NaN == NaN evaluate to false NaN !== NaN or NaN != NaN evaluate to true Therefore, this rule makes you use the isNaN() or Number.isNaN() to judge the value is NaN or not. Invalid: Valid:"},{"url":"/lint/rules/valid-typeof/","title":"valid-typeof","text":"Restricts the use of the typeof operator to a specific set of string literals. When used with a value the typeof operator returns one of the following strings: \"undefined\" \"object\" \"boolean\" \"number\" \"string\" \"function\" \"symbol\" \"bigint\" This rule disallows comparison with anything other than one of these string literals when using the typeof operator, as this likely represents a typing mistake in the string. The rule also disallows comparing the result of a typeof operation with any non-string literal value, such as undefined, which can represent an inadvertent use of a keyword instead of a string. This includes comparing against string variables even if they contain one of the above values as this cannot be guaranteed. An exception to this is comparing the results of two typeof operations as these are both guaranteed to return on of the above strings. Invalid: Valid:"},{"url":"/lint/rules/verbatim-module-syntax/","title":"verbatim-module-syntax","text":"Enforces type imports to be declared as type imports. This rule ensures that the code works when the verbatimModuleSyntax TypeScript compiler option is enabled. This is useful in libraries distributing TypeScript code in order to work in more scenarios. Invalid: Valid:"},{"url":"/runtime/","title":"Get started with Ende","description":"Install Ende and build your first project: why Ende, install, create, run, test, add a dependency, and use the built-in toolchain. No build step, no config.","headings":[{"text":"Why Ende?","slug":"why-ende"},{"text":"Install Ende","slug":"install-ende"},{"text":"Create a project","slug":"create-a-project"},{"text":"Run it","slug":"run-it"},{"text":"Test it","slug":"test-it"},{"text":"Add a dependency","slug":"add-a-dependency"},{"text":"Use the built-in toolchain","slug":"use-the-built-in-toolchain"},{"text":"Next steps","slug":"next-steps"}],"text":"Ende (/ˈɛndə/, pronounced en-duh) is an open source JavaScript, TypeScript, and WebAssembly runtime with secure defaults and a great developer experience. It is a fork of Deno, and the Deno global remains available as an alias of Ende. This page takes you from nothing to a running, tested project in a few minutes. Modern module system. ES modules with URL imports, JSR for typed packages, and workspaces. TypeScript-first. Run .ts files directly. No tsc, no build step, no config. Secure by default. Code runs in a sandbox with no file, network, or environment access until you grant it. A full toolchain, no plumbing. Built-in formatter, linter, test runner, benchmarking, and a lot more. No devDependencies to wire up. Install the runtime with one command: Verify the install: See Installation for package managers, Docker, and other options. Scaffold a new project with ende init: That creates a small, ready-to-run project: ende.json is where your tasks, dependencies, and tooling config live, in one file. Notice the -N (short for --allow-net). Ende is secure by default: code can't touch the network, filesystem, or environment until you grant it. Open the URL to see the response. main.ts is TypeScript and it ran directly: no tsc, no build step. It's also built on the web-standard Ende.serve with Request/Response, so what you learn here is the platform, not a framework. The project ships with tests. Run them with ende test. The test runner is built in, so there's nothing to install: Pull in packages from JSR with ende install: Then import and use them: Formatting, linting, and more come with the runtime, no setup needed: Set up your editor. Autocomplete, inline errors, and formatting on save. Run code. Servers, tasks, web APIs, and debugging. Manage packages. Dependencies, workspaces, publishing. Examples and tutorials. Ideas for what to build next."},{"url":"/runtime/cli_apps/","title":"Build CLI apps","description":"Build command-line tools with Ende: read arguments and stdin, prompt the user, set exit codes, compile to a single self-contained executable, and distribute your tool.","headings":[{"text":"Read command-line arguments","slug":"read-command-line-arguments"},{"text":"Read from stdin and detect a TTY","slug":"read-from-stdin-and-detect-a-tty"},{"text":"Prompt the user","slug":"prompt-the-user"},{"text":"Exit with the right code","slug":"exit-with-the-right-code"},{"text":"Compile to a single executable","slug":"compile-to-a-single-executable"},{"text":"Embed assets in the binary","slug":"embed-assets-in-the-binary"},{"text":"Cross-compile for other platforms","slug":"cross-compile-for-other-platforms"},{"text":"Install a tool from source","slug":"install-a-tool-from-source"},{"text":"Going further","slug":"going-further"}],"text":"Ende is a great way to ship command-line tools. Your tool is just TypeScript, so there's no build step to run it. When you're ready to distribute it, ende compile turns it into a single self-contained executable that runs without Ende installed. Raw arguments are available on Ende.args. For real tools, parse them with @ende/cli, which handles flags, options, and defaults: Good CLI tools compose with pipes. Ende.stdin exposes standard input as a web-standard ReadableStream, so the easiest way to read all piped input as text is to wrap it in a Response: When your tool can be used both ways, use Ende.stdin.isTerminal() to tell whether stdin is an interactive terminal or a pipe, and branch accordingly. This is also how tools decide whether to print colors and progress bars (interactive) or plain machine-readable output (piped). Here the tool falls back to asking the user when nothing is piped in: Reading stdin requires no permission flags. For simple interactive input, Ende ships the browser globals prompt(), confirm(), and alert(). They block until the user responds (execution pauses at that line and nothing else runs until input arrives), and they need no imports or permissions: For anything fancier, reach for @ende/cli. Besides argument parsing, it includes spinners, progress bars, and select prompts. These live in modules prefixed with unstable-, so their APIs may still change. The Spinner class shows an animated status line while your tool works: Shells, scripts, and CI systems rely on your tool's exit code: zero means success, anything else means failure. Ende.exit() terminates the process immediately with the given code: Because Ende.exit() stops the process on the spot, pending work like flushing logs or finally blocks never runs. When you want to record a failure but keep going, set Ende.exitCode instead. The process continues, finishes naturally, and then exits with the code you set. This is the right pattern for linters and batch tools that should report"},{"url":"/runtime/contributing/","title":"Contributing and support","description":"Guide to contributing to the Ende project and ecosystem. Learn about different Ende repositories, contribution guidelines, and how to submit effective pull requests.","headings":[{"text":"Projects","slug":"projects"},{"text":"ende","slug":"ende"},{"text":"std","slug":"std"},{"text":"satz","slug":"satz"},{"text":"docs","slug":"docs"},{"text":"General remarks","slug":"general-remarks"},{"text":"Submitting a pull request","slug":"submitting-a-pull-request"},{"text":"Documenting APIs","slug":"documenting-apis"},{"text":"JavaScript and TypeScript","slug":"javascript-and-typescript"},{"text":"Rust","slug":"rust"},{"text":"Profiling","slug":"profiling"},{"text":"Using Samply","slug":"using-samply"}],"text":"We welcome and appreciate all contributions to Ende. This page serves as a helper to get you started on contributing. Ende is developed in a few repositories under the theende organization: This is the main repository that provides the ende CLI. Languages: Rust, JavaScript, TypeScript The standard library for Ende, published as @ende/* on JSR. Languages: TypeScript, WebAssembly The static site generator this documentation is built with. Languages: TypeScript, TSX This documentation. Languages: Markdown, TypeScript Ende also builds on libraries from the denoland organization, such as rusty_v8 and deno_lint. Read the style guide. Please don't make the benchmarks worse. Ask for help in the community chat room. If you are going to work on an issue, mention so in the issue's comments before you start working on the issue. If you are going to work on a new feature, create an issue and discuss with other contributors before you start working on the feature; we appreciate all contributions but not all proposed features will be accepted. We don't want you to spend hours working on code that might not be accepted. Please be professional in the forums. We follow Rust's code of conduct (CoC). Have a problem? Email ry@tinyclouds.org. Before submitting a PR to any of the repos, please make sure the following is done: Give the PR a descriptive title. Examples of good PR title: fix(std/http): fix race condition in server docs(console): update docstrings feat(doc): handle nested re-exports Examples of bad PR title: fix #7123 update docs fix bugs Ensure there is a related issue and that it is referenced in the PR text. Ensure there are tests that cover the changes. It is important to document all public APIs and we want to do that inline with the code. This helps ensure that code and documentation are tightly coupled together. All publicly exposed APIs and types, both via the ende module as well as the global/window namespace should have JSDoc documentation. This documentation is"},{"url":"/runtime/contributing/architecture/","title":"Architecture Overview","description":"Deep dive into Ende's internal architecture, explaining core components like the runtime, compiler, and security sandbox. Learn how Ende processes requests and executes JavaScript/TypeScript code.","headings":[{"text":"Ende and Linux analogy","slug":"ende-and-linux-analogy"},{"text":"Resources","slug":"resources"},{"text":"Metrics","slug":"metrics"},{"text":"Conference","slug":"conference"}],"text":"Linux Ende Processes Web Workers Syscalls Ops File descriptors (fd) Resource ids (rid) Scheduler Tokio Userland: libc++ / glib / boost https://jsr.io/@std /proc/$$/stat Ende.metrics() man pages ende types / https://docs.ende.sh Resources (AKA rid) are Ende's version of file descriptors. They are integer values used to refer to open files, sockets, and other concepts. For testing it would be good to be able to query the system for how many open resources there are. Metrics is Ende's internal counter for various statistics. Ryan Dahl. (May 27, 2020). An interesting case with Ende. Ende Israel. Bartek Iwańczuk. (Oct 6, 2020). Ende internals - how modern JS/TS runtime is built. Paris Ende."},{"url":"/runtime/contributing/release_schedule/","title":"Release Schedule","description":"How Ende is released: ChronVer versions, GitHub releases, and upgrading.","text":"Ende is versioned with ChronVer: each release is named after the day it's cut, such as 2026.10.17. There is no fixed schedule; releases ship when there is something to release. Releases can be found on the GitHub releases page, and https://dl.ende.sh/release-latest.txt names the newest one. Upgrade with ende upgrade, or install a specific release with ende upgrade <version>."},{"url":"/runtime/contributing/style_guide/","title":"Ende Style Guide","description":"Comprehensive style guide for contributing to Ende's internal runtime code and standard library. Covers coding conventions, documentation standards, testing requirements, and best practices for TypeScript and Rust development.","headings":[{"text":"Copyright Headers","slug":"copyright-headers"},{"text":"Use underscores, not dashes in filenames","slug":"use-underscores-not-dashes-in-filenames"},{"text":"Add tests for new features","slug":"add-tests-for-new-features"},{"text":"TODO Comments","slug":"todo-comments"},{"text":"Meta-programming is discouraged. Including the use of Proxy","slug":"meta-programming-is-discouraged-including-the-use-of-proxy"},{"text":"Inclusive code","slug":"inclusive-code"},{"text":"Rust","slug":"rust"},{"text":"TypeScript","slug":"typescript"},{"text":"Use TypeScript instead of JavaScript","slug":"use-typescript-instead-of-javascript"},{"text":"Do not use the filename index.ts/index.js","slug":"do-not-use-the-filename-indextsindexjs"},{"text":"Exported functions: max 2 args, put the rest into an options object","slug":"exported-functions-max-2-args-put-the-rest-into-an-options-object"},{"text":"Export all interfaces that are used as parameters to an exported member","slug":"export-all-interfaces-that-are-used-as-parameters-to-an-exported-member"},{"text":"Minimize dependencies; do not make circular imports","slug":"minimize-dependencies-do-not-make-circular-imports"},{"text":"If a filename starts with an underscore: _foo.ts, do not link to it","slug":"if-a-filename-starts-with-an-underscore-_foots-do-not-link-to-it"},{"text":"Use JSDoc for exported symbols","slug":"use-jsdoc-for-exported-symbols"},{"text":"Resolve linting problems using directives","slug":"resolve-linting-problems-using-directives"},{"text":"Each module should come with a test module","slug":"each-module-should-come-with-a-test-module"},{"text":"Unit Tests should be explicit","slug":"unit-tests-should-be-explicit"},{"text":"Top-level functions should not use arrow syntax","slug":"top-level-functions-should-not-use-arrow-syntax"},{"text":"Error Messages","slug":"error-messages"},{"text":"std","slug":"std"},{"text":"Do not depend on external code.","slug":"do-not-depend-on-external-code"},{"text":"Document and maintain browser compatibility.","slug":"document-and-maintain-browser-compatibility"},{"text":"Prefer # over private keyword","slug":"prefer--over-private-keyword"},{"text":"Naming convention","slug":"naming-convention"}],"text":"Note that this is the style guide for internal runtime code in the Ende runtime, and in the Ende Standard Library. This is not meant as a general style guide for users of Ende. Most modules in the repository should have the following copyright header: If the code originates elsewhere, ensure that the file has the proper copyright headers. We only allow MIT, BSD, and Apache licensed code. Example: Use file_server.ts instead of file-server.ts. Each module should contain or be accompanied by tests for its public functionality. TODO comments should usually include an issue or the author's github username in parentheses. Example: Be explicit, even when it means more code. There are some situations where it may make sense to use such techniques, but in the vast majority of cases it does not. Please follow the guidelines for inclusive code outlined at https://chromium.googlesource.com/chromium/src/+/HEAD/styleguide/inclusive_code.md. Follow Rust conventions and be consistent with existing code. The TypeScript portion of the code base is the standard library std. Ende does not treat \"index.js\" or \"index.ts\" in a special way. By using these filenames, it suggests that they can be left out of the module specifier when they cannot. This is confusing. If a directory of code needs a default entry point, use the filename mod.ts. The filename mod.ts follows Rust's convention, is shorter than index.ts, and doesn't come with any preconceived notions about how it might work. When designing function interfaces, stick to the following rules. A function that is part of the public API takes 0-2 required arguments, plus (if necessary) an options object (so max 3 total). Optional parameters should generally go into the options object. An optional parameter that's not in an options object might be acceptable if there is only one, and it seems inconceivable that we would add more optional parameters in the future. The 'options' argument is the only argument that is a regular 'Object'. Other"},{"url":"/runtime/deploy/","title":"Deploying your app","description":"Ways to run an Ende app in production: a standalone compiled binary, the runtime on your own host, and containers.","headings":[{"text":"Choosing an option","slug":"choosing-an-option"},{"text":"Self-hosting the runtime","slug":"self-hosting-the-runtime"},{"text":"Containers","slug":"containers"},{"text":"Production considerations","slug":"production-considerations"}],"text":"Once your app runs locally, you run it in production on infrastructure you control. This page maps the options. Want a single self-contained artifact with no runtime to install? Compile to a standalone binary and run it on any machine. Already have container infrastructure? Build a container image that installs Ende. To run on a VM or bare metal yourself, you have two paths: Compile a standalone binary with ende compile. The result bundles your code and the runtime into a single executable with no external dependencies, which you can copy to a server and run directly. Install Ende on the host and run your app with ende serve for a production-ready HTTP server, typically behind a process manager such as systemd. Ende doesn't publish container images yet. Install it in your image with the install script, or copy in a binary compiled with ende compile: Whichever option you choose, a few things carry across: Permissions. Grant only the access your app needs (--allow-net, --allow-read, and friends) rather than running with all permissions. Environment variables. Configure secrets and per-environment settings through the environment rather than hard-coding them. Observability. Ende has built-in OpenTelemetry support for traces, metrics, and logs. Continuous integration. Run tests, linting, and formatting checks before you deploy."},{"url":"/runtime/desktop/","title":"Desktop apps","description":"Build self-contained desktop applications from an Ende project, with framework auto-detection, hot reload, native windowing, auto-update, and cross-platform distribution.","headings":[{"text":"Why ende desktop","slug":"why-ende-desktop"},{"text":"Hello, desktop","slug":"hello-desktop"},{"text":"A complete example","slug":"a-complete-example"},{"text":"What's in this section","slug":"whats-in-this-section"}],"text":"ende desktop turns an Ende project (anything from a single TypeScript file to a full web app) into a self-contained desktop application. The output is a redistributable binary that bundles your code, the Ende runtime, and a web rendering engine into one bundle per platform. Web technology is the most widely-known UI toolkit in the world. Desktop apps built on web stacks (Electron, Tauri, Electrobun) take advantage of that, but each has tradeoffs you have to live with: huge binaries, missing platform support, no JavaScript ecosystem, no built-in update story, no framework integration. ende desktop is opinionated about those tradeoffs: Small by default. The default WebView backend uses the operating system's own webview for small binaries. Opt into the bundled Chromium (CEF) backend when you need identical rendering across macOS, Windows, and Linux. In-process bindings instead of IPC. Backend and UI communication goes through in-process channels, not socket-based IPC. Values are still encoded as they cross the call boundary, but there is no cross-process round-trip between your Ende code and the webview. Cross-compile from one machine. The same machine can build for macOS, Windows, and Linux. Backends are downloaded as needed, not built locally. Built-in binary-diff auto-update. Ship a single latest.json manifest and bsdiff patches; the runtime polls, applies, and rolls back automatically on failed launches. Create a one-file desktop app: The compiled binary opens a window pointed at a local HTTP server bound to your Ende.serve() handler. Run it directly: Ende.serve() automatically binds to the address the webview navigates to, so you do not need to pass a port or hostname. See HTTP serving for details. For a complete, real-world app built with ende desktop, see denidian: an Obsidian-style note-taking app with Markdown notes, [[wikilink]] crosslinking, and a force-directed graph view. It is deliberately small — a single Ende HTTP server plus a vanilla HTML/CSS/JS"},{"url":"/runtime/desktop/auto_update/","title":"Auto-update","description":"Ship binary-diff updates to ende desktop apps with Ende.autoUpdate(): bsdiff patches, manifest polling, automatic rollback on failed launch.","headings":[{"text":"Prerequisites","slug":"prerequisites"},{"text":"Calling autoUpdate()","slug":"calling-autoupdate"},{"text":"Manifest format","slug":"manifest-format"},{"text":"Signed manifests","slug":"signed-manifests"},{"text":"Update flow","slug":"update-flow"},{"text":"Rollback on failed launch","slug":"rollback-on-failed-launch"},{"text":"Generating patches","slug":"generating-patches"},{"text":"Best practices","slug":"best-practices"}],"text":"Ende.autoUpdate() polls a release server for new versions, downloads binary-diff patches, applies them to the runtime dylib, and stages the result for the next launch. If the next launch fails, the runtime rolls back to the previous version automatically. Updates ship as small bsdiff patches instead of full binary downloads, with rollback baked into the launcher. Applying staged updates and rolling back on a failed launch currently run on macOS and Linux only. On Windows, patches are still downloaded and staged, but the launcher does not yet swap them in (a loaded DLL can't be replaced in place), so updates do not take effect. Treat Windows auto-update as not yet supported. Two pieces of configuration are required: A version in your ende.json: A desktop.release.baseUrl in your ende.json: Both are baked into the compiled binary. The version is exposed at runtime as Ende.desktopVersion: If Ende.desktopVersion is null, Ende.autoUpdate() is a no-op: the runtime warns once and returns. This is also what happens under ende run, since a non-compiled program has no baked-in version. Ende.autoUpdate() does not throw there, so you can leave the call in your code and run the same entry point with ende run during development. Or pass a URL string for a single one-shot check on startup: Option Type Notes url string Required if no desktop.release.baseUrl is set in ende.json. interval number (milliseconds) Poll interval. If omitted, only a single check is performed. onUpdateReady (version: string) => void Called once a patch is applied and staged for next launch. onRollback (reason: string) => void Called shortly after this call if the previous launch failed. publicKey string Base64 Ed25519 public key. When set, the manifest must be signed (see Signed manifests). The runtime fetches <url>/latest.json and parses it as JSON. Each patch entry is an object carrying the patch filename and its SHA-256 hash: Field Meaning version The latest available version. Compared with"},{"url":"/runtime/desktop/backends/","title":"Backends","description":"Pick a rendering engine for your desktop app: bundled Chromium, the OS webview, or raw windowing. Tradeoffs and how to switch.","headings":[{"text":"Available backends","slug":"available-backends"},{"text":"CEF","slug":"cef"},{"text":"WebView (default)","slug":"webview-default"},{"text":"Raw","slug":"raw"},{"text":"Picking a backend","slug":"picking-a-backend"},{"text":"Switching backends","slug":"switching-backends"},{"text":"How backends are obtained","slug":"how-backends-are-obtained"},{"text":"Cross-compilation","slug":"cross-compilation"}],"text":"ende desktop runs your app on top of one of several web rendering engines. --backend (or the desktop.backend field in ende.json) selects which engine your app embeds. If you don't choose one, ende desktop uses the WebView backend. Bundled Chromium Embedded Framework. The same engine that powers Chrome, Electron, and Slack. The framework ships inside your .app / app directory under Contents/Frameworks/. Identical rendering on macOS, Windows, and Linux. Full web platform support, including modern CSS, ES modules, WebGPU, and WebRTC. Largest binary size (~150 MB for the framework alone). All Ende desktop features supported (DevTools, autoUpdate, tray, dock). Choose CEF when consistent rendering across platforms matters, or when you need a feature only Chromium ships (e.g. WebGPU on Linux). The operating system's own webview: WKWebView on macOS, WebView2 on Windows, WebKitGTK on Linux. Smaller app size (just your code + the backend shim). Rendering and feature support varies per platform and OS version. Some web features may be missing or behave differently (Web Audio variants, WebGPU availability, etc.). DevTools not available (the unified DevTools mux supports CEF only at this time). Choose WebView when binary size is the primary concern and your UI sticks to broadly-supported web features. No web engine. Provides window management, input events, clipboard, and the native API surface, but no webview, no Ende.serve() auto-binding, and no bindings.<name>() proxy. Useful for apps that draw their own UI (WebGPU, Skia, custom rendering) or as a foundation for non-web desktop programs. The raw backend is selected through the desktop.backend field in ende.json; the --backend flag accepts only cef and webview. See WebGPU rendering for a complete example of drawing to a window on this backend. Need Best fit Identical rendering everywhere cef Smallest possible binary webview WebGPU / cutting-edge web APIs on all platforms cef Custom 2D/3D rendering, no HTML raw Internal app on"},{"url":"/runtime/desktop/bindings/","title":"Bindings","description":"Call Ende-side functions from webview JavaScript via win.bind(): type-safe RPC over in-process channels, encoded at the boundary with no cross-process round-trip.","headings":[{"text":"How it works","slug":"how-it-works"},{"text":"The webview proxy","slug":"the-webview-proxy"},{"text":"Argument and return value semantics","slug":"argument-and-return-value-semantics"},{"text":"Async handlers","slug":"async-handlers"},{"text":"Errors","slug":"errors"},{"text":"Unbinding","slug":"unbinding"},{"text":"Permissions","slug":"permissions"},{"text":"Per-window bindings","slug":"per-window-bindings"},{"text":"Type safety","slug":"type-safety"},{"text":"Migrating from Electron","slug":"migrating-from-electron"}],"text":"win.bind(name, handler) exposes an Ende-side function to the webview. From the webview, call it as bindings.<name>(args), and the call returns a Promise that resolves with the handler's return value. Bindings are not IPC. The Ende runtime and the rendering backend run as threads / processes inside the same address space (CEF) or coordinated process group (WebView). Calls go through in-process channels, and the backend dispatches them from its run loop. This avoids the cross-process round-trip that socket-based IPC frameworks (Electron's ipcMain / ipcRenderer, Tauri's invoke) impose. Arguments and results are still encoded as they cross the realm boundary, but the transport is in-process: no socket, no cross-process scheduling. In practical terms: bindings are fast enough that you do not need to worry about call frequency for typical app workloads. bindings on the webview side is a Proxy. Any property access creates a function on demand: The proxy does not validate names: typing bindings.readSetings instead of bindings.readSettings does not throw at the property access; it throws when you call it (the call rejects because no such binding is registered). Arguments and return values are encoded as JSON as they cross between the webview and the Ende runtime. This means: Plain objects, arrays, strings, numbers, booleans, and null: passed through as-is. Uint8Array: supported, for passing binary data. undefined and optional properties: dropped during serialization. Date, Map, Set, RegExp, typed arrays other than Uint8Array, ArrayBuffer: not preserved. Convert them to a JSON-compatible shape (a Date becomes a string, a Map becomes {}) before sending. Functions, DOM nodes, prototypes, and cyclic references: not transferable. Errors thrown by a handler: delivered to the webview as { name, message, stack } (see Errors below), not as an Error instance. Stick to plain data and Uint8Array on both sides. Handlers can be sync or async. The webview always sees a Promise: A handler"},{"url":"/runtime/desktop/comparison/","title":"Comparison with other tools","description":"How ende desktop compares to Electron, Electrobun, Tauri, and Dioxus across language, engine, process model, app size, ecosystem, and what's built-in.","headings":[{"text":"At a glance","slug":"at-a-glance"},{"text":"What ende desktop is good at","slug":"what-ende-desktop-is-good-at"},{"text":"What other tools are good at","slug":"what-other-tools-are-good-at"},{"text":"What ende desktop doesn't have yet","slug":"what-ende-desktop-doesnt-have-yet"},{"text":"When to pick ende desktop","slug":"when-to-pick-ende-desktop"},{"text":"When to pick something else","slug":"when-to-pick-something-else"}],"text":"ende desktop is one of several ways to ship desktop apps with web technologies. Here is how it compares to the alternatives. Electron Electrobun Tauri Dioxus ende desktop Language JS/TS (Node.js) JS/TS (Bun) Rust + web frontend Rust JS/TS (Ende) Web engine Bundled Chromium System WebView System WebView System WebView Bundled CEF or WebView Consistent rendering Yes No No No Yes (CEF) Process model Multi-process Multi-process Multi-process Single process Multi-thread (CEF) / process group (WebView) Backend ↔ UI IPC IPC IPC Native Rust In-process channels App size ~100 MB+ ~61 MB ~2–10 MB ~5 MB ~40 MB / ~150 MB (CEF) HMR No Yes Yes (Vite-based) Yes (dx serve) Yes Built-in auto-update Full binary bsdiff Plugin None bsdiff Built-in installers Yes No Yes No Partial (DMG, AppImage) Cross-compile Yes (electron-builder) No (needs target OS) No (needs target OS) No Yes (--target) macOS / Windows / Linux All three All three All three All three All three iOS / Android No No Yes Yes Not yet Cross-compile from one machine. Same as ende compile --target. Tauri and Dioxus need the target platform locally to build (their toolchain includes Rust, which has to compile for the target). Electrobun runs on macOS, Windows, and Linux, but builds each app on its own target platform. Electron supports cross-platform builds via electron-builder, but needs Node and platform-specific signing tools per target. A choice of backend. Electron bundles both Chromium and Node, but is massive. Tauri and Dioxus are small but have no JS runtime. ende desktop defaults to the OS webview (small, like Tauri) with the Ende runtime behind it, and can bundle Chromium (CEF) when you need consistent rendering. In-process bindings instead of IPC. Electron / Electrobun / Tauri all use socket-based IPC between the backend and the UI. Calls serialize, cross a process boundary, and deserialize. ende desktop runs the Ende runtime and the rendering backend inside the same process, talking over in-process channels."},{"url":"/runtime/desktop/configuration/","title":"Configuration","description":"Configure ende desktop in ende.json: app metadata, icons, deep-link URL schemes, backend selection, output paths, error reporting, and the auto-update server.","headings":[{"text":"Full example","slug":"full-example"},{"text":"app","slug":"app"},{"text":"app.name","slug":"appname"},{"text":"app.identifier","slug":"appidentifier"},{"text":"app.icons","slug":"appicons"},{"text":"app.deepLinks","slug":"appdeeplinks"},{"text":"backend","slug":"backend"},{"text":"output","slug":"output"},{"text":"macos","slug":"macos"},{"text":"macos.codesignIdentity","slug":"macoscodesignidentity"},{"text":"release","slug":"release"},{"text":"release.baseUrl","slug":"releasebaseurl"},{"text":"errorReporting","slug":"errorreporting"},{"text":"errorReporting.url","slug":"errorreportingurl"},{"text":"Working directory & assets","slug":"working-directory--assets"},{"text":"Validation","slug":"validation"}],"text":"All configuration for ende desktop lives in the desktop block in ende.json. Most fields are optional; a project with no desktop block at all still compiles, using sensible defaults. Metadata baked into the compiled binary. Display name of the application. Used as the window title default, the macOS menu bar app name, the Windows taskbar tooltip, and the Linux .desktop entry name. Falls back to the name field at the root of ende.json. Reverse-DNS bundle / application identifier (e.g. com.example.myapp). Used for the macOS CFBundleIdentifier, the Linux .desktop file identifier, and the Windows AppUserModelID. When unset, a synthetic com.ende.desktop.<app-slug> is generated. macOS needs a stable identifier to grant notification permission, so set a real one for any app that uses notifications. Per-platform icon paths, relative to ende.json. For macOS and Linux you may also pass an array of PNGs to be assembled into a multi-resolution icon at build time: .icns (macOS) and .ico (Windows) inputs are passed through unchanged. PNGs are assembled into the right container per platform. If no icons entry is set for a platform, the default Ende icon is used. Custom URL schemes (deep links) the app registers with the OS, so that opening a <scheme>://... link routes to your app. Each entry is a bare scheme name with no ://. With the above, the OS treats myapp://open/document/42 as belonging to your app. List several schemes if your app handles more than one: Scheme names follow the RFC 3986 grammar: they must start with an ASCII letter and may otherwise contain letters, digits, +, -, and .. Names are lowercased during registration. The reserved schemes http, https, file, ftp, ws, and wss are rejected, since registering them as app handlers would hijack normal browsing. An invalid or reserved scheme fails the build. Registration happens at bundle time, per platform: macOS adds a CFBundleURLTypes entry (with your schemes under CFBundleURLSchemes) to the bundle Info.plist. This is"},{"url":"/runtime/desktop/devtools/","title":"DevTools","description":"Attach Chrome DevTools to a ende desktop app: a single session shows both the Ende runtime V8 and the renderer V8 as inspectable targets.","headings":[{"text":"Starting an inspector session","slug":"starting-an-inspector-session"},{"text":"What you see in DevTools","slug":"what-you-see-in-devtools"},{"text":"Renderer-only or Ende-only sessions","slug":"renderer-only-or-ende-only-sessions"},{"text":"How it works","slug":"how-it-works"},{"text":"Backend support","slug":"backend-support"},{"text":"Debugging across the binding boundary","slug":"debugging-across-the-binding-boundary"},{"text":"Known limitations","slug":"known-limitations"}],"text":"ende desktop exposes unified DevTools: a single Chrome DevTools session that attaches to both V8 isolates inside your app: the Ende runtime (your handlers, bindings, top-level code) and the renderer (webview-side JavaScript). One Console dropdown, one Sources panel with both threads, one debugging session. Then open chrome://inspect (or edge://inspect). The app appears as a target. Click \"inspect\" and DevTools opens with both isolates attached. Three flags control startup behavior: Flag Behavior --inspect Listen for a debugger; the app starts running immediately. --inspect-wait Wait for a debugger to attach before running any user code. --inspect-brk Wait for a debugger and break on the first line in both isolates. Default listen address is 127.0.0.1:9229; pass --inspect=host:port to override. After attaching, the DevTools UI shows: Sources: both isolates appear in the Threads sidebar. Set breakpoints, step through, inspect the call stack on either side. Console: a target dropdown at the top of the panel switches between Renderer (the webview) and Ende (the runtime). Console output from each isolate is labelled. Network: requests originating from the webview (the webview's fetch, XMLHttpRequest, image loads). Requests made from the Ende side via fetch are not currently surfaced here. Performance / Memory: profile each isolate separately; switch via the same target dropdown. Source maps are honored on both sides. TypeScript files in the Ende runtime show up with their original line numbers; bundled webview JS maps back to its original source if the bundler emits maps. If you only want to debug one side, use the per-target endpoints in the DevTools target list, or use Ende.BrowserWindow.openDevtools() from your own code: openDevtools() shows a DevTools window inside the app, useful for shipping a debug build with built-in inspection without needing chrome://inspect. ende desktop runs a CDP (Chrome DevTools Protocol) multiplexer that fronts both V8 inspectors: The mux"},{"url":"/runtime/desktop/dialogs/","title":"Dialogs","description":"prompt(), alert(), and confirm() show native popup dialogs in ende desktop apps instead of terminal prompts.","headings":[{"text":"alert(message)","slug":"alertmessage"},{"text":"confirm(message)","slug":"confirmmessage"},{"text":"prompt(message, defaultValue?)","slug":"promptmessage-defaultvalue"},{"text":"When they fire","slug":"when-they-fire"},{"text":"Differences from terminal Ende","slug":"differences-from-terminal-ende"},{"text":"File and folder dialogs","slug":"file-and-folder-dialogs"},{"text":"Notifications","slug":"notifications"},{"text":"Clipboard","slug":"clipboard"}],"text":"The familiar browser globals prompt(), alert(), and confirm() work inside ende desktop apps, but instead of reading from the terminal, they show native popup dialogs. This makes desktop apps feel native without any platform-specific code, and keeps the same API you would write for a browser-side script. Shows a modal dialog with an OK button. Returns void. The current window is the parent: clicking outside the dialog does not dismiss it; the user must click OK. Shows a modal dialog with OK and Cancel. Returns boolean: true for OK, false for Cancel. Shows a modal dialog with a text input plus OK and Cancel. Returns the entered string, or null if the user cancelled. These functions block the calling code (synchronously) until the user responds. They run on the Ende runtime thread, not the webview, so they do not freeze the rendered UI, but they do pause your handler. If you call them from the webview side (via JavaScript inside the rendered page), the webview's own native dialogs are used instead: window.alert(), window.confirm(), and window.prompt() as the browser implements them. The behavior is similar: a native modal scoped to that webview. In a normal ende run script, these functions read from / write to the terminal: prompt reads a line of stdin, confirm accepts y / n. That terminal behavior would be invisible inside a desktop app, so ende desktop swaps them out for native dialogs without any code change on your part. Native file-picker and folder-picker dialogs are not yet exposed as a first-class API. Until they are, two workarounds exist: Use the webview's <input type=\"file\">. The webview shows the OS-native picker, and the resulting File object can be sent over a binding for the Ende side to handle: Drag-and-drop into the webview. Drop a file onto a <div>, read it with the File API, and pass the bytes through a binding. A native file-picker API is on the roadmap. System notifications have a dedicated API: the standard Web Notification constructor, callable"},{"url":"/runtime/desktop/distribution/","title":"Distribution","description":"Cross-compile a ende desktop app for macOS, Windows, and Linux from one machine, and produce per-platform output formats: .app, .dmg, .exe directory, AppImage.","headings":[{"text":"Per-platform output","slug":"per-platform-output"},{"text":"Output formats","slug":"output-formats"},{"text":"macOS","slug":"macos"},{"text":"Windows","slug":"windows"},{"text":"Linux","slug":"linux"},{"text":"Compressing the bundle","slug":"compressing-the-bundle"},{"text":"Choosing the output path","slug":"choosing-the-output-path"},{"text":"Cross-compilation details","slug":"cross-compilation-details"},{"text":"CI","slug":"ci"},{"text":"Code signing","slug":"code-signing"},{"text":"Distributing updates after release","slug":"distributing-updates-after-release"}],"text":"ende desktop cross-compiles from any host. The same machine builds for macOS Intel, macOS arm64, Windows x86_64, Linux arm64, and Linux x86_64. Backend binaries (CEF, WebView, etc.) are downloaded as needed. Supported triples: Triple OS Architecture aarch64-apple-darwin macOS arm64 x86_64-apple-darwin macOS Intel x86_64-pc-windows-msvc Windows x86_64 aarch64-unknown-linux-gnu Linux arm64 x86_64-unknown-linux-gnu Linux x86_64 The CLI fetches the matching prebuilt endert and the matching prebuilt backend archive automatically. No platform-specific toolchain is needed on the host. The output extension determines the format: Output Produced by MyApp.app/ Default; .app bundle. MyApp.dmg hdiutil; drag-to-Applications disk image. The .app bundle has the standard layout: Self-extracting mode is enabled by default: the embedded virtual filesystem (your code and static assets) extracts to disk on first run so code that reads files relative to CWD finds them. Output Produced by MyApp/ Default; directory with a launcher and support files. MyApp.msi Windows Installer package (per-machine install). The MyApp/ directory contains: Set a .msi output extension to build a Windows Installer package directly. It installs the app per-machine under %ProgramFiles%\\<AppName>\\ and registers an uninstaller. The MSI is authored in pure Rust, so it cross-compiles from any host (only the target must be Windows). To package the directory another way, zip it or feed it into a third-party installer generator such as Inno Setup, NSIS, or WiX. Output Produced by my-app/ Default; app directory with launcher script. my-app.AppImage Single-file portable bundle. my-app.deb Debian/Ubuntu package. my-app.rpm Fedora/RHEL package. The app directory layout: AppImage is the most portable Linux format: one file, no install step, runs on any modern distro. ende desktop builds it directly: it packs the app directory into a SquashFS image and prepends the AppImage Type-2 runtime, adding the required AppRun,"},{"url":"/runtime/desktop/error_reporting/","title":"Error reporting","description":"Capture uncaught errors, unhandled rejections, and Rust panics, showing a native alert and POSTing a JSON report to your server.","headings":[{"text":"Configuration","slug":"configuration"},{"text":"Report format","slug":"report-format"},{"text":"What gets reported","slug":"what-gets-reported"},{"text":"Suppressing the alert","slug":"suppressing-the-alert"},{"text":"Server-side example","slug":"server-side-example"},{"text":"Privacy considerations","slug":"privacy-considerations"}],"text":"ende desktop apps automatically catch: Uncaught JavaScript exceptions (in both Ende-side and renderer-side code). Unhandled promise rejections. Rust panics inside the runtime or the rendering backend. When one of these happens, the runtime shows a native alert with the error message, and, if you have configured a reporting URL, POSTs a JSON report. Set desktop.errorReporting.url in your ende.json: The URL must use https:// or file://. Plain http:// is rejected, since reports carry stack traces and runtime context that anyone on-path could read. A file:// URL is useful for local testing: the runtime appends the JSON to that path instead of making an HTTP request. If errorReporting.url is not set, the alert still appears but no report is sent. Field Type Notes version 1 Schema version. Check this on the server side. message string The error's message. stack string The error's stack. Source-mapped where possible. appVersion string | null Ende.desktopVersion at the time of the error. timestamp ISO 8601 string UTC timestamp of when the error was caught. platform \"darwin\" | \"windows\" | \"linux\" Ende.build.os. arch string Ende.build.arch. The Content-Type header is application/json. Reports are sent as a single POST with no retry. If your server is down, the report is lost. For high-importance reports, queue them locally and resend on next launch. Source Captured? Uncaught exception in Ende-side code Yes. Unhandled rejection in Ende-side code Yes. Uncaught exception in renderer-side JS Yes; caught via the renderer's error event. Rust panic in the Ende runtime Yes. Rust panic in the rendering backend (CEF, …) Yes; the backend bridges these. console.error / console.warn No; these are not errors. Exceptions you try/catch yourself No. Errors thrown inside a binding handler propagate to the webview side and reject the calling promise. They are not reported as uncaught errors; the webview catches them. To report them anyway, log them yourself in the binding handler. The alert is"},{"url":"/runtime/desktop/hmr/","title":"Hot module replacement","description":"ende desktop --hmr keeps the runtime and rendering backend alive across edits: framework dev servers in framework projects, V8 hot-swap in everything else.","headings":[{"text":"Plain-app HMR","slug":"plain-app-hmr"},{"text":"What persists across reloads","slug":"what-persists-across-reloads"},{"text":"What changes on the next call","slug":"what-changes-on-the-next-call"},{"text":"What HMR cannot do","slug":"what-hmr-cannot-do"},{"text":"Browser-side HMR","slug":"browser-side-hmr"},{"text":"Limitations and caveats","slug":"limitations-and-caveats"}],"text":"--hmr enables hot module replacement during development: a file watcher plus V8's Debugger.setScriptSource. The Ende runtime and the rendering backend (CEF, WebView, …) stay alive across changes. There is no full restart, no webview teardown, no reconnect. --hmr watches your source files and uses V8's Debugger.setScriptSource to hot-swap modules into the running isolate. Edit main.ts (change the response body, add a route) and the change applies on save. The runtime does not restart, the webview does not reload, the listening socket stays bound. Debugger.setScriptSource replaces the code of a function with new code. Live values stay the same: Module-level state (top-level let, top-level Map, etc.) is preserved. Open file handles, network connections, child processes: all preserved. The HTTP listener is preserved. Timers and intervals keep firing on their original schedule unless you clearTimeout / clearInterval them. The replaced functions execute their new bodies the next time they are called. So: A request handler change takes effect on the next request. A timer callback change takes effect on the next firing. An event listener change takes effect on the next event. Debugger.setScriptSource has limits. It cannot replace: Top-level statements that have already executed (a console.log at module scope only runs when the module is first loaded). The signature of a class, such as adding fields or changing constructors. The class declaration is replaced; existing instances keep their old shape. The set of imports. Adding a new import line requires a full reload. When the change is too disruptive to apply incrementally, --hmr falls back to a full reload of the affected module. If even that is not safe (for example, top-level state would be lost in a way the runtime cannot recover from), it logs a warning suggesting a full restart. The webview is a browser. Browser HMR (fast refresh in React, Vue's HMR runtime, etc.) runs entirely inside the rendering backend, talking to"},{"url":"/runtime/desktop/menus/","title":"Menus","description":"Build native application menu bars and right-click context menus, with submenus, accelerators, separators, checkboxes, and click events.","headings":[{"text":"MenuItem shape","slug":"menuitem-shape"},{"text":"Application menu","slug":"application-menu"},{"text":"Accelerators","slug":"accelerators"},{"text":"Roles","slug":"roles"},{"text":"macOS menu bar peculiarities","slug":"macos-menu-bar-peculiarities"},{"text":"Context menus","slug":"context-menus"},{"text":"Dynamic menus","slug":"dynamic-menus"},{"text":"Disabled and hidden items","slug":"disabled-and-hidden-items"}],"text":"ende desktop exposes two kinds of native menus: the application menu (macOS menu bar, Windows / Linux window menu) and context menus (right-click popups). Both use the same Ende.MenuItem type. MenuItem is a tagged union: each entry is one of four shapes: A top-level menu is an array of these. Items nest by putting more MenuItems inside a submenu's items. Set the menu shown in the macOS menu bar (or the Windows / Linux window menu) for a window: Listen for clicks via the menuclick event: e.detail.id is the id you set on an item. Items without an id, and role items (which the OS handles directly), do not produce menuclick events. Accelerators are global within the focused window. The string format is Modifier+Modifier+Key: Modifier Notes Cmd macOS only Ctrl All platforms CmdOrCtrl Cmd on macOS, Ctrl elsewhere Alt All platforms (Option on macOS keyboards) Shift All platforms Super The \"Windows\" / Meta key Keys are letters (A-Z), numbers (0-9), function keys (F1-F24), or named keys (Enter, Esc, Up, Down, Left, Right, Tab, Space, Backspace, Delete). Use CmdOrCtrl rather than Cmd or Ctrl directly so you do not need to branch on platform for the most common shortcuts. A { role: { role } } item maps to a standard OS menu command: the platform provides the label, accelerator, and behavior. Use roles for the conventional commands so they behave natively (and so macOS wires up the standard Edit-menu keyboard shortcuts): Common roles include quit, undo, redo, cut, copy, paste, selectAll, minimize, and close. A role item needs no id and never fires a menuclick event; the OS handles it directly. On macOS, the first top-level submenu is the application menu (the one with your app's name), and its label is replaced with the app name. Put the standard app roles (such as quit) there. If you do not provide one, a default is generated. The Edit menu's standard items (Cut, Copy, Paste, Select All, Undo, Redo) work natively when you include them as role items. Show a context menu at a"},{"url":"/runtime/desktop/notifications/","title":"Notifications","description":"Show native OS notifications from ende desktop apps with the standard Web Notifications API: permission flow, options, and events.","headings":[{"text":"Permissions","slug":"permissions"},{"text":"Options","slug":"options"},{"text":"Icons","slug":"icons"},{"text":"Events","slug":"events"},{"text":"Dismissing","slug":"dismissing"}],"text":"ende desktop implements the standard Web Notifications API. The same Notification constructor you would use in a browser shows a native OS notification (macOS User Notifications, Windows toast notifications, or the Linux desktop notification service) from your Ende-side code. Notification is only defined in apps compiled with ende desktop. In a plain ende run script it does not exist. Notifications are gated by an OS-level permission, exactly as on the web. Check the current state with Notification.permission and request it with Notification.requestPermission(): Notification.permission is a cached synchronous getter holding the result of the most recent query or request. requestPermission() triggers a system prompt the first time the user has not yet decided, and resolves to \"granted\", \"denied\", or \"default\". For the live OS state, including whether the platform has a permission model at all, query the Permissions API: On a platform or backend with no permission concept (an unbundled macOS process, some Linux notification daemons), the query reports \"prompt\" and notifications are shown without an explicit grant. macOS only hands out notification permission to an app with a stable code identity. ende desktop ad-hoc-signs every bundle it produces (and re-signs the cached runtime in --hmr mode) so this works out of the box. See Distribution for configuring a real signing identity. The constructor takes the standard NotificationOptions: Option Type Notes body string The notification's body text. icon string Icon URL. Only data: URLs are shown (see below). tag string Replaces any existing notification with the same tag instead of stacking. requireInteraction boolean Keep the notification visible until the user dismisses it. silent boolean | null Suppress the notification sound. badge string Badge URL (platform-dependent). dir \"auto\" | \"ltr\" | \"rtl\" Text direction. lang string BCP 47 language tag. data any Arbitrary data attached to the notification; read it back from"},{"url":"/runtime/desktop/serving/","title":"HTTP serving","description":"How Ende.serve() works inside a desktop app: automatic port binding, the ENDE_SERVE_ADDRESS env var, and serving local UI to the embedded webview.","headings":[{"text":"How it works","slug":"how-it-works"},{"text":"Why local HTTP?","slug":"why-local-http"},{"text":"Network exposure","slug":"network-exposure"},{"text":"Custom port behavior","slug":"custom-port-behavior"},{"text":"Serving multiple windows","slug":"serving-multiple-windows"}],"text":"A ende desktop app serves its UI over local HTTP and points the embedded webview at it. This keeps the app structure identical to a normal Ende website. Ende.serve() is the entry point and every request flows through your handler, but with no port to manage and no remote network exposure. When the binary starts: The runtime picks an unused local port and sets the ENDE_SERVE_ADDRESS environment variable to tcp:127.0.0.1:<port>. Your code calls Ende.serve(...). The serve API reads ENDE_SERVE_ADDRESS (set by Ende itself in this mode, not by the user) and binds to that port, ignoring whatever port you pass. The webview navigates to http://127.0.0.1:<port> once the listener is ready. You write the same handler you would for any Ende HTTP server. There is no desktop-specific serving API. The default-export form works too: The local-HTTP architecture trades a tiny amount of overhead for properties that matter for desktop apps: Same code in browser and desktop. The homepage, fetch, websockets, and cookies all behave identically in ende run and ende desktop. You can develop in a browser tab and ship the same code as a desktop binary. No special module system. Imports, static assets, and module-level code all run the way they would for a web server. The cost is a single network hop within 127.0.0.1 per request. For UI serving (HTML, CSS, bundled JS, JSON API responses) this is negligible. For high-throughput Ende → webview communication where the overhead matters, use bindings, which bypass HTTP entirely and route through in-process channels. The bound address is always 127.0.0.1 (or [::1]). The compiled binary never binds to a public interface, even if you pass 0.0.0.0 to Ende.serve(). Other apps and other users on the same machine cannot reach your server. If you need to serve users on other machines (a self-hosted local server), do not use ende desktop for that part of your stack. Use ende run with an explicit address, or build a separate service. You cannot override the"},{"url":"/runtime/desktop/tray_and_dock/","title":"Tray and dock","description":"Add icons to the OS status area and the macOS dock: tooltips, dark-mode variants, click events, and right-click context menus.","headings":[{"text":"Ende.Tray","slug":"endetray"},{"text":"Lifecycle","slug":"lifecycle"},{"text":"Setting the icon","slug":"setting-the-icon"},{"text":"Tooltip","slug":"tooltip"},{"text":"Context menu","slug":"context-menu"},{"text":"Click events","slug":"click-events"},{"text":"Popover panels","slug":"popover-panels"},{"text":"Platform support","slug":"platform-support"},{"text":"Ende.dock","slug":"endedock"},{"text":"Badge","slug":"badge"},{"text":"Bounce","slug":"bounce"},{"text":"Visibility","slug":"visibility"},{"text":"Menu","slug":"menu"},{"text":"Reopen event","slug":"reopen-event"},{"text":"Pattern: tray-only background app","slug":"pattern-tray-only-background-app"}],"text":"Ende.Tray puts an icon in the system status area (macOS menu bar extras, Windows system tray, Linux AppIndicator). Ende.dock is a singleton that controls the app's dock / taskbar presence: badge, bounce, visibility, and a custom menu. Menus on both use the Ende.MenuItem type. The icon stays in the status area until you call tray.destroy() (or the process exits). Multiple trays can coexist, useful for app indicators that need separate control surfaces. Tray is also a Disposable, so it works with using: Pass PNG-encoded bytes, not a file path. Read the file yourself: Provide a separate dark-mode icon via setIconDark if you want different contrast for dark menu bars (macOS 10.14+, modern Linux). Without one, the same icon is used in both modes. For best results, use a template image style (mostly opaque silhouette, transparent elsewhere) at a small size: 22×22 logical pixels for macOS, 16×16 for Windows. Right-click on the tray icon opens the menu set by setMenu. The items are the same Ende.MenuItem shape used by application and context menus: Submenus work the same as in the application menu. click fires on a primary-button click. dblclick fires on a double-click. On platforms where right-click is reserved for the context menu (everywhere), only left-click produces these events. For the classic menu-bar-app pattern, click the tray icon to toggle a small floating window anchored under it, then use attachPanel(): The returned Ende.TrayPanel toggles on tray click, is positioned under the icon, and hides when it loses focus. Pass a string as shorthand for { url }. TrayPanelOptions also accepts hideOnBlur (default true) and a position callback to override placement (e.g. for a bottom-edge taskbar). The panel is a convenience built on the primitives. For full control, create a frameless + noActivate BrowserWindow yourself and position it with Tray.getBounds(): getBounds() returns the icon's screen rectangle, or null when the platform can't report it. On Linux the icon"},{"url":"/runtime/desktop/webgpu/","title":"WebGPU rendering","description":"Draw to a native window with WebGPU on the raw backend: request an adapter, wrap the window as an UnsafeWindowSurface, configure a canvas context, and run a render loop.","headings":[{"text":"Setup","slug":"setup"},{"text":"A minimal example","slug":"a-minimal-example"},{"text":"Drawing geometry","slug":"drawing-geometry"},{"text":"Animating with a render loop","slug":"animating-with-a-render-loop"},{"text":"Key details","slug":"key-details"},{"text":"Related","slug":"related"}],"text":"The raw backend gives you a native window with no web engine attached. Instead of loading HTML, you draw to the window yourself with WebGPU. This is the right backend for games, visualizations, emulators, and any app that renders its own pixels rather than a document. The bridge between a window and WebGPU is Ende.BrowserWindow.getNativeWindow(), which hands back a Ende.UnsafeWindowSurface. That surface exposes a WebGPU canvas context, so the same context.configure() / getCurrentTexture() / present() flow you'd use in a browser works against a real OS window. WebGPU is behind an unstable flag, and the raw backend is selected in ende.json: Unlike cef and webview, raw cannot be passed with --backend on the command line — it is only selectable through the desktop.backend field. See Backends. The smallest useful program: open a window and clear it to a solid color. This proves the whole pipeline — adapter, surface, context, present — is wired up before you add any drawing. Build and run it: surface.present() is what actually pushes the encoded frame to the display; without it the window stays blank. Calling it once, as above, leaves a static frame on screen until the window closes. Clearing to a color exercises the surface but draws nothing. A render pipeline with a WGSL shader is the \"hello world\" of GPU graphics. This example draws a single triangle whose vertex colors are interpolated across its face — no vertex buffers, the positions are baked into the shader. For anything that moves, draw repeatedly. The raw backend has no DOM, so there is no requestAnimationFrame — schedule frames yourself. This example reuses the triangle pipeline and passes the elapsed time into the shader through a uniform buffer to spin it. A self-scheduling setTimeout gives you a frame roughly every 16 ms. The win.isClosed() guard stops the loop once the window goes away, and the close listener exits the process; otherwise the pending timer would keep the runtime alive with nothing on screen."},{"url":"/runtime/desktop/windows/","title":"Windows","description":"Create and manage native windows with Ende.BrowserWindow: lifecycle, multiple windows, sizing, navigation, keyboard / mouse / focus events, and native window handles.","headings":[{"text":"Creating windows","slug":"creating-windows"},{"text":"Lifecycle","slug":"lifecycle"},{"text":"Size and position","slug":"size-and-position"},{"text":"Persisting size and position","slug":"persisting-size-and-position"},{"text":"Title","slug":"title"},{"text":"Navigation","slug":"navigation"},{"text":"Events","slug":"events"},{"text":"Running JavaScript in the webview","slug":"running-javascript-in-the-webview"},{"text":"Native window handle","slug":"native-window-handle"},{"text":"DevTools","slug":"devtools"},{"text":"Closing the app","slug":"closing-the-app"}],"text":"The Ende.BrowserWindow class controls native windows. A window opens automatically when your binary starts and is navigated to your local HTTP server. The first new Ende.BrowserWindow() you construct adopts that initial window; every construction after that opens a new one. All windows share the same Ende runtime: there is one async runtime per process, regardless of how many windows are open. For a complete app that manages a window, application menus, and packaging, see the denidian example. The constructor accepts a BrowserWindowOptions object: Option Type Default Notes title string none Window title. width number 800 Initial width in logical pixels. height number 600 Initial height in logical pixels. x, y number none Initial position; centered if omitted. resizable boolean true Whether the user can resize the window. alwaysOnTop boolean false Keep the window above others. frameless boolean false Remove the title bar and window chrome. Creation-only. noActivate boolean false Floating, non-activating panel that doesn't steal focus. Creation-only. transparentTitlebar boolean false Blend the title bar into the content. Creation-only. new Ende.BrowserWindow() opens (or adopts) a window immediately. The window is alive until close() is called or the user closes it from the OS. frameless, noActivate, and transparentTitlebar can only be set at creation time. frameless + noActivate together are the building blocks for tray / menu-bar popovers; see Tray.attachPanel. Multiple windows are independent: each has its own size, position, focus state, and webview. They can navigate to different paths or different origins, set their own bindings, and emit their own events. Each window has a stable numeric id: Closing a window does not stop the runtime; the process keeps running until all windows are closed (or you call Ende.exit()). Sizes are in logical pixels. The OS handles HiDPI scaling. Ende does not remember a window's size or position between runs, and you should not rely"},{"url":"/runtime/fundamentals/configuration/","title":"Config files","description":"How Ende projects are configured: the ende.json file, .jsonc support and discovery, and an overview of what you can configure. See the ende.json reference for every field.","headings":[{"text":"ende.json","slug":"endejson"},{"text":"What you can configure","slug":"what-you-can-configure"}],"text":"Ende is configured with an ende.json file. It is optional: scripts run without one, and you add it when you want to declare dependencies or configure Ende's tooling, such as the formatter, linter, TypeScript compiler, or tasks. ende.json is where you configure Ende itself: tasks, dependencies, and tools like the TypeScript compiler, linter, and formatter. It is optional; a minimal file looks like this: It supports .json and .jsonc extensions, so with ende.jsonc you can add comments and trailing commas. Ende automatically detects a ende.json or ende.jsonc file in your current working directory or any parent directory, which is what makes a project's settings apply to every file under it. Use the --config flag to point at a different file. In a monorepo, a root ende.json can define a workspace whose members each carry their own ende.json. Ende still reads deno.json, deno.jsonc and deno.lock, and DENO_* environment variables, as fallbacks for projects coming from Deno. They print a deprecation warning, and the ende.* names take precedence when both exist. A ende.json file configures Ende's tooling and your project. Every field is documented in the Configuration file (ende.json) reference, including: Dependencies and import maps Tasks Linting and formatting Lockfile TypeScript compiler options Unstable feature flags include and exclude Exports Permissions Compile options Minimum dependency age See the reference for a full example ende.json file and the JSON schema for editor autocompletion."},{"url":"/runtime/fundamentals/cpu_profiling/","title":"CPU profiling","description":"Profile Ende programs with the built-in CPU profiler: collecting profiles, Markdown and flamegraph reports, Chrome DevTools analysis, and profiling tips.","headings":[{"text":"CPU profiling flags","slug":"cpu-profiling-flags"},{"text":"Customizing profile output","slug":"customizing-profile-output"},{"text":"Analyzing profiles in Chrome DevTools","slug":"analyzing-profiles-in-chrome-devtools"},{"text":"Example: Markdown report","slug":"example-markdown-report"},{"text":"Example: Interactive flamegraph","slug":"example-interactive-flamegraph"},{"text":"Profiling tips","slug":"profiling-tips"}],"text":"Ende includes built-in support for V8 CPU profiling, which helps you identify performance bottlenecks in your code. Use the --cpu-prof flag to capture a CPU profile during program execution: When your program exits, Ende will write a .cpuprofile file to the current directory (e.g., CPU.1769017882255.25986.cpuprofile). This file can be loaded into Chrome DevTools (Performance tab) or other V8 profile viewers for analysis. Flag Description --cpu-prof Enable CPU profiling. Profile is written to disk on exit. --cpu-prof-dir=<DIR> Directory where the CPU profile will be written. Defaults to current directory. Implicitly enables --cpu-prof. --cpu-prof-name=<NAME> Filename for the CPU profile. Defaults to CPU.<timestamp>.<pid>.cpuprofile. --cpu-prof-interval=<MICROSECONDS> Sampling interval in microseconds. Default is 1000 (1ms). Lower values give more detail but larger files. --cpu-prof-md Generate a human-readable Markdown report alongside the .cpuprofile file. --cpu-prof-flamegraph Generate an interactive SVG flamegraph alongside the .cpuprofile file. CPU profiles report line numbers from the transpiled JavaScript code, not the original TypeScript source. This is a limitation of V8's profiler. For TypeScript files, the reported line numbers may not match your source code directly. By default, profiles are written to the current directory with an auto-generated filename. You can control where and how profiles are saved: A lower --cpu-prof-interval captures more samples per second, giving finer granularity at the cost of larger profile files. The default of 1000 microseconds (1ms) is a good balance for most use cases. For short-lived functions you want to capture in detail, try 100 (0.1ms). To analyze the .cpuprofile file: Open Chrome DevTools (F12) Go to the Performance tab Click the Load profile button (up arrow icon) Select your .cpuprofile file The DevTools will display a flame chart and detailed breakdown of where time was spent in your application. The --cpu-prof-md"},{"url":"/runtime/fundamentals/cron/","title":"Cron","description":"Schedule recurring tasks in Ende with the Ende.cron() runtime API, an unstable feature enabled via --unstable-cron.","headings":[{"text":"Defining a cron job","slug":"defining-a-cron-job"},{"text":"Retries and backoff","slug":"retries-and-backoff"},{"text":"Running cron jobs in production","slug":"running-cron-jobs-in-production"},{"text":"OpenTelemetry","slug":"opentelemetry"}],"text":"Ende.cron() is an Ende runtime API for scheduling JavaScript or TypeScript code to run on a recurring schedule, expressed using cron syntax. It ships with Ende itself, so the same code that runs locally can be deployed without changes. Ende.cron is currently an unstable API. To use it locally with ende run, enable the --unstable-cron flag (or add \"cron\" to the unstable array in ende.json). Ende.cron API reference Ende.cron() takes a human-readable name, a schedule, and a handler function. The name identifies the cron job in logs, the schedule determines when the handler fires, and all times are in UTC. A 5-field cron expression has one field per time unit, separated by spaces: Each field accepts an exact value, * (every value), a range (1-5), a list (1,3,5), or a step (*/15 for every fifteenth unit). For example, 0 9 * * MON-FRI runs at 09:00 UTC on weekdays. The schedule can be a standard 5-field cron expression or a structured object: Cron jobs must be registered at the top level of a module, before any server starts. Definitions nested inside request handlers, conditionals, or callbacks will not be picked up. By default, failed handler invocations are not retried. Pass a backoffSchedule (an array of millisecond delays) to retry on failure: Ende.cron keeps execution state in-memory in the Ende CLI, which means each process maintains its own independent set of cron tasks. Keep exactly one long-running process with your cron definitions up, for example under a process manager such as systemd, so each job runs once per schedule. When OpenTelemetry is enabled (OTEL_ENDE=true), each Ende.cron() invocation automatically produces an OpenTelemetry span. This lets you trace cron execution alongside your other instrumented code: Each cron invocation creates a span named after the cron job. The span covers the duration of the handler function, and any spans created inside the handler are nested under it as children."},{"url":"/runtime/fundamentals/debugging/","title":"Debugging","description":"Debug Ende programs with the V8 inspector: Chrome DevTools and JetBrains setup, network inspection, worker debugging, and the --inspect flag family.","headings":[{"text":"--inspect","slug":"--inspect"},{"text":"--inspect-publish-uid","slug":"--inspect-publish-uid"},{"text":"--inspect-wait","slug":"--inspect-wait"},{"text":"--inspect-brk","slug":"--inspect-brk"},{"text":"Activating the inspector at runtime","slug":"activating-the-inspector-at-runtime"},{"text":"Starting inspector with a signal","slug":"starting-inspector-with-a-signal"},{"text":"Example with Chrome DevTools","slug":"example-with-chrome-devtools"},{"text":"Inspecting network traffic","slug":"inspecting-network-traffic"},{"text":"JetBrains IDEs","slug":"jetbrains-ides"},{"text":"--log-level=debug","slug":"--log-leveldebug"},{"text":"CPU profiling","slug":"cpu-profiling"},{"text":"OpenTelemetry integration","slug":"opentelemetry-integration"},{"text":"Debugging Web Workers","slug":"debugging-web-workers"},{"text":"TLS session debugging","slug":"tls-session-debugging"}],"text":"Ende supports the V8 Inspector Protocol used by Chrome, Edge and Node.js. This makes it possible to debug Ende programs using Chrome DevTools or other clients that support the protocol. To activate debugging capabilities run Ende with one of the following flags: --inspect --inspect-wait --inspect-brk Using the --inspect flag will start your program with an inspector server which allows client connections from tools that support the V8 Inspector Protocol, for example Chrome DevTools. Visit chrome://inspect in a Chromium derived browser to connect Ende to the inspector server. This allows you to inspect your code, add breakpoints, and step through your code. You can optionally specify a host and port for the inspector server. Both the full address and a bare port number are accepted: By default, Ende prints the inspector WebSocket URL to stderr when it starts listening. You can control this with --inspect-publish-uid: stderr (default) — prints the URL to stderr on startup http — exposes the URL via the /json/list HTTP endpoint on the inspector port, instead of printing it; useful for programmatic tooling that polls for available targets If you use the --inspect flag, the code will start executing immediately. If your program is short, you might not have enough time to connect the debugger before the program finishes execution. In such cases, try running with --inspect-wait or --inspect-brk flag instead, or add a timeout at the end of your code. The --inspect-wait flag will wait for a debugger to connect before executing your code. The --inspect-brk flag will wait for a debugger to connect before executing your code and then put a breakpoint in your program as soon as you connect, allowing you to add additional breakpoints or evaluate expressions before resuming execution. This is the most commonly used inspect flag. JetBrains IDEs use this flag by default. The --inspect flags start the inspector server when the process launches. If you instead want to open it on"},{"url":"/runtime/fundamentals/ffi/","title":"Foreign Function Interface (FFI)","description":"Learn how to use Ende's Foreign Function Interface (FFI) to call native libraries directly from JavaScript or TypeScript. Includes examples, best practices, and security considerations.","headings":[{"text":"Introduction to FFI","slug":"introduction-to-ffi"},{"text":"Security considerations","slug":"security-considerations"},{"text":"Basic usage","slug":"basic-usage"},{"text":"Loading libraries","slug":"loading-libraries"},{"text":"Resolving the path relative to your module","slug":"resolving-the-path-relative-to-your-module"},{"text":"Bundling a library with ende compile","slug":"bundling-a-library-with-ende-compile"},{"text":"Handling load failures","slug":"handling-load-failures"},{"text":"Supported types","slug":"supported-types"},{"text":"Working with structs","slug":"working-with-structs"},{"text":"Working with callbacks","slug":"working-with-callbacks"},{"text":"Best practices with FFI","slug":"best-practices-with-ffi"},{"text":"Examples","slug":"examples"},{"text":"Using a Rust library","slug":"using-a-rust-library"},{"text":"Examples","slug":"examples-1"},{"text":"Related Approaches to Native Code Integration","slug":"related-approaches-to-native-code-integration"},{"text":"Alternatives to FFI","slug":"alternatives-to-ffi"}],"text":"Ende's Foreign Function Interface (FFI) allows JavaScript and TypeScript code to call functions in dynamic libraries written in languages like C, C++, or Rust. This enables you to integrate native code performance and capabilities directly into your Ende applications. Ende FFI Reference Docs FFI provides a bridge between Ende's JavaScript runtime and native code. This allows you to: Use existing native libraries within your Ende applications Implement performance-critical code in languages like Rust or C Access operating system APIs and hardware features not directly available in JavaScript Ende's FFI implementation is based on the Ende.dlopen API, which loads dynamic libraries and creates JavaScript bindings to the functions they export. FFI requires explicit permission using the --allow-ffi flag, as native code runs outside of Ende's security sandbox: Important security warning: Unlike JavaScript code running in the Ende sandbox, native libraries loaded via FFI have the same access level as the Ende process itself. This means they can: Access the filesystem Make network connections Access environment variables Execute system commands Always ensure you trust the native libraries you're loading through FFI. The basic pattern for using FFI in Ende involves: Defining the interface for the native functions you want to call Loading the dynamic library using Ende.dlopen() Calling the loaded functions Here's a simple example loading a C library: The first argument to Ende.dlopen() is the path to the dynamic library. Ende hands this path to the operating system's dynamic loader (dlopen on Linux and macOS, LoadLibrary on Windows), so the way the file is located follows the OS rules, not Ende's module resolution. There are two ways to specify the library: A path with a separator (for example \"./libexample.so\" or \"/usr/lib/libexample.so\") is opened from that exact location. A relative path like \"./libexample.so\" is resolved against the current working directory of the"},{"url":"/runtime/fundamentals/http_server/","title":"Writing an HTTP Server","description":"A guide to creating HTTP servers in Ende. Learn about the Ende.serve API, request handling, WebSocket support, response streaming, and how to build production-ready HTTP/HTTPS servers with automatic compression.","headings":[{"text":"A \"Hello World\" server","slug":"a-hello-world-server"},{"text":"Listening on a specific port","slug":"listening-on-a-specific-port"},{"text":"Inspecting the incoming request","slug":"inspecting-the-incoming-request"},{"text":"Responding with real data","slug":"responding-with-real-data"},{"text":"Responding with a stream","slug":"responding-with-a-stream"},{"text":"Routing requests","slug":"routing-requests"},{"text":"Serving static files","slug":"serving-static-files"},{"text":"Shutting down gracefully","slug":"shutting-down-gracefully"},{"text":"HTTPS support","slug":"https-support"},{"text":"HTTP/2 support","slug":"http2-support"},{"text":"Automatic body compression","slug":"automatic-body-compression"},{"text":"Request abort signal","slug":"request-abort-signal"},{"text":"Serving WebSockets","slug":"serving-websockets"},{"text":"Default fetch export","slug":"default-fetch-export"},{"text":"Building on these examples","slug":"building-on-these-examples"}],"text":"Ende has a built-in HTTP server API: the Ende.serve function, which speaks HTTP/1.1 and HTTP/2 and works with the web-standard Request and Response objects. This page covers writing servers with it, from a first handler to routing, static files, TLS, WebSockets, and shutdown. The Ende.serve function takes a handler function that will be called for each incoming request, and is expected to return a response (or a promise resolving to a response). Here is an example of a server that returns a \"Hello, World!\" response for each request: The handler can also return a Promise<Response>, which means it can be an async function. To run this server, you can use the ende run command: There are many more examples of using Ende.serve in the Examples collection. By default Ende.serve will listen on port 8000, but this can be changed by passing in a port number in options bag as the first or second argument: Most servers will not answer with the same response for every request. Instead they will change their answer depending on various aspects of the request: the HTTP method, the headers, the path, or the body contents. The request is passed in as the first argument to the handler function. Here is an example showing how to extract various parts of the request: Be aware that the req.text() call can fail if the user hangs up the connection before the body is fully received. Make sure to handle this case. Do note this can happen in all methods that read from the request body, such as req.json(), req.formData(), req.arrayBuffer(), req.body.getReader().read(), req.body.pipeTo(), etc. Most servers do not respond with \"Hello, World!\" to every request. Instead they might respond with different headers, status codes, and body contents (even body streams). Here is an example of returning a response with a 404 status code, a JSON body, and a custom header: Response bodies can also be streams. Here is an example of a response that returns a stream of \"Hello, World!\" repeated every second:"},{"url":"/runtime/fundamentals/modules/","title":"Modules","description":"Learn how Ende's ECMAScript module system works: importing local and third-party modules, import attributes, import maps, and supported import types such as Wasm and data URLs.","headings":[{"text":"Importing modules","slug":"importing-modules"},{"text":"Dynamic imports","slug":"dynamic-imports"},{"text":"Import metadata","slug":"import-metadata"},{"text":"Import attributes","slug":"import-attributes"},{"text":"Deferred module evaluation","slug":"deferred-module-evaluation"},{"text":"WebAssembly modules","slug":"webassembly-modules"},{"text":"Data URL imports","slug":"data-url-imports"},{"text":"Importing third party modules and libraries","slug":"importing-third-party-modules-and-libraries"},{"text":"Managing third party modules and libraries","slug":"managing-third-party-modules-and-libraries"},{"text":"Differentiating between imports or importMap in ende.json and --import-map option","slug":"differentiating-between-imports-or-importmap-in-endejson-and---import-map-option"},{"text":"Managing dependencies","slug":"managing-dependencies"},{"text":"Updating versions from the command line","slug":"updating-versions-from-the-command-line"}],"text":"Ende uses ECMAScript modules as its primary module system, the official standard for JavaScript. You share code between files with standard import and export statements and run it directly, with no bundler or build step. This is the same module system browsers use, so the code you write stays portable across environments. Ende runs ECMAScript modules only: CommonJS (require and module.exports) is not supported. In this example the add function is imported from a local calc.ts module. You can run this example by calling ende run main.ts in the directory that contains both main.ts and calc.ts. With ECMAScript modules, local import specifiers must always include the full file extension. It cannot be omitted. The import statements above are static: the specifier is a string literal and the module loads before your code runs. You can also load a module on demand with the import() function, which returns a promise for the module's namespace: Because import() runs at runtime, the specifier can be computed and the module is only fetched and evaluated when the call executes. This is useful for loading code conditionally or keeping a rarely used feature out of the startup path: A dynamic import() whose specifier is a string literal is part of the static module graph and loads without extra permissions. One whose specifier is computed at runtime is checked against the permission system when it runs: local paths need --allow-read and remote URLs need --allow-import. See Security for details. Inside any module, import.meta exposes information about the current module and helpers for resolving paths relative to it: import.meta.main is a common way to make a file work both as an entry point and as an importable library: filename and dirname are undefined for remote modules. For a full walkthrough, see the module metadata tutorial. Ende supports the with { type: \"json\" } import attribute syntax for importing JSON files: It's possible to import text and bytes modules too. Stable; no"},{"url":"/runtime/fundamentals/open_telemetry/","title":"OpenTelemetry","description":"Learn how to implement observability in Ende applications using OpenTelemetry. Covers tracing, metrics collection, and integration with monitoring systems.","headings":[{"text":"Quick start","slug":"quick-start"},{"text":"Auto instrumentation","slug":"auto-instrumentation"},{"text":"Traces","slug":"traces"},{"text":"Ende.serve","slug":"endeserve"},{"text":"fetch","slug":"fetch"},{"text":"Metrics","slug":"metrics"},{"text":"Ende.serve","slug":"endeserve-1"},{"text":"http.server.request.duration","slug":"httpserverrequestduration"},{"text":"http.server.active_requests","slug":"httpserveractive_requests"},{"text":"http.server.request.body.size","slug":"httpserverrequestbodysize"},{"text":"http.server.response.body.size","slug":"httpserverresponsebodysize"},{"text":"Logs","slug":"logs"},{"text":"Permission audit","slug":"permission-audit"},{"text":"User metrics","slug":"user-metrics"},{"text":"Traces","slug":"traces-1"},{"text":"Metrics","slug":"metrics-1"},{"text":"Practical Examples","slug":"practical-examples"},{"text":"Context propagation","slug":"context-propagation"},{"text":"Configuration","slug":"configuration"},{"text":"Propagators","slug":"propagators"},{"text":"Limitations","slug":"limitations"}],"text":"Ende has built in support for OpenTelemetry. OpenTelemetry is a collection of APIs, SDKs, and tools. Use it to instrument, generate, collect, and export telemetry data (metrics, logs, and traces) to help you analyze your software’s performance and behavior. - https://opentelemetry.io/ This integration enables you to monitor your Ende applications using OpenTelemetry observability tooling with instruments like logs, metrics, and traces. Ende provides the following features: Exporting of collected metrics, traces, and logs to a server using the OpenTelemetry protocol. Automatic instrumentation of the Ende runtime with OpenTelemetry metrics, traces, and logs. Collection of user defined metrics, traces, and logs created through Ende.telemetry. To enable the OpenTelemetry integration set the environment variable OTEL_ENDE=true: This will automatically collect and export runtime observability data to an OpenTelemetry endpoint at localhost:4318 using Protobuf over HTTP (http/protobuf). If you want to quickly see OpenTelemetry output without setting up a collector, you can use the built-in console exporter to print spans, logs, and metrics directly to stderr in a human-readable format: Example output: If you want to visualize telemetry data in a dashboard, you can get started with a local LGTM stack in Docker (Loki (logs), Grafana (dashboard), Tempo (traces), and Prometheus (metrics)) by running the following command: This will automatically collect and export runtime observability data like console.log, traces for HTTP requests, and metrics for the Ende runtime. Learn more about auto instrumentation. You can also create your own metrics, traces, and logs through Ende.telemetry. Learn more about user defined metrics. Ende automatically collects and exports some observability data to the OTLP endpoint. This data is exported in the built-in instrumentation scope of the Ende runtime. This scope has the name ende. The version of the Ende runtime is the version of the ende"},{"url":"/runtime/fundamentals/security/","title":"Security and permissions","description":"A guide to Ende's security model: secure-by-default execution, the permission sandbox, evaluating and executing untrusted code, and the permission broker. See the Permissions reference for the flags.","headings":[{"text":"Key principles","slug":"key-principles"},{"text":"Permissions","slug":"permissions"},{"text":"Permissions that bypass the sandbox","slug":"permissions-that-bypass-the-sandbox"},{"text":"Adjusting permissions at runtime","slug":"adjusting-permissions-at-runtime"},{"text":"Evaluation of code","slug":"evaluation-of-code"},{"text":"Executing untrusted code","slug":"executing-untrusted-code"},{"text":"Keeping dependencies safe","slug":"keeping-dependencies-safe"},{"text":"Permission broker","slug":"permission-broker"}],"text":"Ende is secure by default. Unless you specifically enable it, a program run with Ende has no access to sensitive APIs, such as file system access, network connectivity, or environment access. You must explicitly grant access to these resources with command line flags or with a runtime permission prompt. This is a major difference from Node, where dependencies are automatically granted full access to all system I/O, potentially introducing hidden vulnerabilities into your project. Before using Ende to run completely untrusted code, read the section on executing untrusted code below. Before diving into the specifics of permissions, it's important to understand the key principles of Ende's security model: No access to I/O by default: Code executing in an Ende runtime has no access to read or write arbitrary files on the file system, to make network requests or open network listeners, to access environment variables, or to spawn subprocesses. No limits on the execution of code at the same privilege level: Ende allows the execution of any code (JS/TS/Wasm) via multiple means, including eval, new Function, dynamic imports and web workers at the same privilege level with little restriction as to where the code originates (network, JSR, etc). Multiple invocations of the same application can share data: Ende provides a mechanism for multiple invocations of the same application to share data, through built in caching and storage APIs. Different applications can not see each other's data. All code executing on the same thread shares the same privilege level: All code executing on the same thread shares the same privilege level. It is not possible for different modules to have different privilege levels within the same thread. Code can not escalate its privileges without user consent: Code executing in an Ende runtime can not escalate its privileges without the user agreeing explicitly to an escalation via interactive prompt or a invocation time flag. The initial static module"},{"url":"/runtime/fundamentals/stability_and_releases/","title":"Stability and releases","description":"Ende's stability guarantees and release process: ChronVer releases, upgrading, unstable features, and the standard library.","headings":[{"text":"Releases","slug":"releases"},{"text":"Unstable APIs","slug":"unstable-apis"},{"text":"Standard library","slug":"standard-library"}],"text":"The Ende namespace APIs are stable. That means we will strive to keep code that works today working in future releases. Ende is versioned with ChronVer: a release is named after the day it's cut, such as 2026.10.17. Releases are published on GitHub, and https://dl.ende.sh/release-latest.txt names the newest one. ende upgrade reads that file and installs the newest release, downloading a small binary patch from the previous release when one is available. Pass a version to install a specific release, such as ende upgrade 2026.10.14. See ende upgrade for more. Ende publishes a single stable release channel; there are no canary, release candidate or long-term-support builds. When introducing new APIs, these are first marked as unstable. This means that the API may change in the future. These APIs are not available to use unless you explicitly pass an unstable flag, like --unstable-cron. Learn more about --unstable-* flags. There are also some non-runtime features of Ende that are considered unstable, and are locked behind unstable flags. For example, the --unstable-sloppy-imports flag is used to enable importing code without specifying file extensions. The Ende Standard Library (jsr.io/@ende) is published as @ende/* packages, versioned with ChronVer like the runtime. Modules whose names start with unstable_ are experimental and may change in any release. Using unstable standard library modules is not recommended for production code, but it is a great way to experiment with new features and provide feedback to the Ende team. It is not necessary to use any unstable flags to use unstable standard library modules."},{"url":"/runtime/fundamentals/typescript/","title":"TypeScript support","description":"TypeScript is a first-class language in Ende. Run .ts files directly with no build step, type-check with ende check, and reuse your tsconfig.json, with no extra toolchain.","headings":[{"text":"How TypeScript runs in Ende","slug":"how-typescript-runs-in-ende"},{"text":"Type checking","slug":"type-checking"},{"text":"Faster type checking with the native compiler (tsgo)","slug":"faster-type-checking-with-the-native-compiler-tsgo"},{"text":"Configuring TypeScript compiler options","slug":"configuring-typescript-compiler-options"},{"text":"Using an existing tsconfig.json","slug":"using-an-existing-tsconfigjson"},{"text":"Type checking JavaScript","slug":"type-checking-javascript"},{"text":"Providing declaration files","slug":"providing-declaration-files"},{"text":"Providing types in the source","slug":"providing-types-in-the-source"},{"text":"Providing types in the importer","slug":"providing-types-in-the-importer"},{"text":"Typing dynamic imports","slug":"typing-dynamic-imports"},{"text":"Providing types for HTTP modules","slug":"providing-types-for-http-modules"},{"text":"Targeting browsers and web workers","slug":"targeting-browsers-and-web-workers"},{"text":"Augmenting global types","slug":"augmenting-global-types"},{"text":"Next steps","slug":"next-steps"}],"text":"TypeScript is a first-class language in Ende. Put TypeScript in a file and run it. There is no compiler to install and no build step, and configuration is optional: a tsconfig.json works if you already have one, but you don't need to write one to get started. Ende also ships the type checker: ende check plays the role of tsc --noEmit, with strict mode on by default. The same checker runs inside your editor through the Ende language server, so type errors surface as you type. Ende treats executing TypeScript and type-checking it as two separate concerns: Execution: when you ende run a TypeScript file, Ende strips the types and hands the resulting JavaScript to V8. This is fast, happens in-process, and is cached, but it does not look at whether the types are correct. Type checking: ende check (or ende run --check) runs the real TypeScript compiler over your code without executing it. This means type errors do not stop your code from running unless you ask. Type-checking a whole module graph is expensive, so Ende keeps it out of the hot edit-run loop and lets you invoke it where it earns its cost: in your editor (via the Ende language server), in CI, and in ende test, which type-checks by default. A consequence worth knowing: Ende does not write JavaScript next to your sources. The stripped output goes into an internal cache instead (you can see its location listed as \"Emitted modules cache\" in the output of ende info), so there is no outDir, no dist/ directory, and no source map configuration to manage. Error stack traces still point at your .ts sources directly. If you genuinely need .js files on disk (for example, to ship a library to consumers that need JavaScript), use ende transpile. Ende type-checks in strict mode by default. It also turns on noImplicitOverride, which tsc leaves off even under strict. The compiler options table lists every default. Check your code without running it using ende check: ende check exits non-zero on errors, so it works as-is in CI."},{"url":"/runtime/fundamentals/web_dev/","title":"Web development","description":"A guide to web development with Ende: the built-in HTTP server, Hono for web apps, and satz for static sites.","headings":[{"text":"Hono","slug":"hono"},{"text":"Static sites","slug":"static-sites"}],"text":"Ende offers a secure and developer-friendly environment for building web applications, making your web dev a delightful experience. Ende has secure defaults, meaning it requires explicit permission for file, network, and environment access, reducing the risk of security vulnerabilities. Ende has built-in TypeScript support, allowing you to write TypeScript code without additional configuration or tooling. Ende comes with a standard library that includes modules for common tasks like HTTP servers, file system operations, and more. For your vanilla TypeScript, or JavaScript, web applications, you can use the built-in Ende HTTP server. This is a great way to get started with Ende and build simple web applications without any additional dependencies. For more complex applications, use a web framework or library from JSR. Hono is a light-weight web app framework in the tradition of Express and Sinatra, published on JSR as @hono/hono. Make a file called server.ts: Run it, then open http://localhost:8000 in your browser: Hono also renders JSX to HTML on the server. satz is a static site generator built on the Ende standard library: Markdown and TSX pages, layouts, syntax highlighting, a dev server with live reload, and a search index. This documentation site is built with it."},{"url":"/runtime/fundamentals/workspaces/","title":"Workspaces and monorepos","description":"A guide to managing workspaces and monorepos in Ende. Learn about workspace configuration, package management, dependency resolution, and how to structure multi-package projects effectively.","headings":[{"text":"Example","slug":"example"},{"text":"Workspace path patterns","slug":"workspace-path-patterns"},{"text":"Recursive matching","slug":"recursive-matching"},{"text":"Excluding members","slug":"excluding-members"},{"text":"How Ende resolves workspace dependencies","slug":"how-ende-resolves-workspace-dependencies"},{"text":"Important note for containerization","slug":"important-note-for-containerization"},{"text":"Multiple package entries","slug":"multiple-package-entries"},{"text":"Publishing workspace packages to registries","slug":"publishing-workspace-packages-to-registries"},{"text":"Publishing to JSR","slug":"publishing-to-jsr"},{"text":"Excluding a workspace member from publish","slug":"excluding-a-workspace-member-from-publish"},{"text":"Managing interdependent packages","slug":"managing-interdependent-packages"},{"text":"Configuring built-in Ende tools","slug":"configuring-built-in-ende-tools"},{"text":"Running commands across workspaces","slug":"running-commands-across-workspaces"},{"text":"Type checking","slug":"type-checking"},{"text":"Running tests","slug":"running-tests"},{"text":"Formatting and linting","slug":"formatting-and-linting"},{"text":"Using workspace tasks","slug":"using-workspace-tasks"},{"text":"Sharing and managing dependencies","slug":"sharing-and-managing-dependencies"},{"text":"Sharing development dependencies","slug":"sharing-development-dependencies"},{"text":"Managing version conflicts","slug":"managing-version-conflicts"},{"text":"Interdependent workspace members","slug":"interdependent-workspace-members"}],"text":"Ende supports workspaces, also known as \"monorepos\", which allow you to manage multiple related and interdependent packages simultaneously. A \"workspace\" is a collection of folders containing ende.json configuration files. The root ende.json file defines the workspace: This configures a workspace with add and subtract members, which are directories expected to have an ende.json(c) file. Let's expand on the ende.json workspace example and see its functionality. The file hierarchy looks like this: There are two workspace members (add and subtract), each with mod.ts files. There is also a root ende.json and a main.ts. The top-level ende.json configuration file defines the workspace and a top-level import map applied to all members: The root main.ts file uses the @ende/fmt bare specifier from the import map and imports the add and subtract functions from the workspace members. Note that it imports them using @scope/add and @scope/subtract, even though these are not proper URLs and aren't in the import map. How are they resolved? In the add/ subdirectory, we define a ende.json with a \"name\" field, which is important for referencing the workspace member. The ende.json file also contains example configurations, like turning off semicolons when using ende fmt. The subtract/ subdirectory is similar but does not have the same ende fmt configuration. Let's run it: There's a lot to unpack here, showcasing some of the Ende workspace features: This monorepo consists of two packages, placed in ./add and ./subtract directories. By using name and version options in members' ende.json files, it's possible to refer to them using \"bare specifiers\" across the whole workspace. In this case, the packages are named @scope/add and @scope/subtract, where scope is the \"scope\" name you can choose. With these two options, it's not necessary to use long and relative file paths in import statements. jsr:@ende/fmt is a shared dependency in the entire workspace. Workspace members \"inherit\" imports"},{"url":"/runtime/getting_started/installation/","title":"Installation","description":"Install Ende on macOS, Linux and Windows with the install script or a manual download, then update or uninstall it.","headings":[{"text":"Download and install","slug":"download-and-install"},{"text":"Manual download","slug":"manual-download"},{"text":"Installation location","slug":"installation-location"},{"text":"Binary location","slug":"binary-location"},{"text":"Cache location","slug":"cache-location"},{"text":"Testing your installation","slug":"testing-your-installation"},{"text":"If you see \"command not found\"","slug":"if-you-see-command-not-found"},{"text":"Updating","slug":"updating"},{"text":"Uninstalling","slug":"uninstalling"},{"text":"Building from source","slug":"building-from-source"}],"text":"Ende is a single binary executable with no external dependencies. Releases are published for macOS on Apple silicon, Linux (x64 and arm64), and Windows (x64). The install scripts download the latest release, verify its checksum, and install it to ~/.ende/bin. The script prints the line to add to your shell profile if ~/.ende/bin isn't on your PATH yet. To install a specific release, pass its version: The script adds ~\\.ende\\bin to your user PATH. To install a specific release, set $v first: Set ENDE_INSTALL_ROOT before running a script to install somewhere other than ~/.ende; the binary goes in its bin directory. Ende binaries can also be installed manually, by downloading a zip file at github.com/theende/ende/releases. Each release ships one archive per platform, containing a single executable: Platform Asset Windows x86_64 ende-x86_64-pc-windows-msvc.zip macOS ARM64 (Apple Silicon) ende-aarch64-apple-darwin.zip Linux x86_64 ende-x86_64-unknown-linux-gnu.zip Linux ARM64 ende-aarch64-unknown-linux-gnu.zip Unzip the archive and place the ende executable somewhere on your PATH. You will have to set the executable bit on macOS and Linux. Each asset has a matching .sha256sum file for verifying the download. On Linux a common choice is ~/.local/bin (per-user) or /usr/local/bin (system-wide). For example: The install scripts place the ende binary in the following default location: Platform Default path macOS / Linux $HOME/.ende/bin/ende Windows %USERPROFILE%\\.ende\\bin\\ende.exe This is the same directory ende install -g puts installed tools in. Downloaded dependencies and compiled artefacts are stored in Ende's cache directory. It defaults to a platform-specific path: Platform Default path Linux $HOME/.cache/ende macOS $HOME/Library/Caches/ende Windows %LOCALAPPDATA%\\ende Override it by setting the ENDE_DIR environment variable (see Environment variables). Run ende info to print the directory currently in use. To test your installation, run ende --version. If this prints"},{"url":"/runtime/getting_started/setup_your_environment/","title":"Set up your environment","description":"A guide to setting up your development environment for Ende. Learn how to connect your editor to the Ende language server and enable shell completions for better productivity.","headings":[{"text":"Setting up your editor/IDE","slug":"setting-up-your-editoride"},{"text":"JetBrains IDEs","slug":"jetbrains-ides"},{"text":"Vim/Neovim","slug":"vimneovim"},{"text":"Zed","slug":"zed"},{"text":"Helix","slug":"helix"},{"text":"Emacs","slug":"emacs"},{"text":"Sublime Text","slug":"sublime-text"},{"text":"Kakoune","slug":"kakoune"},{"text":"Nova","slug":"nova"},{"text":"Pulsar","slug":"pulsar"},{"text":"Shell completions","slug":"shell-completions"},{"text":"bash example","slug":"bash-example"},{"text":"PowerShell example","slug":"powershell-example"},{"text":"zsh example","slug":"zsh-example"},{"text":"zsh example with ohmyzsh and antigen","slug":"zsh-example-with-ohmyzsh-and-antigen"},{"text":"fish example","slug":"fish-example"},{"text":"Dynamic completions","slug":"dynamic-completions"},{"text":"Building your own LSP integration","slug":"building-your-own-lsp-integration"}],"text":"Ende comes with many of the tools that are commonly needed for developing applications, including a full language server (LSP) to help power your IDE of choice. This page will help you set up your environment to get the most out of Ende while you are developing. We'll cover: How to use Ende with your favorite editor/IDE How to generate shell completions Any editor with a language server client can use Ende's: run ende lsp and send settings under the ende section (or as initializationOptions). The server also reads a deno section, so clients written for Deno's language server work once they start ende lsp. The LSP integration reference lists the settings. JetBrains IDEs support Ende through their Deno plugin. Open your IDE and go to File > Settings, navigate to Plugins, search for Deno and install the plugin. To configure the Plugin, go to File > Settings again. Navigate to Languages & Frameworks > JavaScript Runtime. Switch Preferred Runtime to Deno. Under Deno, specify the path to the ende executable. Check out this blog post to learn more about the plugin, which was written for Deno. The recommended setup for Neovim 0.11+ is the built-in language server client with nvim-lspconfig, which ships a ready-made denols configuration for Deno's language server. Ende's language server speaks the same protocol, so use that configuration with cmd pointing at ende lsp. If you also have ts_ls (the TypeScript language server) configured, both servers can attach to the same buffer. Recent versions of nvim-lspconfig prevent this out of the box: their ts_ls configuration skips projects that contain a ende.json, ende.jsonc, or ende.lock. If you are on an older version of the plugin, or you configure the servers yourself, give each server distinct root_markers and set workspace_required = true on ts_ls so that it only attaches when it finds a package.json or tsconfig.json: This assumes a ende.json or ende.jsonc lives at the root of your Ende project. Note that workspace_required"},{"url":"/runtime/help/","title":"Where to get help","description":"Guide to getting help with Ende. Find community resources, support channels, discussion forums, and how to engage with the Ende community for troubleshooting and assistance.","headings":[{"text":"Community Discord","slug":"community-discord"},{"text":"Stack Overflow","slug":"stack-overflow"},{"text":"DEV's Ende Community","slug":"devs-ende-community"},{"text":"Examples and Tutorials","slug":"examples-and-tutorials"}],"text":"Stuck? Lost? Get Help from the Ende Community. Ask questions and chat with community members in real-time. Stack Overflow is a popular forum to ask code-level questions or if you're stuck with a specific error. Ask your own! A great place to find interesting articles about best practices, application architecture and new learnings. Post your articles with the tag ende. Ende provides a wide range of examples and tutorials that might address your problem: Ende by Example: Practical code snippets for common tasks"},{"url":"/runtime/lint_and_format/","title":"Linting and formatting","description":"A guide to Ende's built-in code quality tools. Learn how to use ende lint and ende fmt commands, configure rules, integrate with CI/CD pipelines, and maintain consistent code style across your projects.","headings":[{"text":"Linting","slug":"linting"},{"text":"Linting rules","slug":"linting-rules"},{"text":"Formatting","slug":"formatting"},{"text":"Checking your formatting","slug":"checking-your-formatting"},{"text":"Integration in CI","slug":"integration-in-ci"},{"text":"Configuration","slug":"configuration"}],"text":"Ende ships a linter and a formatter in the ende binary. No packages to install, no config files required: Both are fast, run the same way locally and in CI, and are configured (when you need to configure anything at all) in the same ende.json as the rest of your project. Explore all the lint rules Linting is the process of analyzing your code for potential errors, bugs, and stylistic issues. Ende's built-in linter, ende lint, supports recommended set of rules from ESLint to provide comprehensive feedback on your code. This includes identifying syntax errors, enforcing coding conventions, and highlighting potential issues that could lead to bugs. To run the linter, use the following command in your terminal: By default, ende lint analyzes all TypeScript and JavaScript files in the current directory and its subdirectories. If you want to lint specific files or directories, you can pass them as arguments to the command. For example: This command will lint all files in the src/ directory. A finding shows the rule name, the offending code, and a hint: Some rules can fix the problem for you: run ende lint --fix to apply those fixes automatically. To silence a rule for one line, add an ignore directive naming the rule above it: See the ende lint reference for all flags and directive forms. The linter can be configured in a ende.json file. You can specify custom rules, plugins, and settings to tailor the linting process to your needs. You can view and search the list of available rules and their usage on the List of rules documentation page. Formatting is the process of automatically adjusting the layout of your code to adhere to a consistent style. Ende's built-in formatter, ende fmt, uses the powerful dprint engine to ensure that your code is always clean, readable, and consistent. To format your code, simply execute the following command in your terminal: By default, ende fmt formats all TypeScript and JavaScript files in the current directory and its subdirectories. If"},{"url":"/runtime/packages/","title":"Dependency management","description":"Use Ende as your package manager for JSR: install, add, update and inspect dependencies, manage the lockfile, and override packages.","headings":[{"text":"Quick start","slug":"quick-start"},{"text":"The dependency toolbelt","slug":"the-dependency-toolbelt"},{"text":"Choosing versions","slug":"choosing-versions"},{"text":"Inspecting and updating dependencies","slug":"inspecting-and-updating-dependencies"},{"text":"Lockfile and reproducible installs","slug":"lockfile-and-reproducible-installs"},{"text":"Overriding dependencies","slug":"overriding-dependencies"},{"text":"Overriding local packages","slug":"overriding-local-packages"},{"text":"Overriding HTTPS imports","slug":"overriding-https-imports"},{"text":"Development only dependencies","slug":"development-only-dependencies"},{"text":"HTTPS imports","slug":"https-imports"},{"text":"Go deeper","slug":"go-deeper"}],"text":"Ende is a package manager for JSR packages and HTTPS imports, built into the ende binary. Dependencies are declared in ende.json. This page covers the day-to-day workflow; the toolbelt table lists every command. In a project that already declares dependencies in ende.json, install them with: Add a new dependency from JSR: The dependency is recorded in ende.json, and you import it by its bare name: Every dependency task has a built-in subcommand. Each links to its full reference: Command What it does ende install Install the project's dependencies (or a tool, with -g) ende add Add a dependency to the config file ende remove Remove a dependency from the config file ende outdated List dependencies with newer versions ende update Update dependencies to newer versions ende why Explain why a package is in your dependency tree ende info Show a module's full dependency graph and cache details ende ci Install strictly from the lockfile, for CI ende publish Publish a package to JSR ende uninstall Remove a globally installed tool ende clean Remove the global module cache It is possible to specify a version range for the package you are importing. This is done using the @ symbol followed by a version range specifier, and follows the semver versioning scheme. To share a single version range across workspace members, declare it in the workspace root's imports. For example: Here is an overview of all the ways you can specify a version or a range: Symbol Description Example 1.2.3 An exact version. Only this specific version will be used. 1.2.3 ^1.2.3 Compatible with version 1.2.3. Allows updates that do not change the leftmost non-zero digit. For example, 1.2.4 and 1.3.0 are allowed, but 2.0.0 is not. ^1.2.3 ~1.2.3 Approximately equivalent to version 1.2.3. Allows updates to the patch version. For example, 1.2.4 is allowed, but 1.3.0 is not. ~1.2.3 >=1.2.3 Greater than or equal to version 1.2.3. Any version 1.2.3 or higher is allowed. >=1.2.3 <=1.2.3 Less than or equal to version"},{"url":"/runtime/packages/private_repositories/","title":"Private repositories","description":"Load remote modules from private repositories with ENDE_AUTH_TOKENS: bearer tokens, basic auth, and a GitHub walkthrough.","headings":[{"text":"ENDE_AUTH_TOKENS","slug":"ende_auth_tokens"},{"text":"GitHub","slug":"github"}],"text":"There may be instances where you want to load a remote module that is located in a private repository, like a private repository on GitHub. Ende supports sending bearer tokens when requesting a remote module. Bearer tokens are the predominant type of access token used with OAuth 2.0, and are broadly supported by hosting services (e.g., GitHub, GitLab, Bitbucket, Cloudsmith, etc.). The Ende CLI will look for an environment variable named ENDE_AUTH_TOKENS to determine what authentication tokens it should consider using when requesting remote modules. The value of the environment variable is in the format of n number of tokens delimited by a semi-colon (;) where each token is either: a bearer token in the format of {token}@{hostname[:port]} or basic auth data in the format of {username}:{password}@{hostname[:port]} For example, a single token for deno.land would look something like this: or: And multiple tokens would look like this: When Ende goes to fetch a remote module, where the hostname matches the hostname of the remote module, Ende will set the Authorization header of the request to the value of Bearer {token} or Basic {base64EncodedData}. This allows the remote server to recognize that the request is an authorized request tied to a specific authenticated user, and provide access to the appropriate resources and modules on the server. To access private repositories on GitHub, you would need to issue yourself a personal access token. You do this by logging into GitHub and going under Settings -> Developer settings -> Personal access tokens: You would then choose to Generate new token and give your token a description and appropriate access to the repo scope. The repo scope will enable reading file contents (more on scopes in the GitHub docs): And once created GitHub will display the new token a single time, the value of which you would want to use in the environment variable: In order to access modules that are contained in a private repository on GitHub, you"},{"url":"/runtime/packages/publishing/","title":"Publishing packages","description":"Publish Ende packages to JSR with ende publish.","headings":[{"text":"Choose a registry","slug":"choose-a-registry"},{"text":"Publish to JSR","slug":"publish-to-jsr"},{"text":"Workspaces","slug":"workspaces"},{"text":"Automating workspace releases","slug":"automating-workspace-releases"},{"text":"Keep going","slug":"keep-going"}],"text":"Any Ende program that defines an export can be published as a package for other developers to import. This page covers where to publish and how. Ende packages are published to JSR. It accepts TypeScript directly (no build step) and generates documentation from your JSDoc comments. Give your package a name, a version, and an entry point in ende.json: The name is always scoped (@scope/name). Create the scope on jsr.io the first time you publish. Check what will be published, then publish: ende publish type-checks your code and verifies that your exports don't rely on anything outside the package before uploading. See the ende publish reference for flags, and Publishing packages on jsr.io for scopes, versioning, provenance, and publishing from CI. To bump the version field between releases, you can use ende bump-version. In a workspace, ende publish publishes every workspace member that has a name and version, in dependency order. See publishing workspace packages for the details. ende bump-version can drive a whole workspace release. Run at the workspace root with no increment, it derives each member's version bump from the Conventional Commits made since the last release, rewrites the jsr: constraints in the root import map so cross-package references stay in sync, and prepends a changelog entry to Releases.md. See deriving bumps from Conventional Commits for the rules and the flags that pin the commit range. The Ende Standard Library publishes from CI as a reference you can adapt: publishing a GitHub release triggers its workspace_publish workflow, which runs ende publish for every member, authenticating to JSR with GitHub OIDC. Dependency management: the day-to-day workflow this page grew out of ende publish and ende pack references JSR publishing docs"},{"url":"/runtime/packages/supply_chain/","title":"Supply chain management","description":"Keep Ende dependencies deterministic and safe: lockfile discipline, minimum dependency age, intentional updates, and a recommended CI baseline.","headings":[{"text":"Core practices","slug":"core-practices"},{"text":"Minimum dependency age","slug":"minimum-dependency-age"},{"text":"Typical CI pattern","slug":"typical-ci-pattern"},{"text":"Updating dependencies intentionally","slug":"updating-dependencies-intentionally"},{"text":"Troubleshooting a frozen lockfile","slug":"troubleshooting-a-frozen-lockfile"},{"text":"Safe regeneration checklist","slug":"safe-regeneration-checklist"},{"text":"Vendor vs lockfile","slug":"vendor-vs-lockfile"},{"text":"Quick decision guide","slug":"quick-decision-guide"},{"text":"Minimum supply chain baseline (recommended)","slug":"minimum-supply-chain-baseline-recommended"}],"text":"Modern JavaScript projects pull code from many sources (JSR, HTTPS imports, local workspaces). Good supply chain management helps you achieve four goals: Determinism: everyone (and your CI) runs the exact same code. Security: unexpected upstream changes or compromises are detected early. Velocity: you can update dependencies intentionally when you choose. Resilience: builds keep working offline or when registries have outages. This page builds on lockfiles from the dependency management guide. Pin versions deliberately For applications, prefer exact versions (for example jsr:@luca/cases@1.2.3). For libraries, a caret range (^1.2.3) lets consumers get backwards‑compatible fixes. Avoid unbounded (*) or overly broad ranges in production applications. Commit your ende.lock file. Enable a frozen lockfile in CI / production (--frozen-lockfile or \"lock\": { \"frozen\": true }) so new, unseen dependencies fail the build instead of silently appearing. Vendor when you need hermetic/offline builds (\"vendor\": true) or when you must patch third‑party code locally. Vendoring does not remove the need for a lockfile—it complements it. Use jsr: specifiers with import map (imports) entries to centralize version management. Periodically unfreeze and update consciously (for example on a weekly or sprint cadence) instead of ad‑hoc updates during feature work. Set a minimum dependency age so freshly published versions can't slip into an install before the ecosystem has had time to spot a compromised release. Ende refuses to install package versions younger than a configured age. This is a cheap, broad defence against supply-chain attacks: malicious versions are usually detected and yanked within days, so delaying installs by a similar window catches the bulk of them. This is on by default with a 24-hour window, so versions published in the last day are skipped even with no configuration. The settings below change that window or turn it off (set the age to 0). You can configure the same"},{"url":"/runtime/reference/","title":"Reference","description":"Look it up: the full ende CLI, configuration, the standard library, and runtime APIs.","headings":[{"text":"Command line","slug":"command-line"},{"text":"Configuration","slug":"configuration"},{"text":"APIs and libraries","slug":"apis-and-libraries"},{"text":"Editor and tooling","slug":"editor-and-tooling"}],"text":"The reference section is for looking things up: every ende subcommand, every configuration field, the standard library, and the runtime APIs. CLI reference. Every ende subcommand, its flags, and examples. ende.json. The full configuration file reference. Environment variables. Environment variables Ende reads. Permissions. The --allow/--deny flags and the permission model. Standard library. Ende's audited standard modules. Ende API reference. The built-in Ende.* namespace. Web platform APIs. The web globals Ende implements. LSP integration. Wire up the language server in any editor."},{"url":"/runtime/reference/cli/","title":"Ende CLI Subcommands","headings":[{"text":"Execution","slug":"execution"},{"text":"Dependency management","slug":"dependency-management"},{"text":"Tooling","slug":"tooling"},{"text":"Other","slug":"other"}],"text":"The Ende CLI (Command Line Interface) allows you to interact with the Ende runtime environment from your terminal or command prompt. The CLI has a number of subcommands that can be used to perform different tasks, check the links below for more information on each subcommand. ende run - run a script ende serve - run a web server ende task - run a task ende repl - starts a read-eval-print-loop ende eval - evaluate provided script ende watch - run a program, hot-replacing modules on change ende add - add dependencies ende bump-version - bump the project version in ende.json ende ci - install dependencies strictly from the lockfile ende cache - (Deprecated. Please use ende install) ende install - install a dependency or a script ende link - link a local JSR package into the project ende list - list the project's dependencies ende uninstall - uninstall a dependency or a script ende remove - Remove dependencies ende outdated - view or update outdated dependencies ende unlink - remove a linked package ende update - update dependencies ende why - explain why a package is in the dependency tree ende bench - benchmarking tool ende check - type check your program without running it ende clean - remove the cache directory ende compile - compile a program into a standalone executable ende completions - generate shell completions ende coverage - generate test coverage reports ende create - scaffold a new project from a template ende doc - generate documentation for a module ende desktop - build a desktop app from the current Ende project ende fmt - format your code ende info - inspect an ES module and all of its dependencies ende init - create a new project ende lint - lint your code ende lsp - language server protocol integration ende publish - publish a module to JSR ende test - run your tests ende transpile - transpile TypeScript, JSX, or TSX to JavaScript ende types - print runtime types ende upgrade - upgrade Ende to the latest version ende x - run a JSR package or a script"},{"url":"/runtime/reference/cli/add/","title":"ende add","description":"Add and manage project dependencies with Ende","headings":[{"text":"Examples","slug":"examples"},{"text":"Where dependencies are stored","slug":"where-dependencies-are-stored"}],"text":"The ende add command adds dependencies to your project's configuration file. It is an alias for ende install [PACKAGES]. For more on how Ende handles dependencies, see Modules and dependencies. Add packages from JSR: By default, dependencies are added with a caret (^) version range. Use --save-exact to pin to an exact version: This saves the dependency without the ^ prefix (e.g., 2026.10.15 instead of ^2026.10.15). Packages are added to the imports field in ende.json."},{"url":"/runtime/reference/cli/bench/","title":"ende bench","description":"Run benchmarks using Ende's built-in bench tool.","headings":[{"text":"Quickstart","slug":"quickstart"},{"text":"Writing benchmarks","slug":"writing-benchmarks"},{"text":"Async functions","slug":"async-functions"},{"text":"Critical sections","slug":"critical-sections"},{"text":"Grouping and baselines","slug":"grouping-and-baselines"},{"text":"Running benchmarks","slug":"running-benchmarks"},{"text":"Filtering","slug":"filtering"},{"text":"Command line filtering","slug":"command-line-filtering"},{"text":"Bench definition filtering","slug":"bench-definition-filtering"},{"text":"Filtering out (ignoring these benches)","slug":"filtering-out-ignoring-these-benches"},{"text":"Filtering in (only run these benches)","slug":"filtering-in-only-run-these-benches"},{"text":"JSON output","slug":"json-output"}],"text":"Firstly, let's create a file url_bench.ts and register a bench using the Ende.bench() function. Secondly, run the benchmark using the ende bench subcommand. To define a benchmark you need to register it with a call to the Ende.bench API. There are multiple overloads of this API to allow for the greatest flexibility and easy switching between the forms (eg. when you need to quickly focus a single bench for debugging, using the only: true option): You can also bench asynchronous code by passing a bench function that returns a promise. For this you can use the async keyword when defining a function: Sometimes the benchmark case needs to include setup and teardown code that would taint the benchmark results. For example, if you want to measure how long it takes to read a small file, you need to open the file, read it, and then close it. If the file is small enough the time it takes to open and close the file might outweigh the time it takes to read the file itself. To help with such situations you can Ende.BenchContext.start and Ende.BenchContext.end to tell the benchmarking tool about the critical section you want to measure. Everything outside of the section between these two calls will be excluded from the measurement. The above example requires the --allow-read flag to run the benchmark: ende bench --allow-read file_reading.ts. When registering a bench case, it can be assigned to a group, using Ende.BenchDefinition.group option: It is useful to assign several cases to a single group and compare how they perform against a \"baseline\" case. In this example we'll check how performant is Date.now() compared to performance.now(), to do that we'll mark the first case as a \"baseline\" using Ende.BenchDefinition.baseline option: You can specify multiple groups in the same file. To run a benchmark, call ende bench with the file that contains your bench function. You can also omit the file name, in which case all benchmarks in the current directory (recursively) that match the"},{"url":"/runtime/reference/cli/bump_version/","title":"ende bump-version","description":"Bump the project version field in ende.json","headings":[{"text":"Usage","slug":"usage"},{"text":"Examples","slug":"examples"},{"text":"Workspace mode","slug":"workspace-mode"},{"text":"Deriving bumps from Conventional Commits","slug":"deriving-bumps-from-conventional-commits"},{"text":"Selecting the range","slug":"selecting-the-range"},{"text":"--dry-run","slug":"--dry-run"}],"text":"The ende bump-version command updates the version field in your project's configuration file. It reads and writes the version field in ende.json(c). ende bump-version is experimental and subject to change. The increment argument selects how the version is bumped: Increment Example patch 1.4.6 → 1.4.7 minor 1.4.6 → 1.5.0 major 1.4.6 → 2.0.0 prepatch 1.4.6 → 1.4.7-0 preminor 1.4.6 → 1.5.0-0 premajor 1.4.6 → 2.0.0-0 prerelease 1.4.7-0 → 1.4.7-1 If increment is omitted, the current version is printed and the configuration file is left unchanged. If the configuration file has no version field and an increment is given, the version defaults to 0.1.0. The command exits with an error if no ende.json is found in the current directory. Release a patch: Cut a new minor release: Iterate on a prerelease: Print the current version without modifying the file: After bumping, commit the updated configuration file as part of your release. For publishing the bumped version to JSR, see ende publish. When run at the root of a workspace, ende bump-version operates on every member package in a single pass instead of just the root config: The same increment is applied to each member's version field. jsr: version constraints in the workspace root config and in any import map are rewritten in place so cross-package references keep matching the bumped versions. Members without a version field are left alone. This avoids the manual coordination step where a workspace release used to require updating each member's ende.json and the root import map one at a time. Inside a workspace, running ende bump-version with no increment argument switches to deriving per-package bumps from Conventional Commits between a base ref and the current branch. Each member's bump is computed independently from the commits that touched files inside it (honoring scoped commits and wildcard * scopes), and the bumped versions are written back to the member configs and any import-map constraints. The derivation rules:"},{"url":"/runtime/reference/cli/check/","title":"ende check","description":"Download and type-check code without execution","headings":[{"text":"Basic usage","slug":"basic-usage"},{"text":"Scoping and excluding files","slug":"scoping-and-excluding-files"},{"text":"Type-checking remote modules","slug":"type-checking-remote-modules"},{"text":"Type-checking JavaScript files","slug":"type-checking-javascript-files"},{"text":"Using in CI","slug":"using-in-ci"}],"text":"ende check type-checks your TypeScript (or JavaScript) code without running it. This is useful in CI pipelines or before deploying to catch type errors early. For more on TypeScript in Ende, see the TypeScript guide. Check multiple files: You can pass directories or globs as positional arguments to type-check a whole tree at once: To skip files or directories, use the top-level exclude field in ende.json. It applies to ende check along with other subcommands like ende fmt and ende lint: See include and exclude in the configuration reference for the full glob syntax, including how to un-exclude a sub-path. By default, only local modules are type-checked. Use --all to also type-check remote dependencies: If you have a JavaScript project and want to type-check it without adding // @ts-check to every file, use the --check-js flag: ende check exits with a non-zero status code if there are type errors, making it suitable for CI pipelines: Note that ende test and ende bench already perform type-checking by default, so you don't need a separate ende check step if you're already running tests. Use ende check when you want to type-check without running anything — for example, as a fast early step in CI:"},{"url":"/runtime/reference/cli/ci/","title":"ende ci","description":"Reproducible install for CI environments","headings":[{"text":"What it does","slug":"what-it-does"},{"text":"When to use it","slug":"when-to-use-it"},{"text":"Example: GitHub Actions","slug":"example-github-actions"},{"text":"Common failure modes","slug":"common-failure-modes"},{"text":"See also","slug":"see-also"}],"text":"ende ci performs a reproducible install for CI environments. Use it in CI scripts when you want a single, greppable command that's guaranteed to install exactly what the lockfile records — no drift, no surprises. ende ci is roughly equivalent to ende install --frozen-lockfile, but with stricter error handling and clearer failure modes: Requires a lockfile. If ende.lock is missing or unreadable, ende ci errors out instead of generating one. This guarantees that two runs of the same commit install the same versions. Locks resolution. If ende.json has been edited without re-running ende install to refresh the lockfile, the command fails. This catches \"I bumped a version but forgot to commit the lockfile\" mistakes before they reach production. If either check fails, the install does not proceed. Scenario Use CI build / test / lint pipeline ende ci Local development (frequent edits) ende install Adding or removing a package ende add / ende remove First-time bootstrap (no lockfile yet) ende install The rule of thumb: pick ende ci whenever the install must be reproducible and there is no expectation that the lockfile should change. Pick ende install whenever you're iterating on dependencies. When ende.lock is missing, or doesn't match ende.json, ende ci fails with The lockfile is out of date and prints the changes a fresh install would make. Run ende install locally and commit the resulting ende.lock. ende install — everyday install, with full flag reference Continuous integration — guide to running Ende in GitHub Actions and other CI providers"},{"url":"/runtime/reference/cli/clean/","title":"ende clean","description":"Remove cached dependencies for a clean start","headings":[{"text":"Basic usage","slug":"basic-usage"},{"text":"Dry run","slug":"dry-run"},{"text":"Keeping what a project still needs","slug":"keeping-what-a-project-still-needs"},{"text":"When to use this","slug":"when-to-use-this"}],"text":"ende clean removes Ende's global module cache directory. See Modules for more information about how Ende caches dependencies. Preview what would be deleted without actually removing anything: Use --except with one or more entry points to remove everything from the cache except the data those files need: Use ende clean when you need to: Resolve issues caused by corrupted or stale cached modules Free disk space used by cached dependencies"},{"url":"/runtime/reference/cli/compile/","title":"ende compile","description":"Compile your code into a standalone executable","headings":[{"text":"Flags","slug":"flags"},{"text":"Watch mode","slug":"watch-mode"},{"text":"Cross Compilation","slug":"cross-compilation"},{"text":"Supported Targets","slug":"supported-targets"},{"text":"The endert binary","slug":"the-endert-binary"},{"text":"Choosing a JavaScript engine","slug":"choosing-a-javascript-engine"},{"text":"Icons","slug":"icons"},{"text":"Dynamic Imports","slug":"dynamic-imports"},{"text":"Including Data Files or Directories","slug":"including-data-files-or-directories"},{"text":"Configuring include / exclude in ende.json","slug":"configuring-include--exclude-in-endejson"},{"text":"Workers","slug":"workers"},{"text":"Self-Extracting Executables","slug":"self-extracting-executables"},{"text":"Trade-offs","slug":"trade-offs"},{"text":"Code Signing","slug":"code-signing"},{"text":"macOS","slug":"macos"},{"text":"Windows","slug":"windows"},{"text":"Persistent storage in executables","slug":"persistent-storage-in-executables"}],"text":"As with ende install, the runtime flags used to execute the script must be specified at compilation time. This includes permission flags. Script arguments can be partially embedded. Pass --watch to rebuild the executable whenever a file in the compile graph changes: Use --watch-exclude to keep specific paths from triggering a rebuild, and --no-clear-screen to preserve the terminal output between rebuilds: You can cross-compile binaries for other platforms by using the --target flag. Ende supports cross compiling to all targets regardless of the host platform. OS Architecture Target Windows x86_64 x86_64-pc-windows-msvc Windows ARM64 aarch64-pc-windows-msvc macOS x86_64 x86_64-apple-darwin macOS ARM64 aarch64-apple-darwin Linux x86_64 x86_64-unknown-linux-gnu Linux ARM64 aarch64-unknown-linux-gnu aarch64-pc-windows-msvc (Windows on ARM) is supported . ende compile embeds your program into endert (\"Ende runtime\"): a stripped build of Ende that contains only what's needed to run a compiled program, with none of the tooling subcommands. Using endert as the base instead of the full ende binary is what keeps compiled executables smaller. The first time you compile for a given Ende version and target, Ende downloads the matching endert-<target>.zip from dl.ende.sh and caches it in ENDE_DIR. This is also how cross-compilation works: compiling with --target fetches that platform's endert. Subsequent compiles reuse the cached binary and work offline. To use a custom or locally built runtime as the base, set the ENDERT_BIN environment variable to its path. Ende also picks up a endert binary placed next to the ende executable. --engine quickjs is experimental and subject to change. Compiled binaries run on V8 by default. The --engine flag lets you build against QuickJS instead, which produces a smaller executable: The same flag is available on ende desktop, where it selects the engine embedded in the app's runtime library. Trade-offs to weigh before shipping a QuickJS binary:"},{"url":"/runtime/reference/cli/completions/","title":"ende completions","description":"Generate shell completions for Ende","headings":[{"text":"Examples","slug":"examples"},{"text":"Configure Bash shell completion","slug":"configure-bash-shell-completion"},{"text":"Configure PowerShell shell completion","slug":"configure-powershell-shell-completion"},{"text":"Configure zsh shell completion","slug":"configure-zsh-shell-completion"},{"text":"Configure fish shell completion","slug":"configure-fish-shell-completion"}],"text":"You can use the output script to configure autocompletion for ende commands. For example: ende un -> Tab -> ende uninstall. If you installed Ende with Homebrew, shell completions are installed and kept up to date for you, as long as your shell is configured to load completions from Homebrew's completions directory. In that case you do not need to run ende completions manually. First add the following to your .zshrc file: Then run the following commands:"},{"url":"/runtime/reference/cli/coverage/","title":"ende coverage","description":"Generate a coverage report for your code","headings":[{"text":"Inclusions and Exclusions","slug":"inclusions-and-exclusions"},{"text":"Ignoring Code","slug":"ignoring-code"},{"text":"Function coverage","slug":"function-coverage"},{"text":"Coverage thresholds","slug":"coverage-thresholds"},{"text":"Output Formats","slug":"output-formats"},{"text":"Examples","slug":"examples"}],"text":"ende coverage generates coverage reports from data collected by ende test --coverage. By default coverage includes any of your code that exists on the local file system, and its imports. You can customize the inclusions and exclusions by using the --include and --exclude options. You can expand the coverage to include files that are not on the local file system by using the --include option and customizing the regex pattern. The default inclusion pattern should be sufficient for most use cases, but you can customize it to be more specific about which files are included in your coverage report. Files that contain test.js, test.ts, test.jsx, or test.tsx in their name are excluded by default. This is equivalent to: This default setting prevents your test code from contributing to your coverage report. For a URL to match it must match the include pattern and not match the exclude pattern. Code can be ignored in generated coverage reports by adding coverage ignore comments. Branches and lines in ignored code will be excluded from the report. Ignored branches and lines do not count as covered lines. Instead, ignored lines of code are treated as empty lines. To ignore an entire file, add a // deno-coverage-ignore-file comment at the top of the file. Ignored files will not appear in the coverage report. To ignore a single line, add a // deno-coverage-ignore comment on the line above the code you want to ignore. To ignore multiple lines, add a // deno-coverage-ignore-start comment above the code you want to ignore and a // deno-coverage-ignore-stop comment below. All code after a // deno-coverage-ignore-start comment is ignored until a // deno-coverage-ignore-stop is reached. Each // deno-coverage-ignore-start comment must be terminated by a // deno-coverage-ignore-stop comment, and ignored ranges may not be nested. When these requirements are not met, some lines may be unintentionally included in the coverage report. The ende coverage command will log warnings for any"},{"url":"/runtime/reference/cli/create/","title":"ende create","description":"Scaffold a new project from a template package","headings":[{"text":"Usage","slug":"usage"},{"text":"How it works","slug":"how-it-works"},{"text":"Examples","slug":"examples"},{"text":"Flags","slug":"flags"}],"text":"The ende create command scaffolds a new project from a template package published on JSR. The [PACKAGE] argument needs a jsr: prefix, or the --jsr flag for an unprefixed name. A JSR package acts as a template by defining a ./create entry point in its ende.json: When you run ende create jsr:@my-scope/my-template, Ende looks for the ./create export and runs it as the scaffolding script. Create a project from a JSR package: Pass arguments to the template package: --jsr - Treat unprefixed package names as JSR packages -y, --yes - Bypass the prompt and run with full permissions"},{"url":"/runtime/reference/cli/desktop/","title":"ende desktop","description":"Build self-contained desktop applications from an Ende project","headings":[{"text":"Runtime flags","slug":"runtime-flags"},{"text":"Backend","slug":"backend"},{"text":"Build output","slug":"build-output"},{"text":"Cross-compilation","slug":"cross-compilation"},{"text":"Development","slug":"development"},{"text":"Configuration","slug":"configuration"}],"text":"ende desktop compiles an Ende project into a self-contained desktop application. The output binary bundles your code, the Ende runtime, and a rendering backend into one redistributable executable per platform. This page covers the command-line flags. For the full guide (backends, Ende.BrowserWindow, bindings, auto-update, DevTools, and distribution) see the Desktop apps section. ende desktop accepts the same runtime and permission flags as ende run. The permissions you grant at compile time are baked into the compiled binary: --backend selects the rendering engine. It accepts webview (the default) or cef. The raw backend is selected through the desktop.backend field in ende.json. See Backends for the tradeoffs. --output (-o) sets the output path; its extension determines the format (.app, .dmg, .AppImage, and so on): Use --icon to set the application icon (.ico on Windows, .icns or .png on macOS), and --include / --exclude to add or remove files from the compiled binary. These can also be configured in ende.json; see Configuration. --target builds for another platform, and --all-targets builds for every supported platform at once. No platform-specific toolchain is needed on the host: See Distribution for the supported target triples and output formats. --hmr runs the app with hot module replacement during development. See Hot module replacement. The --inspect, --inspect-wait, and --inspect-brk flags attach a debugger to both the Ende runtime and the renderer. --inspect-renderer overrides the CEF renderer's debugger listen address. See DevTools. Most settings can live in the desktop block of ende.json instead of being passed on every build: For the full schema, see Configuration."},{"url":"/runtime/reference/cli/doc/","title":"ende doc","description":"Generate documentation from your code","headings":[{"text":"Examples","slug":"examples"},{"text":"Documenting a JSR package","slug":"documenting-a-jsr-package"},{"text":"Linting","slug":"linting"},{"text":"Supported JSDoc features and tags","slug":"supported-jsdoc-features-and-tags"},{"text":"Supported Tags","slug":"supported-tags"},{"text":"Inline Linking","slug":"inline-linking"},{"text":"HTML output","slug":"html-output"},{"text":"JSON output","slug":"json-output"}],"text":"ende doc followed by a list of one or more source files will print the JSDoc documentation for each of the module's exported members. For example, given a file add.ts with the contents: Running the Ende doc command prints the function's JSDoc comment to stdout: ende doc accepts jsr: specifiers and will fetch the package's published types before generating documentation. This is useful for exploring a third-party API from the terminal without cloning the repository: You can pin to a specific version like any other Ende specifier (jsr:@ende/path@2026.10.15), and combine the specifier with --html or --json to render the same output formats as for local files. You can use --lint flag to check for problems in your documentation while it's being generated. ende doc will point out three kinds of problems: Error for an exported type from the root module referencing a non-exported type. Ensures API consumers have access to all the types the API uses. This can be suppressed by exporting the type from a root module (one of the files specified to ende doc on the command line) or by marking the type with an @internal jsdoc tag. Error for missing return type or property type on a public type. Ensures ende doc displays the return/property type and helps improve type checking performance. Error for missing JS doc comment on a public type. Ensures the code is documented. Can be suppressed by adding a jsdoc comment, or via an @ignore jsdoc tag to exclude it from the documentation. Alternatively, add an @internal tag to keep it in the docs, but signify it's internal. For example: These lints are meant to help you write better documentation and speed up type-checking in your projects. If any problems are found, the program exits with non-zero exit code and the output is reported to standard error. Ende implements a large set of JSDoc tags, but does not strictly adhere to the JSDoc standard, but rather align with sensible standards and features provided by widely used tools and"},{"url":"/runtime/reference/cli/eval/","title":"ende eval","description":"Evaluate JavaScript and TypeScript code in the command line","headings":[{"text":"Basic usage","slug":"basic-usage"},{"text":"Printing expression results","slug":"printing-expression-results"},{"text":"Reading from stdin","slug":"reading-from-stdin"}],"text":"ende eval executes a string of code directly from the command line without needing a file. Unlike ende run, ende eval runs with all permissions enabled by default. TypeScript works out of the box: Use --print (or -p) to evaluate an expression and print its result, similar to node -p: Combine with piped input for quick data processing:"},{"url":"/runtime/reference/cli/fmt/","title":"ende fmt","description":"Format your code with Ende's built-in formatter","headings":[{"text":"Basic usage","slug":"basic-usage"},{"text":"Watch mode","slug":"watch-mode"},{"text":"Check formatting in CI","slug":"check-formatting-in-ci"},{"text":"Formatting stdin","slug":"formatting-stdin"},{"text":"Configuring the formatter","slug":"configuring-the-formatter"},{"text":"Inheriting settings from .editorconfig","slug":"inheriting-settings-from-editorconfig"},{"text":"Including and excluding files","slug":"including-and-excluding-files"},{"text":"Supported file types","slug":"supported-file-types"},{"text":"Ignoring code","slug":"ignoring-code"},{"text":"JavaScript / TypeScript / JSONC","slug":"javascript--typescript--jsonc"},{"text":"Markdown / HTML / CSS","slug":"markdown--html--css"},{"text":"YAML","slug":"yaml"}],"text":"Ende ships with a built-in code formatter based on dprint that auto-formats your code to a consistent style. For a broader overview, see Linting and Formatting. Format all supported files in the current directory: Format specific files or directories: Automatically re-format files when they change: Use --check to verify files are formatted without modifying them. The command exits with a non-zero status code if any files are unformatted: Add --fail-fast to stop on the first unformatted file instead of reporting all of them, which is useful in large codebases: Format code piped through stdin — useful for editor integrations: Customize formatting options in your ende.json: See the Configuration page for all available options. ende fmt also reads .editorconfig files and uses them to fill in any formatting option you have not set elsewhere. The precedence, from highest to lowest, is: CLI flags (--indent-width, --use-tabs, and so on) The fmt block in ende.json .editorconfig Built-in defaults So .editorconfig only supplies values you have not already configured through a flag or ende.json. Properties such as indent_style, indent_size, and max_line_length map onto the corresponding ende fmt options. Specify which files to format in ende.json: You can also exclude files from the command line: File Type Extension Notes JavaScript .js, .cjs, .mjs TypeScript .ts, .mts, .cts JSX .jsx TSX .tsx Markdown .md, .mkd, .mkdn, .mdwn, .mdown, .markdown JSON .json JSONC .jsonc CSS .css HTML .html XML .xml SVG .svg Nunjucks .njk Vento .vto YAML .yml, .yaml SCSS .scss LESS .less Jupyter Notebook .ipynb Astro .astro Requires --unstable-component flag or \"unstable\": [\"fmt-component\"] config option. Svelte .svelte Requires --unstable-component flag or \"unstable\": [\"fmt-component\"] config option. Vue .vue Requires --unstable-component flag or \"unstable\": [\"fmt-component\"] config option. SQL .sql Requires --unstable-sql flag or \"unstable\": [\"fmt-sql\"] config option. ende fmt can format code"},{"url":"/runtime/reference/cli/info/","title":"ende info","description":"Inspect the dependencies of your project","headings":[{"text":"Example","slug":"example"},{"text":"JSON output","slug":"json-output"},{"text":"Cache location","slug":"cache-location"}],"text":"ende info displays information about a module's dependency tree. See Modules for more about how Ende resolves and caches dependencies. When you pass a local file, ende info <file> automatically discovers a ende.json or ende.jsonc configuration file in the current directory or a parent directory. Use --config <file> to specify a different configuration file, or --no-config to disable automatic config discovery. Dependency inspector works with any local or remote ES modules. Use --json to get machine-readable output, useful for tooling and CI: ende info can be used to display information about cache location:"},{"url":"/runtime/reference/cli/init/","title":"ende init","description":"Scaffold a new Ende project with tests and configuration","headings":[{"text":"Examples","slug":"examples"},{"text":"Init a JSR package","slug":"init-a-jsr-package"},{"text":"Initialize a web server","slug":"initialize-a-web-server"},{"text":"Initialize an empty project","slug":"initialize-an-empty-project"},{"text":"Generate a library project","slug":"generate-a-library-project"}],"text":"The init subcommand will create two files (main.ts and main_test.ts). These files provide a basic example of how to write an Ende program and how to write tests for it. The main.ts file exports a add function that adds two numbers together and the main_test.ts file contains a test for this function. You can also specify an argument to ende init to initialize a project in a specific directory: By running ende init --lib Ende will bootstrap a project that is ready to be published on JSR. Inside ende.json you'll see that the entries for name, exports and version are prefilled. Running ende init --serve bootstraps a web server that works with ende serve. Your ende.json file will look like this: Now, you can start your web server, which watches for changes, by running ende task dev. Running ende init --empty bootstraps an empty project with a basic console log. Your ende.json file will look like this: Now, you can run the project, which watches for changes, by running ende task dev. You can append a --lib flag to add extra parameters to your ende.json, such as \"name\", \"version\" and an \"exports\" fields. The resulting ende.json will be as follows:"},{"url":"/runtime/reference/cli/install/","title":"ende install","description":"Install and cache dependencies for your project","headings":[{"text":"Examples","slug":"examples"},{"text":"ende install","slug":"ende-install"},{"text":"ende install [PACKAGES]","slug":"ende-install-packages"},{"text":"ende install --entrypoint [FILES]","slug":"ende-install---entrypoint-files"},{"text":"ende install --global [PACKAGE_OR_URL]","slug":"ende-install---global-package_or_url"},{"text":"ende install --global --compile [PACKAGE_OR_URL]","slug":"ende-install---global---compile-package_or_url"},{"text":"--quiet flag","slug":"--quiet-flag"},{"text":"Uninstall","slug":"uninstall"}],"text":"ende install installs dependencies and caches them for your project. For more on how Ende handles modules, see Modules and dependencies. Use this command to install all dependencies defined in ende.json. They are installed in the global cache. Use this command to install particular packages and add them to ende.json. You can also use ende add which is an alias to ende install [PACKAGES] Use this command to install all dependencies that are used in the provided files and their dependencies. This is particularly useful if you use jsr:, http: or https: specifiers in your code and want to cache all the dependencies before deploying your project. Use this command to install the provided package or script as a globally available binary on your system. This command creates a thin, executable shell script which invokes ende using the specified CLI flags and main module. It is placed in the installation root. Example: To change the executable name, use -n/--name: The executable name is inferred by default: Attempt to take the file stem of the URL path. The above example would become 'file-server'. If the file stem is something generic like 'main', 'mod', 'index' or 'cli', and the path has no parent, take the file name of the parent path. Otherwise settle with the generic name. If the resulting name has an '@...' suffix, strip it. To change the installation root, use --root: The installation root is determined, in order of precedence: --root option ENDE_INSTALL_ROOT environment variable $HOME/.ende Executables are placed in the bin subdirectory of the installation root, unless the root path already ends with bin, in which case it is used directly. The resulting directory must be added to the path manually if required. You must specify permissions that will be used to run the script at installation time. The above command creates an executable called file_server that runs with network and read permissions and binds to port 8080. For good practice, use the import.meta.main"},{"url":"/runtime/reference/cli/link/","title":"ende link","description":"Link a local JSR package into the current project for development","headings":[{"text":"Linking a package","slug":"linking-a-package"},{"text":"Removing a link","slug":"removing-a-link"}],"text":"The ende link command points your project at a local copy of a JSR package so you can develop against it in place of the published version. It is the command-line equivalent of editing the links array in ende.json by hand. Pass the path to a local package directory: The target must be a directory containing an ende.json with a name field, so Ende knows which package it stands in for. Ende appends the relative path to the links array in the nearest ende.json (creating the array if it does not exist) and then installs dependencies. The linked package is importable by its bare name, just like a workspace member, so no imports entry is added. Linking the same path again has no additional effect. You can link several packages in one command: Use ende unlink to stop using the local copy:"},{"url":"/runtime/reference/cli/lint/","title":"ende lint","description":"Run the Ende linter to check your code for errors and apply automated fixes","headings":[{"text":"Basic usage","slug":"basic-usage"},{"text":"Watch mode","slug":"watch-mode"},{"text":"Using in CI","slug":"using-in-ci"},{"text":"Available rules","slug":"available-rules"},{"text":"Configuring rules in ende.json","slug":"configuring-rules-in-endejson"},{"text":"Including and excluding files","slug":"including-and-excluding-files"},{"text":"Lint plugins","slug":"lint-plugins"},{"text":"Ignore directives","slug":"ignore-directives"},{"text":"File level","slug":"file-level"},{"text":"Line level","slug":"line-level"},{"text":"Ignore ban-unused-ignore itself","slug":"ignore-ban-unused-ignore-itself"}],"text":"Ende ships with a built-in linter that analyzes your code for potential errors, bugs, and stylistic issues. For a broader overview, see Linting and Formatting. Lint all TypeScript and JavaScript files in the current directory: Lint specific files or directories: Automatically re-lint files when they change: ende lint exits with a non-zero status code when it finds violations, making it suitable for CI pipelines: Ende's linter includes over 100 rules. View all available rules: For a full list with documentation, visit the lint rules reference. Customize which rules are active in your ende.json: tags — rule sets to enable. Available tags: recommended, fresh include — additional individual rules to enable exclude — rules to disable even if included by a tag Many rules do not belong to any tag (for example eqeqeq or no-console). Those rules are not enabled by tags and must be turned on by listing them individually in include. You can check whether a rule has a tag with ende lint --rules or on each rule's page in the lint rules reference. See the Configuration page for all available options. Specify which files to lint in ende.json: You can also exclude files from the command line: You can extend the linter with custom rules using lint plugins. To ignore a whole file use // deno-lint-ignore-file at the top of the file: You can also specify the reason for ignoring the file: The ignore directive must be placed before the first statement or declaration: You can also ignore certain diagnostics in the whole file: If there are multiple // deno-lint-ignore-file directives, all but the first one are ignored: To ignore specific diagnostics use // deno-lint-ignore <codes...> on the preceding line of the offending line. You must specify the names of the rules to be ignored. You can also specify the reason for ignoring the diagnostic: ende lint provides ban-unused-ignore rule, which will detect ignore directives that don't ever suppress certain diagnostics. This is useful when you"},{"url":"/runtime/reference/cli/list/","title":"ende list","description":"List the dependencies declared in your project","headings":[{"text":"Usage","slug":"usage"},{"text":"Options","slug":"options"},{"text":"Examples","slug":"examples"}],"text":"The ende list command prints the packages your project declares as dependencies. It reads them from the imports in your ende.json, resolves each to the version currently in use, and prints them grouped by package. It answers a different question than ende info: ende info walks the module graph from an entrypoint and reports every file it reaches, while ende list reports what the project depends on straight from the manifest, without an entrypoint. By default ende list prints a flat table of your direct dependencies. Optional positional filters narrow the output by package name and support wildcards and ! negation, the same matcher ende outdated uses. Option Description --depth <N> Render the resolved dependency tree N levels deep (read from the lockfile). --recursive Include the dependencies of every workspace member. List direct dependencies: Show the dependency tree two levels deep: List only dependencies whose name starts with @ende/:"},{"url":"/runtime/reference/cli/lsp/","title":"ende lsp","description":"Start the Ende language server, used by editors for IntelliSense, formatting, and diagnostics","headings":[{"text":"Usage","slug":"usage"},{"text":"Editor setup","slug":"editor-setup"}],"text":"Usually humans do not use this subcommand directly. The 'ende lsp' can provide IDEs with go-to-definition support and automatic code formatting. Starts the Ende language server. The language server is used by editors to provide features like IntelliSense, code formatting, and more. The language server communicates over stdin/stdout using the Language Server Protocol. You typically don't run this directly — your editor starts it automatically. For instructions on configuring your editor to use the Ende language server, see Set up your environment and the LSP integration reference."},{"url":"/runtime/reference/cli/outdated/","title":"ende outdated","description":"Check for outdated dependencies in your project and safely update them with an interactive CLI","headings":[{"text":"Checking for outdated dependencies","slug":"checking-for-outdated-dependencies"},{"text":"Updating dependencies","slug":"updating-dependencies"},{"text":"Selecting packages","slug":"selecting-packages"},{"text":"Updating to specific versions","slug":"updating-to-specific-versions"},{"text":"Workspaces","slug":"workspaces"}],"text":"The outdated subcommand checks for new versions of the JSR dependencies listed in ende.json files, and displays dependencies that could be updated. Workspaces are fully supported. For example, take a project with an ende.json file: The Update column lists the newest version the import's range allows, while the Latest column lists the latest version. @ende/path is pinned to an exact version, so it can't be updated without changing its range. If you would prefer to only show packages that have new compatible versions you can pass the --compatible flag. The outdated subcommand can also update dependencies with the --update flag. By default, it will only update dependencies within their ranges: To update to the latest versions regardless of the ranges, pass the --latest flag: ende update does the same as ende outdated --update. The outdated subcommand also supports selecting which packages to operate on. This works with or without the --update flag. Multiple selectors can be passed, and wildcards (*) or exclusions (!) are also supported. For instance, to update all packages in the @ende scope, except for @ende/fmt: Note that if you use wildcards, you will probably need to surround the argument in quotes to prevent the shell from trying to expand them. You can also select a specific version to update to by appending it after @. In a workspace setting, by default outdated will only operate on the current workspace member. For instance, given a workspace: Running from the ./member-a directory will only check for outdated dependencies listed in ./member-a/ende.json. To include all workspace members, pass the --recursive flag (the -r shorthand is also accepted)."},{"url":"/runtime/reference/cli/publish/","title":"ende publish","description":"Publish your package or workspace to the JSR registry","headings":[{"text":"Package Requirements","slug":"package-requirements"},{"text":"Excluding a workspace member","slug":"excluding-a-workspace-member"},{"text":"Examples","slug":"examples"}],"text":"ende publish publishes your package to the JSR registry. Your package must have a name and version and an exports field in its ende.json or jsr.json file. The name field must be unique and follow the @<scope_name>/<package_name> convention. The version field must be a valid semver version. To bump it as part of your release flow, see ende bump-version. The exports field must point to the main entry point of the package. The exports field can either be specified as a single string, or as an object mapping entrypoint names to paths in your package. Example: Before you publish your package, you must create it in the registry by visiting JSR - Publish a package. When run inside a workspace, ende publish tries to publish every member that has a name and exports, and errors if any of them is missing a version. To opt a member out, for example an internal helper package that only exists to host shared tasks, set \"publish\": false in that member's ende.json: The member stays part of the workspace but is skipped by ende publish. See Excluding a workspace member from publish for the full discussion. Publish your current workspace Publish your current workspace with a specific token, bypassing interactive authentication Publish and check for errors in remote modules Perform a dry run to simulate publishing. Publish using settings from a specific configuration file"},{"url":"/runtime/reference/cli/remove/","title":"ende remove","description":"Remove a dependency from your project","headings":[{"text":"Basic usage","slug":"basic-usage"},{"text":"Where dependencies are removed from","slug":"where-dependencies-are-removed-from"},{"text":"Removing a global executable","slug":"removing-a-global-executable"}],"text":"ende remove removes dependencies from your project's configuration file. It is the inverse of ende add. Remove a package: Remove multiple packages at once: ende remove removes the matching dependency from ende.json. Removing a dependency does not delete it from the global cache. To reclaim disk space, see ende clean. Pass --global (or -g) to remove a globally installed executable script, the same as ende uninstall --global: A global removal targets a single executable, so you cannot combine --global with multiple names. Use --root to target a custom installation root."},{"url":"/runtime/reference/cli/repl/","title":"ende repl","description":"Interact with Ende's runtime in a REPL environment","headings":[{"text":"Special variables","slug":"special-variables"},{"text":"Special functions","slug":"special-functions"},{"text":"--eval flag","slug":"--eval-flag"},{"text":"--eval-file flag","slug":"--eval-file-flag"},{"text":"Relative Import Path Resolution","slug":"relative-import-path-resolution"},{"text":"Tab completions","slug":"tab-completions"},{"text":"Keyboard shortcuts","slug":"keyboard-shortcuts"},{"text":"ENDE_REPL_HISTORY","slug":"ende_repl_history"}],"text":"The REPL provides a couple of special variables, that are always available: Identifier Description _ Yields the last evaluated expression _error Yields the last thrown error The REPL provides several functions in the global scope: Function Description clear() Clears the entire terminal screen close() Close the current REPL session --eval flag allows you to run some code in the runtime before you are dropped into the REPL. This is useful for importing some code you commonly use in the REPL, or modifying the runtime in some way: --eval-file flag allows you to run code from specified files before you are dropped into the REPL. Like the --eval flag, this is useful for importing code you commonly use in the REPL, or modifying the runtime in some way. Files can be specified as paths or URLs. URL files are cached and can be reloaded via the --reload flag. If --eval is also specified, then --eval-file files are run before the --eval code. If --eval-file specifies a code file that contains relative imports, then the runtime will try to resolve the imports relative to the current working directory. It will not try to resolve them relative to the code file's location. This can cause \"Module not found\" errors when --eval-file is used with module files: Tab completions are a crucial feature for quick navigation in the REPL. After hitting tab key, Ende will now show a list of all possible completions. Keystroke Action Ctrl-A, Home Move cursor to the beginning of line Ctrl-B, Left Move cursor one character left Ctrl-C Interrupt and cancel the current edit Ctrl-D If line is empty, signal end of line Ctrl-D, Del If line is not empty, delete character under cursor Ctrl-E, End Move cursor to end of line Ctrl-F, Right Move cursor one character right Ctrl-H, Backspace Delete character before cursor Ctrl-I, Tab Next completion Ctrl-J, Ctrl-M, Enter Finish the line entry Ctrl-K Delete from cursor to end of line Ctrl-L Clear screen Ctrl-N, Down Next match from history Ctrl-P, Up Previous"},{"url":"/runtime/reference/cli/run/","title":"ende run","description":"Run a JavaScript or TypeScript program with Ende's runtime","headings":[{"text":"Usage","slug":"usage"},{"text":"Permissions examples","slug":"permissions-examples"},{"text":"Watch","slug":"watch"},{"text":"Running code from stdin","slug":"running-code-from-stdin"},{"text":"Terminate run","slug":"terminate-run"}],"text":"Run a local file: The run subcommand is optional — you can also just use ende <file>: By default, Ende runs programs in a sandbox without access to disk, network or ability to spawn subprocesses. This is because the Ende runtime is secure by default. You can grant or deny required permissions using the --allow-* and --deny-* flags. Grant permission to read from disk and listen to network: Grant permission to read allow-listed files from disk: Grant all permissions this is not recommended and should only be used for testing: If your project requires multiple security flags you should consider using a ende task to execute them. To watch for file changes and restart process automatically use the --watch flag. Ende's built in application watcher will restart your application as soon as files are changed. Be sure to put the flag before the file name eg: Ende's watcher will notify you of changes in the console, and will warn in the console if there are errors while you work. The same --watch flag is also accepted by ende test, ende serve, and ende bench. You can pipe code from stdin and run it immediately: To stop the run command use ctrl + c."},{"url":"/runtime/reference/cli/serve/","title":"ende serve","description":"A flexible and configurable HTTP server for Ende","headings":[{"text":"Basic usage","slug":"basic-usage"},{"text":"ende serve vs ende run","slug":"ende-serve-vs-ende-run"},{"text":"Default export shape","slug":"default-export-shape"},{"text":"fetch (required)","slug":"fetch-required"},{"text":"onListen (optional)","slug":"onlisten-optional"},{"text":"Routing requests","slug":"routing-requests"},{"text":"Binding to a hostname","slug":"binding-to-a-hostname"},{"text":"Horizontal scaling","slug":"horizontal-scaling"},{"text":"Watch mode","slug":"watch-mode"},{"text":"Permissions","slug":"permissions"}],"text":"ende serve runs a file as an HTTP server using Ende.serve(). The file must export a default object with a fetch handler. For a full guide on building HTTP servers, see Writing an HTTP Server. By default, the server listens on port 8000. Override it with --port: Both approaches start an HTTP server, and the difference is who calls Ende.serve(): With ende serve, Ende calls Ende.serve() for you. Your file just exports a default object with a fetch handler. Ende owns the listener, which lets it add features such as running multiple instances across threads with --parallel. With ende run, you call Ende.serve() yourself inside the program. This gives you full control over the listen options and the surrounding code, and is the right choice when the server is one part of a larger program. Use ende serve when the program is primarily an HTTP server and you want Ende to manage it; use ende run with Ende.serve() when you need to control how and when the server starts. The file must export a default object that satisfies Ende.ServeDefaultExport. The object has two properties: The fetch handler receives a standard Request and a ServeHandlerInfo object with connection metadata: If the handler throws, the error is isolated to that request — the server continues serving. Called once when the server starts listening. If omitted, a default message is logged to the console. Any other properties on the default export are silently ignored. If fetch is missing, no server starts. If fetch or onListen exist but are not functions, a TypeError is thrown. Use the request URL to route to different handlers: By default, ende serve listens on 0.0.0.0. Use --host to bind to a specific interface: Run multiple server instances across CPU cores for better throughput: Restart the server automatically when files change: ende serve automatically allows the server to listen without requiring --allow-net. Additional permissions (like file reads) must be granted explicitly:"},{"url":"/runtime/reference/cli/task/","title":"ende task","description":"A configurable task runner for Ende","headings":[{"text":"Description","slug":"description"},{"text":"Running a task only if it exists","slug":"running-a-task-only-if-it-exists"},{"text":"Specifying the current working directory","slug":"specifying-the-current-working-directory"},{"text":"Getting directory ende task was run from","slug":"getting-directory-ende-task-was-run-from"},{"text":"Wildcard matching of tasks","slug":"wildcard-matching-of-tasks"},{"text":"Loading environment variables from a file","slug":"loading-environment-variables-from-a-file"},{"text":"Task dependencies","slug":"task-dependencies"},{"text":"Caching task results","slug":"caching-task-results"},{"text":"Workspace support","slug":"workspace-support"},{"text":"Syntax","slug":"syntax"},{"text":"Boolean lists","slug":"boolean-lists"},{"text":"Sequential lists","slug":"sequential-lists"},{"text":"Async commands","slug":"async-commands"},{"text":"Environment variables","slug":"environment-variables"},{"text":"Setting environment variables for a command","slug":"setting-environment-variables-for-a-command"},{"text":"Shell variables","slug":"shell-variables"},{"text":"Exit status variable","slug":"exit-status-variable"},{"text":"Pipelines","slug":"pipelines"},{"text":"Command substitution","slug":"command-substitution"},{"text":"Negate exit code","slug":"negate-exit-code"},{"text":"Redirects","slug":"redirects"},{"text":"Cross-platform shebang","slug":"cross-platform-shebang"},{"text":"Glob expansion","slug":"glob-expansion"},{"text":"Shell options","slug":"shell-options"},{"text":"Built-in commands","slug":"built-in-commands"},{"text":"Command Resolution","slug":"command-resolution"}],"text":"ende task provides a cross-platform way to define and execute custom commands specific to a codebase. To get started, define your commands in your codebase's Ende configuration file under a \"tasks\" key. For example: ende task <name> exits with a non-zero code when the named task is not defined. To make a task optional, pass --if-present. Ende then exits with code 0 and prints nothing when the task is missing, which is useful for shared CI scripts that call a task only some packages define: The flag only suppresses the not-found case for the named task. Listing tasks with a bare ende task, running a task that does exist, and real errors such as a missing task dependency are unaffected. By default, ende task executes commands with the directory of the Ende configuration file (ex. ende.json) as the current working directory. This allows tasks to use relative paths and continue to work regardless of where in the directory tree you happen to execute the ende task from. In some scenarios, this may not be desired and this behavior can be overridden with the INIT_CWD environment variable. INIT_CWD will be set with the full path to the directory the task was run in, if not already set. For example, the following task will change the current working directory of the task to be in the same directory the user ran the task from and then output the current working directory which is now that directory (remember, this works on Windows too because ende task is cross-platform). Since tasks are run using the directory of the Ende configuration file as the current working directory, it may be useful to know the directory the ende task was executed from instead. This is possible by using the INIT_CWD environment variable in a task or script launched from ende task (this works cross-platform). For example, to provide this directory to a script in a task, do the following (note the directory is surrounded in double quotes to keep it as a single argument in case it contains spaces): The"},{"url":"/runtime/reference/cli/test/","title":"ende test","description":"Run tests for your project with Ende's built-in test runner","headings":[{"text":"Running tests","slug":"running-tests"},{"text":"Filtering","slug":"filtering"},{"text":"Running affected tests","slug":"running-affected-tests"},{"text":"Permissions","slug":"permissions"},{"text":"Watch mode","slug":"watch-mode"},{"text":"Parallel execution","slug":"parallel-execution"},{"text":"Code coverage","slug":"code-coverage"},{"text":"Parameterized tests","slug":"parameterized-tests"},{"text":"Snapshot testing","slug":"snapshot-testing"},{"text":"Reporters","slug":"reporters"},{"text":"Randomize order","slug":"randomize-order"},{"text":"Sharding","slug":"sharding"},{"text":"Retrying and repeating","slug":"retrying-and-repeating"},{"text":"Leak detection","slug":"leak-detection"},{"text":"Testing code in documentation","slug":"testing-code-in-documentation"}],"text":"Ende ships with a built-in test runner using the Ende.test() API. To learn how to write tests, see the Testing fundamentals guide. For assertions, see @ende/assert and @ende/expect. Run all tests in the current directory and subdirectories: Run tests in specific files: Run tests matching a glob pattern: Skip type-checking: Run only the tests whose name matches a string or a pattern with --filter: Wrap the filter value in forward slashes (/) to treat it as a regular expression, like JavaScript's regex literal syntax. Filtering does not affect test steps: when a test's name matches the filter, all of its steps run. To control which test files are collected in the first place, set test.include and test.exclude in your config file. See include and exclude. When iterating on a change, you can run only the tests touched by it instead of the whole suite. These are one-shot runs, not watch mode. --changed runs the test modules affected by files changed in git. With no value it uses the working tree (staged, unstaged, and untracked files); pass a ref to also include commits since the merge-base with that ref: --related runs the test modules that depend on specific source files, without consulting git: Both flags filter the collected test files down to those that reach the changed or named files through the module graph. See Running affected tests in the testing guide for the workflow and how selection works. Tests run with the same permission model as ende run. Grant permissions for your test suite: Re-run tests automatically when files change: Run test files across multiple worker threads: By default, --parallel uses the number of available CPUs. Use ENDE_JOBS=<N> to control the number of threads: Collect coverage data and generate a report: This writes raw coverage data to a coverage/ directory. To generate a summary from existing coverage data, use ende coverage: You can also output an lcov report for use with external tools: To fail the run when coverage drops below a"},{"url":"/runtime/reference/cli/transpile/","title":"ende transpile","description":"Transpile TypeScript, JSX, or TSX to JavaScript","headings":[{"text":"Usage","slug":"usage"},{"text":"Output modes","slug":"output-modes"},{"text":"Input / output extension mapping","slug":"input--output-extension-mapping"},{"text":"Source maps","slug":"source-maps"},{"text":"Type declarations","slug":"type-declarations"},{"text":"How it differs from tsc","slug":"how-it-differs-from-tsc"},{"text":"Caveats","slug":"caveats"},{"text":"See also","slug":"see-also"}],"text":"The ende transpile command emits JavaScript from TypeScript, JSX, or TSX sources. It's useful when you need plain .js output to ship to a runtime that doesn't understand TypeScript, or to feed into a build step that expects JavaScript. For most workflows you do not need ende transpile — ende run, ende test, and ende serve already accept .ts / .tsx files directly. Reach for it when: You're shipping JavaScript to consumers that can't run TypeScript, such as a browser. A downstream tool only understands .js. You want pre-compiled .js checked into a build artifact rather than transpiled on the fly. <files> is one or more source file paths (globs are expanded by the shell). ende transpile does not crawl a directory — pass the files you want transpiled, optionally via a shell glob. Mode Effect no output flag Write the transpiled output to standard out. -o <path>, --output <path> Write the output to a single file. Conflicts with --outdir. --outdir <dir> Write each input file into <dir>, mirroring the source layout. Input Output Source map .ts .js .js.map .tsx .js .js.map .jsx .js .js.map .mts .mjs .mjs.map .cts .cjs .cjs.map JSX transform, decorators, target, and other emit settings come from compilerOptions in your ende.json (or tsconfig.json), so the output matches what ende run would execute. See TypeScript compiler options for the full list. Pass --source-map with one of: Mode Effect none (default) no source map inline embed the source map as a data: comment in each file separate write a sibling .js.map (or .mjs.map / .cjs.map) Use --declaration to emit .d.ts declaration files. Declarations are produced by tsc (using the bundled TypeScript), so this flag honors the compilerOptions from your ende.json / tsconfig.json. .d.ts files are always written to disk — next to the source when no output location is set, or into --outdir when one is supplied — even if the JavaScript output is going to stdout or a single -o file. ende transpile and TypeScript's tsc overlap, but they"},{"url":"/runtime/reference/cli/types/","title":"ende types","description":"Print Ende's built-in TypeScript type declarations","headings":[{"text":"Basic usage","slug":"basic-usage"},{"text":"When to use this","slug":"when-to-use-this"}],"text":"ende types prints the TypeScript type declarations for all Ende-specific APIs. This is useful for editors and tools that need Ende's type information. Print type declarations to stdout: Save to a file for use with an editor or type checker: Editors connected to the Ende language server handle types automatically. You may need ende types if you are: Using an editor without Ende LSP support Generating type declarations for a build pipeline Inspecting which APIs are available at your current Ende version"},{"url":"/runtime/reference/cli/uninstall/","title":"ende uninstall","description":"Remove a dependency from your project or from your global cache","headings":[{"text":"ende uninstall [PACKAGES]","slug":"ende-uninstall-packages"},{"text":"ende uninstall --global [SCRIPT_NAME]","slug":"ende-uninstall---global-script_name"}],"text":"Remove dependencies specified in ende.json: You can also use ende remove which is an alias to ende uninstall [PACKAGES] You can remove multiple dependencies at once: While dependencies are removed from ende.json they still persist in the global cache for future use. Uninstall serve Uninstall serve from a specific installation root"},{"url":"/runtime/reference/cli/unlink/","title":"ende unlink","description":"Unlink a local JSR package from the current project","headings":[{"text":"Removing a link","slug":"removing-a-link"}],"text":"The ende unlink command removes a local package link created with ende link, so imports resolve to the published registry version again. It edits the links array in the nearest ende.json for you. You can remove an entry by its path or by the linked package's JSR name: Path arguments resolve relative to the current working directory, the same way ende link resolves them, so ende unlink ../pkg matches an entry created by ende link ../pkg from the same directory. When the links array becomes empty it is removed entirely. If no argument matches a linked entry, ende unlink exits with a non-zero status rather than reporting success, so a mistyped path or name is detectable in scripts and CI. It never creates a ende.json: if there is none, there are no linked packages to remove."},{"url":"/runtime/reference/cli/unstable_flags/","title":"Unstable feature flags","headings":[{"text":"Using flags at the command line","slug":"using-flags-at-the-command-line"},{"text":"Configuring flags in ende.json","slug":"configuring-flags-in-endejson"},{"text":"Configuration via environment variables","slug":"configuration-via-environment-variables"},{"text":"--unstable-sloppy-imports","slug":"--unstable-sloppy-imports"},{"text":"--unstable-unsafe-proto","slug":"--unstable-unsafe-proto"},{"text":"--unstable-webgpu","slug":"--unstable-webgpu"},{"text":"--unstable-broadcast-channel","slug":"--unstable-broadcast-channel"},{"text":"--unstable-worker-options","slug":"--unstable-worker-options"},{"text":"--unstable-cron","slug":"--unstable-cron"},{"text":"--unstable-net","slug":"--unstable-net"},{"text":"--unstable-otel","slug":"--unstable-otel"},{"text":"--unstable-lazy-dynamic-imports","slug":"--unstable-lazy-dynamic-imports"},{"text":"--unstable-no-legacy-abort","slug":"--unstable-no-legacy-abort"},{"text":"--unstable","slug":"--unstable"},{"text":"--unstable-temporal","slug":"--unstable-temporal"},{"text":"--unstable-tsgo","slug":"--unstable-tsgo"}],"text":"New Ende runtime features are often released behind feature flags, so that users can try out new APIs and features before they are finalized. Current unstable feature flags are listed on this page, and can also be found in the CLI help text by running: You can enable a feature flag when you run an Ende program from the command line by passing in the flag as an option to the CLI. Here's an example of running a program with the --unstable-node-globals flag enabled: You can specify which unstable features you'd like to enable for your project using a configuration option in ende.json. The possible values in the unstable array are the flag names with the --unstable- prefix removed. Some flags can be enabled by setting a value (any value) for an environment variable of a given name, rather than being passed as a flag or ende.json configuration option. Flags that are settable via environment variables will be noted below. Here's an example of setting the --unstable-sloppy-imports flag via environment variable: Environment variable: ENDE_UNSTABLE_SLOPPY_IMPORTS This flag enables behavior which will infer file extensions from imports that do not include them. Normally, the import statement below would produce an error: Executing the script with sloppy imports enabled will remove the error, but provide guidance that a more performant syntax should be used. Sloppy imports will allow (but print warnings for) the following: Omit file extensions from imports Use incorrect file extensions (e.g. importing with a .js extension when the actual file is .ts) Import a directory path, and automatically use index.js or index.ts as the import for that directory ende compile does not support sloppy imports. Ende made a conscious decision to not support Object.prototype.__proto__ for security reasons. However some libraries still rely on this property to work correctly. This flag enables this property. Note that it is not recommended to use this, but if you really need to use a package that"},{"url":"/runtime/reference/cli/update/","title":"ende update","description":"Update outdated dependencies with an interactive CLI","headings":[{"text":"Updating dependencies","slug":"updating-dependencies"},{"text":"Selecting packages","slug":"selecting-packages"},{"text":"Updating to specific versions","slug":"updating-to-specific-versions"},{"text":"Workspaces","slug":"workspaces"}],"text":"ende update updates dependencies in your ende.json. See Modules for more about managing dependencies. By default, the update subcommand will only update dependencies within their version ranges: To update to the latest versions regardless of the ranges, pass the --latest flag: The update subcommand also supports selecting which packages to operate on. Multiple selectors can be passed, and wildcards (*) or exclusions (!) are also supported. For instance, to update all packages in the @ende scope, except for @ende/fmt: Note that if you use wildcards, you will probably need to surround the argument in quotes to prevent the shell from trying to expand them. You can also select a specific version to update to by appending it after @. In a workspace setting, by default update will only operate on the current workspace member. For instance, given a workspace: Running from the ./member-a directory will only update dependencies listed in ./member-a/ende.json. To include all workspace members, pass the --recursive flag (the -r shorthand is also accepted)."},{"url":"/runtime/reference/cli/upgrade/","title":"ende upgrade","description":"Upgrade Ende to the latest, or any specific version","headings":[{"text":"Examples","slug":"examples"},{"text":"Upgrade to the latest version","slug":"upgrade-to-the-latest-version"},{"text":"Upgrade to a specific version","slug":"upgrade-to-a-specific-version"},{"text":"Check available upgrade without installing","slug":"check-available-upgrade-without-installing"},{"text":"--quiet flag","slug":"--quiet-flag"},{"text":"Cached downloads","slug":"cached-downloads"},{"text":"Checksum verification","slug":"checksum-verification"},{"text":"Delta updates","slug":"delta-updates"},{"text":"Install a build from a pull request","slug":"install-a-build-from-a-pull-request"}],"text":"Use this command without any options to upgrade Ende to the latest release, the one named in https://dl.ende.sh/release-latest.txt: You can specify a particular release to upgrade to: Use the --dry-run flag to see what would be upgraded without actually performing the upgrade: The --quiet flag suppresses diagnostic output during the upgrade process. When used with ende upgrade, it will hide progress indicators, download information, and success messages. This is useful for scripting environments or when you want cleaner output in CI pipelines. Downloaded Ende binaries are cached in $ENDE_DIR/dl/. If you reinstall the same version later, the cached archive is reused instead of re-downloading. Use the --checksum flag to verify a downloaded binary against a known SHA-256 hash. This protects against tampering in CI environments and security-sensitive setups: SHA-256 checksums are published as .sha256sum files alongside release archives on GitHub: ende upgrade downloads small binary patches (deltas) instead of the full release archive when upgrading between recent stable releases. This typically reduces the download from tens of megabytes to a few megabytes. Deltas are applied automatically when available, there is nothing to opt into. If a patch is missing or fails verification, ende upgrade transparently falls back to downloading the full archive. To force a full download (for example, in environments that cache release archives) pass --no-delta: Each delta patch and the resulting binary are verified against the SHA-256 checksums published with the release before being installed. ende upgrade pr <number> downloads the binary built by CI for a specific ende PR and installs it. This is handy when you need to verify a fix before it has shipped in a release. This subcommand requires the gh CLI to be installed and authenticated. ende upgrade uses gh to look up the PR's CI run and download the matching {profile}-{os}-{arch}-ende artifact (for example"},{"url":"/runtime/reference/cli/watch/","title":"ende watch","description":"Run a program in watch mode with hot module replacement","headings":[{"text":"Usage","slug":"usage"}],"text":"The ende watch command runs a program and reloads it when its source files change. It is a shorthand for ende run --watch-hmr: the program runs with hot module replacement enabled, so on a change Ende swaps the updated modules in place where it can instead of doing a full restart. This is equivalent to: Because ende watch reuses ende run, every ende run flag works, including the watch options: --watch-hmr=<paths> adds extra paths to watch. --watch-exclude=<paths> excludes paths from triggering a reload. --no-clear-screen keeps previous output instead of clearing the screen on each reload."},{"url":"/runtime/reference/cli/why/","title":"ende why","description":"Explain why a package is installed by showing its dependency chains","headings":[{"text":"Usage","slug":"usage"},{"text":"Examples","slug":"examples"},{"text":"Multiple paths to a single package","slug":"multiple-paths-to-a-single-package"},{"text":"Workspace members","slug":"workspace-members"},{"text":"Exit codes","slug":"exit-codes"},{"text":"Common pitfalls","slug":"common-pitfalls"}],"text":"The ende why command explains why a particular package is in your dependency tree by printing every path from your project's direct dependencies down to the queried package. It reads the lockfile, so it works without touching the network. It pairs with ende add and ende remove: once you know why a transitive dependency is in your tree, you can decide whether to remove a direct dependency that's pulling it in. <package> is a JSR package name, optionally pinned with @<version>: Form Meaning @ende/path every version of @ende/path in the tree @ende/path@2026.10.15 only the 2026.10.15 version jsr:@ende/path the same package by its full specifier When the same package appears at multiple versions, each is shown in its own block — handy for diagnosing duplicated dependencies. In a workspace, each member's direct dependencies appear as roots in the output, so a transitive dep introduced by one package is clearly attributable to that package. Exit code Meaning 0 The package was found in the resolved tree — at least one dependency path was printed. Non-zero The package is not in the resolved tree, or the argument is malformed. The non-zero exit is the easy way to gate CI on a package not being pulled in. For example, to assert that @acme/legacy never enters your tree: \"Package not found\" but you know it's used at runtime. ende why reports what's in the lockfile, not what's imported by your code. If you've added a jsr: specifier but haven't run ende install (or any subcommand that resolves), the package won't appear yet. Resolution depends on workspace mode. A package only consumed by one workspace member may not show up when run from a different member's directory if your workspace setup uses per-member lockfiles. Run ende why from the workspace root for the complete picture."},{"url":"/runtime/reference/cli/x/","title":"ende x","description":"Run a package from JSR or a URL with Ende.","headings":[{"text":"Installing the dx alias","slug":"installing-the-dx-alias"},{"text":"Basic usage","slug":"basic-usage"},{"text":"How it works","slug":"how-it-works"},{"text":"Authoring a package that runs with ende x","slug":"authoring-a-package-that-runs-with-ende-x"},{"text":"Permissions","slug":"permissions"}],"text":"ende x runs a package from JSR, or a script from a URL, without installing it permanently. For convenience, you can install ende x as a standalone dx binary that runs with all permissions by default: Then use it directly: You can customize the alias name: Run a JSR package: ende x downloads the package to the global cache (if not already cached), resolves the package's binary entry point, and executes it. The package is not added to your project's ende.json. JSR packages are run by pointing ende x at an export that executes when imported, for example ende x jsr:@ende/http/file-server. To make your own JSR package runnable, expose the entry point as a module export (guard top-level side effects with import.meta.main so the module can still be imported as a library), then document the subpath users should run, such as ende x jsr:@you/tool/cli. If you want the tool available as a permanent command rather than run on demand, install it with ende install or compile it to a standalone executable. See Build CLI apps for the full workflow, and Publishing modules for publishing to JSR. The executed package runs with the permissions you specify: Or grant all permissions:"},{"url":"/runtime/reference/continuous_integration/","title":"Continuous integration","description":"Guide to setting up continuous integration (CI) pipelines for Ende projects. Learn how to configure GitHub Actions workflows, run tests and linting in CI, handle cross-platform builds, and optimize pipeline performance with caching.","headings":[{"text":"Setting up a basic pipeline","slug":"setting-up-a-basic-pipeline"},{"text":"Cross-platform workflows","slug":"cross-platform-workflows"},{"text":"Speeding up Ende pipelines","slug":"speeding-up-ende-pipelines"},{"text":"Reducing repetition","slug":"reducing-repetition"},{"text":"Caching dependencies","slug":"caching-dependencies"}],"text":"Ende's built-in tools make it easy to set up Continuous Integration (CI) pipelines for your projects. Testing, linting and formatting your code can all be done with the corresponding commands ende test, ende lint and ende fmt. In addition, you can generate code coverage reports from test results with ende coverage in pipelines. You can set up basic pipelines for Ende projects in GitHub Actions. The concepts explained on this page largely apply to other CI providers as well, such as Azure Pipelines, CircleCI or GitLab. Building a pipeline for Ende generally starts with checking out the repository and installing Ende with its install script: To expand the workflow, add any of the ende subcommands that you might need: See the ende ci reference for exactly what it installs and the flags it accepts. As an Ende module maintainer, you probably want to know that your code works on all of the major operating systems in use today: Linux, MacOS and Windows. A cross-platform workflow can be achieved by running a matrix of parallel jobs, each one running the build on a different OS: Note: GitHub Actions has a known issue with handling Windows-style line endings (CRLF). This may cause issues when running ende fmt in a pipeline with jobs that run on windows. To prevent this, configure the Actions runner to use Linux-style line endings before running the actions/checkout@v4 step: In cross-platform runs, certain steps of a pipeline do not need to run for each OS necessarily. For example, generating the same test coverage report on Linux, MacOS and Windows is a bit redundant. You can use the if conditional keyword of GitHub Actions in these cases. The example below shows how to run code coverage generation and upload steps only on the ubuntu (Linux) runner: As a project grows in size, more and more dependencies tend to be included. Ende will download these dependencies during testing and if a workflow is run many times a day, this can become a time-consuming process. A common"},{"url":"/runtime/reference/ende_json/","title":"Configuration file (ende.json)","description":"Reference for every ende.json field: dependencies and import maps, tasks, lint and fmt, lockfile, TypeScript compiler options, unstable flags, include/exclude, exports, permissions, compile, and proxies.","headings":[{"text":"Dependencies","slug":"dependencies"},{"text":"Custom path mappings","slug":"custom-path-mappings"},{"text":"Scoped mappings","slug":"scoped-mappings"},{"text":"Overriding packages","slug":"overriding-packages"},{"text":"Tasks","slug":"tasks"},{"text":"Linting","slug":"linting"},{"text":"Formatting","slug":"formatting"},{"text":"Lockfile","slug":"lockfile"},{"text":"Merge conflicts","slug":"merge-conflicts"},{"text":"Minimum dependency age","slug":"minimum-dependency-age"},{"text":"TypeScript compiler options","slug":"typescript-compiler-options"},{"text":"Unstable features","slug":"unstable-features"},{"text":"include and exclude","slug":"include-and-exclude"},{"text":"include","slug":"include"},{"text":"exclude","slug":"exclude"},{"text":"Top level exclude","slug":"top-level-exclude"},{"text":"Publish - Override .gitignore","slug":"publish---override-gitignore"},{"text":"Exports","slug":"exports"},{"text":"Permissions","slug":"permissions"},{"text":"Named permissions","slug":"named-permissions"},{"text":"Default permission","slug":"default-permission"},{"text":"Allow, deny, and ignore","slug":"allow-deny-and-ignore"},{"text":"Object form syntax","slug":"object-form-syntax"},{"text":"Available permissions","slug":"available-permissions"},{"text":"Behavior","slug":"behavior"},{"text":"Example","slug":"example"},{"text":"Test, bench, and compile permissions","slug":"test-bench-and-compile-permissions"},{"text":"Security risk","slug":"security-risk"},{"text":"Compile config","slug":"compile-config"},{"text":"An example ende.json file","slug":"an-example-endejson-file"},{"text":"JSON schema","slug":"json-schema"},{"text":"Proxies","slug":"proxies"}],"text":"This page documents the fields you can set in a ende.json (or ende.jsonc) configuration file. For an overview of how Ende discovers and applies configuration, see the Configuration concept page. The \"imports\" field in your ende.json allows you to specify dependencies used in your project. You can use it to map bare specifiers to URLs or file paths making it easier to manage dependencies and module resolution in your applications. For example, if you want to use the assert module from the standard library in your project, you could use this import map: Then your script can use the bare specifiers @ende/assert and @ende/fmt: Read more about module imports and dependencies The import map in ende.json can be used for more general path mapping of specifiers. You can map an exact specifiers to a third party module or a file directly, or you can map a part of an import specifier to a directory. Usage: Path mapping of import specifies is commonly used in larger code bases for brevity. For example: This causes import specifiers starting with @/ to be resolved relative to the import map's URL or file path. The \"scopes\" field lets you override import mappings for modules loaded from a particular path prefix, following the import maps specification. Each key is a scope (a path prefix), and its value is an import map that applies only to modules whose specifier falls under that scope. This is useful when two dependencies need different versions of the same package. In this example modules under ./legacy/ resolve @ende/assert to the older version, while the rest of the project uses the version from \"imports\". The links field in ende.json allows you to override dependencies with local packages stored on disk. This capability addresses several common development challenges: Dependency bug fixes Private local libraries Compatibility issues The package being referenced doesn't need to be published at all. It just needs to have the proper package name and metadata in ende.json, so"},{"url":"/runtime/reference/ende_serve_legacy_abort/","title":"Ende.serve request abort behavior","description":"Understand the legacy request.signal abort behavior in Ende.serve, why it is changing, and how to detect request completion with the --unstable-no-legacy-abort flag.","headings":[{"text":"Why the behavior is changing","slug":"why-the-behavior-is-changing"},{"text":"The new behavior","slug":"the-new-behavior"},{"text":"Detecting when a request has been fully delivered","slug":"detecting-when-a-request-has-been-fully-delivered"},{"text":"Migrating","slug":"migrating"}],"text":"Ende.serve historically fired the abort event on a request's AbortSignal (request.signal) whenever the request finished, including when your handler returned a successful response. The signal was meant to indicate that the client went away (for example, the connection was closed before the response was sent), but in practice it also fired on every successful response. This is the \"legacy abort\" behavior, and it is enabled by default today. The --unstable-no-legacy-abort flag opts in to the corrected behavior, which will become the default in an upcoming release. Because the signal aborted on success, code that watches request.signal could not tell the difference between \"the client disconnected\" and \"the response was delivered normally\". This breaks code such as HTTP proxies, which treat the upstream abort as a genuine failure and surface a spurious error. See issues #28850 and #29111 for background. With --unstable-no-legacy-abort enabled, request.signal aborts only when the client actually cancels the request or the connection is lost before the response has been fully sent. A successful response no longer triggers an abort. If you relied on the legacy abort to know that a response had been fully sent, use the completed promise on the second argument to the handler (ServeHandlerInfo) instead. It is the intended, mode-independent way to observe delivery: info.completed: resolves once the response (including any streaming body) has been sent to the client, and rejects if delivery failed before completing. The promise is lazily created, so handlers that never read info.completed pay no extra cost. Enable the flag while you test: or in ende.json: Use request.signal only for cancellation, and move completion/cleanup logic onto info.completed (or onto the handler's return path). Once you have adopted the new behavior, your code will continue to work unchanged when it becomes the default."},{"url":"/runtime/reference/env_variables/","title":"Environment variables","description":"A guide to working with environment variables in Ende. Learn about Ende.env API, .env file support, CLI configuration, and special environment variables that control Ende's behavior.","headings":[{"text":"Built-in Ende.env method","slug":"built-in-endeenv-method"},{"text":".env file","slug":"env-file"},{"text":"@ende/dotenv","slug":"endedotenv"},{"text":"Set a variable when running a command","slug":"set-a-variable-when-running-a-command"},{"text":"Special environment variables","slug":"special-environment-variables"}],"text":"There are a few ways to use environment variables in Ende: The Ende runtime offers built-in support for environment variables with Ende.env. Ende.env has getter and setter methods. Here is example usage: Ende also supports .env files. You can tell Ende to read environment variables from .env with the --env-file flag, for example: This will read the .env file from the current working directory or the first parent directory that contains one. If you want to load environment variables from a different file, you can specify that file as a parameter to the flag. You can pass multiple --env-file flags (e.g., ende run --env-file=.env.one --env-file=.env.two --allow-env <script>) to load variables from multiple files. When multiple declarations for the same environment variable exist within a single .env file, the first occurrence is applied. However, if the same variable is defined across multiple .env files (using multiple --env-file arguments), the value from the last file specified takes precedence. This means that the first occurrence found in the last .env file listed will be applied. The dotenv package in the standard library can be used to load environment variables from .env. Let's say you have an .env file that looks like this: Import the load module to auto-import from the .env file and into the process environment. Run this with ende run --allow-read --allow-env app.ts. Further documentation for .env handling can be found in the @ende/dotenv documentation. As with other CLI commands, you can set environment variables before running a command like so: This can be useful when you want to vary a task based on an environment variable, and can be helpfully combined with ende task commands like so: When setting environment variables that contain space characters in a .env file, ensure you enclose the value in quotes. For example: The Ende runtime has these special environment variables. name description ENDE_AUTH_TOKENS A semi-colon separated list of bearer tokens and"},{"url":"/runtime/reference/jsx/","title":"JSX","description":"Configure JSX in Ende: choosing a JSX library from JSR, the automatic runtime, rendering JSX to HTML on the server, the precompile transform, and per-file pragmas.","headings":[{"text":"Set up JSX","slug":"set-up-jsx"},{"text":"Render JSX to HTML on the server","slug":"render-jsx-to-html-on-the-server"},{"text":"Speed up server rendering","slug":"speed-up-server-rendering"},{"text":"Configure JSX per file with pragmas","slug":"configure-jsx-per-file-with-pragmas"},{"text":"Transform options reference","slug":"transform-options-reference"},{"text":"Next steps","slug":"next-steps"}],"text":"Ende runs JSX in .jsx and .tsx files with no build step. This page covers how to configure it: which JSX library to use, how to render JSX to HTML on the server, and the options that control the transform. JSX needs a library to turn tags like <h1> into values at runtime. You select it with the jsxImportSource setting in ende.json. Ende loads packages from JSR, so the library has to be published there. This page uses Hono's JSX, from jsr:@hono/hono. Static sites can also use satz's string renderer. Configure JSX once in your ende.json with the automatic runtime. You write JSX and Ende inserts the right imports for you, so you never import the JSX factory by hand: A component is just a function that returns JSX: Ende's built-in default predates the automatic runtime: it is the classic \"react\" transform, which compiles JSX to React.createElement calls and expects a React variable to be in scope. Prefer the automatic runtime above. Hono's JSX elements render to an HTML string with toString(). Text and attribute values are escaped: Ende ships a precompile transform built for server-side rendering. It analyzes your JSX at build time and turns static markup into prebuilt HTML strings, so the server skips most of the work of creating JSX objects on each request. Set jsx to \"precompile\": The JSX library has to support it: its jsx-runtime must export the jsxTemplate, jsxAttr and jsxEscape helpers the transform calls. Hono's and satz's do. When most of your project uses one setup but a single file needs another, set the import source for that file with a pragma comment instead of changing ende.json. This is common for standalone scripts that have no project configuration. The pragma must appear in the file's leading comments: If the library does not ship its own types, point Ende at a separate types module with @jsxImportSourceTypes. The same jsxImportSourceTypes is also available as a compiler option in ende.json. The jsx compiler option selects how Ende compiles JSX. Set it"},{"url":"/runtime/reference/lint_plugins/","title":"Lint Plugins","description":"Guide to creating and using custom lint plugins in Ende. Learn how to write custom lint rules, use selectors for AST matching, implement fixes, and test your plugins using Ende's lint plugin API.","headings":[{"text":"Example plugin","slug":"example-plugin"},{"text":"Using selectors to match nodes","slug":"using-selectors-to-match-nodes"},{"text":"Applying fixes","slug":"applying-fixes"},{"text":"Running cleanup code","slug":"running-cleanup-code"},{"text":"Excluding custom rules","slug":"excluding-custom-rules"},{"text":"Ignoring custom lint reports","slug":"ignoring-custom-lint-reports"},{"text":"Testing plugins","slug":"testing-plugins"}],"text":"The lint plugin API is available in Ende 2.2.0 and later, with no unstable flag required. The API is still evolving and may change in a future release. The built-in linter can be extended with plugins to add custom lint rules. Whilst Ende ships with many lint rules out of the box, there are cases where you need a custom rule tailored particularly to your project - whether to catch a context-specific problem or enforce company-wide conventions. This is where the lint plugin API comes into play. The lint plugin API is intentionally modeled after the ESLint API. While this API doesn't provide 100% compatibility, the existing knowledge of authoring ESLint plugins can be mostly reused if you happen to have written custom ESLint rules in the past. Plugins are loaded via the lint.plugins setting in ende.json. The value is an array of plugin specifiers. These can be paths or jsr: specifiers. A plugin always has the same shape. It has a default export which is your plugin object. Ende provides type declarations for the lint plugins API. All the typings are available under the Ende.lint namespace. Writing code to match a specific node can sometimes become a bit tedious if you write it in plain JavaScript. Sometimes this matching logic would be easier to express via a selector, similar to CSS selectors. By using a string as the property name in the returned visitor object, we can specify a custom selector. Note, that we can always refine our match further in JavaScript if the matching logic is too complex to be expressed as a selector alone. The full list of the supported syntax for selectors is: Syntax Description Foo + Foo Next sibling selector Foo > Bar Child combinator Foo ~ Bar Subsequent sibling combinator Foo Bar Descendant combinator Foo[attr] Attribute existence Foo[attr.length < 2] Attribute value comparison Foo[attr=/(foo|bar)*/] Attribute value regex check :first-child First child pseudo-class :last-child Last child pseudo-class :nth-child(2n + 1) Nth-child"},{"url":"/runtime/reference/lsp_integration/","title":"Language Server Integration","description":"Technical guide to integrating Ende's Language Server Protocol (LSP). Learn about LSP implementation details, custom commands, requests, notifications, and testing API integration for editor and tool developers.","headings":[{"text":"Structure","slug":"structure"},{"text":"Settings","slug":"settings"},{"text":"Commands","slug":"commands"},{"text":".cache","slug":"cache"},{"text":"showReferences","slug":"showreferences"},{"text":"test","slug":"test"},{"text":"Requests","slug":"requests"},{"text":"/cache","slug":"cache-1"},{"text":"performance","slug":"performance"},{"text":"reloadImportRegistries","slug":"reloadimportregistries"},{"text":"virtualTextDocument","slug":"virtualtextdocument"},{"text":"task","slug":"task"},{"text":"Notifications","slug":"notifications"},{"text":"Language IDs","slug":"language-ids"},{"text":"Testing","slug":"testing"},{"text":"Testing settings","slug":"testing-settings"},{"text":"Testing notifications","slug":"testing-notifications"},{"text":"ende/testModule","slug":"endetestmodule"},{"text":"ende/testModuleDelete","slug":"endetestmoduledelete"},{"text":"ende/testRunProgress","slug":"endetestrunprogress"},{"text":"Testing requests","slug":"testing-requests"},{"text":"ende/testRun","slug":"endetestrun"},{"text":"ende/testRunCancel","slug":"endetestruncancel"}],"text":"If you are looking for information how to use Ende's LSP with various editors, visit Setup your environment page. The Ende CLI comes with a built in language server that can provide an intelligent editing experience, as well as a way to easily access the other tools that come built in with Ende. For most users, using the language server would be via an editor. This page is designed for those creating integrations to the language server or providing a package registry for Ende that integrates intelligently. The Ende Language Server provides a server implementation of the Language Server Protocol which is specifically tailored to provide a an Ende view of code. It is integrated into the command line and can be started via the lsp sub-command. When the language server is started, a LanguageServer instance is created which holds all of the state of the language server. It also defines all of the methods that the client calls via the Language Server RPC protocol. The language server reads its settings from the ende section. Settings in the deno section, which the Deno editor extensions send, are still accepted. The language server supports a number of settings for a workspace: ende.enable ende.enablePaths ende.cache ende.certificateStores ende.config ende.importMap ende.internalDebug ende.codeLens.implementations ende.codeLens.references ende.codeLens.referencesAllFunctions ende.codeLens.test ende.suggest.completeFunctionCalls ende.suggest.names ende.suggest.paths ende.suggest.autoImports ende.suggest.imports.autoDiscover ende.suggest.imports.hosts ende.lint ende.tlsCertificate ende.unsafelyIgnoreCertificateErrors ende.unstable And there are settings that are supported on a per resource basis by the language server: ende.enable ende.enablePaths ende.codeLens.test Ende analyzes these settings at multiple points in the language server process. First, when the initialize request arrives from the client, the initializationOptions will be assumed to be an object that"},{"url":"/runtime/reference/migrate_deprecations/","title":"Removed and deprecated APIs","description":"Replacements for the CLI commands and Ende namespace APIs that were removed or deprecated, such as ende vendor, Ende.Buffer and Ende.run.","headings":[{"text":"ende vendor","slug":"ende-vendor"},{"text":"API changes","slug":"api-changes"}],"text":"Ende warns when code uses an API that is deprecated, and some older commands and APIs are gone. This page lists each with its replacement. The no-deprecated-deno-api lint rule flags the deprecated APIs in your code. The ende vendor command has been replaced by a \"vendor\": true configuration option in ende.json: Remote dependencies are then downloaded into a local vendor/ directory the next time they're used. Ende.Buffer Use Buffer from the Standard Library instead. See deno#9795 for details. Ende.Closer Use Closer from the Standard Library instead. See deno#9795 for details. Ende.close() Use the .close() method on the resource instead. See the Deno 1.40 blog post for details. Ende.Conn.prototype.rid Use Ende.Conn instance methods instead. See the Deno 1.40 blog post for details. Ende.ConnectTlsOptions.certChain Use the cert option instead. See deno#22274 for details. Ende.ConnectTlsOptions.certFile Use the cert option instead. See deno#22274 for details. Ende.ConnectTlsOptions.privateKey Use the key option instead. See deno#22274 for details. Ende.copy() Use copy() from the Standard Library instead. See deno#9795 for details. Ende.customInspect Use Symbol.for(\"Ende.customInspect\") instead. See deno#9294 for details. Ende.fdatasync() Use Ende.FsFile.prototype.syncData() instead. Ende.fdatasyncSync() Use Ende.FsFile.prototype.syncDataSync() instead. Ende.File Use Ende.FsFile instead. See deno#13661 for details. Ende.flock() Use Ende.FsFile.prototype.lock() instead. See deno#22178 for details. Ende.flockSync() Use Ende.FsFile.prototype.lockSync() instead. See deno#22178 for details. Ende.FsFile.prototype.rid Use Ende.FsFile instance methods instead. Ende.fstatSync() Use Ende.FsFile.prototype.statSync() instead. See the Deno 1.40 blog post for details. Ende.fstat() Use Ende.FsFile.prototype.stat() instead. See the Deno 1.40 blog post for details. Ende.FsWatcher.prototype.rid Use Ende.FsWatcher instance methods instead. See Deno 1.40 blog post for details. Ende.fsync()"},{"url":"/runtime/reference/permissions/","title":"Permissions","description":"Reference for Ende's permission system: how the runtime sandbox works and how to grant or deny file system, network, environment, system, subprocess, FFI, and import access with the --allow and --deny flags.","headings":[{"text":"Configuration file","slug":"configuration-file"},{"text":"File system access","slug":"file-system-access"},{"text":"Symbolic links","slug":"symbolic-links"},{"text":"Network access","slug":"network-access"},{"text":"Environment variables","slug":"environment-variables"},{"text":"System Information","slug":"system-information"},{"text":"Subprocesses","slug":"subprocesses"},{"text":"Subprocesses with LD_* and DYLD_* environment variables","slug":"subprocesses-with-ld_-and-dyld_-environment-variables"},{"text":"FFI (Foreign Function Interface)","slug":"ffi-foreign-function-interface"},{"text":"Importing from the Web","slug":"importing-from-the-web"}],"text":"Ende runs code in a secure sandbox: a program has no access to sensitive system I/O unless you grant it. This page is the reference for every permission and the --allow-* / --deny-* flags that control it. For the security model behind it and guidance on running untrusted code, see Security. By default, access to most system I/O is denied. There are some I/O operations that are allowed in a limited capacity, even by default. These are described below. To enable these operations, the user must explicitly grant permission to the Ende runtime. This is done by passing the --allow-read, --allow-write, --allow-net, --allow-env, --allow-run, --allow-sys, --allow-ffi, and --allow-import flags to the ende command. During execution of a script, a user can also explicitly grant permission to specific files, directories, network addresses, environment variables, and subprocesses when prompted by the runtime. Prompts are not shown if stdout/stderr are not a TTY, or when the --no-prompt flag is passed to the ende command. Users can also explicitly disallow access to specific resources by using the --deny-read, --deny-write, --deny-net, --deny-env, --deny-run, --deny-sys, --deny-ffi, and --deny-import flags. These flags take precedence over the allow flags. For example, if you allow network access but deny access to a specific domain, the deny flag will take precedence. Ende also provides a --allow-all flag that grants all permissions to the script. This disables the security sandbox entirely, and should be used with caution: with --allow-all, the script has full access to the system. Definition: -A, --allow-all By default, Ende will not generate a stack trace for permission requests as it comes with a hit to performance. Users can enable stack traces with the ENDE_TRACE_PERMISSIONS environment variable to 1. Ende can also generate an audit log of all accessed permissions, regardless of whether the access was allowed or denied. Set ENDE_AUDIT_PERMISSIONS to a file path to write"},{"url":"/runtime/reference/std/","title":"Standard library","description":"Ende's standard library: the @ende/* packages on JSR, with their modules and APIs."},{"url":"/runtime/reference/std/assert/","title":"@ende/assert","description":"A library of assertion functions. If the assertion is false an `AssertionError` will be thrown which will result in pretty-printed diff of the failing assertion."},{"url":"/runtime/reference/std/assert/almost-equals/","title":"@ende/assert/almost-equals"},{"url":"/runtime/reference/std/assert/array-includes/","title":"@ende/assert/array-includes"},{"url":"/runtime/reference/std/assert/assert/","title":"@ende/assert/assert"},{"url":"/runtime/reference/std/assert/assertion-error/","title":"@ende/assert/assertion-error"},{"url":"/runtime/reference/std/assert/equal/","title":"@ende/assert/equal"},{"url":"/runtime/reference/std/assert/equals/","title":"@ende/assert/equals"},{"url":"/runtime/reference/std/assert/exists/","title":"@ende/assert/exists"},{"url":"/runtime/reference/std/assert/fail/","title":"@ende/assert/fail"},{"url":"/runtime/reference/std/assert/false/","title":"@ende/assert/false"},{"url":"/runtime/reference/std/assert/greater-or-equal/","title":"@ende/assert/greater-or-equal"},{"url":"/runtime/reference/std/assert/greater/","title":"@ende/assert/greater"},{"url":"/runtime/reference/std/assert/instance-of/","title":"@ende/assert/instance-of"},{"url":"/runtime/reference/std/assert/is-error/","title":"@ende/assert/is-error"},{"url":"/runtime/reference/std/assert/less-or-equal/","title":"@ende/assert/less-or-equal"},{"url":"/runtime/reference/std/assert/less/","title":"@ende/assert/less"},{"url":"/runtime/reference/std/assert/match/","title":"@ende/assert/match"},{"url":"/runtime/reference/std/assert/not-equals/","title":"@ende/assert/not-equals"},{"url":"/runtime/reference/std/assert/not-instance-of/","title":"@ende/assert/not-instance-of"},{"url":"/runtime/reference/std/assert/not-match/","title":"@ende/assert/not-match"},{"url":"/runtime/reference/std/assert/not-strict-equals/","title":"@ende/assert/not-strict-equals"},{"url":"/runtime/reference/std/assert/object-match/","title":"@ende/assert/object-match"},{"url":"/runtime/reference/std/assert/rejects/","title":"@ende/assert/rejects"},{"url":"/runtime/reference/std/assert/strict-equals/","title":"@ende/assert/strict-equals"},{"url":"/runtime/reference/std/assert/string-includes/","title":"@ende/assert/string-includes"},{"url":"/runtime/reference/std/assert/throws/","title":"@ende/assert/throws"},{"url":"/runtime/reference/std/assert/unimplemented/","title":"@ende/assert/unimplemented"},{"url":"/runtime/reference/std/assert/unreachable/","title":"@ende/assert/unreachable"},{"url":"/runtime/reference/std/assert/unstable-equals/","title":"@ende/assert/unstable-equals"},{"url":"/runtime/reference/std/assert/unstable-equals/~/assertEquals/","title":"assertEquals","description":"@ende/assert/unstable-equals: Make an assertion that `actual` and `expected` are equal, deeply. If not deeply equal, then throw."},{"url":"/runtime/reference/std/assert/unstable-never/","title":"@ende/assert/unstable-never"},{"url":"/runtime/reference/std/assert/unstable-never/~/assertNever/","title":"assertNever","description":"@ende/assert/unstable-never: Make an assertion that `x` is of type `never`. If not then throw."},{"url":"/runtime/reference/std/assert/unstable-strict-equals/","title":"@ende/assert/unstable-strict-equals"},{"url":"/runtime/reference/std/assert/unstable-strict-equals/~/assertStrictEquals/","title":"assertStrictEquals","description":"@ende/assert/unstable-strict-equals: Make an assertion that `actual` and `expected` are strictly equal, using Object.is for equality comparison. If not, then throw."},{"url":"/runtime/reference/std/assert/~/AnyConstructor/","title":"AnyConstructor","description":"@ende/assert: Any constructor"},{"url":"/runtime/reference/std/assert/~/ArrayLikeArg/","title":"ArrayLikeArg","description":"@ende/assert: An array-like object (`Array`, `Uint8Array`, `NodeList`, etc.) that is not a string"},{"url":"/runtime/reference/std/assert/~/AssertionError/","title":"AssertionError","description":"@ende/assert: Error thrown when an assertion fails."},{"url":"/runtime/reference/std/assert/~/Falsy/","title":"Falsy","description":"@ende/assert: Assertion condition for assertFalse."},{"url":"/runtime/reference/std/assert/~/GetConstructorType/","title":"GetConstructorType","description":"@ende/assert: Gets constructor type"},{"url":"/runtime/reference/std/assert/~/assert/","title":"assert","description":"@ende/assert: Make an assertion, an error will be thrown if `expr` does not have a truthy value."},{"url":"/runtime/reference/std/assert/~/assertAlmostEquals/","title":"assertAlmostEquals","description":"@ende/assert: Make an assertion that `actual` and `expected` are almost equal numbers through a given tolerance. It can be used to take into account IEEE-754 double-precision floating-point representation limitations. If the values are not almost equal then throw."},{"url":"/runtime/reference/std/assert/~/assertArrayIncludes/","title":"assertArrayIncludes","description":"@ende/assert: Asserts that `actual` contains all values in `expected`, using deep equality for non-primitive values."},{"url":"/runtime/reference/std/assert/~/assertEquals/","title":"assertEquals","description":"@ende/assert: Make an assertion that `actual` and `expected` are equal, deeply. If not deeply equal, then throw."},{"url":"/runtime/reference/std/assert/~/assertExists/","title":"assertExists","description":"@ende/assert: Make an assertion that actual is not null or undefined. If not then throw."},{"url":"/runtime/reference/std/assert/~/assertFalse/","title":"assertFalse","description":"@ende/assert: Make an assertion, an error will be thrown if `expr` has a truthy value."},{"url":"/runtime/reference/std/assert/~/assertGreater/","title":"assertGreater","description":"@ende/assert: Make an assertion that `actual` is greater than `expected`. If not then throw."},{"url":"/runtime/reference/std/assert/~/assertGreaterOrEqual/","title":"assertGreaterOrEqual","description":"@ende/assert: Make an assertion that `actual` is greater than or equal to `expected`. If not then throw."},{"url":"/runtime/reference/std/assert/~/assertInstanceOf/","title":"assertInstanceOf","description":"@ende/assert: Make an assertion that `obj` is an instance of `type`. If not then throw."},{"url":"/runtime/reference/std/assert/~/assertIsError/","title":"assertIsError","description":"@ende/assert: Make an assertion that `error` is an `Error`. If not then an error will be thrown. An error class and a string that should be included in the error message can also be asserted."},{"url":"/runtime/reference/std/assert/~/assertLess/","title":"assertLess","description":"@ende/assert: Make an assertion that `actual` is less than `expected`. If not then throw."},{"url":"/runtime/reference/std/assert/~/assertLessOrEqual/","title":"assertLessOrEqual","description":"@ende/assert: Make an assertion that `actual` is less than or equal to `expected`. If not then throw."},{"url":"/runtime/reference/std/assert/~/assertMatch/","title":"assertMatch","description":"@ende/assert: Make an assertion that `actual` match RegExp `expected`. If not then throw."},{"url":"/runtime/reference/std/assert/~/assertNotEquals/","title":"assertNotEquals","description":"@ende/assert: Make an assertion that `actual` and `expected` are not equal, deeply. If not then throw."},{"url":"/runtime/reference/std/assert/~/assertNotInstanceOf/","title":"assertNotInstanceOf","description":"@ende/assert: Make an assertion that `obj` is not an instance of `type`. If so, then throw."},{"url":"/runtime/reference/std/assert/~/assertNotMatch/","title":"assertNotMatch","description":"@ende/assert: Make an assertion that `actual` not match RegExp `expected`. If match then throw."},{"url":"/runtime/reference/std/assert/~/assertNotStrictEquals/","title":"assertNotStrictEquals","description":"@ende/assert: Make an assertion that `actual` and `expected` are not strictly equal, using Object.is for equality comparison. If the values are strictly equal then throw."},{"url":"/runtime/reference/std/assert/~/assertObjectMatch/","title":"assertObjectMatch","description":"@ende/assert: Make an assertion that `expected` object is a subset of `actual` object, deeply. If not, then throw a diff of the objects, with mismatching properties highlighted."},{"url":"/runtime/reference/std/assert/~/assertRejects/","title":"assertRejects","description":"@ende/assert: Executes a function which returns a promise, expecting it to reject."},{"url":"/runtime/reference/std/assert/~/assertStrictEquals/","title":"assertStrictEquals","description":"@ende/assert: Make an assertion that `actual` and `expected` are strictly equal, using Object.is for equality comparison. If not, then throw."},{"url":"/runtime/reference/std/assert/~/assertStringIncludes/","title":"assertStringIncludes","description":"@ende/assert: Make an assertion that actual includes expected. If not then throw."},{"url":"/runtime/reference/std/assert/~/assertThrows/","title":"assertThrows","description":"@ende/assert: Executes a function, expecting it to throw. If it does not, then it throws."},{"url":"/runtime/reference/std/assert/~/equal/","title":"equal","description":"@ende/assert: Deep equality comparison used in assertions."},{"url":"/runtime/reference/std/assert/~/fail/","title":"fail","description":"@ende/assert: Forcefully throws a failed assertion."},{"url":"/runtime/reference/std/assert/~/unimplemented/","title":"unimplemented","description":"@ende/assert: Use this to stub out methods that will throw when invoked."},{"url":"/runtime/reference/std/assert/~/unreachable/","title":"unreachable","description":"@ende/assert: Use this to assert unreachable code."},{"url":"/runtime/reference/std/async/","title":"@ende/async","description":"Provide helpers with asynchronous tasks, like delay, debounce, retry, or pooledMap."},{"url":"/runtime/reference/std/async/abortable/","title":"@ende/async/abortable"},{"url":"/runtime/reference/std/async/all-keyed/","title":"@ende/async/all-keyed"},{"url":"/runtime/reference/std/async/channel/","title":"@ende/async/channel"},{"url":"/runtime/reference/std/async/deadline/","title":"@ende/async/deadline"},{"url":"/runtime/reference/std/async/debounce/","title":"@ende/async/debounce"},{"url":"/runtime/reference/std/async/delay/","title":"@ende/async/delay"},{"url":"/runtime/reference/std/async/lazy/","title":"@ende/async/lazy"},{"url":"/runtime/reference/std/async/mux-async-iterator/","title":"@ende/async/mux-async-iterator"},{"url":"/runtime/reference/std/async/poll/","title":"@ende/async/poll"},{"url":"/runtime/reference/std/async/pool/","title":"@ende/async/pool"},{"url":"/runtime/reference/std/async/retry/","title":"@ende/async/retry"},{"url":"/runtime/reference/std/async/tee/","title":"@ende/async/tee"},{"url":"/runtime/reference/std/async/unstable-abortable/","title":"@ende/async/unstable-abortable"},{"url":"/runtime/reference/std/async/unstable-abortable/~/AbortableOptions/","title":"AbortableOptions","description":"@ende/async/unstable-abortable: Options for abortable."},{"url":"/runtime/reference/std/async/unstable-abortable/~/abortable/","title":"abortable","description":"@ende/async/unstable-abortable: Make a Promise abortable with the given signal."},{"url":"/runtime/reference/std/async/unstable-circuit-breaker/","title":"@ende/async/unstable-circuit-breaker"},{"url":"/runtime/reference/std/async/unstable-circuit-breaker/~/CircuitBreaker/","title":"CircuitBreaker","description":"@ende/async/unstable-circuit-breaker: A circuit breaker that wraps async operations to prevent cascading failures."},{"url":"/runtime/reference/std/async/unstable-circuit-breaker/~/CircuitBreakerExecuteOptions/","title":"CircuitBreakerExecuteOptions","description":"@ende/async/unstable-circuit-breaker: Options for CircuitBreaker.execute."},{"url":"/runtime/reference/std/async/unstable-circuit-breaker/~/CircuitBreakerOpenError/","title":"CircuitBreakerOpenError","description":"@ende/async/unstable-circuit-breaker: Error thrown when CircuitBreaker is open and rejects a request."},{"url":"/runtime/reference/std/async/unstable-circuit-breaker/~/CircuitBreakerOptions/","title":"CircuitBreakerOptions","description":"@ende/async/unstable-circuit-breaker: Options for CircuitBreaker."},{"url":"/runtime/reference/std/async/unstable-circuit-breaker/~/CircuitState/","title":"CircuitState","description":"@ende/async/unstable-circuit-breaker: Circuit breaker states following the standard pattern. - `\"closed\"`: Normal operation, requests pass through - `\"open\"`: Failing, all requests rejected immediately - `\"half_open\"`: Testing recovery, limited requests allowed"},{"url":"/runtime/reference/std/async/unstable-mux-async-iterator/","title":"@ende/async/unstable-mux-async-iterator"},{"url":"/runtime/reference/std/async/unstable-mux-async-iterator/~/MuxAsyncIterator/","title":"MuxAsyncIterator","description":"@ende/async/unstable-mux-async-iterator: Multiplexes multiple async iterators into a single stream. It currently makes an assumption that the final result (the value returned and not yielded from the iterator) does not matter; if there is any result, it is discarded."},{"url":"/runtime/reference/std/async/unstable-pool-settled/","title":"@ende/async/unstable-pool-settled"},{"url":"/runtime/reference/std/async/unstable-pool-settled/~/PooledMapSettledOptions/","title":"PooledMapSettledOptions","description":"@ende/async/unstable-pool-settled: Options for pooledMapSettled."},{"url":"/runtime/reference/std/async/unstable-pool-settled/~/pooledMapSettled/","title":"pooledMapSettled","description":"@ende/async/unstable-pool-settled: Like pooledMap, but does not fail fast. Every item is processed regardless of earlier failures. Results are yielded as PromiseSettledResult objects in input order."},{"url":"/runtime/reference/std/async/unstable-pool/","title":"@ende/async/unstable-pool"},{"url":"/runtime/reference/std/async/unstable-pool/~/PooledMapOptions/","title":"PooledMapOptions","description":"@ende/async/unstable-pool: Options for pooledMap."},{"url":"/runtime/reference/std/async/unstable-pool/~/pooledMap/","title":"pooledMap","description":"@ende/async/unstable-pool: Transforms values from an (async) iterable into another async iterable. The transforms are done concurrently, with a max concurrency defined by `poolLimit`."},{"url":"/runtime/reference/std/async/unstable-retry/","title":"@ende/async/unstable-retry"},{"url":"/runtime/reference/std/async/unstable-retry/~/RetryOptions/","title":"RetryOptions","description":"@ende/async/unstable-retry: Options for retry."},{"url":"/runtime/reference/std/async/unstable-retry/~/retry/","title":"retry","description":"@ende/async/unstable-retry: Calls the given (possibly asynchronous) function up to `maxAttempts` times. Retries as long as the given function throws. If the attempts are exhausted, throws a RetryError with `cause` set to the inner exception."},{"url":"/runtime/reference/std/async/unstable-semaphore/","title":"@ende/async/unstable-semaphore"},{"url":"/runtime/reference/std/async/unstable-semaphore/~/Semaphore/","title":"Semaphore","description":"@ende/async/unstable-semaphore: A counting semaphore for limiting concurrent access to a resource."},{"url":"/runtime/reference/std/async/unstable-throttle/","title":"@ende/async/unstable-throttle"},{"url":"/runtime/reference/std/async/unstable-throttle/~/ThrottleOptions/","title":"ThrottleOptions","description":"@ende/async/unstable-throttle: Options for throttle"},{"url":"/runtime/reference/std/async/unstable-throttle/~/ThrottledFunction/","title":"ThrottledFunction","description":"@ende/async/unstable-throttle: A throttled function that will be executed at most once during the specified `timeframe` in milliseconds."},{"url":"/runtime/reference/std/async/unstable-throttle/~/throttle/","title":"throttle","description":"@ende/async/unstable-throttle: Creates a throttled function that prevents the given `func` from being called more than once within a given `timeframe` in milliseconds."},{"url":"/runtime/reference/std/async/unstable-wait-for/","title":"@ende/async/unstable-wait-for"},{"url":"/runtime/reference/std/async/unstable-wait-for/~/WaitForOptions/","title":"WaitForOptions","description":"@ende/async/unstable-wait-for: Options for waitFor."},{"url":"/runtime/reference/std/async/unstable-wait-for/~/waitFor/","title":"waitFor","description":"@ende/async/unstable-wait-for: Resolve a Promise after a given predicate becomes true or the timeout amount of milliseconds has been reached."},{"url":"/runtime/reference/std/async/~/Channel/","title":"Channel","description":"@ende/async: An async channel for communicating between concurrent tasks with optional bounded buffering and backpressure."},{"url":"/runtime/reference/std/async/~/ChannelClosedError/","title":"ChannelClosedError","description":"@ende/async: Error thrown when operating on a closed channel. When thrown from Channel.send, the `value` property carries the unsent value for recovery."},{"url":"/runtime/reference/std/async/~/ChannelOptions/","title":"ChannelOptions","description":"@ende/async: Options for the Channel constructor."},{"url":"/runtime/reference/std/async/~/ChannelReceiveOptions/","title":"ChannelReceiveOptions","description":"@ende/async: Options for Channel.receive."},{"url":"/runtime/reference/std/async/~/ChannelReceiveResult/","title":"ChannelReceiveResult","description":"@ende/async: Result of a non-blocking Channel.tryReceive call. Discriminate on the `state` field:"},{"url":"/runtime/reference/std/async/~/ChannelSendOptions/","title":"ChannelSendOptions","description":"@ende/async: Options for Channel.send."},{"url":"/runtime/reference/std/async/~/DeadlineOptions/","title":"DeadlineOptions","description":"@ende/async: Options for deadline."},{"url":"/runtime/reference/std/async/~/DebounceOptions/","title":"DebounceOptions","description":"@ende/async: Options for debounce."},{"url":"/runtime/reference/std/async/~/DebouncedFunction/","title":"DebouncedFunction","description":"@ende/async: A debounced function whose execution is delayed by a given `wait` time in milliseconds. If the function is called again before the timeout expires, the previous call will be aborted."},{"url":"/runtime/reference/std/async/~/DelayOptions/","title":"DelayOptions","description":"@ende/async: Options for delay."},{"url":"/runtime/reference/std/async/~/Lazy/","title":"Lazy","description":"@ende/async: A lazy value that is initialized at most once, with built-in deduplication of concurrent callers. Prevents the common race where two concurrent `get()` calls both trigger the initializer; only one initialization runs and all callers share the same promise."},{"url":"/runtime/reference/std/async/~/LazyGetOptions/","title":"LazyGetOptions","description":"@ende/async: Options for Lazy.prototype.get."},{"url":"/runtime/reference/std/async/~/MuxAsyncIterator/","title":"MuxAsyncIterator","description":"@ende/async: Multiplexes multiple async iterators into a single stream. It currently makes an assumption that the final result (the value returned and not yielded from the iterator) does not matter; if there is any result, it is discarded."},{"url":"/runtime/reference/std/async/~/PollOptions/","title":"PollOptions","description":"@ende/async: Options for poll."},{"url":"/runtime/reference/std/async/~/PromiseRecord/","title":"PromiseRecord","description":"@ende/async: A record type where values can be promise-like (thenables) or plain values."},{"url":"/runtime/reference/std/async/~/RetryError/","title":"RetryError","description":"@ende/async: Error thrown in retry once the maximum number of failed attempts has been reached."},{"url":"/runtime/reference/std/async/~/RetryOptions/","title":"RetryOptions","description":"@ende/async: Options for retry."},{"url":"/runtime/reference/std/async/~/SettledRecord/","title":"SettledRecord","description":"@ende/async: A record type where values are PromiseSettledResult objects."},{"url":"/runtime/reference/std/async/~/Tuple/","title":"Tuple","description":"@ende/async: Utility for representing n-tuple. Used in tee."},{"url":"/runtime/reference/std/async/~/TupleOf/","title":"TupleOf","description":"@ende/async: Utility for representing n-tuple of. Used in Tuple."},{"url":"/runtime/reference/std/async/~/abortable/","title":"abortable","description":"@ende/async: Make a Promise abortable with the given signal."},{"url":"/runtime/reference/std/async/~/allKeyed/","title":"allKeyed","description":"@ende/async: Resolves all values in a record of promises in parallel, returning a promise that resolves to a record with the same keys and resolved values."},{"url":"/runtime/reference/std/async/~/allSettledKeyed/","title":"allSettledKeyed","description":"@ende/async: Resolves all values in a record of promises in parallel, returning a promise that resolves to a record with the same keys and PromiseSettledResult objects as values."},{"url":"/runtime/reference/std/async/~/deadline/","title":"deadline","description":"@ende/async: Create a promise which will be rejected with DOMException when a given delay is exceeded."},{"url":"/runtime/reference/std/async/~/debounce/","title":"debounce","description":"@ende/async: Creates a debounced function that delays the given `func` by a given `wait` time in milliseconds. If the method is called again before the timeout expires, the previous call will be aborted."},{"url":"/runtime/reference/std/async/~/delay/","title":"delay","description":"@ende/async: Resolve a Promise after a given amount of milliseconds."},{"url":"/runtime/reference/std/async/~/poll/","title":"poll","description":"@ende/async: Repeatedly calls a function until a condition is met, then returns the result."},{"url":"/runtime/reference/std/async/~/pooledMap/","title":"pooledMap","description":"@ende/async: pooledMap transforms values from an (async) iterable into another async iterable. The transforms are done concurrently, with a max concurrency defined by the poolLimit."},{"url":"/runtime/reference/std/async/~/retry/","title":"retry","description":"@ende/async: Calls the given (possibly asynchronous) function up to `maxAttempts` times. Retries as long as the given function throws. If the attempts are exhausted, throws a RetryError with `cause` set to the inner exception."},{"url":"/runtime/reference/std/async/~/tee/","title":"tee","description":"@ende/async: Branches the given async iterable into the `n` branches."},{"url":"/runtime/reference/std/bytes/","title":"@ende/bytes","description":"Helper functions for working with Uint8Array byte slices."},{"url":"/runtime/reference/std/bytes/concat/","title":"@ende/bytes/concat"},{"url":"/runtime/reference/std/bytes/copy/","title":"@ende/bytes/copy"},{"url":"/runtime/reference/std/bytes/ends-with/","title":"@ende/bytes/ends-with"},{"url":"/runtime/reference/std/bytes/equals/","title":"@ende/bytes/equals"},{"url":"/runtime/reference/std/bytes/includes-needle/","title":"@ende/bytes/includes-needle"},{"url":"/runtime/reference/std/bytes/index-of-needle/","title":"@ende/bytes/index-of-needle"},{"url":"/runtime/reference/std/bytes/last-index-of-needle/","title":"@ende/bytes/last-index-of-needle"},{"url":"/runtime/reference/std/bytes/repeat/","title":"@ende/bytes/repeat"},{"url":"/runtime/reference/std/bytes/starts-with/","title":"@ende/bytes/starts-with"},{"url":"/runtime/reference/std/bytes/~/Uint8Array_/","title":"Uint8Array_","description":"@ende/bytes: Proxy type of {@code Uint8Array<ArrayBuffer>} or {@code Uint8Array} in TypeScript 5.7 or below respectively."},{"url":"/runtime/reference/std/bytes/~/concat/","title":"concat","description":"@ende/bytes: Concatenate an array of byte slices into a single slice."},{"url":"/runtime/reference/std/bytes/~/copy/","title":"copy","description":"@ende/bytes: Copy bytes from the source array to the destination array and returns the number of bytes copied."},{"url":"/runtime/reference/std/bytes/~/endsWith/","title":"endsWith","description":"@ende/bytes: Returns `true` if the suffix array appears at the end of the source array, `false` otherwise."},{"url":"/runtime/reference/std/bytes/~/equals/","title":"equals","description":"@ende/bytes: Check whether byte slices are equal to each other."},{"url":"/runtime/reference/std/bytes/~/includesNeedle/","title":"includesNeedle","description":"@ende/bytes: Determines whether the source array contains the needle array."},{"url":"/runtime/reference/std/bytes/~/indexOfNeedle/","title":"indexOfNeedle","description":"@ende/bytes: Returns the index of the first occurrence of the needle array in the source array, or -1 if it is not present."},{"url":"/runtime/reference/std/bytes/~/lastIndexOfNeedle/","title":"lastIndexOfNeedle","description":"@ende/bytes: Returns the index of the last occurrence of the needle array in the source array, or -1 if it is not present."},{"url":"/runtime/reference/std/bytes/~/repeat/","title":"repeat","description":"@ende/bytes: Returns a new byte slice composed of `count` repetitions of the `source` array."},{"url":"/runtime/reference/std/bytes/~/startsWith/","title":"startsWith","description":"@ende/bytes: Returns `true` if the prefix array appears at the start of the source array, `false` otherwise."},{"url":"/runtime/reference/std/cache/","title":"@ende/cache","description":"In-memory cache utilities, such as memoization and caches with different expiration policies."},{"url":"/runtime/reference/std/cache/lru-cache/","title":"@ende/cache/lru-cache"},{"url":"/runtime/reference/std/cache/memoize/","title":"@ende/cache/memoize"},{"url":"/runtime/reference/std/cache/memoize/~/MemoizationCache/","title":"MemoizationCache","description":"@ende/cache/memoize: A cache suitable for use with memoize."},{"url":"/runtime/reference/std/cache/ttl-cache/","title":"@ende/cache/ttl-cache"},{"url":"/runtime/reference/std/cache/~/LruCache/","title":"LruCache","description":"@ende/cache: Least-recently-used cache."},{"url":"/runtime/reference/std/cache/~/LruCacheEjectionReason/","title":"LruCacheEjectionReason","description":"@ende/cache: The reason an entry was removed from the cache."},{"url":"/runtime/reference/std/cache/~/LruCacheOptions/","title":"LruCacheOptions","description":"@ende/cache: Options for the LruCache constructor."},{"url":"/runtime/reference/std/cache/~/MemoizationCacheResult/","title":"MemoizationCacheResult","description":"@ende/cache: The result of a memoized function, as stored in its cache."},{"url":"/runtime/reference/std/cache/~/MemoizeOptions/","title":"MemoizeOptions","description":"@ende/cache: Options for memoize."},{"url":"/runtime/reference/std/cache/~/TtlCache/","title":"TtlCache","description":"@ende/cache: Time-to-live cache."},{"url":"/runtime/reference/std/cache/~/TtlCacheOptions/","title":"TtlCacheOptions","description":"@ende/cache: Options for the TtlCache constructor."},{"url":"/runtime/reference/std/cache/~/TtlCacheSetOptions/","title":"TtlCacheSetOptions","description":"@ende/cache: Options for TtlCache.prototype.set."},{"url":"/runtime/reference/std/cache/~/memoize/","title":"memoize","description":"@ende/cache: Cache the results of a function based on its arguments."},{"url":"/runtime/reference/std/cbor/","title":"@ende/cbor","description":"Concise Binary Object Representation (CBOR) is a binary data serialization format optimized for compactness and efficiency. It is designed to encode a wide range of data types, including integers, strings, arrays, and maps, in a space-efficient manner. RFC 8949 - Concise Binary Object Representation (CBOR) spec."},{"url":"/runtime/reference/std/cbor/array-encoder-stream/","title":"@ende/cbor/array-encoder-stream"},{"url":"/runtime/reference/std/cbor/byte-encoder-stream/","title":"@ende/cbor/byte-encoder-stream"},{"url":"/runtime/reference/std/cbor/decode-cbor-sequence/","title":"@ende/cbor/decode-cbor-sequence"},{"url":"/runtime/reference/std/cbor/decode-cbor/","title":"@ende/cbor/decode-cbor"},{"url":"/runtime/reference/std/cbor/encode-cbor-sequence/","title":"@ende/cbor/encode-cbor-sequence"},{"url":"/runtime/reference/std/cbor/encode-cbor/","title":"@ende/cbor/encode-cbor"},{"url":"/runtime/reference/std/cbor/map-encoder-stream/","title":"@ende/cbor/map-encoder-stream"},{"url":"/runtime/reference/std/cbor/sequence-decoder-stream/","title":"@ende/cbor/sequence-decoder-stream"},{"url":"/runtime/reference/std/cbor/sequence-encoder-stream/","title":"@ende/cbor/sequence-encoder-stream"},{"url":"/runtime/reference/std/cbor/tag/","title":"@ende/cbor/tag"},{"url":"/runtime/reference/std/cbor/text-encoder-stream/","title":"@ende/cbor/text-encoder-stream"},{"url":"/runtime/reference/std/cbor/types/","title":"@ende/cbor/types"},{"url":"/runtime/reference/std/cbor/~/CborArrayDecodedStream/","title":"CborArrayDecodedStream","description":"@ende/cbor: A ReadableStream that wraps the decoded CBOR \"Array\". RFC 8949 - Concise Binary Object Representation (CBOR)"},{"url":"/runtime/reference/std/cbor/~/CborArrayEncoderStream/","title":"CborArrayEncoderStream","description":"@ende/cbor: A TransformStream that encodes a ReadableStream<CborStreamInput> into CBOR \"Indefinite Length Array\". RFC 8949 - Concise Binary Object Representation (CBOR)"},{"url":"/runtime/reference/std/cbor/~/CborByteDecodedStream/","title":"CborByteDecodedStream","description":"@ende/cbor: A ReadableStream that wraps the decoded CBOR \"Byte String\". RFC 8949 - Concise Binary Object Representation (CBOR)"},{"url":"/runtime/reference/std/cbor/~/CborByteEncoderStream/","title":"CborByteEncoderStream","description":"@ende/cbor: A TransformStream that encodes a ReadableStream<Uint8Array> into CBOR \"Indefinite Length Byte String\". RFC 8949 - Concise Binary Object Representation (CBOR)"},{"url":"/runtime/reference/std/cbor/~/CborMapDecodedStream/","title":"CborMapDecodedStream","description":"@ende/cbor: A ReadableStream that wraps the decoded CBOR \"Map\". RFC 8949 - Concise Binary Object Representation (CBOR)"},{"url":"/runtime/reference/std/cbor/~/CborMapEncoderStream/","title":"CborMapEncoderStream","description":"@ende/cbor: A TransformStream that encodes a ReadableStream<CborMapStreamInput> into CBOR \"Indefinite Length Map\". RFC 8949 - Concise Binary Object Representation (CBOR)"},{"url":"/runtime/reference/std/cbor/~/CborMapStreamInput/","title":"CborMapStreamInput","description":"@ende/cbor: Specifies the structure of input for the CborMapEncoderStream."},{"url":"/runtime/reference/std/cbor/~/CborMapStreamOutput/","title":"CborMapStreamOutput","description":"@ende/cbor: Specifies the structure of the output for the CborMapDecodedStream."},{"url":"/runtime/reference/std/cbor/~/CborPrimitiveType/","title":"CborPrimitiveType","description":"@ende/cbor: This type specifies the primitive types that the implementation can encode/decode into/from."},{"url":"/runtime/reference/std/cbor/~/CborSequenceDecoderStream/","title":"CborSequenceDecoderStream","description":"@ende/cbor: A TransformStream that decodes a CBOR-sequence-encoded ReadableStream<Uint8Array> into the JavaScript equivalent values represented as ReadableStream<CborStreamOutput>. RFC 8949 - Concise Binary Object Representation (CBOR)"},{"url":"/runtime/reference/std/cbor/~/CborSequenceEncoderStream/","title":"CborSequenceEncoderStream","description":"@ende/cbor: A TransformStream that encodes a ReadableStream<CborStreamInput> into CBOR format sequence. RFC 8949 - Concise Binary Object Representation (CBOR)"},{"url":"/runtime/reference/std/cbor/~/CborStreamInput/","title":"CborStreamInput","description":"@ende/cbor: Specifies the encodable value types for the CborSequenceEncoderStream and CborArrayEncoderStream."},{"url":"/runtime/reference/std/cbor/~/CborStreamOutput/","title":"CborStreamOutput","description":"@ende/cbor: Specifies the decodable value types for the CborSequenceDecoderStream and CborMapDecodedStream."},{"url":"/runtime/reference/std/cbor/~/CborTag/","title":"CborTag","description":"@ende/cbor: Represents a CBOR tag, which pairs a tag number with content, used to convey additional semantic information in CBOR-encoded data. CBOR Tags."},{"url":"/runtime/reference/std/cbor/~/CborTextDecodedStream/","title":"CborTextDecodedStream","description":"@ende/cbor: A ReadableStream that wraps the decoded CBOR \"Text String\". RFC 8949 - Concise Binary Object Representation (CBOR)"},{"url":"/runtime/reference/std/cbor/~/CborTextEncoderStream/","title":"CborTextEncoderStream","description":"@ende/cbor: A TransformStream that encodes a ReadableStream<string> into CBOR \"Indefinite Length Text String\". RFC 8949 - Concise Binary Object Representation (CBOR)"},{"url":"/runtime/reference/std/cbor/~/CborType/","title":"CborType","description":"@ende/cbor: This type specifies the encodable and decodable values for encodeCbor, decodeCbor, encodeCborSequence, and decodeCborSequence."},{"url":"/runtime/reference/std/cbor/~/decodeCbor/","title":"decodeCbor","description":"@ende/cbor: Decodes a CBOR-encoded Uint8Array into the JavaScript equivalent values represented as a CborType. RFC 8949 - Concise Binary Object Representation (CBOR)"},{"url":"/runtime/reference/std/cbor/~/decodeCborSequence/","title":"decodeCborSequence","description":"@ende/cbor: Decodes a CBOR-sequence-encoded Uint8Array into the JavaScript equivalent values represented as a CBorType array. RFC 8949 - Concise Binary Object Representation (CBOR)"},{"url":"/runtime/reference/std/cbor/~/encodeCbor/","title":"encodeCbor","description":"@ende/cbor: Encodes a CborType value into a CBOR format represented as a Uint8Array. RFC 8949 - Concise Binary Object Representation (CBOR)"},{"url":"/runtime/reference/std/cbor/~/encodeCborSequence/","title":"encodeCborSequence","description":"@ende/cbor: Encodes an array of CborType values into a CBOR format sequence represented as a Uint8Array. RFC 8949 - Concise Binary Object Representation (CBOR)"},{"url":"/runtime/reference/std/chronver/","title":"@ende/chronver","description":"The Chronological Version parser."},{"url":"/runtime/reference/std/chronver/can-parse/","title":"@ende/chronver/can-parse"},{"url":"/runtime/reference/std/chronver/compare/","title":"@ende/chronver/compare"},{"url":"/runtime/reference/std/chronver/equals/","title":"@ende/chronver/equals"},{"url":"/runtime/reference/std/chronver/format/","title":"@ende/chronver/format"},{"url":"/runtime/reference/std/chronver/from-date/","title":"@ende/chronver/from-date"},{"url":"/runtime/reference/std/chronver/greater-or-equal/","title":"@ende/chronver/greater-or-equal"},{"url":"/runtime/reference/std/chronver/greater-than/","title":"@ende/chronver/greater-than"},{"url":"/runtime/reference/std/chronver/increment/","title":"@ende/chronver/increment"},{"url":"/runtime/reference/std/chronver/is-chronver/","title":"@ende/chronver/is-chronver"},{"url":"/runtime/reference/std/chronver/less-or-equal/","title":"@ende/chronver/less-or-equal"},{"url":"/runtime/reference/std/chronver/less-than/","title":"@ende/chronver/less-than"},{"url":"/runtime/reference/std/chronver/parse/","title":"@ende/chronver/parse"},{"url":"/runtime/reference/std/chronver/sort/","title":"@ende/chronver/sort"},{"url":"/runtime/reference/std/chronver/try-parse/","title":"@ende/chronver/try-parse"},{"url":"/runtime/reference/std/chronver/types/","title":"@ende/chronver/types"},{"url":"/runtime/reference/std/chronver/~/ChronVer/","title":"ChronVer","description":"@ende/chronver: A ChronVer object parsed into its constituent parts."},{"url":"/runtime/reference/std/chronver/~/canParse/","title":"canParse","description":"@ende/chronver: Returns true if the string can be parsed as ChronVer."},{"url":"/runtime/reference/std/chronver/~/compare/","title":"compare","description":"@ende/chronver: Compare two ChronVers."},{"url":"/runtime/reference/std/chronver/~/equals/","title":"equals","description":"@ende/chronver: Returns `true` if both ChronVers are equivalent."},{"url":"/runtime/reference/std/chronver/~/format/","title":"format","description":"@ende/chronver: Formats a ChronVer object into a string."},{"url":"/runtime/reference/std/chronver/~/fromDate/","title":"fromDate","description":"@ende/chronver: Creates a ChronVer from a date, using the date's local time."},{"url":"/runtime/reference/std/chronver/~/greaterOrEqual/","title":"greaterOrEqual","description":"@ende/chronver: Greater than or equal to comparison for two ChronVers."},{"url":"/runtime/reference/std/chronver/~/greaterThan/","title":"greaterThan","description":"@ende/chronver: Greater than comparison for two ChronVers."},{"url":"/runtime/reference/std/chronver/~/increment/","title":"increment","description":"@ende/chronver: Returns the next version on the given date, in local time."},{"url":"/runtime/reference/std/chronver/~/isChronVer/","title":"isChronVer","description":"@ende/chronver: Checks to see if value is a valid ChronVer object: one that format accepts and that parse reads back unchanged. The year must be from 1 to 9999, the date a real calendar date and the changeset a non-negative safe integer. The feature, if present, may only contain letters, digits and hyphens (not only hyphens), can't be `break`, and can't be combined with `isBreaking`."},{"url":"/runtime/reference/std/chronver/~/lessOrEqual/","title":"lessOrEqual","description":"@ende/chronver: Less than or equal to comparison for two ChronVers."},{"url":"/runtime/reference/std/chronver/~/lessThan/","title":"lessThan","description":"@ende/chronver: Less than comparison for two ChronVers."},{"url":"/runtime/reference/std/chronver/~/parse/","title":"parse","description":"@ende/chronver: Parses a string as a ChronVer, returning a ChronVer object."},{"url":"/runtime/reference/std/chronver/~/sort/","title":"sort","description":"@ende/chronver: Sorts ChronVer strings, returning a new array."},{"url":"/runtime/reference/std/chronver/~/tryParse/","title":"tryParse","description":"@ende/chronver: Returns the parsed ChronVer, or `undefined` if it's not valid."},{"url":"/runtime/reference/std/cli/","title":"@ende/cli","description":"Tools for creating interactive command line tools."},{"url":"/runtime/reference/std/cli/parse-args/","title":"@ende/cli/parse-args","description":"Command line arguments parser based on minimist."},{"url":"/runtime/reference/std/cli/prompt-secret/","title":"@ende/cli/prompt-secret"},{"url":"/runtime/reference/std/cli/unicode-width/","title":"@ende/cli/unicode-width"},{"url":"/runtime/reference/std/cli/unstable-ansi/","title":"@ende/cli/unstable-ansi","description":"Ansi is a module that offers export function s and variables that returns various Ansi Escape Sequences. This class is not an exhaustive list of what is possible with Ansi Escape Sequences, nor does it guarantee that every code will work in every terminal. The only way to guarantee that only one code will work in a particular terminal, is to check for yourself. Calling these export function s and variables does not automatically change the terminal settings. Only once they are passed to stdout or stderr will they take effect."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/CursorStyle/","title":"CursorStyle","description":"@ende/cli/unstable-ansi: CursorStyle is a export const enum used to set the value in setCursorStyle."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/DISABLE_AUTO_WRAP/","title":"DISABLE_AUTO_WRAP","description":"@ende/cli/unstable-ansi: Causes cursor to remain on the same line when it hits the end of the current line. See also ENABLE_AUTO_WRAP."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/DISABLE_ORIGIN_MODE/","title":"DISABLE_ORIGIN_MODE","description":"@ende/cli/unstable-ansi: Causes the top and bottom margins to enlarge to the user's display. See ENABLE_ORIGIN_MODE."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/DOUBLE_HEIGHT_BOTTOM/","title":"DOUBLE_HEIGHT_BOTTOM","description":"@ende/cli/unstable-ansi: Causes content on the current line to enlarge, showing only the bottom half of the characters with each character taking up two columns. Can be used in combination with DOUBLE_HEIGHT_TOP on the previous line to make text appear twice as big."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/DOUBLE_HEIGHT_TOP/","title":"DOUBLE_HEIGHT_TOP","description":"@ende/cli/unstable-ansi: Causes content on the current line to enlarge, showing only the top half of characters with each character taking up two columns. Can be used in combination with DOUBLE_HEIGHT_BOTTOM on the next line to make text appear twice as big."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/DOUBLE_WIDTH/","title":"DOUBLE_WIDTH","description":"@ende/cli/unstable-ansi: Causes content on the current line to stretch out, with each character taking up two columns. Can be reverted with SINGLE_WIDTH."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/ENABLE_AUTO_WRAP/","title":"ENABLE_AUTO_WRAP","description":"@ende/cli/unstable-ansi: Causes cursor to automatically move to the next line when it hits the end of the current line to continue writing. See also DISABLE_AUTO_WRAP."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/ENABLE_ORIGIN_MODE/","title":"ENABLE_ORIGIN_MODE","description":"@ende/cli/unstable-ansi: Causes top and bottom margins to shrink to scrollable region (See setScrollableRegion) preventing the cursor from moving to the lines outside it."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/ERASE_DISPLAY/","title":"ERASE_DISPLAY","description":"@ende/cli/unstable-ansi: Erases all content."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/ERASE_DISPLAY_AFTER_CURSOR/","title":"ERASE_DISPLAY_AFTER_CURSOR","description":"@ende/cli/unstable-ansi: Erases content of lines below cursor position and content to the right on the same line as cursor."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/ERASE_DISPLAY_BEFORE_CURSOR/","title":"ERASE_DISPLAY_BEFORE_CURSOR","description":"@ende/cli/unstable-ansi: Erases content of lines above cursor position and content to the left on the same line as cursor."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/ERASE_LINE/","title":"ERASE_LINE","description":"@ende/cli/unstable-ansi: Erases entire line content."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/ERASE_LINE_AFTER_CURSOR/","title":"ERASE_LINE_AFTER_CURSOR","description":"@ende/cli/unstable-ansi: Erases line content to the right of cursor position."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/ERASE_LINE_BEFORE_CURSOR/","title":"ERASE_LINE_BEFORE_CURSOR","description":"@ende/cli/unstable-ansi: Erases line content to the left of cursor position."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/HARD_RESET/","title":"HARD_RESET","description":"@ende/cli/unstable-ansi: This is a full reset of the terminal, reverting it back to its original default settings, clearing the screen, resetting modes, colors, character sets and more. Essentially making the terminal behave as if it were just started by the user. This command is very disruptive to the user. Also see SOFT_RESET."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/HIDE_CURSOR/","title":"HIDE_CURSOR","description":"@ende/cli/unstable-ansi: Causes cursor position to be hidden from the user. See also SHOW_CURSOR."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/INSERT_MODE/","title":"INSERT_MODE","description":"@ende/cli/unstable-ansi: Causes existing characters to the right of the cursor position to shift right as new characters are written. Opposite of REPLACE_MODE."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/REPLACE_MODE/","title":"REPLACE_MODE","description":"@ende/cli/unstable-ansi: Causes existing characters to be overwritten at the cursor position by new characters. See also INSERT_MODE."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/RESTORE_CURSOR/","title":"RESTORE_CURSOR","description":"@ende/cli/unstable-ansi: Restores: - cursor position - graphic rendition - character set shift state - state of wrap flag ENABLE_AUTO_WRAP - state of origin mode ENABLE_ORIGIN_MODE - selective eraser"},{"url":"/runtime/reference/std/cli/unstable-ansi/~/SAVE_CURSOR/","title":"SAVE_CURSOR","description":"@ende/cli/unstable-ansi: Saves: - cursor position - graphic rendition - character set shift state - state of wrap flag ENABLE_AUTO_WRAP - state of origin mode ENABLE_ORIGIN_MODE - selective eraser"},{"url":"/runtime/reference/std/cli/unstable-ansi/~/SHOW_CURSOR/","title":"SHOW_CURSOR","description":"@ende/cli/unstable-ansi: Causes cursor position to be visible to the user. See also HIDE_CURSOR."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/SINGLE_WIDTH/","title":"SINGLE_WIDTH","description":"@ende/cli/unstable-ansi: Causes content on the current line to shrink down to a single column, essentially reverting the effects of DOUBLE_HEIGHT_TOP, DOUBLE_HEIGHT_BOTTOM, or DOUBLE_WIDTH."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/SOFT_RESET/","title":"SOFT_RESET","description":"@ende/cli/unstable-ansi: This command resets many settings to their initial state without fully reinitializing the terminal like HARD_RESET. It preserves things like cursor position and display content, but clears modes, character sets, etc. Should probably be called when exiting the program."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/deleteCharacters/","title":"deleteCharacters","description":"@ende/cli/unstable-ansi: Deletes `x` characters at cursor position and to the right. Shifting line content left."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/deleteLines/","title":"deleteLines","description":"@ende/cli/unstable-ansi: Deletes `x` lines at cursor position. Shifting below lines up."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/eraseCharacters/","title":"eraseCharacters","description":"@ende/cli/unstable-ansi: Erases `x` characters at cursor position and to the right."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/insertLines/","title":"insertLines","description":"@ende/cli/unstable-ansi: Inserts `x` lines at cursor position. Shifting current line and below down. Cursor position does not change. Characters that exit the display are discarded."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/insertSpace/","title":"insertSpace","description":"@ende/cli/unstable-ansi: Inserts `x` spaces at the cursor position. Shifting existing line content to the right. Cursor position does not change. Characters that exit the display are discarded."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/moveCursorDown/","title":"moveCursorDown","description":"@ende/cli/unstable-ansi: Moves cursor position down `x` lines or up to the bottom margin."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/moveCursorDownStart/","title":"moveCursorDownStart","description":"@ende/cli/unstable-ansi: Moves cursor position `x` lines down or up to the bottom margin, and to the beginning of that line."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/moveCursorLeft/","title":"moveCursorLeft","description":"@ende/cli/unstable-ansi: Moves cursor position `x` columns left or up to the left margin."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/moveCursorLeftTab/","title":"moveCursorLeftTab","description":"@ende/cli/unstable-ansi: Moves cursor position `x` tab stops left or up to the left margin."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/moveCursorRight/","title":"moveCursorRight","description":"@ende/cli/unstable-ansi: Moves cursor position `x` columns right or up to the right margin."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/moveCursorRightTab/","title":"moveCursorRightTab","description":"@ende/cli/unstable-ansi: Moves cursor position `x` tab stops right or up to the right margin."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/moveCursorUp/","title":"moveCursorUp","description":"@ende/cli/unstable-ansi: Moves cursor position up `x` lines or up to the top margin."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/moveCursorUpStart/","title":"moveCursorUpStart","description":"@ende/cli/unstable-ansi: Moves cursor position `x` lines up or up to the top of the margin, and to the beginning of that line."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/repeatLastCharacter/","title":"repeatLastCharacter","description":"@ende/cli/unstable-ansi: Repeats last graphic character printed `x` times at cursor position."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/setCursorColumn/","title":"setCursorColumn","description":"@ende/cli/unstable-ansi: Sets cursor position to column `x` or up to the sides of the margins. Columns begin at `1` not `0`."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/setCursorLine/","title":"setCursorLine","description":"@ende/cli/unstable-ansi: Sets cursor position to line `x` or down to the bottom of the margin. Lines begin at `1` not `0`."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/setCursorPosition/","title":"setCursorPosition","description":"@ende/cli/unstable-ansi: Sets cursor position to `x` line and `y` column or up to the margin. Lines and columns begin at `1` not `0`."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/setCursorStyle/","title":"setCursorStyle","description":"@ende/cli/unstable-ansi: Sets the cursor animation style."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/setScrollableRegion/","title":"setScrollableRegion","description":"@ende/cli/unstable-ansi: Sets the scrollable region of the display. Allowing either or both the top and bottom lines to not have their content moved when the scrolling region is updated. `x` is the top line of the scrollable region. `y` is the bottom line of the scrollable region."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/shiftDownAndInsert/","title":"shiftDownAndInsert","description":"@ende/cli/unstable-ansi: Shifts content within the scrollable region down `x` lines, inserting blank lines at the top of the scrollable region."},{"url":"/runtime/reference/std/cli/unstable-ansi/~/shiftUpAndInsert/","title":"shiftUpAndInsert","description":"@ende/cli/unstable-ansi: Shifts content within the scrollable region up `x` lines, inserting blank lines at the bottom of the scrollable region."},{"url":"/runtime/reference/std/cli/unstable-get-cursor/","title":"@ende/cli/unstable-get-cursor"},{"url":"/runtime/reference/std/cli/unstable-get-cursor/~/askForCursorPositionSync/","title":"askForCursorPositionSync","description":"@ende/cli/unstable-get-cursor: This function asks the terminal for the cursor's current position. Information entered by the user will be discarded while requesting the cursor position. The cursor position may have also moved in this time due to the user entering information. Due to the sync nature of this function, it is not recommended to use this function frequently. Instead Ansi.SAVE_CURSOR and Ansi.RESTORE_CURSOR should be used when possible."},{"url":"/runtime/reference/std/cli/unstable-progress-bar-stream/","title":"@ende/cli/unstable-progress-bar-stream"},{"url":"/runtime/reference/std/cli/unstable-progress-bar-stream/~/ProgressBarStream/","title":"ProgressBarStream","description":"@ende/cli/unstable-progress-bar-stream: `ProgressBarStream` is a TransformStream class that reports updates to a separate WritableStream on a 1s interval."},{"url":"/runtime/reference/std/cli/unstable-progress-bar-stream/~/Uint8Array_/","title":"Uint8Array_","description":"@ende/cli/unstable-progress-bar-stream: Proxy type of {@code Uint8Array<ArrayBuffer>} or {@code Uint8Array} in TypeScript 5.7 or below respectively."},{"url":"/runtime/reference/std/cli/unstable-progress-bar/","title":"@ende/cli/unstable-progress-bar"},{"url":"/runtime/reference/std/cli/unstable-progress-bar/~/ProgressBar/","title":"ProgressBar","description":"@ende/cli/unstable-progress-bar: `ProgressBar` is a customisable class that reports updates to a WritableStream on a 1s interval. Progress is communicated by using the `ProgressBar.value` property."},{"url":"/runtime/reference/std/cli/unstable-progress-bar/~/ProgressBarFormatter/","title":"ProgressBarFormatter","description":"@ende/cli/unstable-progress-bar: The properties provided to the fmt function upon every visual update."},{"url":"/runtime/reference/std/cli/unstable-progress-bar/~/ProgressBarOptions/","title":"ProgressBarOptions","description":"@ende/cli/unstable-progress-bar: The options that are provided to a createProgressBar or ProgressBarStream."},{"url":"/runtime/reference/std/cli/unstable-prompt-multiple-select/","title":"@ende/cli/unstable-prompt-multiple-select"},{"url":"/runtime/reference/std/cli/unstable-prompt-multiple-select/~/PromptEntry/","title":"PromptEntry","description":"@ende/cli/unstable-prompt-multiple-select: Value for promptMultipleSelect. If an object, it must have a title and a value, else it can just be a string."},{"url":"/runtime/reference/std/cli/unstable-prompt-multiple-select/~/PromptEntryWithValue/","title":"PromptEntryWithValue","description":"@ende/cli/unstable-prompt-multiple-select: A PromptEntry with an underlying value."},{"url":"/runtime/reference/std/cli/unstable-prompt-multiple-select/~/PromptMultipleSelectOptions/","title":"PromptMultipleSelectOptions","description":"@ende/cli/unstable-prompt-multiple-select: Options for promptMultipleSelect."},{"url":"/runtime/reference/std/cli/unstable-prompt-multiple-select/~/promptMultipleSelect/","title":"promptMultipleSelect","description":"@ende/cli/unstable-prompt-multiple-select: Shows the given message and waits for the user's input. Returns the user's selected value as string."},{"url":"/runtime/reference/std/cli/unstable-prompt-select/","title":"@ende/cli/unstable-prompt-select"},{"url":"/runtime/reference/std/cli/unstable-prompt-select/~/PromptEntry/","title":"PromptEntry","description":"@ende/cli/unstable-prompt-select: Value for promptSelect. If an object, it must have a title and a value, else it can just be a string."},{"url":"/runtime/reference/std/cli/unstable-prompt-select/~/PromptEntryWithValue/","title":"PromptEntryWithValue","description":"@ende/cli/unstable-prompt-select: A PromptEntry with an underlying value."},{"url":"/runtime/reference/std/cli/unstable-prompt-select/~/PromptSelectOptions/","title":"PromptSelectOptions","description":"@ende/cli/unstable-prompt-select: Options for promptSelect."},{"url":"/runtime/reference/std/cli/unstable-prompt-select/~/promptSelect/","title":"promptSelect","description":"@ende/cli/unstable-prompt-select: Shows the given message and waits for the user's input. Returns the user's selected value as string."},{"url":"/runtime/reference/std/cli/unstable-spinner/","title":"@ende/cli/unstable-spinner"},{"url":"/runtime/reference/std/cli/unstable-spinner/~/Ansi/","title":"Ansi","description":"@ende/cli/unstable-spinner: This is a hack to allow us to use the same type for both the color name and an ANSI escape code."},{"url":"/runtime/reference/std/cli/unstable-spinner/~/Color/","title":"Color","description":"@ende/cli/unstable-spinner: Color options for SpinnerOptions.color."},{"url":"/runtime/reference/std/cli/unstable-spinner/~/Spinner/","title":"Spinner","description":"@ende/cli/unstable-spinner: A spinner that can be used to indicate that something is loading."},{"url":"/runtime/reference/std/cli/unstable-spinner/~/SpinnerOptions/","title":"SpinnerOptions","description":"@ende/cli/unstable-spinner: Options for Spinner."},{"url":"/runtime/reference/std/cli/unstable-static-line/","title":"@ende/cli/unstable-static-line"},{"url":"/runtime/reference/std/cli/unstable-static-line/~/StaticLine/","title":"StaticLine","description":"@ende/cli/unstable-static-line: StaticLine is a class that assigns a line in the terminal for you to write to and that won't be overwritten by `console.log`."},{"url":"/runtime/reference/std/cli/~/Args/","title":"Args","description":"@ende/cli: The value returned from parseArgs."},{"url":"/runtime/reference/std/cli/~/ParseOptions/","title":"ParseOptions","description":"@ende/cli: Options for parseArgs."},{"url":"/runtime/reference/std/cli/~/PromptSecretOptions/","title":"PromptSecretOptions","description":"@ende/cli: Options for promptSecret."},{"url":"/runtime/reference/std/cli/~/parseArgs/","title":"parseArgs","description":"@ende/cli: Take a set of command line arguments, optionally with a set of options, and return an object representing the flags found in the passed arguments."},{"url":"/runtime/reference/std/cli/~/promptSecret/","title":"promptSecret","description":"@ende/cli: Shows the given message and waits for the user's input. Returns the user's input as string. This is similar to `prompt()` but it print user's input as `*` to prevent password from being shown. Use an empty `mask` if you don't want to show any character."},{"url":"/runtime/reference/std/cli/~/unicodeWidth/","title":"unicodeWidth","description":"@ende/cli: Calculate the physical width of a string in a TTY-like environment. This is useful for cases such as calculating where a line-wrap will occur and underlining strings."},{"url":"/runtime/reference/std/collections/","title":"@ende/collections","description":"Pure functions for common tasks around collection types like arrays and objects."},{"url":"/runtime/reference/std/collections/aggregate-groups/","title":"@ende/collections/aggregate-groups"},{"url":"/runtime/reference/std/collections/associate-by/","title":"@ende/collections/associate-by"},{"url":"/runtime/reference/std/collections/associate-with/","title":"@ende/collections/associate-with"},{"url":"/runtime/reference/std/collections/chunk/","title":"@ende/collections/chunk"},{"url":"/runtime/reference/std/collections/deep-merge/","title":"@ende/collections/deep-merge"},{"url":"/runtime/reference/std/collections/distinct-by/","title":"@ende/collections/distinct-by"},{"url":"/runtime/reference/std/collections/distinct/","title":"@ende/collections/distinct"},{"url":"/runtime/reference/std/collections/drop-last-while/","title":"@ende/collections/drop-last-while"},{"url":"/runtime/reference/std/collections/drop-while/","title":"@ende/collections/drop-while"},{"url":"/runtime/reference/std/collections/filter-entries/","title":"@ende/collections/filter-entries"},{"url":"/runtime/reference/std/collections/filter-keys/","title":"@ende/collections/filter-keys"},{"url":"/runtime/reference/std/collections/filter-values/","title":"@ende/collections/filter-values"},{"url":"/runtime/reference/std/collections/find-single/","title":"@ende/collections/find-single"},{"url":"/runtime/reference/std/collections/first-not-nullish-of/","title":"@ende/collections/first-not-nullish-of"},{"url":"/runtime/reference/std/collections/includes-value/","title":"@ende/collections/includes-value"},{"url":"/runtime/reference/std/collections/interleave/","title":"@ende/collections/interleave"},{"url":"/runtime/reference/std/collections/intersect/","title":"@ende/collections/intersect"},{"url":"/runtime/reference/std/collections/invert-by/","title":"@ende/collections/invert-by"},{"url":"/runtime/reference/std/collections/invert/","title":"@ende/collections/invert"},{"url":"/runtime/reference/std/collections/join-to-string/","title":"@ende/collections/join-to-string"},{"url":"/runtime/reference/std/collections/map-entries/","title":"@ende/collections/map-entries"},{"url":"/runtime/reference/std/collections/map-keys/","title":"@ende/collections/map-keys"},{"url":"/runtime/reference/std/collections/map-not-nullish/","title":"@ende/collections/map-not-nullish"},{"url":"/runtime/reference/std/collections/map-values/","title":"@ende/collections/map-values"},{"url":"/runtime/reference/std/collections/max-by/","title":"@ende/collections/max-by"},{"url":"/runtime/reference/std/collections/max-of/","title":"@ende/collections/max-of"},{"url":"/runtime/reference/std/collections/max-with/","title":"@ende/collections/max-with"},{"url":"/runtime/reference/std/collections/min-by/","title":"@ende/collections/min-by"},{"url":"/runtime/reference/std/collections/min-of/","title":"@ende/collections/min-of"},{"url":"/runtime/reference/std/collections/min-with/","title":"@ende/collections/min-with"},{"url":"/runtime/reference/std/collections/omit/","title":"@ende/collections/omit"},{"url":"/runtime/reference/std/collections/partition-entries/","title":"@ende/collections/partition-entries"},{"url":"/runtime/reference/std/collections/partition/","title":"@ende/collections/partition"},{"url":"/runtime/reference/std/collections/permutations/","title":"@ende/collections/permutations"},{"url":"/runtime/reference/std/collections/pick/","title":"@ende/collections/pick"},{"url":"/runtime/reference/std/collections/reduce-groups/","title":"@ende/collections/reduce-groups"},{"url":"/runtime/reference/std/collections/running-reduce/","title":"@ende/collections/running-reduce"},{"url":"/runtime/reference/std/collections/sample/","title":"@ende/collections/sample"},{"url":"/runtime/reference/std/collections/sliding-windows/","title":"@ende/collections/sliding-windows"},{"url":"/runtime/reference/std/collections/sort-by/","title":"@ende/collections/sort-by"},{"url":"/runtime/reference/std/collections/sum-of/","title":"@ende/collections/sum-of"},{"url":"/runtime/reference/std/collections/take-last-while/","title":"@ende/collections/take-last-while"},{"url":"/runtime/reference/std/collections/take-while/","title":"@ende/collections/take-while"},{"url":"/runtime/reference/std/collections/union/","title":"@ende/collections/union"},{"url":"/runtime/reference/std/collections/unstable-binary-search/","title":"@ende/collections/unstable-binary-search"},{"url":"/runtime/reference/std/collections/unstable-binary-search/~/binarySearch/","title":"binarySearch","description":"@ende/collections/unstable-binary-search: Binary search within a sorted array, allowing for non-exact matches."},{"url":"/runtime/reference/std/collections/unstable-cycle/","title":"@ende/collections/unstable-cycle"},{"url":"/runtime/reference/std/collections/unstable-cycle/~/cycle/","title":"cycle","description":"@ende/collections/unstable-cycle: Creates an iterator that cycles indefinitely over the provided iterable."},{"url":"/runtime/reference/std/collections/unzip/","title":"@ende/collections/unzip"},{"url":"/runtime/reference/std/collections/without-all/","title":"@ende/collections/without-all"},{"url":"/runtime/reference/std/collections/zip/","title":"@ende/collections/zip"},{"url":"/runtime/reference/std/collections/~/ArrayValueType/","title":"ArrayValueType","description":"@ende/collections: Get array values type"},{"url":"/runtime/reference/std/collections/~/DeepMerge/","title":"DeepMerge","description":"@ende/collections: Merge deeply two objects"},{"url":"/runtime/reference/std/collections/~/DeepMergeOptions/","title":"DeepMergeOptions","description":"@ende/collections: Options for deepMerge."},{"url":"/runtime/reference/std/collections/~/ExpandRecursively/","title":"ExpandRecursively","description":"@ende/collections: Force intellisense to expand the typing to hide merging typings"},{"url":"/runtime/reference/std/collections/~/InvertByResult/","title":"InvertByResult","description":"@ende/collections: Return type for invertBy."},{"url":"/runtime/reference/std/collections/~/InvertResult/","title":"InvertResult","description":"@ende/collections: Return type for invert."},{"url":"/runtime/reference/std/collections/~/JoinToStringOptions/","title":"JoinToStringOptions","description":"@ende/collections: Options for joinToString."},{"url":"/runtime/reference/std/collections/~/MapKeyType/","title":"MapKeyType","description":"@ende/collections: Get map values types"},{"url":"/runtime/reference/std/collections/~/MapValueType/","title":"MapValueType","description":"@ende/collections: Get map values types"},{"url":"/runtime/reference/std/collections/~/Merge/","title":"Merge","description":"@ende/collections: Merge two objects"},{"url":"/runtime/reference/std/collections/~/MergeAllArrays/","title":"MergeAllArrays","description":"@ende/collections: Merge all arrays types definitions from keys present in both objects"},{"url":"/runtime/reference/std/collections/~/MergeAllMaps/","title":"MergeAllMaps","description":"@ende/collections: Merge all maps types definitions from keys present in both objects"},{"url":"/runtime/reference/std/collections/~/MergeAllRecords/","title":"MergeAllRecords","description":"@ende/collections: Merge all records types definitions from keys present in both objects"},{"url":"/runtime/reference/std/collections/~/MergeAllSets/","title":"MergeAllSets","description":"@ende/collections: Merge all sets types definitions from keys present in both objects"},{"url":"/runtime/reference/std/collections/~/MergeRightOmitComplexes/","title":"MergeRightOmitComplexes","description":"@ende/collections: Merge two objects, with left precedence"},{"url":"/runtime/reference/std/collections/~/MergingStrategy/","title":"MergingStrategy","description":"@ende/collections: Merging strategy"},{"url":"/runtime/reference/std/collections/~/ObjectXorKeys/","title":"ObjectXorKeys","description":"@ende/collections: Object with keys in either T or U but not in both"},{"url":"/runtime/reference/std/collections/~/OmitComplexes/","title":"OmitComplexes","description":"@ende/collections: Exclude map, sets and array from type"},{"url":"/runtime/reference/std/collections/~/Order/","title":"Order","description":"@ende/collections: Order option for SortByOptions."},{"url":"/runtime/reference/std/collections/~/PartialByType/","title":"PartialByType","description":"@ende/collections: Filter of keys matching a given type"},{"url":"/runtime/reference/std/collections/~/SetValueType/","title":"SetValueType","description":"@ende/collections: Get set values type"},{"url":"/runtime/reference/std/collections/~/SlidingWindowsOptions/","title":"SlidingWindowsOptions","description":"@ende/collections: Options for slidingWindows."},{"url":"/runtime/reference/std/collections/~/SortByOptions/","title":"SortByOptions","description":"@ende/collections: Options for sortBy."},{"url":"/runtime/reference/std/collections/~/aggregateGroups/","title":"aggregateGroups","description":"@ende/collections: Applies the given aggregator to each group in the given grouping, returning the results together with the respective group keys"},{"url":"/runtime/reference/std/collections/~/associateBy/","title":"associateBy","description":"@ende/collections: Creates a record by associating each element of the input array with a key generated by the selector function."},{"url":"/runtime/reference/std/collections/~/associateWith/","title":"associateWith","description":"@ende/collections: Associates each string element of an array with a value returned by a selector function."},{"url":"/runtime/reference/std/collections/~/chunk/","title":"chunk","description":"@ende/collections: Splits the given array into an array of chunks of the given size and returns them."},{"url":"/runtime/reference/std/collections/~/distinct/","title":"distinct","description":"@ende/collections: Returns all distinct elements in the given array, preserving order by first occurrence."},{"url":"/runtime/reference/std/collections/~/distinctBy/","title":"distinctBy","description":"@ende/collections: Returns all elements in the given array that produce a unique value using the given discriminator, with the first matching occurrence retained."},{"url":"/runtime/reference/std/collections/~/dropLastWhile/","title":"dropLastWhile","description":"@ende/collections: Returns an array that drops all elements in the given iterable until the last element that does not match the given predicate."},{"url":"/runtime/reference/std/collections/~/dropWhile/","title":"dropWhile","description":"@ende/collections: Returns an array that drops all elements in the given iterable until the first element that does not match the given predicate."},{"url":"/runtime/reference/std/collections/~/filterEntries/","title":"filterEntries","description":"@ende/collections: Returns a new record with all entries of the given record except the ones that do not match the given predicate."},{"url":"/runtime/reference/std/collections/~/filterKeys/","title":"filterKeys","description":"@ende/collections: Returns a new record with all entries of the given record except the ones that have a key that does not match the given predicate."},{"url":"/runtime/reference/std/collections/~/filterValues/","title":"filterValues","description":"@ende/collections: Returns a new record with all entries of the given record except the ones that have a value that does not match the given predicate."},{"url":"/runtime/reference/std/collections/~/findSingle/","title":"findSingle","description":"@ende/collections: Returns an element if and only if that element is the only one matching the given condition. Returns `undefined` otherwise."},{"url":"/runtime/reference/std/collections/~/firstNotNullishOf/","title":"firstNotNullishOf","description":"@ende/collections: Applies the given selector to elements in the given array until a value is produced that is neither `null` nor `undefined` and returns that value. Returns `undefined` if no such value is produced."},{"url":"/runtime/reference/std/collections/~/includesValue/","title":"includesValue","description":"@ende/collections: Returns true if the given value is part of the given object, otherwise it returns false."},{"url":"/runtime/reference/std/collections/~/interleave/","title":"interleave","description":"@ende/collections: Returns all elements from the given iterables in round-robin order. Unlike zip, which stops at the shortest iterable and returns tuples, `interleave` continues until all input iterables are exhausted and returns a flat array. All input iterables are consumed eagerly."},{"url":"/runtime/reference/std/collections/~/intersect/","title":"intersect","description":"@ende/collections: Returns all distinct elements that appear at least once in each of the given iterables."},{"url":"/runtime/reference/std/collections/~/invert/","title":"invert","description":"@ende/collections: Composes a new record with all keys and values inverted."},{"url":"/runtime/reference/std/collections/~/invertBy/","title":"invertBy","description":"@ende/collections: Composes a new record with all keys and values inverted."},{"url":"/runtime/reference/std/collections/~/joinToString/","title":"joinToString","description":"@ende/collections: Transforms the elements in the given array to strings using the given selector. Joins the produced strings into one using the given `separator` and applying the given `prefix` and `suffix` to the whole string afterwards."},{"url":"/runtime/reference/std/collections/~/mapEntries/","title":"mapEntries","description":"@ende/collections: Applies the given transformer to all entries in the given record and returns a new record containing the results."},{"url":"/runtime/reference/std/collections/~/mapKeys/","title":"mapKeys","description":"@ende/collections: Applies the given transformer to all keys in the given record's entries and returns a new record containing the transformed entries."},{"url":"/runtime/reference/std/collections/~/mapNotNullish/","title":"mapNotNullish","description":"@ende/collections: Returns a new array, containing all elements in the given array transformed using the given transformer, except the ones that were transformed to `null` or `undefined`."},{"url":"/runtime/reference/std/collections/~/mapValues/","title":"mapValues","description":"@ende/collections: Applies the given transformer to all values in the given record and returns a new record containing the resulting keys associated to the last value that produced them."},{"url":"/runtime/reference/std/collections/~/maxBy/","title":"maxBy","description":"@ende/collections: Returns the first element that is the largest value of the given function or undefined if there are no elements."},{"url":"/runtime/reference/std/collections/~/maxOf/","title":"maxOf","description":"@ende/collections: Applies the given selector to all elements of the provided collection and returns the max value of all elements. If an empty array is provided the function will return undefined."},{"url":"/runtime/reference/std/collections/~/maxWith/","title":"maxWith","description":"@ende/collections: Returns the first element having the largest value according to the provided comparator or undefined if there are no elements."},{"url":"/runtime/reference/std/collections/~/minBy/","title":"minBy","description":"@ende/collections: Returns the first element that is the smallest value of the given function or undefined if there are no elements."},{"url":"/runtime/reference/std/collections/~/minOf/","title":"minOf","description":"@ende/collections: Applies the given selector to all elements of the given collection and returns the min value of all elements. If an empty array is provided the function will return undefined."},{"url":"/runtime/reference/std/collections/~/minWith/","title":"minWith","description":"@ende/collections: Returns the first element having the smallest value according to the provided comparator or undefined if there are no elements."},{"url":"/runtime/reference/std/collections/~/omit/","title":"omit","description":"@ende/collections: Creates a new object by excluding the specified keys from the provided object."},{"url":"/runtime/reference/std/collections/~/partition/","title":"partition","description":"@ende/collections: Returns a tuple of two arrays with the first one containing all elements in the given array that match the given predicate and the second one containing all that do not."},{"url":"/runtime/reference/std/collections/~/partitionEntries/","title":"partitionEntries","description":"@ende/collections: Returns a tuple of two records with the first one containing all entries of the given record that match the given predicate and the second one containing all that do not."},{"url":"/runtime/reference/std/collections/~/permutations/","title":"permutations","description":"@ende/collections: Builds all possible orders of all elements in the given array. Ignores equality of elements, meaning this will always return the same number of permutations for a given length of input."},{"url":"/runtime/reference/std/collections/~/pick/","title":"pick","description":"@ende/collections: Creates a new object by including the specified keys from the provided object."},{"url":"/runtime/reference/std/collections/~/reduceGroups/","title":"reduceGroups","description":"@ende/collections: Applies the given reducer to each group in the given grouping, returning the results together with the respective group keys."},{"url":"/runtime/reference/std/collections/~/runningReduce/","title":"runningReduce","description":"@ende/collections: Calls the given reducer on each element of the given collection, passing its result as the accumulator to the next respective call, starting with the given initialValue. Returns all intermediate accumulator results."},{"url":"/runtime/reference/std/collections/~/sample/","title":"sample","description":"@ende/collections: Returns a random element from the given iterable."},{"url":"/runtime/reference/std/collections/~/slidingWindows/","title":"slidingWindows","description":"@ende/collections: Generates sliding views of the given iterable of the given size and returns an array containing all of them."},{"url":"/runtime/reference/std/collections/~/sortBy/","title":"sortBy","description":"@ende/collections: Returns all elements in the given collection, sorted by their result using the given selector. The selector function is called only once for each element. Ascending or descending order can be specified through the `order` option. By default, the elements are sorted in ascending order."},{"url":"/runtime/reference/std/collections/~/sumOf/","title":"sumOf","description":"@ende/collections: Applies the given selector to all elements in the given collection and calculates the sum of the results."},{"url":"/runtime/reference/std/collections/~/takeLastWhile/","title":"takeLastWhile","description":"@ende/collections: Returns all elements in the given iterable after the last element that does not match the given predicate."},{"url":"/runtime/reference/std/collections/~/takeWhile/","title":"takeWhile","description":"@ende/collections: Returns all elements in the given collection until the first element that does not match the given predicate."},{"url":"/runtime/reference/std/collections/~/union/","title":"union","description":"@ende/collections: Returns all distinct elements that appear in any of the given arrays."},{"url":"/runtime/reference/std/collections/~/unzip/","title":"unzip","description":"@ende/collections: Builds two separate arrays from the given array of 2-tuples, with the first returned array holding all first tuple elements and the second one holding all the second elements."},{"url":"/runtime/reference/std/collections/~/withoutAll/","title":"withoutAll","description":"@ende/collections: Returns an array excluding all given values from an iterable."},{"url":"/runtime/reference/std/collections/~/zip/","title":"zip","description":"@ende/collections: Builds N-tuples of elements from the given N iterables with matching indices, stopping when the shortest iterable is exhausted."},{"url":"/runtime/reference/std/crypto/","title":"@ende/crypto","description":"Extensions to the Web Crypto supporting additional encryption APIs, but also delegating to the built-in APIs when possible."},{"url":"/runtime/reference/std/crypto/aes-gcm/","title":"@ende/crypto/aes-gcm","description":"High-level AES-GCM authenticated encryption with automatic nonce generation."},{"url":"/runtime/reference/std/crypto/crypto/","title":"@ende/crypto/crypto","description":"Extensions to the Web Crypto API supporting additional encryption APIs, but also delegating to the built-in APIs when possible."},{"url":"/runtime/reference/std/crypto/timing-safe-equal/","title":"@ende/crypto/timing-safe-equal"},{"url":"/runtime/reference/std/crypto/~/AesGcmOptions/","title":"AesGcmOptions","description":"@ende/crypto: Options for encryptAesGcm and decryptAesGcm."},{"url":"/runtime/reference/std/crypto/~/DIGEST_ALGORITHM_NAMES/","title":"DIGEST_ALGORITHM_NAMES","description":"@ende/crypto: All cryptographic hash/digest algorithms supported by std/crypto."},{"url":"/runtime/reference/std/crypto/~/DigestAlgorithm/","title":"DigestAlgorithm","description":"@ende/crypto: Extended digest algorithms accepted by stdCrypto.subtle.digest."},{"url":"/runtime/reference/std/crypto/~/DigestAlgorithmName/","title":"DigestAlgorithmName","description":"@ende/crypto: An algorithm name supported by std/crypto."},{"url":"/runtime/reference/std/crypto/~/DigestAlgorithmObject/","title":"DigestAlgorithmObject","description":"@ende/crypto: Extended digest algorithm objects."},{"url":"/runtime/reference/std/crypto/~/StdCrypto/","title":"StdCrypto","description":"@ende/crypto: Extensions to the Web Crypto interface."},{"url":"/runtime/reference/std/crypto/~/StdSubtleCrypto/","title":"StdSubtleCrypto","description":"@ende/crypto: Extensions to the web standard `SubtleCrypto` interface."},{"url":"/runtime/reference/std/crypto/~/Uint8Array_/","title":"Uint8Array_","description":"@ende/crypto: Proxy type of {@code Uint8Array<ArrayBuffer>} or {@code Uint8Array} in TypeScript 5.7 or below respectively."},{"url":"/runtime/reference/std/crypto/~/crypto/","title":"crypto","description":"@ende/crypto: A wrapper for WebCrypto which adds support for additional non-standard algorithms, but delegates to the runtime WebCrypto implementation whenever possible."},{"url":"/runtime/reference/std/crypto/~/decryptAesGcm/","title":"decryptAesGcm","description":"@ende/crypto: Decrypts data produced by encryptAesGcm."},{"url":"/runtime/reference/std/crypto/~/encryptAesGcm/","title":"encryptAesGcm","description":"@ende/crypto: Encrypts plaintext using AES-GCM with a random 96-bit nonce."},{"url":"/runtime/reference/std/crypto/~/timingSafeEqual/","title":"timingSafeEqual","description":"@ende/crypto: When checking the values of cryptographic hashes are equal, default comparisons can be susceptible to timing based attacks, where attacker is able to find out information about the host system by repeatedly checking response times to equality comparisons of values."},{"url":"/runtime/reference/std/csv/","title":"@ende/csv","description":"Reads and writes comma-separated values (CSV) files."},{"url":"/runtime/reference/std/csv/parse-stream/","title":"@ende/csv/parse-stream"},{"url":"/runtime/reference/std/csv/parse/","title":"@ende/csv/parse"},{"url":"/runtime/reference/std/csv/stringify-stream/","title":"@ende/csv/stringify-stream"},{"url":"/runtime/reference/std/csv/stringify/","title":"@ende/csv/stringify"},{"url":"/runtime/reference/std/csv/unstable-stringify/","title":"@ende/csv/unstable-stringify"},{"url":"/runtime/reference/std/csv/unstable-stringify/~/Column/","title":"Column","description":"@ende/csv/unstable-stringify: The most essential aspect of a column is accessing the property holding the data for that column on each object in the data array. If that member is at the top level, `Column` can simply be a property accessor, which is either a `string` (if it's a plain object) or a `number` (if it's an array)."},{"url":"/runtime/reference/std/csv/unstable-stringify/~/ColumnDetails/","title":"ColumnDetails","description":"@ende/csv/unstable-stringify: Column information."},{"url":"/runtime/reference/std/csv/unstable-stringify/~/DataItem/","title":"DataItem","description":"@ende/csv/unstable-stringify: An object (plain or array)"},{"url":"/runtime/reference/std/csv/unstable-stringify/~/PropertyAccessor/","title":"PropertyAccessor","description":"@ende/csv/unstable-stringify: Array index or record key corresponding to a value for a data object."},{"url":"/runtime/reference/std/csv/unstable-stringify/~/StringifyOptions/","title":"StringifyOptions","description":"@ende/csv/unstable-stringify: Options for stringify."},{"url":"/runtime/reference/std/csv/unstable-stringify/~/stringify/","title":"stringify","description":"@ende/csv/unstable-stringify: Converts an array of objects into a CSV string."},{"url":"/runtime/reference/std/csv/~/Column/","title":"Column","description":"@ende/csv: The most essential aspect of a column is accessing the property holding the data for that column on each object in the data array. If that member is at the top level, `Column` can simply be a property accessor, which is either a `string` (if it's a plain object) or a `number` (if it's an array)."},{"url":"/runtime/reference/std/csv/~/ColumnDetails/","title":"ColumnDetails","description":"@ende/csv: Column information."},{"url":"/runtime/reference/std/csv/~/CsvParseStream/","title":"CsvParseStream","description":"@ende/csv: `CsvParseStream` transforms a stream of CSV-encoded text into a stream of parsed objects."},{"url":"/runtime/reference/std/csv/~/CsvParseStreamOptions/","title":"CsvParseStreamOptions","description":"@ende/csv: Options for CsvParseStream."},{"url":"/runtime/reference/std/csv/~/CsvStringifyStream/","title":"CsvStringifyStream","description":"@ende/csv: Convert each chunk to a CSV record."},{"url":"/runtime/reference/std/csv/~/CsvStringifyStreamOptions/","title":"CsvStringifyStreamOptions","description":"@ende/csv: Options for CsvStringifyStream."},{"url":"/runtime/reference/std/csv/~/DataItem/","title":"DataItem","description":"@ende/csv: An object (plain or array)"},{"url":"/runtime/reference/std/csv/~/ParseOptions/","title":"ParseOptions","description":"@ende/csv: Options for parse."},{"url":"/runtime/reference/std/csv/~/ParseResult/","title":"ParseResult","description":"@ende/csv: Parse result type for parse and CsvParseStream."},{"url":"/runtime/reference/std/csv/~/PropertyAccessor/","title":"PropertyAccessor","description":"@ende/csv: Array index or record key corresponding to a value for a data object."},{"url":"/runtime/reference/std/csv/~/RecordWithColumn/","title":"RecordWithColumn","description":"@ende/csv: Record type with column type."},{"url":"/runtime/reference/std/csv/~/RowType/","title":"RowType","description":"@ende/csv: Row return type."},{"url":"/runtime/reference/std/csv/~/StringifyOptions/","title":"StringifyOptions","description":"@ende/csv: Options for stringify."},{"url":"/runtime/reference/std/csv/~/parse/","title":"parse","description":"@ende/csv: Parses CSV string into an array of arrays of strings."},{"url":"/runtime/reference/std/csv/~/stringify/","title":"stringify","description":"@ende/csv: Converts an array of objects into a CSV string."},{"url":"/runtime/reference/std/data-structures/","title":"@ende/data-structures","description":"Data structures for use in algorithms and other data manipulation."},{"url":"/runtime/reference/std/data-structures/binary-heap/","title":"@ende/data-structures/binary-heap"},{"url":"/runtime/reference/std/data-structures/binary-search-tree/","title":"@ende/data-structures/binary-search-tree"},{"url":"/runtime/reference/std/data-structures/comparators/","title":"@ende/data-structures/comparators"},{"url":"/runtime/reference/std/data-structures/deque/","title":"@ende/data-structures/deque"},{"url":"/runtime/reference/std/data-structures/red-black-tree/","title":"@ende/data-structures/red-black-tree"},{"url":"/runtime/reference/std/data-structures/unstable-2d-array/","title":"@ende/data-structures/unstable-2d-array"},{"url":"/runtime/reference/std/data-structures/unstable-2d-array/~/D2Array/","title":"D2Array","description":"@ende/data-structures/unstable-2d-array: A 2d array. Unlike a normal array, it does not grow dynamically, and needs to be manually resized with the `resize` method. It can never have the width or height be 0."},{"url":"/runtime/reference/std/data-structures/unstable-bidirectional-map/","title":"@ende/data-structures/unstable-bidirectional-map"},{"url":"/runtime/reference/std/data-structures/unstable-bidirectional-map/~/BidirectionalMap/","title":"BidirectionalMap","description":"@ende/data-structures/unstable-bidirectional-map: An extension of Map that allows lookup by both key and value."},{"url":"/runtime/reference/std/data-structures/unstable-binary-search-tree/","title":"@ende/data-structures/unstable-binary-search-tree"},{"url":"/runtime/reference/std/data-structures/unstable-binary-search-tree/~/BinarySearchTree/","title":"BinarySearchTree","description":"@ende/data-structures/unstable-binary-search-tree: An unbalanced binary search tree. The values are in ascending order by default, using JavaScript's built-in comparison operators to sort the values."},{"url":"/runtime/reference/std/data-structures/unstable-indexed-heap/","title":"@ende/data-structures/unstable-indexed-heap"},{"url":"/runtime/reference/std/data-structures/unstable-indexed-heap/~/HeapEntry/","title":"HeapEntry","description":"@ende/data-structures/unstable-indexed-heap: A key-priority pair returned by IndexedHeap methods."},{"url":"/runtime/reference/std/data-structures/unstable-indexed-heap/~/IndexedHeap/","title":"IndexedHeap","description":"@ende/data-structures/unstable-indexed-heap: A priority queue that supports looking up, removing, and re-prioritizing entries by key. Each entry is a unique `(key, priority)` pair. The entry with the smallest priority (under the comparator) is always at the front."},{"url":"/runtime/reference/std/data-structures/unstable-indexed-heap/~/ReadonlyIndexedHeap/","title":"ReadonlyIndexedHeap","description":"@ende/data-structures/unstable-indexed-heap: Read-only view of an IndexedHeap. Exposes query and iteration methods, hiding all methods that modify the heap. Follows the same pattern as `ReadonlyMap` and `ReadonlySet`."},{"url":"/runtime/reference/std/data-structures/unstable-multimap/","title":"@ende/data-structures/unstable-multimap"},{"url":"/runtime/reference/std/data-structures/unstable-multimap/~/MultiMap/","title":"MultiMap","description":"@ende/data-structures/unstable-multimap: A map that associates each key with an ordered list of values."},{"url":"/runtime/reference/std/data-structures/unstable-rolling-counter/","title":"@ende/data-structures/unstable-rolling-counter"},{"url":"/runtime/reference/std/data-structures/unstable-rolling-counter/~/ReadonlyRollingCounter/","title":"ReadonlyRollingCounter","description":"@ende/data-structures/unstable-rolling-counter: Read-only view of a RollingCounter. Strips all mutation methods, following the `ReadonlyArray` / `ReadonlyMap` / `ReadonlySet` pattern. A `RollingCounter` is directly assignable to `ReadonlyRollingCounter`."},{"url":"/runtime/reference/std/data-structures/unstable-rolling-counter/~/RollingCounter/","title":"RollingCounter","description":"@ende/data-structures/unstable-rolling-counter: A fixed-size rolling counter."},{"url":"/runtime/reference/std/data-structures/unstable-rolling-counter/~/RollingCounterSnapshot/","title":"RollingCounterSnapshot","description":"@ende/data-structures/unstable-rolling-counter: A serializable snapshot of a RollingCounter's state."},{"url":"/runtime/reference/std/data-structures/~/BinaryHeap/","title":"BinaryHeap","description":"@ende/data-structures: A priority queue implemented with a binary heap. The heap is in descending order by default, using JavaScript's built-in comparison operators to sort the values."},{"url":"/runtime/reference/std/data-structures/~/BinarySearchTree/","title":"BinarySearchTree","description":"@ende/data-structures: An unbalanced binary search tree. The values are in ascending order by default, using JavaScript's built-in comparison operators to sort the values."},{"url":"/runtime/reference/std/data-structures/~/Deque/","title":"Deque","description":"@ende/data-structures: A double-ended queue backed by a ring buffer. Pushing, popping, and indexed access stay fast as the deque grows."},{"url":"/runtime/reference/std/data-structures/~/ReadonlyDeque/","title":"ReadonlyDeque","description":"@ende/data-structures: Read-only view of a Deque. Strips all mutation methods, following the `ReadonlyArray` / `ReadonlyMap` / `ReadonlySet` pattern. A `Deque<T>` is directly assignable to `ReadonlyDeque<T>`."},{"url":"/runtime/reference/std/data-structures/~/RedBlackTree/","title":"RedBlackTree","description":"@ende/data-structures: A red-black tree. This is a kind of self-balancing binary search tree, extending BinarySearchTree. The values are in ascending order by default, using JavaScript's built-in comparison operators to sort the values."},{"url":"/runtime/reference/std/data-structures/~/ascend/","title":"ascend","description":"@ende/data-structures: Compare two values in ascending order using JavaScript's built in comparison operators."},{"url":"/runtime/reference/std/data-structures/~/descend/","title":"descend","description":"@ende/data-structures: Compare two values in descending order using JavaScript's built in comparison operators."},{"url":"/runtime/reference/std/datetime/","title":"@ende/datetime","description":"Utilities for dealing with Date objects."},{"url":"/runtime/reference/std/datetime/constants/","title":"@ende/datetime/constants"},{"url":"/runtime/reference/std/datetime/day-of-year/","title":"@ende/datetime/day-of-year"},{"url":"/runtime/reference/std/datetime/difference/","title":"@ende/datetime/difference"},{"url":"/runtime/reference/std/datetime/format/","title":"@ende/datetime/format"},{"url":"/runtime/reference/std/datetime/is-leap/","title":"@ende/datetime/is-leap"},{"url":"/runtime/reference/std/datetime/parse/","title":"@ende/datetime/parse"},{"url":"/runtime/reference/std/datetime/week-of-year/","title":"@ende/datetime/week-of-year"},{"url":"/runtime/reference/std/datetime/~/APRIL/","title":"APRIL","description":"@ende/datetime: The month index for April."},{"url":"/runtime/reference/std/datetime/~/AUGUST/","title":"AUGUST","description":"@ende/datetime: The month index for August."},{"url":"/runtime/reference/std/datetime/~/DAY/","title":"DAY","description":"@ende/datetime: The number of milliseconds in a day."},{"url":"/runtime/reference/std/datetime/~/DECEMBER/","title":"DECEMBER","description":"@ende/datetime: The month index for December."},{"url":"/runtime/reference/std/datetime/~/DifferenceFormat/","title":"DifferenceFormat","description":"@ende/datetime: Return type for difference."},{"url":"/runtime/reference/std/datetime/~/DifferenceOptions/","title":"DifferenceOptions","description":"@ende/datetime: Options for difference."},{"url":"/runtime/reference/std/datetime/~/FEBRUARY/","title":"FEBRUARY","description":"@ende/datetime: The month index for February."},{"url":"/runtime/reference/std/datetime/~/FRIDAY/","title":"FRIDAY","description":"@ende/datetime: The day of week index for Friday."},{"url":"/runtime/reference/std/datetime/~/FormatOptions/","title":"FormatOptions","description":"@ende/datetime: Options for format."},{"url":"/runtime/reference/std/datetime/~/HOUR/","title":"HOUR","description":"@ende/datetime: The number of milliseconds in an hour."},{"url":"/runtime/reference/std/datetime/~/JANUARY/","title":"JANUARY","description":"@ende/datetime: The month index for January."},{"url":"/runtime/reference/std/datetime/~/JULY/","title":"JULY","description":"@ende/datetime: The month index for July."},{"url":"/runtime/reference/std/datetime/~/JUNE/","title":"JUNE","description":"@ende/datetime: The month index for June."},{"url":"/runtime/reference/std/datetime/~/MARCH/","title":"MARCH","description":"@ende/datetime: The month index for March."},{"url":"/runtime/reference/std/datetime/~/MAY/","title":"MAY","description":"@ende/datetime: The month index for May."},{"url":"/runtime/reference/std/datetime/~/MINUTE/","title":"MINUTE","description":"@ende/datetime: The number of milliseconds in a minute."},{"url":"/runtime/reference/std/datetime/~/MONDAY/","title":"MONDAY","description":"@ende/datetime: The day of week index for Monday."},{"url":"/runtime/reference/std/datetime/~/NOVEMBER/","title":"NOVEMBER","description":"@ende/datetime: The month index for November."},{"url":"/runtime/reference/std/datetime/~/OCTOBER/","title":"OCTOBER","description":"@ende/datetime: The month index for October."},{"url":"/runtime/reference/std/datetime/~/SATURDAY/","title":"SATURDAY","description":"@ende/datetime: The day of week index for Saturday."},{"url":"/runtime/reference/std/datetime/~/SECOND/","title":"SECOND","description":"@ende/datetime: The number of milliseconds in a second."},{"url":"/runtime/reference/std/datetime/~/SEPTEMBER/","title":"SEPTEMBER","description":"@ende/datetime: The month index for September."},{"url":"/runtime/reference/std/datetime/~/SUNDAY/","title":"SUNDAY","description":"@ende/datetime: The day of week index for Sunday."},{"url":"/runtime/reference/std/datetime/~/THURSDAY/","title":"THURSDAY","description":"@ende/datetime: The day of week index for Thursday."},{"url":"/runtime/reference/std/datetime/~/TUESDAY/","title":"TUESDAY","description":"@ende/datetime: The day of week index for Tuesday."},{"url":"/runtime/reference/std/datetime/~/Unit/","title":"Unit","description":"@ende/datetime: Duration units for DifferenceFormat and DifferenceOptions."},{"url":"/runtime/reference/std/datetime/~/WEDNESDAY/","title":"WEDNESDAY","description":"@ende/datetime: The day of week index for Wednesday."},{"url":"/runtime/reference/std/datetime/~/WEEK/","title":"WEEK","description":"@ende/datetime: The number of milliseconds in a week."},{"url":"/runtime/reference/std/datetime/~/dayOfYear/","title":"dayOfYear","description":"@ende/datetime: Returns the number of the day in the year in the local time zone."},{"url":"/runtime/reference/std/datetime/~/dayOfYearUtc/","title":"dayOfYearUtc","description":"@ende/datetime: Returns the number of the day in the year in UTC time."},{"url":"/runtime/reference/std/datetime/~/difference/","title":"difference","description":"@ende/datetime: Calculates the difference of the 2 given dates in various units. If the units are omitted, it returns the difference in the all available units."},{"url":"/runtime/reference/std/datetime/~/format/","title":"format","description":"@ende/datetime: Formats a date to a string with the specified format."},{"url":"/runtime/reference/std/datetime/~/isLeap/","title":"isLeap","description":"@ende/datetime: Returns whether the given year is a leap year. Passing in a Date object will return the leap year status of the year of that object and take the current timezone into account. Passing in a number will return the leap year status of that number."},{"url":"/runtime/reference/std/datetime/~/isUtcLeap/","title":"isUtcLeap","description":"@ende/datetime: Returns whether the given year is a leap year in UTC time. This always returns the same value regardless of the local timezone."},{"url":"/runtime/reference/std/datetime/~/parse/","title":"parse","description":"@ende/datetime: Parses a date string using the specified format string."},{"url":"/runtime/reference/std/datetime/~/weekOfYear/","title":"weekOfYear","description":"@ende/datetime: Returns the ISO week number of the provided date (1-53)."},{"url":"/runtime/reference/std/dotenv/","title":"@ende/dotenv","description":"Parses and stringifies data in the `.env` file format."},{"url":"/runtime/reference/std/dotenv/load/","title":"@ende/dotenv/load","description":"Loads environment variables from a `.env` file into the process environment as a side effect of importing this module."},{"url":"/runtime/reference/std/dotenv/parse/","title":"@ende/dotenv/parse"},{"url":"/runtime/reference/std/dotenv/stringify/","title":"@ende/dotenv/stringify"},{"url":"/runtime/reference/std/dotenv/~/LoadOptions/","title":"LoadOptions","description":"@ende/dotenv: Options for load and loadSync."},{"url":"/runtime/reference/std/dotenv/~/load/","title":"load","description":"@ende/dotenv: Load environment variables from a `.env` file. Loaded variables are accessible in a configuration object returned by the `load()` function, as well as optionally exporting them to the process environment using the `export` option."},{"url":"/runtime/reference/std/dotenv/~/loadSync/","title":"loadSync","description":"@ende/dotenv: Works identically to load, but synchronously."},{"url":"/runtime/reference/std/dotenv/~/parse/","title":"parse","description":"@ende/dotenv: Parse `.env` file output in an object."},{"url":"/runtime/reference/std/dotenv/~/stringify/","title":"stringify","description":"@ende/dotenv: Stringify an object into a valid `.env` file format."},{"url":"/runtime/reference/std/encoding/","title":"@ende/encoding","description":"Utilities for encoding and decoding common formats like hex, base64, and varint."},{"url":"/runtime/reference/std/encoding/ascii85/","title":"@ende/encoding/ascii85","description":"Utilities for working with ascii85 encoding."},{"url":"/runtime/reference/std/encoding/base32/","title":"@ende/encoding/base32","description":"Utilities for base32 encoding and decoding."},{"url":"/runtime/reference/std/encoding/base58/","title":"@ende/encoding/base58","description":"Utilities for base58 encoding and decoding."},{"url":"/runtime/reference/std/encoding/base64/","title":"@ende/encoding/base64","description":"Utilities for base64 encoding and decoding."},{"url":"/runtime/reference/std/encoding/base64url/","title":"@ende/encoding/base64url","description":"Utilities for base64url encoding and decoding."},{"url":"/runtime/reference/std/encoding/hex/","title":"@ende/encoding/hex","description":"Port of the Go encoding/hex library."},{"url":"/runtime/reference/std/encoding/unstable-base32-stream/","title":"@ende/encoding/unstable-base32-stream","description":"TransformStream classes to encode and decode to and from base32 data in a streaming manner."},{"url":"/runtime/reference/std/encoding/unstable-base32-stream/~/Base32DecoderStream/","title":"Base32DecoderStream","description":"@ende/encoding/unstable-base32-stream: Transforms a base32 stream into a Uint8Array<ArrayBuffer> stream."},{"url":"/runtime/reference/std/encoding/unstable-base32-stream/~/Base32EncoderStream/","title":"Base32EncoderStream","description":"@ende/encoding/unstable-base32-stream: Transforms a Uint8Array<ArrayBuffer> stream into a base32 stream."},{"url":"/runtime/reference/std/encoding/unstable-base32/","title":"@ende/encoding/unstable-base32","description":"Functions to encode and decode to and from base32 strings."},{"url":"/runtime/reference/std/encoding/unstable-base32/~/Base32Alphabet/","title":"Base32Alphabet","description":"@ende/encoding/unstable-base32: The base32 alphabets."},{"url":"/runtime/reference/std/encoding/unstable-base32/~/Base32Options/","title":"Base32Options","description":"@ende/encoding/unstable-base32: Options for encoding and decoding base32 strings."},{"url":"/runtime/reference/std/encoding/unstable-base32/~/calcSizeBase32/","title":"calcSizeBase32","description":"@ende/encoding/unstable-base32: Calculate the output size needed to encode a given input size for encodeIntoBase32."},{"url":"/runtime/reference/std/encoding/unstable-base32/~/decodeBase32/","title":"decodeBase32","description":"@ende/encoding/unstable-base32: `decodeBase32` takes an input source and decodes it into a Uint8Array<ArrayBuffer> using the specified format. If a Uint8Array<ArrayBuffer> is provided as input then a subarray of the input containing the decoded data is returned."},{"url":"/runtime/reference/std/encoding/unstable-base32/~/encodeBase32/","title":"encodeBase32","description":"@ende/encoding/unstable-base32: `encodeBase32` takes an input source and encodes it into a base32 string. If a Uint8Array<ArrayBuffer> or ArrayBuffer is provided, the underlying source will be detached and reused for the encoding. If you need the input source after providing it to this function, call `.slice()` to pass in a copy."},{"url":"/runtime/reference/std/encoding/unstable-base32/~/encodeIntoBase32/","title":"encodeIntoBase32","description":"@ende/encoding/unstable-base32: `encodeIntoBase32` takes an input source and encodes it as base32 into the output buffer."},{"url":"/runtime/reference/std/encoding/unstable-base64-stream/","title":"@ende/encoding/unstable-base64-stream","description":"TransformStream classes to encode and decode to and from base64 data in a streaming manner."},{"url":"/runtime/reference/std/encoding/unstable-base64-stream/~/Base64DecoderStream/","title":"Base64DecoderStream","description":"@ende/encoding/unstable-base64-stream: Transforms a base64 stream into a Uint8Array<ArrayBuffer> stream."},{"url":"/runtime/reference/std/encoding/unstable-base64-stream/~/Base64EncoderStream/","title":"Base64EncoderStream","description":"@ende/encoding/unstable-base64-stream: Transforms a Uint8Array<ArrayBuffer> stream into a base64 stream."},{"url":"/runtime/reference/std/encoding/unstable-base64/","title":"@ende/encoding/unstable-base64","description":"Functions to encode and decode to and from base64 strings."},{"url":"/runtime/reference/std/encoding/unstable-base64/~/Base64Alphabet/","title":"Base64Alphabet","description":"@ende/encoding/unstable-base64: The base64 alphabets."},{"url":"/runtime/reference/std/encoding/unstable-base64/~/Base64Options/","title":"Base64Options","description":"@ende/encoding/unstable-base64: Options for encoding and decoding base64 strings."},{"url":"/runtime/reference/std/encoding/unstable-base64/~/calcSizeBase64/","title":"calcSizeBase64","description":"@ende/encoding/unstable-base64: Calculate the output size needed to encode a given input size for encodeIntoBase64."},{"url":"/runtime/reference/std/encoding/unstable-base64/~/decodeBase64/","title":"decodeBase64","description":"@ende/encoding/unstable-base64: `decodeBase64` takes an input source and decodes it into a Uint8Array<ArrayBuffer> using the specified format."},{"url":"/runtime/reference/std/encoding/unstable-base64/~/encodeBase64/","title":"encodeBase64","description":"@ende/encoding/unstable-base64: `encodeBase64` takes an input source and encodes it into a base64 string. If a Uint8Array<ArrayBuffer> or ArrayBuffer is provided, the underlying source will be detached and reused for the encoding. If you need the input source after providing it to this function, call `.slice()` to pass in a copy."},{"url":"/runtime/reference/std/encoding/unstable-base64/~/encodeIntoBase64/","title":"encodeIntoBase64","description":"@ende/encoding/unstable-base64: `encodeIntoBase64` takes an input source and encodes it as base64 into the output buffer."},{"url":"/runtime/reference/std/encoding/unstable-hex-stream/","title":"@ende/encoding/unstable-hex-stream","description":"TransformStream classes to encode and decode to and from hexadecimal data in a streaming manner."},{"url":"/runtime/reference/std/encoding/unstable-hex-stream/~/HexDecoderStream/","title":"HexDecoderStream","description":"@ende/encoding/unstable-hex-stream: Transforms a hexadecimal stream into a Uint8Array<ArrayBuffer> stream."},{"url":"/runtime/reference/std/encoding/unstable-hex-stream/~/HexEncoderStream/","title":"HexEncoderStream","description":"@ende/encoding/unstable-hex-stream: Transforms a Uint8Array<ArrayBuffer> stream into a hexadecimal stream."},{"url":"/runtime/reference/std/encoding/unstable-hex/","title":"@ende/encoding/unstable-hex","description":"Functions to encode and decode to and from hexadecimal strings."},{"url":"/runtime/reference/std/encoding/unstable-hex/~/calcSizeHex/","title":"calcSizeHex","description":"@ende/encoding/unstable-hex: Calculate the output size needed to encode a given input size for encodeIntoHex."},{"url":"/runtime/reference/std/encoding/unstable-hex/~/decodeHex/","title":"decodeHex","description":"@ende/encoding/unstable-hex: `decodeHex` takes an input source and decodes it into a Uint8Array<ArrayBuffer> using the specified format."},{"url":"/runtime/reference/std/encoding/unstable-hex/~/encodeHex/","title":"encodeHex","description":"@ende/encoding/unstable-hex: `encodeHex` takes an input source and encodes it into a hexadecimal string. If a Uint8Array<ArrayBuffer> or ArrayBuffer is provided, the underlying source will be detached and reused for the encoding. If you need the input source after providing it to this function, call `.slice()` to pass in a copy."},{"url":"/runtime/reference/std/encoding/unstable-hex/~/encodeIntoHex/","title":"encodeIntoHex","description":"@ende/encoding/unstable-hex: `encodeIntoHex` takes an input source and encodes it as hex into the output buffer."},{"url":"/runtime/reference/std/encoding/varint/","title":"@ende/encoding/varint","description":"Utilities for Varint encoding of typed integers. Varint encoding represents integers using a variable number of bytes, with smaller values requiring fewer bytes."},{"url":"/runtime/reference/std/encoding/~/Ascii85Standard/","title":"Ascii85Standard","description":"@ende/encoding: Supported ascii85 standards for EncodeAscii85Options and DecodeAscii85Options."},{"url":"/runtime/reference/std/encoding/~/DecodeAscii85Options/","title":"DecodeAscii85Options","description":"@ende/encoding: Options for decodeAscii85."},{"url":"/runtime/reference/std/encoding/~/EncodeAscii85Options/","title":"EncodeAscii85Options","description":"@ende/encoding: Options for encodeAscii85."},{"url":"/runtime/reference/std/encoding/~/MaxUint64/","title":"MaxUint64","description":"@ende/encoding: The maximum value of an unsigned 64-bit integer. Equivalent to `2n**64n - 1n`"},{"url":"/runtime/reference/std/encoding/~/MaxVarintLen32/","title":"MaxVarintLen32","description":"@ende/encoding: The maximum length, in bytes, of a Varint encoded 32-bit integer."},{"url":"/runtime/reference/std/encoding/~/MaxVarintLen64/","title":"MaxVarintLen64","description":"@ende/encoding: The maximum length, in bytes, of a Varint encoded 64-bit integer."},{"url":"/runtime/reference/std/encoding/~/Uint8Array_/","title":"Uint8Array_","description":"@ende/encoding: Proxy type of {@code Uint8Array<ArrayBuffer>} or {@code Uint8Array} in TypeScript 5.7 or below respectively."},{"url":"/runtime/reference/std/encoding/~/decodeAscii85/","title":"decodeAscii85","description":"@ende/encoding: Decodes a ascii85-encoded string."},{"url":"/runtime/reference/std/encoding/~/decodeBase32/","title":"decodeBase32","description":"@ende/encoding: Decodes a base32-encoded string."},{"url":"/runtime/reference/std/encoding/~/decodeBase58/","title":"decodeBase58","description":"@ende/encoding: Decodes a base58-encoded string."},{"url":"/runtime/reference/std/encoding/~/decodeBase64/","title":"decodeBase64","description":"@ende/encoding: Decodes a base64-encoded string."},{"url":"/runtime/reference/std/encoding/~/decodeBase64Url/","title":"decodeBase64Url","description":"@ende/encoding: Decodes a given base64url-encoded string."},{"url":"/runtime/reference/std/encoding/~/decodeHex/","title":"decodeHex","description":"@ende/encoding: Decodes the given hex-encoded string. If the input is malformed, an error is thrown."},{"url":"/runtime/reference/std/encoding/~/decodeVarint/","title":"decodeVarint","description":"@ende/encoding: Given a non empty `buf`, starting at `offset` (default: 0), begin decoding bytes as Varint encoded bytes, for a maximum of 10 bytes (offset + 10). The returned tuple is of the decoded varint 32-bit number, and the new offset with which to continue decoding other data."},{"url":"/runtime/reference/std/encoding/~/decodeVarint32/","title":"decodeVarint32","description":"@ende/encoding: Given a `buf`, starting at `offset` (default: 0), begin decoding bytes as Varint encoded bytes, for a maximum of 5 bytes (offset + 5). The returned tuple is of the decoded varint 32-bit number, and the new offset with which to continue decoding other data."},{"url":"/runtime/reference/std/encoding/~/encodeAscii85/","title":"encodeAscii85","description":"@ende/encoding: Converts data into an ascii85-encoded string."},{"url":"/runtime/reference/std/encoding/~/encodeBase32/","title":"encodeBase32","description":"@ende/encoding: Converts data into a base32-encoded string."},{"url":"/runtime/reference/std/encoding/~/encodeBase58/","title":"encodeBase58","description":"@ende/encoding: Converts data into a base58-encoded string."},{"url":"/runtime/reference/std/encoding/~/encodeBase64/","title":"encodeBase64","description":"@ende/encoding: Converts data into a base64-encoded string."},{"url":"/runtime/reference/std/encoding/~/encodeBase64Url/","title":"encodeBase64Url","description":"@ende/encoding: Convert data into a base64url-encoded string."},{"url":"/runtime/reference/std/encoding/~/encodeHex/","title":"encodeHex","description":"@ende/encoding: Converts data into a hex-encoded string."},{"url":"/runtime/reference/std/encoding/~/encodeVarint/","title":"encodeVarint","description":"@ende/encoding: Takes unsigned number `num` and converts it into a Varint encoded `Uint8Array`, returning a tuple consisting of a `Uint8Array` slice of the encoded Varint, and an offset where the Varint encoded bytes end within the `Uint8Array`."},{"url":"/runtime/reference/std/expect/","title":"@ende/expect","description":"This module provides Jest compatible expect assertion functionality."},{"url":"/runtime/reference/std/expect/expect/","title":"@ende/expect/expect"},{"url":"/runtime/reference/std/expect/fn/","title":"@ende/expect/fn","description":"This module contains a function to mock functions for testing and assertions."},{"url":"/runtime/reference/std/expect/~/AnyConstructor/","title":"AnyConstructor","description":"@ende/expect: A constructor that accepts any args and returns any value"},{"url":"/runtime/reference/std/expect/~/Async/","title":"Async","description":"@ende/expect: converts all the methods in an interface to be async functions"},{"url":"/runtime/reference/std/expect/~/ExpectSnapshotState/","title":"ExpectSnapshotState","description":"@ende/expect: State for snapshot testing, following Jest's `expect.getState()`/`expect.setState()` API."},{"url":"/runtime/reference/std/expect/~/Expected/","title":"Expected","description":"@ende/expect: The Expected interface defines the available assertion methods."},{"url":"/runtime/reference/std/expect/~/expect/","title":"expect","description":"@ende/expect: **Note:** the documentation for this module is taken from Jest and the examples are updated for Ende."},{"url":"/runtime/reference/std/expect/~/fn/","title":"fn","description":"@ende/expect: Creates a mock function that can be used for testing and assertions."},{"url":"/runtime/reference/std/fmt/","title":"@ende/fmt","description":"Convert bytes to a human-readable string: 1337 → 1.34 kB"},{"url":"/runtime/reference/std/fmt/bytes/","title":"@ende/fmt/bytes","description":"Convert bytes to a human-readable string: 1337 → 1.34 kB"},{"url":"/runtime/reference/std/fmt/bytes/~/FormatOptions/","title":"FormatOptions","description":"@ende/fmt/bytes: Options for format."},{"url":"/runtime/reference/std/fmt/bytes/~/format/","title":"format","description":"@ende/fmt/bytes: Convert bytes to a human-readable string: 1337 → 1.34 kB"},{"url":"/runtime/reference/std/fmt/colors/","title":"@ende/fmt/colors","description":"String formatters and utilities for dealing with ANSI color codes."},{"url":"/runtime/reference/std/fmt/colors/~/Rgb/","title":"Rgb","description":"@ende/fmt/colors: RGB 8-bits per channel. Each in range `0->255` or `0x00->0xff`"},{"url":"/runtime/reference/std/fmt/colors/~/bgBlack/","title":"bgBlack","description":"@ende/fmt/colors: Set background color to black."},{"url":"/runtime/reference/std/fmt/colors/~/bgBlue/","title":"bgBlue","description":"@ende/fmt/colors: Set background color to blue."},{"url":"/runtime/reference/std/fmt/colors/~/bgBrightBlack/","title":"bgBrightBlack","description":"@ende/fmt/colors: Set background color to bright black."},{"url":"/runtime/reference/std/fmt/colors/~/bgBrightBlue/","title":"bgBrightBlue","description":"@ende/fmt/colors: Set background color to bright blue."},{"url":"/runtime/reference/std/fmt/colors/~/bgBrightCyan/","title":"bgBrightCyan","description":"@ende/fmt/colors: Set background color to bright cyan."},{"url":"/runtime/reference/std/fmt/colors/~/bgBrightGreen/","title":"bgBrightGreen","description":"@ende/fmt/colors: Set background color to bright green."},{"url":"/runtime/reference/std/fmt/colors/~/bgBrightMagenta/","title":"bgBrightMagenta","description":"@ende/fmt/colors: Set background color to bright magenta."},{"url":"/runtime/reference/std/fmt/colors/~/bgBrightRed/","title":"bgBrightRed","description":"@ende/fmt/colors: Set background color to bright red."},{"url":"/runtime/reference/std/fmt/colors/~/bgBrightWhite/","title":"bgBrightWhite","description":"@ende/fmt/colors: Set background color to bright white."},{"url":"/runtime/reference/std/fmt/colors/~/bgBrightYellow/","title":"bgBrightYellow","description":"@ende/fmt/colors: Set background color to bright yellow."},{"url":"/runtime/reference/std/fmt/colors/~/bgCyan/","title":"bgCyan","description":"@ende/fmt/colors: Set background color to cyan."},{"url":"/runtime/reference/std/fmt/colors/~/bgGreen/","title":"bgGreen","description":"@ende/fmt/colors: Set background color to green."},{"url":"/runtime/reference/std/fmt/colors/~/bgMagenta/","title":"bgMagenta","description":"@ende/fmt/colors: Set background color to magenta."},{"url":"/runtime/reference/std/fmt/colors/~/bgRed/","title":"bgRed","description":"@ende/fmt/colors: Set background color to red."},{"url":"/runtime/reference/std/fmt/colors/~/bgRgb24/","title":"bgRgb24","description":"@ende/fmt/colors: Set background color using 24bit rgb. `color` can be a number in range `0x000000` to `0xffffff` or an `Rgb`."},{"url":"/runtime/reference/std/fmt/colors/~/bgRgb8/","title":"bgRgb8","description":"@ende/fmt/colors: Set background color using paletted 8bit colors. https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit"},{"url":"/runtime/reference/std/fmt/colors/~/bgWhite/","title":"bgWhite","description":"@ende/fmt/colors: Set background color to white."},{"url":"/runtime/reference/std/fmt/colors/~/bgYellow/","title":"bgYellow","description":"@ende/fmt/colors: Set background color to yellow."},{"url":"/runtime/reference/std/fmt/colors/~/black/","title":"black","description":"@ende/fmt/colors: Set text color to black."},{"url":"/runtime/reference/std/fmt/colors/~/blue/","title":"blue","description":"@ende/fmt/colors: Set text color to blue."},{"url":"/runtime/reference/std/fmt/colors/~/bold/","title":"bold","description":"@ende/fmt/colors: Make the text bold."},{"url":"/runtime/reference/std/fmt/colors/~/brightBlack/","title":"brightBlack","description":"@ende/fmt/colors: Set text color to bright black."},{"url":"/runtime/reference/std/fmt/colors/~/brightBlue/","title":"brightBlue","description":"@ende/fmt/colors: Set text color to bright blue."},{"url":"/runtime/reference/std/fmt/colors/~/brightCyan/","title":"brightCyan","description":"@ende/fmt/colors: Set text color to bright cyan."},{"url":"/runtime/reference/std/fmt/colors/~/brightGreen/","title":"brightGreen","description":"@ende/fmt/colors: Set text color to bright green."},{"url":"/runtime/reference/std/fmt/colors/~/brightMagenta/","title":"brightMagenta","description":"@ende/fmt/colors: Set text color to bright magenta."},{"url":"/runtime/reference/std/fmt/colors/~/brightRed/","title":"brightRed","description":"@ende/fmt/colors: Set text color to bright red."},{"url":"/runtime/reference/std/fmt/colors/~/brightWhite/","title":"brightWhite","description":"@ende/fmt/colors: Set text color to bright white."},{"url":"/runtime/reference/std/fmt/colors/~/brightYellow/","title":"brightYellow","description":"@ende/fmt/colors: Set text color to bright yellow."},{"url":"/runtime/reference/std/fmt/colors/~/cyan/","title":"cyan","description":"@ende/fmt/colors: Set text color to cyan."},{"url":"/runtime/reference/std/fmt/colors/~/dim/","title":"dim","description":"@ende/fmt/colors: The text emits only a small amount of light."},{"url":"/runtime/reference/std/fmt/colors/~/getColorEnabled/","title":"getColorEnabled","description":"@ende/fmt/colors: Get whether text color change is enabled or disabled."},{"url":"/runtime/reference/std/fmt/colors/~/gray/","title":"gray","description":"@ende/fmt/colors: Set text color to gray."},{"url":"/runtime/reference/std/fmt/colors/~/green/","title":"green","description":"@ende/fmt/colors: Set text color to green."},{"url":"/runtime/reference/std/fmt/colors/~/hidden/","title":"hidden","description":"@ende/fmt/colors: Make the text hidden."},{"url":"/runtime/reference/std/fmt/colors/~/inverse/","title":"inverse","description":"@ende/fmt/colors: Invert background color and text color."},{"url":"/runtime/reference/std/fmt/colors/~/italic/","title":"italic","description":"@ende/fmt/colors: Make the text italic."},{"url":"/runtime/reference/std/fmt/colors/~/magenta/","title":"magenta","description":"@ende/fmt/colors: Set text color to magenta."},{"url":"/runtime/reference/std/fmt/colors/~/red/","title":"red","description":"@ende/fmt/colors: Set text color to red."},{"url":"/runtime/reference/std/fmt/colors/~/reset/","title":"reset","description":"@ende/fmt/colors: Reset the text modified."},{"url":"/runtime/reference/std/fmt/colors/~/rgb24/","title":"rgb24","description":"@ende/fmt/colors: Set text color using 24bit rgb. `color` can be a number in range `0x000000` to `0xffffff` or an `Rgb`."},{"url":"/runtime/reference/std/fmt/colors/~/rgb8/","title":"rgb8","description":"@ende/fmt/colors: Set text color using paletted 8bit colors. https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit"},{"url":"/runtime/reference/std/fmt/colors/~/setColorEnabled/","title":"setColorEnabled","description":"@ende/fmt/colors: Enable or disable text color when styling."},{"url":"/runtime/reference/std/fmt/colors/~/strikethrough/","title":"strikethrough","description":"@ende/fmt/colors: Put horizontal line through the center of the text."},{"url":"/runtime/reference/std/fmt/colors/~/stripAnsiCode/","title":"stripAnsiCode","description":"@ende/fmt/colors: Remove ANSI escape codes from the string."},{"url":"/runtime/reference/std/fmt/colors/~/underline/","title":"underline","description":"@ende/fmt/colors: Make the text underline."},{"url":"/runtime/reference/std/fmt/colors/~/white/","title":"white","description":"@ende/fmt/colors: Set text color to white."},{"url":"/runtime/reference/std/fmt/colors/~/yellow/","title":"yellow","description":"@ende/fmt/colors: Set text color to yellow."},{"url":"/runtime/reference/std/fmt/duration/","title":"@ende/fmt/duration","description":"Format milliseconds to time duration."},{"url":"/runtime/reference/std/fmt/duration/~/FormatOptions/","title":"FormatOptions","description":"@ende/fmt/duration: Options for format."},{"url":"/runtime/reference/std/fmt/duration/~/format/","title":"format","description":"@ende/fmt/duration: Format milliseconds to time duration."},{"url":"/runtime/reference/std/fmt/printf/","title":"@ende/fmt/printf","description":"sprintf and printf for printing formatted strings to stdout."},{"url":"/runtime/reference/std/fmt/printf/~/printf/","title":"printf","description":"@ende/fmt/printf: Converts and formats a variable number of `args` as is specified by `format`. `printf` writes the formatted string to standard output."},{"url":"/runtime/reference/std/fmt/printf/~/sprintf/","title":"sprintf","description":"@ende/fmt/printf: Converts and formats a variable number of `args` as is specified by `format`. `sprintf` returns the formatted string."},{"url":"/runtime/reference/std/front-matter/","title":"@ende/front-matter","description":"Extracts front matter from strings. Adapted from jxson/front-matter."},{"url":"/runtime/reference/std/front-matter/any/","title":"@ende/front-matter/any"},{"url":"/runtime/reference/std/front-matter/any/~/extract/","title":"extract","description":"@ende/front-matter/any: Extracts and parses YAML, TOML, or JSON from the metadata of front matter content, depending on the format."},{"url":"/runtime/reference/std/front-matter/json/","title":"@ende/front-matter/json"},{"url":"/runtime/reference/std/front-matter/json/~/extract/","title":"extract","description":"@ende/front-matter/json: Extracts and parses JSON from the metadata of front matter content."},{"url":"/runtime/reference/std/front-matter/test/","title":"@ende/front-matter/test"},{"url":"/runtime/reference/std/front-matter/toml/","title":"@ende/front-matter/toml"},{"url":"/runtime/reference/std/front-matter/toml/~/extract/","title":"extract","description":"@ende/front-matter/toml: Extracts and parses TOML from the metadata of front matter content."},{"url":"/runtime/reference/std/front-matter/types/","title":"@ende/front-matter/types"},{"url":"/runtime/reference/std/front-matter/unstable-yaml/","title":"@ende/front-matter/unstable-yaml"},{"url":"/runtime/reference/std/front-matter/unstable-yaml/~/extract/","title":"extract","description":"@ende/front-matter/unstable-yaml: Extracts and parses YAML from the metadata of front matter content."},{"url":"/runtime/reference/std/front-matter/yaml/","title":"@ende/front-matter/yaml"},{"url":"/runtime/reference/std/front-matter/yaml/~/extract/","title":"extract","description":"@ende/front-matter/yaml: Extracts and parses YAML from the metadata of front matter content."},{"url":"/runtime/reference/std/front-matter/~/Extract/","title":"Extract","description":"@ende/front-matter: Return type for extract function."},{"url":"/runtime/reference/std/front-matter/~/Format/","title":"Format","description":"@ende/front-matter: Supported format for front matter. `\"unknown\"` is used when auto format detection logic fails."},{"url":"/runtime/reference/std/front-matter/~/test/","title":"test","description":"@ende/front-matter: Tests if a string has valid front matter. Supports YAML, TOML and JSON."},{"url":"/runtime/reference/std/fs/","title":"@ende/fs","description":"Helpers for working with the filesystem."},{"url":"/runtime/reference/std/fs/copy/","title":"@ende/fs/copy"},{"url":"/runtime/reference/std/fs/empty-dir/","title":"@ende/fs/empty-dir"},{"url":"/runtime/reference/std/fs/ensure-dir/","title":"@ende/fs/ensure-dir"},{"url":"/runtime/reference/std/fs/ensure-file/","title":"@ende/fs/ensure-file"},{"url":"/runtime/reference/std/fs/ensure-link/","title":"@ende/fs/ensure-link"},{"url":"/runtime/reference/std/fs/ensure-symlink/","title":"@ende/fs/ensure-symlink"},{"url":"/runtime/reference/std/fs/eol/","title":"@ende/fs/eol"},{"url":"/runtime/reference/std/fs/exists/","title":"@ende/fs/exists"},{"url":"/runtime/reference/std/fs/expand-glob/","title":"@ende/fs/expand-glob"},{"url":"/runtime/reference/std/fs/move/","title":"@ende/fs/move"},{"url":"/runtime/reference/std/fs/unstable-chmod/","title":"@ende/fs/unstable-chmod"},{"url":"/runtime/reference/std/fs/unstable-chmod/~/chmod/","title":"chmod","description":"@ende/fs/unstable-chmod: Changes the permission of a specific file/directory of specified path. Ignores the process's umask."},{"url":"/runtime/reference/std/fs/unstable-chmod/~/chmodSync/","title":"chmodSync","description":"@ende/fs/unstable-chmod: Synchronously changes the permission of a specific file/directory of specified path. Ignores the process's umask."},{"url":"/runtime/reference/std/fs/unstable-chown/","title":"@ende/fs/unstable-chown"},{"url":"/runtime/reference/std/fs/unstable-chown/~/chown/","title":"chown","description":"@ende/fs/unstable-chown: Change owner of a regular file or directory."},{"url":"/runtime/reference/std/fs/unstable-chown/~/chownSync/","title":"chownSync","description":"@ende/fs/unstable-chown: Synchronously change owner of a regular file or directory."},{"url":"/runtime/reference/std/fs/unstable-copy-file/","title":"@ende/fs/unstable-copy-file"},{"url":"/runtime/reference/std/fs/unstable-copy-file/~/copyFile/","title":"copyFile","description":"@ende/fs/unstable-copy-file: Copies the contents and permissions of one file to another specified path, by default creating a new file if needed, else overwriting. Fails if target path is a directory or is unwritable."},{"url":"/runtime/reference/std/fs/unstable-copy-file/~/copyFileSync/","title":"copyFileSync","description":"@ende/fs/unstable-copy-file: Synchronously copies the contents and permissions of one file to another specified path, by default creating a new file if needed, else overwriting. Fails if target path is a directory or is unwritable."},{"url":"/runtime/reference/std/fs/unstable-create/","title":"@ende/fs/unstable-create"},{"url":"/runtime/reference/std/fs/unstable-create/~/create/","title":"create","description":"@ende/fs/unstable-create: Creates a file if none exists or truncates an existing file and resolves to an instance of FsFile."},{"url":"/runtime/reference/std/fs/unstable-create/~/createSync/","title":"createSync","description":"@ende/fs/unstable-create: Creates a file if none exists or truncates an existing file and returns an instance of FsFile."},{"url":"/runtime/reference/std/fs/unstable-link/","title":"@ende/fs/unstable-link"},{"url":"/runtime/reference/std/fs/unstable-link/~/link/","title":"link","description":"@ende/fs/unstable-link: Creates `newpath` as a hard link to `oldpath`."},{"url":"/runtime/reference/std/fs/unstable-link/~/linkSync/","title":"linkSync","description":"@ende/fs/unstable-link: Synchronously creates `newpath` as a hard link to `oldpath`."},{"url":"/runtime/reference/std/fs/unstable-lstat/","title":"@ende/fs/unstable-lstat"},{"url":"/runtime/reference/std/fs/unstable-lstat/~/lstat/","title":"lstat","description":"@ende/fs/unstable-lstat: Resolves to a FileInfo for the specified `path`. If `path` is a symlink, information for the symlink will be returned instead of what it points to."},{"url":"/runtime/reference/std/fs/unstable-lstat/~/lstatSync/","title":"lstatSync","description":"@ende/fs/unstable-lstat: Synchronously returns a FileInfo for the specified `path`. If `path` is a symlink, information for the symlink will be returned instead of what it points to."},{"url":"/runtime/reference/std/fs/unstable-make-temp-dir/","title":"@ende/fs/unstable-make-temp-dir"},{"url":"/runtime/reference/std/fs/unstable-make-temp-dir/~/makeTempDir/","title":"makeTempDir","description":"@ende/fs/unstable-make-temp-dir: Creates a new temporary directory in the default directory for temporary files, unless `dir` is specified. Other optional options include prefixing and suffixing the directory name with `prefix` and `suffix` respectively."},{"url":"/runtime/reference/std/fs/unstable-make-temp-dir/~/makeTempDirSync/","title":"makeTempDirSync","description":"@ende/fs/unstable-make-temp-dir: Synchronously creates a new temporary directory in the default directory for temporary files, unless `dir` is specified. Other optional options include prefixing and suffixing the directory name with `prefix` and `suffix` respectively."},{"url":"/runtime/reference/std/fs/unstable-make-temp-file/","title":"@ende/fs/unstable-make-temp-file"},{"url":"/runtime/reference/std/fs/unstable-make-temp-file/~/makeTempFile/","title":"makeTempFile","description":"@ende/fs/unstable-make-temp-file: Creates a new temporary file in the default directory for temporary files, unless `dir` is specified."},{"url":"/runtime/reference/std/fs/unstable-make-temp-file/~/makeTempFileSync/","title":"makeTempFileSync","description":"@ende/fs/unstable-make-temp-file: Synchronously creates a new temporary file in the default directory for temporary files, unless `dir` is specified."},{"url":"/runtime/reference/std/fs/unstable-mkdir/","title":"@ende/fs/unstable-mkdir"},{"url":"/runtime/reference/std/fs/unstable-mkdir/~/MkdirOptions/","title":"MkdirOptions","description":"@ende/fs/unstable-mkdir: Options which can be set when using mkdir and mkdirSync."},{"url":"/runtime/reference/std/fs/unstable-mkdir/~/mkdir/","title":"mkdir","description":"@ende/fs/unstable-mkdir: Creates a new directory with the specified path."},{"url":"/runtime/reference/std/fs/unstable-mkdir/~/mkdirSync/","title":"mkdirSync","description":"@ende/fs/unstable-mkdir: Synchronously creates a new directory with the specified path."},{"url":"/runtime/reference/std/fs/unstable-open/","title":"@ende/fs/unstable-open"},{"url":"/runtime/reference/std/fs/unstable-open/~/OpenOptions/","title":"OpenOptions","description":"@ende/fs/unstable-open: Options which can be set when using open and openSync."},{"url":"/runtime/reference/std/fs/unstable-open/~/open/","title":"open","description":"@ende/fs/unstable-open: Open a file and resolve to an instance of FsFile. The file does not need to previously exist if using the `create` or `createNew` open options. The caller may have the resulting file automatically closed by the runtime once it's out of scope by declaring the file variable with the `using` keyword."},{"url":"/runtime/reference/std/fs/unstable-open/~/openSync/","title":"openSync","description":"@ende/fs/unstable-open: Synchronously open a file and return an instance of FsFile. The file does not need to previously exist if using the `create` or `createNew` open options. The caller may have the resulting file automatically closed by the runtime once it's out of scope by declaring the file variable with the `using` keyword."},{"url":"/runtime/reference/std/fs/unstable-read-dir/","title":"@ende/fs/unstable-read-dir"},{"url":"/runtime/reference/std/fs/unstable-read-dir/~/readDir/","title":"readDir","description":"@ende/fs/unstable-read-dir: Reads the directory given by `path` and returns an async iterable of DirEntry. The order of entries is not guaranteed."},{"url":"/runtime/reference/std/fs/unstable-read-dir/~/readDirSync/","title":"readDirSync","description":"@ende/fs/unstable-read-dir: Synchronously reads the directory given by `path` and returns an iterable of DirEntry. The order of entries is not guaranteed."},{"url":"/runtime/reference/std/fs/unstable-read-file/","title":"@ende/fs/unstable-read-file"},{"url":"/runtime/reference/std/fs/unstable-read-file/~/readFile/","title":"readFile","description":"@ende/fs/unstable-read-file: Reads and resolves to the entire contents of a file as an array of bytes. `TextDecoder` can be used to transform the bytes to string if required."},{"url":"/runtime/reference/std/fs/unstable-read-file/~/readFileSync/","title":"readFileSync","description":"@ende/fs/unstable-read-file: Synchronously reads and returns the entire contents of a file as an array of bytes. `TextDecoder` can be used to transform the bytes to string if required."},{"url":"/runtime/reference/std/fs/unstable-read-link/","title":"@ende/fs/unstable-read-link"},{"url":"/runtime/reference/std/fs/unstable-read-link/~/readLink/","title":"readLink","description":"@ende/fs/unstable-read-link: Resolves to the path destination of the named symbolic link."},{"url":"/runtime/reference/std/fs/unstable-read-link/~/readLinkSync/","title":"readLinkSync","description":"@ende/fs/unstable-read-link: Synchronously returns the path destination of the named symbolic link."},{"url":"/runtime/reference/std/fs/unstable-read-text-file/","title":"@ende/fs/unstable-read-text-file"},{"url":"/runtime/reference/std/fs/unstable-read-text-file/~/readTextFile/","title":"readTextFile","description":"@ende/fs/unstable-read-text-file: Asynchronously reads and returns the entire contents of a file as an UTF-8 decoded string."},{"url":"/runtime/reference/std/fs/unstable-read-text-file/~/readTextFileSync/","title":"readTextFileSync","description":"@ende/fs/unstable-read-text-file: Synchronously reads and returns the entire contents of a file as an UTF-8 decoded string."},{"url":"/runtime/reference/std/fs/unstable-real-path/","title":"@ende/fs/unstable-real-path"},{"url":"/runtime/reference/std/fs/unstable-real-path/~/realPath/","title":"realPath","description":"@ende/fs/unstable-real-path: Resolves to the absolute normalized path, with symbolic links resolved."},{"url":"/runtime/reference/std/fs/unstable-real-path/~/realPathSync/","title":"realPathSync","description":"@ende/fs/unstable-real-path: Synchronously returns absolute normalized path, with symbolic links resolved."},{"url":"/runtime/reference/std/fs/unstable-remove/","title":"@ende/fs/unstable-remove"},{"url":"/runtime/reference/std/fs/unstable-remove/~/remove/","title":"remove","description":"@ende/fs/unstable-remove: Removes the named file or directory."},{"url":"/runtime/reference/std/fs/unstable-remove/~/removeSync/","title":"removeSync","description":"@ende/fs/unstable-remove: Synchronously removes the named file or directory."},{"url":"/runtime/reference/std/fs/unstable-rename/","title":"@ende/fs/unstable-rename"},{"url":"/runtime/reference/std/fs/unstable-rename/~/rename/","title":"rename","description":"@ende/fs/unstable-rename: Renames (moves) `oldpath` to `newpath`. Paths may be files or directories. If `newpath` already exists and is not a directory, `rename()` replaces it. OS-specific restrictions may apply when `oldpath` and `newpath` are in different directories."},{"url":"/runtime/reference/std/fs/unstable-rename/~/renameSync/","title":"renameSync","description":"@ende/fs/unstable-rename: Synchronously renames (moves) `oldpath` to `newpath`. Paths may be files or directories. If `newpath` already exists and is not a directory, `renameSync()` replaces it. OS-specific restrictions may apply when `oldpath` and `newpath` are in different directories."},{"url":"/runtime/reference/std/fs/unstable-stat/","title":"@ende/fs/unstable-stat"},{"url":"/runtime/reference/std/fs/unstable-stat/~/stat/","title":"stat","description":"@ende/fs/unstable-stat: Resolves to a FileInfo for the specified `path`. Will always follow symlinks."},{"url":"/runtime/reference/std/fs/unstable-stat/~/statSync/","title":"statSync","description":"@ende/fs/unstable-stat: Synchronously returns a FileInfo for the specified `path`. Will always follow symlinks."},{"url":"/runtime/reference/std/fs/unstable-symlink/","title":"@ende/fs/unstable-symlink"},{"url":"/runtime/reference/std/fs/unstable-symlink/~/symlink/","title":"symlink","description":"@ende/fs/unstable-symlink: Creates `newpath` as a symbolic link to `oldpath`."},{"url":"/runtime/reference/std/fs/unstable-symlink/~/symlinkSync/","title":"symlinkSync","description":"@ende/fs/unstable-symlink: Creates `newpath` as a symbolic link to `oldpath`."},{"url":"/runtime/reference/std/fs/unstable-truncate/","title":"@ende/fs/unstable-truncate"},{"url":"/runtime/reference/std/fs/unstable-truncate/~/truncate/","title":"truncate","description":"@ende/fs/unstable-truncate: Truncates (or extends) the specified file, to reach the specified `len`. If `len` is not specified then the entire file contents are truncated."},{"url":"/runtime/reference/std/fs/unstable-truncate/~/truncateSync/","title":"truncateSync","description":"@ende/fs/unstable-truncate: Synchronously truncates (or extends) the specified file, to reach the specified `len`. If `len` is not specified then the entire file contents are truncated."},{"url":"/runtime/reference/std/fs/unstable-types/","title":"@ende/fs/unstable-types"},{"url":"/runtime/reference/std/fs/unstable-types/~/DirEntry/","title":"DirEntry","description":"@ende/fs/unstable-types: Information about a directory entry returned from readDir and readDirSync."},{"url":"/runtime/reference/std/fs/unstable-types/~/FileInfo/","title":"FileInfo","description":"@ende/fs/unstable-types: Provides information about a file and is returned by stat, lstat, statSync, and lstatSync or from calling `stat()` and `statSync()` on an FsFile instance."},{"url":"/runtime/reference/std/fs/unstable-types/~/FsFile/","title":"FsFile","description":"@ende/fs/unstable-types: The abstraction for reading and writing files."},{"url":"/runtime/reference/std/fs/unstable-types/~/MakeTempOptions/","title":"MakeTempOptions","description":"@ende/fs/unstable-types: Options which can be set when using makeTempDir, makeTempDirSync, makeTempFile, and makeTempFileSync."},{"url":"/runtime/reference/std/fs/unstable-types/~/ReadFileOptions/","title":"ReadFileOptions","description":"@ende/fs/unstable-types: Options which can be set when using readFile or readTextFile."},{"url":"/runtime/reference/std/fs/unstable-types/~/RemoveOptions/","title":"RemoveOptions","description":"@ende/fs/unstable-types: Options that can be used with remove and removeSync."},{"url":"/runtime/reference/std/fs/unstable-types/~/SetRawOptions/","title":"SetRawOptions","description":"@ende/fs/unstable-types: Options when setting TTY to raw mode."},{"url":"/runtime/reference/std/fs/unstable-types/~/SymlinkOptions/","title":"SymlinkOptions","description":"@ende/fs/unstable-types: Options that can be used with symlink and symlinkSync."},{"url":"/runtime/reference/std/fs/unstable-types/~/WriteFileOptions/","title":"WriteFileOptions","description":"@ende/fs/unstable-types: Options for writing to a file."},{"url":"/runtime/reference/std/fs/unstable-umask/","title":"@ende/fs/unstable-umask"},{"url":"/runtime/reference/std/fs/unstable-umask/~/umask/","title":"umask","description":"@ende/fs/unstable-umask: Retrieve the process umask. If `mask` is provided, sets the process umask. This call always returns what the umask was before the call."},{"url":"/runtime/reference/std/fs/unstable-utime/","title":"@ende/fs/unstable-utime"},{"url":"/runtime/reference/std/fs/unstable-utime/~/utime/","title":"utime","description":"@ende/fs/unstable-utime: Changes the access (`atime`) and modification (`mtime`) times of a file system object referenced by `path`. Given times are either in seconds (UNIX epoch time) or as `Date` objects."},{"url":"/runtime/reference/std/fs/unstable-utime/~/utimeSync/","title":"utimeSync","description":"@ende/fs/unstable-utime: Synchronously changes the access (`atime`) and modification (`mtime`) times of the file stream resource. Given times are either in seconds (UNIX epoch time) or as `Date` objects."},{"url":"/runtime/reference/std/fs/unstable-write-file/","title":"@ende/fs/unstable-write-file"},{"url":"/runtime/reference/std/fs/unstable-write-file/~/writeFile/","title":"writeFile","description":"@ende/fs/unstable-write-file: Write `data` to the given `path`, by default creating a new file if needed, else overwriting."},{"url":"/runtime/reference/std/fs/unstable-write-file/~/writeFileSync/","title":"writeFileSync","description":"@ende/fs/unstable-write-file: Synchronously write `data` to the given `path`, by default creating a new file if needed, else overwriting."},{"url":"/runtime/reference/std/fs/unstable-write-text-file/","title":"@ende/fs/unstable-write-text-file"},{"url":"/runtime/reference/std/fs/unstable-write-text-file/~/writeTextFile/","title":"writeTextFile","description":"@ende/fs/unstable-write-text-file: Write string `data` to the given `path`, by default creating a new file if needed, else overwriting."},{"url":"/runtime/reference/std/fs/unstable-write-text-file/~/writeTextFileSync/","title":"writeTextFileSync","description":"@ende/fs/unstable-write-text-file: Synchronously write string `data` to the given `path`, by default creating a new file if needed, else overwriting."},{"url":"/runtime/reference/std/fs/walk/","title":"@ende/fs/walk"},{"url":"/runtime/reference/std/fs/~/CRLF/","title":"CRLF","description":"@ende/fs: End-of-line character for Windows platforms."},{"url":"/runtime/reference/std/fs/~/CopyOptions/","title":"CopyOptions","description":"@ende/fs: Options for copy and copySync."},{"url":"/runtime/reference/std/fs/~/EOL/","title":"EOL","description":"@ende/fs: End-of-line character evaluated for the current platform."},{"url":"/runtime/reference/std/fs/~/ExistsOptions/","title":"ExistsOptions","description":"@ende/fs: Options for exists and existsSync."},{"url":"/runtime/reference/std/fs/~/ExpandGlobOptions/","title":"ExpandGlobOptions","description":"@ende/fs: Options for expandGlob and expandGlobSync."},{"url":"/runtime/reference/std/fs/~/GlobOptions/","title":"GlobOptions","description":"@ende/fs: Options for globToRegExp, joinGlobs, normalizeGlob and expandGlob."},{"url":"/runtime/reference/std/fs/~/LF/","title":"LF","description":"@ende/fs: End-of-line character for POSIX platforms such as macOS and Linux."},{"url":"/runtime/reference/std/fs/~/MoveOptions/","title":"MoveOptions","description":"@ende/fs: Options for move and moveSync."},{"url":"/runtime/reference/std/fs/~/WalkEntry/","title":"WalkEntry","description":"@ende/fs: Walk entry for walk, walkSync, expandGlob and expandGlobSync."},{"url":"/runtime/reference/std/fs/~/WalkOptions/","title":"WalkOptions","description":"@ende/fs: Options for walk and walkSync."},{"url":"/runtime/reference/std/fs/~/copy/","title":"copy","description":"@ende/fs: Asynchronously copy a file or directory (along with its contents), like cp -r."},{"url":"/runtime/reference/std/fs/~/copySync/","title":"copySync","description":"@ende/fs: Synchronously copy a file or directory (along with its contents), like cp -r."},{"url":"/runtime/reference/std/fs/~/detect/","title":"detect","description":"@ende/fs: Returns the detected EOL character(s) detected in the input string. If no EOL character is detected, `null` is returned."},{"url":"/runtime/reference/std/fs/~/emptyDir/","title":"emptyDir","description":"@ende/fs: Asynchronously ensures that a directory is empty."},{"url":"/runtime/reference/std/fs/~/emptyDirSync/","title":"emptyDirSync","description":"@ende/fs: Synchronously ensures that a directory is empty deletes the directory contents it is not empty."},{"url":"/runtime/reference/std/fs/~/ensureDir/","title":"ensureDir","description":"@ende/fs: Asynchronously ensures that the directory exists, like mkdir -p."},{"url":"/runtime/reference/std/fs/~/ensureDirSync/","title":"ensureDirSync","description":"@ende/fs: Synchronously ensures that the directory exists, like mkdir -p."},{"url":"/runtime/reference/std/fs/~/ensureFile/","title":"ensureFile","description":"@ende/fs: Asynchronously ensures that the file exists."},{"url":"/runtime/reference/std/fs/~/ensureFileSync/","title":"ensureFileSync","description":"@ende/fs: Synchronously ensures that the file exists."},{"url":"/runtime/reference/std/fs/~/ensureLink/","title":"ensureLink","description":"@ende/fs: Asynchronously ensures that the hard link exists."},{"url":"/runtime/reference/std/fs/~/ensureLinkSync/","title":"ensureLinkSync","description":"@ende/fs: Synchronously ensures that the hard link exists."},{"url":"/runtime/reference/std/fs/~/ensureSymlink/","title":"ensureSymlink","description":"@ende/fs: Asynchronously ensures that the link exists, and points to a valid file."},{"url":"/runtime/reference/std/fs/~/ensureSymlinkSync/","title":"ensureSymlinkSync","description":"@ende/fs: Synchronously ensures that the link exists, and points to a valid file."},{"url":"/runtime/reference/std/fs/~/exists/","title":"exists","description":"@ende/fs: Asynchronously test whether or not the given path exists by checking with the file system."},{"url":"/runtime/reference/std/fs/~/existsSync/","title":"existsSync","description":"@ende/fs: Synchronously test whether or not the given path exists by checking with the file system."},{"url":"/runtime/reference/std/fs/~/expandGlob/","title":"expandGlob","description":"@ende/fs: Returns an async iterator that yields each file path matching the given glob pattern."},{"url":"/runtime/reference/std/fs/~/expandGlobSync/","title":"expandGlobSync","description":"@ende/fs: Returns an iterator that yields each file path matching the given glob pattern. The file paths are relative to the provided `root` directory. If `root` is not provided, the current working directory is used. The `root` directory is not included in the yielded file paths."},{"url":"/runtime/reference/std/fs/~/format/","title":"format","description":"@ende/fs: Normalize the input string to the targeted EOL."},{"url":"/runtime/reference/std/fs/~/move/","title":"move","description":"@ende/fs: Asynchronously moves a file or directory (along with its contents)."},{"url":"/runtime/reference/std/fs/~/moveSync/","title":"moveSync","description":"@ende/fs: Synchronously moves a file or directory (along with its contents)."},{"url":"/runtime/reference/std/fs/~/walk/","title":"walk","description":"@ende/fs: Recursively walks through a directory and yields information about each file and directory encountered."},{"url":"/runtime/reference/std/fs/~/walkSync/","title":"walkSync","description":"@ende/fs: Recursively walks through a directory and yields information about each file and directory encountered."},{"url":"/runtime/reference/std/html/","title":"@ende/html","description":"Functions for HTML tasks such as escaping or unescaping HTML entities."},{"url":"/runtime/reference/std/html/entities/","title":"@ende/html/entities"},{"url":"/runtime/reference/std/html/named-entity-list.json/","title":"@ende/html/named-entity-list.json"},{"url":"/runtime/reference/std/html/named-entity-list.json/~/default/","title":"default","description":"@ende/html/named-entity-list.json"},{"url":"/runtime/reference/std/html/unstable-escape-css/","title":"@ende/html/unstable-escape-css"},{"url":"/runtime/reference/std/html/unstable-escape-css/~/escapeCss/","title":"escapeCss","description":"@ende/html/unstable-escape-css: Escapes a string for direct interpolation into an external CSS style sheet, within a `<style>` element, or in a selector."},{"url":"/runtime/reference/std/html/unstable-escape-js/","title":"@ende/html/unstable-escape-js"},{"url":"/runtime/reference/std/html/unstable-escape-js/~/EscapeJsOptions/","title":"EscapeJsOptions","description":"@ende/html/unstable-escape-js: Options for escapeJs"},{"url":"/runtime/reference/std/html/unstable-escape-js/~/escapeJs/","title":"escapeJs","description":"@ende/html/unstable-escape-js: Escapes a JavaScript object or other data for safe interpolation inside a `<script>` tag."},{"url":"/runtime/reference/std/html/unstable-html/","title":"@ende/html/unstable-html"},{"url":"/runtime/reference/std/html/unstable-html/~/html/","title":"html","description":"@ende/html/unstable-html: A template literal tag function for creating HTML strings with interpolated values."},{"url":"/runtime/reference/std/html/unstable-is-valid-custom-element-name/","title":"@ende/html/unstable-is-valid-custom-element-name"},{"url":"/runtime/reference/std/html/unstable-is-valid-custom-element-name/~/isValidCustomElementName/","title":"isValidCustomElementName","description":"@ende/html/unstable-is-valid-custom-element-name: Returns whether the given string is a valid custom element name, as per the requirements defined in https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name."},{"url":"/runtime/reference/std/html/~/EntityList/","title":"EntityList","description":"@ende/html: Object structure for a list of HTML entities."},{"url":"/runtime/reference/std/html/~/UnescapeOptions/","title":"UnescapeOptions","description":"@ende/html: Options for unescape."},{"url":"/runtime/reference/std/html/~/escape/","title":"escape","description":"@ende/html: Escapes text for safe interpolation into HTML text content and quoted attributes."},{"url":"/runtime/reference/std/html/~/unescape/","title":"unescape","description":"@ende/html: Unescapes HTML entities in text."},{"url":"/runtime/reference/std/http/","title":"@ende/http","description":"Provides user-friendly serve on top of Ende's native HTTP server and other utilities for creating HTTP servers and clients."},{"url":"/runtime/reference/std/http/cookie/","title":"@ende/http/cookie"},{"url":"/runtime/reference/std/http/etag/","title":"@ende/http/etag","description":"Provides functions for dealing with and matching ETags, including eTag to calculate an etag for a given entity, ifMatch for validating if an ETag matches against a `If-Match` header and ifNoneMatch for validating an Etag against an `If-None-Match` header."},{"url":"/runtime/reference/std/http/file-server/","title":"@ende/http/file-server","description":"Contains functions serveDir and serveFile for building a static file server."},{"url":"/runtime/reference/std/http/negotiation/","title":"@ende/http/negotiation","description":"Contains the functions accepts, acceptsEncodings, and acceptsLanguages to provide content negotiation capabilities."},{"url":"/runtime/reference/std/http/server-sent-event-parse-stream/","title":"@ende/http/server-sent-event-parse-stream"},{"url":"/runtime/reference/std/http/server-sent-event-stream/","title":"@ende/http/server-sent-event-stream"},{"url":"/runtime/reference/std/http/status/","title":"@ende/http/status","description":"Contains the STATUS_CODE object which contains standard HTTP status codes and provides several type guards for handling status codes with type safety."},{"url":"/runtime/reference/std/http/unstable-cache-control/","title":"@ende/http/unstable-cache-control","description":"Parsing and formatting of the `Cache-Control` HTTP header per RFC 9111 Section 5.2."},{"url":"/runtime/reference/std/http/unstable-cache-control/~/CacheControl/","title":"CacheControl","description":"@ende/http/unstable-cache-control: Parsed Cache-Control value. Contains all directives from both request and response contexts with the widest applicable types. Returned by parseCacheControl and accepted by formatCacheControl."},{"url":"/runtime/reference/std/http/unstable-cache-control/~/CacheControlBase/","title":"CacheControlBase","description":"@ende/http/unstable-cache-control: Directives shared by both request and response Cache-Control headers."},{"url":"/runtime/reference/std/http/unstable-cache-control/~/RequestCacheControl/","title":"RequestCacheControl","description":"@ende/http/unstable-cache-control: Cache-Control directives for requests (e.g. from a client)."},{"url":"/runtime/reference/std/http/unstable-cache-control/~/ResponseCacheControl/","title":"ResponseCacheControl","description":"@ende/http/unstable-cache-control: Cache-Control directives for responses (e.g. from a server)."},{"url":"/runtime/reference/std/http/unstable-cache-control/~/formatCacheControl/","title":"formatCacheControl","description":"@ende/http/unstable-cache-control: Serializes a Cache-Control object to a header value string. Output is lowercase and comma-separated. Empty object produces an empty string."},{"url":"/runtime/reference/std/http/unstable-cache-control/~/parseCacheControl/","title":"parseCacheControl","description":"@ende/http/unstable-cache-control: Parses a `Cache-Control` header value into a typed object. Returns an empty object for `null` or empty string. Directive names are case-insensitive."},{"url":"/runtime/reference/std/http/unstable-error/","title":"@ende/http/unstable-error"},{"url":"/runtime/reference/std/http/unstable-error/~/HttpError/","title":"HttpError","description":"@ende/http/unstable-error: An error class for representing HTTP errors with status codes."},{"url":"/runtime/reference/std/http/unstable-error/~/HttpErrorOptions/","title":"HttpErrorOptions","description":"@ende/http/unstable-error: Options for HttpError."},{"url":"/runtime/reference/std/http/unstable-file-server/","title":"@ende/http/unstable-file-server"},{"url":"/runtime/reference/std/http/unstable-file-server/~/ServeDirOptions/","title":"ServeDirOptions","description":"@ende/http/unstable-file-server: Interface for serveDir options."},{"url":"/runtime/reference/std/http/unstable-file-server/~/ServeFileOptions/","title":"ServeFileOptions","description":"@ende/http/unstable-file-server: Interface for serveFile options."},{"url":"/runtime/reference/std/http/unstable-file-server/~/serveDir/","title":"serveDir","description":"@ende/http/unstable-file-server: Serves the files under the given directory root (opts.fsRoot)."},{"url":"/runtime/reference/std/http/unstable-file-server/~/serveFile/","title":"serveFile","description":"@ende/http/unstable-file-server: Resolves a Response with the requested file as the body."},{"url":"/runtime/reference/std/http/unstable-formdata-decoder-stream/","title":"@ende/http/unstable-formdata-decoder-stream"},{"url":"/runtime/reference/std/http/unstable-formdata-decoder-stream/~/FormDataDecoderStream/","title":"FormDataDecoderStream","description":"@ende/http/unstable-formdata-decoder-stream: ### Overview FormDataDecoderStream is a class based off the RFC 7578 spec and offers a way to decode a FormData in a streaming manner. Enabling one to receive large amounts of information and start working with it, without having it all locally in memory first."},{"url":"/runtime/reference/std/http/unstable-formdata-decoder-stream/~/FormDataEntry/","title":"FormDataEntry","description":"@ende/http/unstable-formdata-decoder-stream: The output that is passed from a FormDataDecoderStream."},{"url":"/runtime/reference/std/http/unstable-formdata-encoder-stream/","title":"@ende/http/unstable-formdata-encoder-stream"},{"url":"/runtime/reference/std/http/unstable-formdata-encoder-stream/~/FormDataEncoderStream/","title":"FormDataEncoderStream","description":"@ende/http/unstable-formdata-encoder-stream: ### Overview FormDataEncoderStream is a class based off the RFC 7578 spec and offers a way to create a FormData in a streaming manner. Enabling one to send large amounts of information without having it all locally in memory first."},{"url":"/runtime/reference/std/http/unstable-formdata-encoder-stream/~/FormDataInput/","title":"FormDataInput","description":"@ende/http/unstable-formdata-encoder-stream: The input that can be passed to a FormDataEncoderStream."},{"url":"/runtime/reference/std/http/unstable-header/","title":"@ende/http/unstable-header"},{"url":"/runtime/reference/std/http/unstable-header/~/HEADER/","title":"HEADER","description":"@ende/http/unstable-header: HTTP Headers with status permanent"},{"url":"/runtime/reference/std/http/unstable-message-signatures/","title":"@ende/http/unstable-message-signatures","description":"Utilities for creating and verifying RFC 9421 HTTP Message Signatures."},{"url":"/runtime/reference/std/http/unstable-message-signatures/~/ComponentIdentifier/","title":"ComponentIdentifier","description":"@ende/http/unstable-message-signatures: A component identifier consisting of a name and optional parameters."},{"url":"/runtime/reference/std/http/unstable-message-signatures/~/ComponentInput/","title":"ComponentInput","description":"@ende/http/unstable-message-signatures: Convenience type accepting either a plain string or a full ComponentIdentifier. Known derived component names are autocompleted."},{"url":"/runtime/reference/std/http/unstable-message-signatures/~/ComponentParameters/","title":"ComponentParameters","description":"@ende/http/unstable-message-signatures: Parameters that can be attached to a component identifier."},{"url":"/runtime/reference/std/http/unstable-message-signatures/~/CreateSignatureBaseOptions/","title":"CreateSignatureBaseOptions","description":"@ende/http/unstable-message-signatures: Options for createSignatureBase."},{"url":"/runtime/reference/std/http/unstable-message-signatures/~/DerivedComponent/","title":"DerivedComponent","description":"@ende/http/unstable-message-signatures: Known derived component names per RFC 9421 section 2.2."},{"url":"/runtime/reference/std/http/unstable-message-signatures/~/ParsedSignatureParams/","title":"ParsedSignatureParams","description":"@ende/http/unstable-message-signatures: Parsed signature parameters returned from verification. Components are always fully resolved ComponentIdentifier objects."},{"url":"/runtime/reference/std/http/unstable-message-signatures/~/SignOptions/","title":"SignOptions","description":"@ende/http/unstable-message-signatures: Options for signMessage."},{"url":"/runtime/reference/std/http/unstable-message-signatures/~/SignatureAlgorithm/","title":"SignatureAlgorithm","description":"@ende/http/unstable-message-signatures: Algorithm identifiers per RFC 9421 section 3.3."},{"url":"/runtime/reference/std/http/unstable-message-signatures/~/SignatureParams/","title":"SignatureParams","description":"@ende/http/unstable-message-signatures: Signature parameters used when signing a message."},{"url":"/runtime/reference/std/http/unstable-message-signatures/~/Uint8Array_/","title":"Uint8Array_","description":"@ende/http/unstable-message-signatures: Proxy type of {@code Uint8Array<ArrayBuffer>} or {@code Uint8Array} in TypeScript 5.7 or below respectively."},{"url":"/runtime/reference/std/http/unstable-message-signatures/~/VerifyOptions/","title":"VerifyOptions","description":"@ende/http/unstable-message-signatures: Options for verifyMessage."},{"url":"/runtime/reference/std/http/unstable-message-signatures/~/VerifyResult/","title":"VerifyResult","description":"@ende/http/unstable-message-signatures: Result of a successful signature verification."},{"url":"/runtime/reference/std/http/unstable-message-signatures/~/createSignatureBase/","title":"createSignatureBase","description":"@ende/http/unstable-message-signatures: Construct the signature base string for a message per RFC 9421 section 2.5."},{"url":"/runtime/reference/std/http/unstable-message-signatures/~/signMessage/","title":"signMessage","description":"@ende/http/unstable-message-signatures: Sign an HTTP message per RFC 9421."},{"url":"/runtime/reference/std/http/unstable-message-signatures/~/verifyMessage/","title":"verifyMessage","description":"@ende/http/unstable-message-signatures: Verify one or more signatures on an HTTP message per RFC 9421."},{"url":"/runtime/reference/std/http/unstable-method/","title":"@ende/http/unstable-method"},{"url":"/runtime/reference/std/http/unstable-method/~/METHOD/","title":"METHOD","description":"@ende/http/unstable-method: HTTP Methods derived from IANA Hypertext Transfer Protocol (HTTP) Method Registry"},{"url":"/runtime/reference/std/http/unstable-problem-details/","title":"@ende/http/unstable-problem-details","description":"Problem Details for HTTP APIs per RFC 9457."},{"url":"/runtime/reference/std/http/unstable-problem-details/~/ProblemDetails/","title":"ProblemDetails","description":"@ende/http/unstable-problem-details: A Problem Details object as defined by RFC 9457."},{"url":"/runtime/reference/std/http/unstable-problem-details/~/ProblemDetailsExtensions/","title":"ProblemDetailsExtensions","description":"@ende/http/unstable-problem-details: Constraint for Problem Details extension members."},{"url":"/runtime/reference/std/http/unstable-problem-details/~/ProblemDetailsResponseOptions/","title":"ProblemDetailsResponseOptions","description":"@ende/http/unstable-problem-details: Options for createProblemDetailsResponse."},{"url":"/runtime/reference/std/http/unstable-problem-details/~/StandardProblemDetailsMember/","title":"StandardProblemDetailsMember","description":"@ende/http/unstable-problem-details: Keys of the five standard Problem Details members defined by RFC 9457. Used to prevent extension members from shadowing standard fields."},{"url":"/runtime/reference/std/http/unstable-problem-details/~/createProblemDetailsResponse/","title":"createProblemDetailsResponse","description":"@ende/http/unstable-problem-details: Creates a `Response` with an `application/problem+json` body from a ProblemDetails object."},{"url":"/runtime/reference/std/http/unstable-problem-details/~/isProblemDetailsResponse/","title":"isProblemDetailsResponse","description":"@ende/http/unstable-problem-details: Type guard that checks whether a `Response` has an `application/problem+json` content type."},{"url":"/runtime/reference/std/http/unstable-problem-details/~/parseProblemDetails/","title":"parseProblemDetails","description":"@ende/http/unstable-problem-details: Parses a plain JSON value into a ProblemDetails."},{"url":"/runtime/reference/std/http/unstable-problem-details/~/parseProblemDetailsResponse/","title":"parseProblemDetailsResponse","description":"@ende/http/unstable-problem-details: Parses a `Response` body into a ProblemDetails."},{"url":"/runtime/reference/std/http/unstable-route/","title":"@ende/http/unstable-route"},{"url":"/runtime/reference/std/http/unstable-route/~/Handler/","title":"Handler","description":"@ende/http/unstable-route: Request handler for Route."},{"url":"/runtime/reference/std/http/unstable-route/~/RequestHandler/","title":"RequestHandler","description":"@ende/http/unstable-route: A handler for HTTP requests."},{"url":"/runtime/reference/std/http/unstable-route/~/Route/","title":"Route","description":"@ende/http/unstable-route: Route configuration for route."},{"url":"/runtime/reference/std/http/unstable-route/~/routeLinear/","title":"routeLinear","description":"@ende/http/unstable-route: Routes requests to handlers using a linear scan over all routes."},{"url":"/runtime/reference/std/http/unstable-route/~/routeRadix/","title":"routeRadix","description":"@ende/http/unstable-route: Routes requests to different handlers based on the request path and method."},{"url":"/runtime/reference/std/http/unstable-signed-cookie/","title":"@ende/http/unstable-signed-cookie"},{"url":"/runtime/reference/std/http/unstable-signed-cookie/~/parseSignedCookie/","title":"parseSignedCookie","description":"@ende/http/unstable-signed-cookie: Parses a signed cookie to get its value."},{"url":"/runtime/reference/std/http/unstable-signed-cookie/~/signCookie/","title":"signCookie","description":"@ende/http/unstable-signed-cookie: Returns a promise with the signed cookie value from the given cryptographic key."},{"url":"/runtime/reference/std/http/unstable-signed-cookie/~/verifySignedCookie/","title":"verifySignedCookie","description":"@ende/http/unstable-signed-cookie: Returns a promise of a boolean indicating whether the signed cookie is valid."},{"url":"/runtime/reference/std/http/unstable-structured-fields/","title":"@ende/http/unstable-structured-fields","description":"Utilities for parsing and serializing RFC 9651 Structured Field Values for HTTP."},{"url":"/runtime/reference/std/http/unstable-structured-fields/~/BareItem/","title":"BareItem","description":"@ende/http/unstable-structured-fields: A Bare Item value in a Structured Field."},{"url":"/runtime/reference/std/http/unstable-structured-fields/~/Dictionary/","title":"Dictionary","description":"@ende/http/unstable-structured-fields: A Dictionary Structured Field value."},{"url":"/runtime/reference/std/http/unstable-structured-fields/~/InnerList/","title":"InnerList","description":"@ende/http/unstable-structured-fields: An Inner List in a Structured Field."},{"url":"/runtime/reference/std/http/unstable-structured-fields/~/Item/","title":"Item","description":"@ende/http/unstable-structured-fields: An Item in a Structured Field, consisting of a Bare Item and Parameters."},{"url":"/runtime/reference/std/http/unstable-structured-fields/~/List/","title":"List","description":"@ende/http/unstable-structured-fields: A List Structured Field value."},{"url":"/runtime/reference/std/http/unstable-structured-fields/~/Parameters/","title":"Parameters","description":"@ende/http/unstable-structured-fields: Parameters attached to an Item or Inner List."},{"url":"/runtime/reference/std/http/unstable-structured-fields/~/binary/","title":"binary","description":"@ende/http/unstable-structured-fields: Creates a binary Bare Item."},{"url":"/runtime/reference/std/http/unstable-structured-fields/~/boolean/","title":"boolean","description":"@ende/http/unstable-structured-fields: Creates a boolean Bare Item."},{"url":"/runtime/reference/std/http/unstable-structured-fields/~/date/","title":"date","description":"@ende/http/unstable-structured-fields: Creates a date Bare Item."},{"url":"/runtime/reference/std/http/unstable-structured-fields/~/decimal/","title":"decimal","description":"@ende/http/unstable-structured-fields: Creates a decimal Bare Item."},{"url":"/runtime/reference/std/http/unstable-structured-fields/~/displayString/","title":"displayString","description":"@ende/http/unstable-structured-fields: Creates a display string Bare Item."},{"url":"/runtime/reference/std/http/unstable-structured-fields/~/integer/","title":"integer","description":"@ende/http/unstable-structured-fields: Creates an integer Bare Item."},{"url":"/runtime/reference/std/http/unstable-structured-fields/~/isInnerList/","title":"isInnerList","description":"@ende/http/unstable-structured-fields: Checks if a list member is an Inner List."},{"url":"/runtime/reference/std/http/unstable-structured-fields/~/isItem/","title":"isItem","description":"@ende/http/unstable-structured-fields: Checks if a list member is an Item (not an Inner List)."},{"url":"/runtime/reference/std/http/unstable-structured-fields/~/parseDictionary/","title":"parseDictionary","description":"@ende/http/unstable-structured-fields: Parses a Dictionary Structured Field value."},{"url":"/runtime/reference/std/http/unstable-structured-fields/~/parseItem/","title":"parseItem","description":"@ende/http/unstable-structured-fields: Parses an Item Structured Field value."},{"url":"/runtime/reference/std/http/unstable-structured-fields/~/parseList/","title":"parseList","description":"@ende/http/unstable-structured-fields: Parses a List Structured Field value."},{"url":"/runtime/reference/std/http/unstable-structured-fields/~/serializeDictionary/","title":"serializeDictionary","description":"@ende/http/unstable-structured-fields: Serializes a Dictionary to a string."},{"url":"/runtime/reference/std/http/unstable-structured-fields/~/serializeItem/","title":"serializeItem","description":"@ende/http/unstable-structured-fields: Serializes an Item to a string."},{"url":"/runtime/reference/std/http/unstable-structured-fields/~/serializeList/","title":"serializeList","description":"@ende/http/unstable-structured-fields: Serializes a List to a string."},{"url":"/runtime/reference/std/http/unstable-structured-fields/~/string/","title":"string","description":"@ende/http/unstable-structured-fields: Creates a string Bare Item."},{"url":"/runtime/reference/std/http/unstable-structured-fields/~/token/","title":"token","description":"@ende/http/unstable-structured-fields: Creates a token Bare Item."},{"url":"/runtime/reference/std/http/user-agent/","title":"@ende/http/user-agent","description":"Provides UserAgent and related types to be able to provide a structured understanding of a user agent string."},{"url":"/runtime/reference/std/http/~/Browser/","title":"Browser","description":"@ende/http: The browser as described by a user agent string."},{"url":"/runtime/reference/std/http/~/ClientErrorStatus/","title":"ClientErrorStatus","description":"@ende/http: An HTTP status that is a client error (4XX)."},{"url":"/runtime/reference/std/http/~/Cookie/","title":"Cookie","description":"@ende/http: Represents an HTTP Cookie."},{"url":"/runtime/reference/std/http/~/Cpu/","title":"Cpu","description":"@ende/http: The CPU information as described by a user agent string."},{"url":"/runtime/reference/std/http/~/Device/","title":"Device","description":"@ende/http: The device as described by a user agent string."},{"url":"/runtime/reference/std/http/~/ETagOptions/","title":"ETagOptions","description":"@ende/http: Options for eTag."},{"url":"/runtime/reference/std/http/~/Engine/","title":"Engine","description":"@ende/http: The browser engine as described by a user agent string."},{"url":"/runtime/reference/std/http/~/ErrorStatus/","title":"ErrorStatus","description":"@ende/http: An HTTP status that is an error (4XX and 5XX)."},{"url":"/runtime/reference/std/http/~/FileInfo/","title":"FileInfo","description":"@ende/http: Just the part of Ende.FileInfo that is required to calculate an `ETag`, so partial or user generated file information can be passed."},{"url":"/runtime/reference/std/http/~/InformationalStatus/","title":"InformationalStatus","description":"@ende/http: An HTTP status that is a informational (1XX)."},{"url":"/runtime/reference/std/http/~/Os/","title":"Os","description":"@ende/http: The OS as described by a user agent string."},{"url":"/runtime/reference/std/http/~/RedirectStatus/","title":"RedirectStatus","description":"@ende/http: An HTTP status that is a redirect (3XX)."},{"url":"/runtime/reference/std/http/~/STATUS_CODE/","title":"STATUS_CODE","description":"@ende/http: Contains the STATUS_CODE object which contains standard HTTP status codes and provides several type guards for handling status codes with type safety."},{"url":"/runtime/reference/std/http/~/STATUS_TEXT/","title":"STATUS_TEXT","description":"@ende/http: A record of all the status codes text."},{"url":"/runtime/reference/std/http/~/ServeDirOptions/","title":"ServeDirOptions","description":"@ende/http: Interface for serveDir options."},{"url":"/runtime/reference/std/http/~/ServeFileOptions/","title":"ServeFileOptions","description":"@ende/http: Options for serveFile."},{"url":"/runtime/reference/std/http/~/ServerErrorStatus/","title":"ServerErrorStatus","description":"@ende/http: An HTTP status that is a server error (5XX)."},{"url":"/runtime/reference/std/http/~/ServerSentEventMessage/","title":"ServerSentEventMessage","description":"@ende/http: Represents a message in the Server-Sent Event (SSE) protocol."},{"url":"/runtime/reference/std/http/~/ServerSentEventParseStream/","title":"ServerSentEventParseStream","description":"@ende/http: Transforms a byte stream of server-sent events into parsed message objects."},{"url":"/runtime/reference/std/http/~/ServerSentEventParseStreamOptions/","title":"ServerSentEventParseStreamOptions","description":"@ende/http: Options for ServerSentEventParseStream."},{"url":"/runtime/reference/std/http/~/ServerSentEventParsedMessage/","title":"ServerSentEventParsedMessage","description":"@ende/http: A server-sent event message parsed from a stream."},{"url":"/runtime/reference/std/http/~/ServerSentEventStream/","title":"ServerSentEventStream","description":"@ende/http: Transforms server-sent message objects into strings for the client."},{"url":"/runtime/reference/std/http/~/StatusCode/","title":"StatusCode","description":"@ende/http: An HTTP status code."},{"url":"/runtime/reference/std/http/~/StatusText/","title":"StatusText","description":"@ende/http: An HTTP status text."},{"url":"/runtime/reference/std/http/~/SuccessfulStatus/","title":"SuccessfulStatus","description":"@ende/http: An HTTP status that is a success (2XX)."},{"url":"/runtime/reference/std/http/~/UserAgent/","title":"UserAgent","description":"@ende/http: A representation of user agent string, which can be used to determine environmental information represented by the string. All properties are determined lazily."},{"url":"/runtime/reference/std/http/~/accepts/","title":"accepts","description":"@ende/http: Returns an array of media types accepted by the request, in order of preference. If there are no media types supplied in the request, then any media type selector will be returned."},{"url":"/runtime/reference/std/http/~/acceptsEncodings/","title":"acceptsEncodings","description":"@ende/http: Returns an array of content encodings accepted by the request, in order of preference. If there are no encoding supplied in the request, then `[\"*\"]` is returned, implying any encoding is accepted."},{"url":"/runtime/reference/std/http/~/acceptsLanguages/","title":"acceptsLanguages","description":"@ende/http: Returns an array of languages accepted by the request, in order of preference. If there are no languages supplied in the request, then `[\"*\"]` is returned, imply any language is accepted."},{"url":"/runtime/reference/std/http/~/deleteCookie/","title":"deleteCookie","description":"@ende/http: Set the cookie header with empty value in the headers to delete it."},{"url":"/runtime/reference/std/http/~/eTag/","title":"eTag","description":"@ende/http: Calculate an ETag for string or `Uint8Array` entities. This returns a strong tag of the form `\"<ascii chars>\"`, which guarantees the byte-for-byte equality of the resource."},{"url":"/runtime/reference/std/http/~/getCookies/","title":"getCookies","description":"@ende/http: Parse cookies of a header"},{"url":"/runtime/reference/std/http/~/getSetCookies/","title":"getSetCookies","description":"@ende/http: Parse set-cookies of a header"},{"url":"/runtime/reference/std/http/~/ifMatch/","title":"ifMatch","description":"@ende/http: A helper function that takes the value from the `If-Match` header and a calculated etag for the target. By using strong comparison, return `true` if the values match, otherwise `false`."},{"url":"/runtime/reference/std/http/~/ifNoneMatch/","title":"ifNoneMatch","description":"@ende/http: A helper function that takes the value from the `If-None-Match` header and a calculated etag for the target entity and returns `false` if the etag for the entity matches the supplied value, otherwise `true`."},{"url":"/runtime/reference/std/http/~/isClientErrorStatus/","title":"isClientErrorStatus","description":"@ende/http: A type guard that determines if the status code is a client error."},{"url":"/runtime/reference/std/http/~/isErrorStatus/","title":"isErrorStatus","description":"@ende/http: A type guard that determines if the status code is an error."},{"url":"/runtime/reference/std/http/~/isInformationalStatus/","title":"isInformationalStatus","description":"@ende/http: A type guard that determines if the status code is informational."},{"url":"/runtime/reference/std/http/~/isRedirectStatus/","title":"isRedirectStatus","description":"@ende/http: A type guard that determines if the status code is a redirection."},{"url":"/runtime/reference/std/http/~/isServerErrorStatus/","title":"isServerErrorStatus","description":"@ende/http: A type guard that determines if the status code is a server error."},{"url":"/runtime/reference/std/http/~/isStatus/","title":"isStatus","description":"@ende/http: Returns whether the provided number is a valid HTTP status code."},{"url":"/runtime/reference/std/http/~/isSuccessfulStatus/","title":"isSuccessfulStatus","description":"@ende/http: A type guard that determines if the status code is successful."},{"url":"/runtime/reference/std/http/~/serveDir/","title":"serveDir","description":"@ende/http: Serves the files under the given directory root (opts.fsRoot)."},{"url":"/runtime/reference/std/http/~/serveFile/","title":"serveFile","description":"@ende/http: Resolves a Response with the requested file as the body."},{"url":"/runtime/reference/std/http/~/setCookie/","title":"setCookie","description":"@ende/http: Set the cookie header properly in the headers"},{"url":"/runtime/reference/std/ini/","title":"@ende/ini","description":"parse and stringify for handling INI encoded data, such as the Desktop Entry specification."},{"url":"/runtime/reference/std/ini/parse/","title":"@ende/ini/parse"},{"url":"/runtime/reference/std/ini/stringify/","title":"@ende/ini/stringify"},{"url":"/runtime/reference/std/ini/~/ParseOptions/","title":"ParseOptions","description":"@ende/ini: Options for parse."},{"url":"/runtime/reference/std/ini/~/ReplacerFunction/","title":"ReplacerFunction","description":"@ende/ini: Function for replacing JavaScript values with INI string values."},{"url":"/runtime/reference/std/ini/~/ReviverFunction/","title":"ReviverFunction","description":"@ende/ini: Function for replacing INI values with JavaScript values."},{"url":"/runtime/reference/std/ini/~/StringifyOptions/","title":"StringifyOptions","description":"@ende/ini: Options for stringify."},{"url":"/runtime/reference/std/ini/~/parse/","title":"parse","description":"@ende/ini: Parse an INI config string into an object."},{"url":"/runtime/reference/std/ini/~/stringify/","title":"stringify","description":"@ende/ini: Compile an object into an INI config string. Provide formatting options to modify the output."},{"url":"/runtime/reference/std/io/","title":"@ende/io","description":"Utilities for working with Ende's readers, writers, and web streams."},{"url":"/runtime/reference/std/io/buffer/","title":"@ende/io/buffer"},{"url":"/runtime/reference/std/io/copy/","title":"@ende/io/copy"},{"url":"/runtime/reference/std/io/iterate-reader/","title":"@ende/io/iterate-reader"},{"url":"/runtime/reference/std/io/read-all/","title":"@ende/io/read-all"},{"url":"/runtime/reference/std/io/reader-from-stream-reader/","title":"@ende/io/reader-from-stream-reader"},{"url":"/runtime/reference/std/io/to-readable-stream/","title":"@ende/io/to-readable-stream"},{"url":"/runtime/reference/std/io/to-writable-stream/","title":"@ende/io/to-writable-stream"},{"url":"/runtime/reference/std/io/types/","title":"@ende/io/types"},{"url":"/runtime/reference/std/io/types/~/Reader/","title":"Reader","description":"@ende/io/types: An abstract interface which when implemented provides an interface to read bytes into an array buffer asynchronously."},{"url":"/runtime/reference/std/io/types/~/ReaderSync/","title":"ReaderSync","description":"@ende/io/types: An abstract interface which when implemented provides an interface to read bytes into an array buffer synchronously."},{"url":"/runtime/reference/std/io/write-all/","title":"@ende/io/write-all"},{"url":"/runtime/reference/std/io/~/Buffer/","title":"Buffer","description":"@ende/io: A variable-sized buffer of bytes with `read()` and `write()` methods."},{"url":"/runtime/reference/std/io/~/Closer/","title":"Closer","description":"@ende/io: An abstract interface which when implemented provides an interface to close files/resources that were previously opened."},{"url":"/runtime/reference/std/io/~/SeekMode/","title":"SeekMode","description":"@ende/io: A enum which defines the seek mode for IO related APIs that support seeking."},{"url":"/runtime/reference/std/io/~/Seeker/","title":"Seeker","description":"@ende/io: An abstract interface which when implemented provides an interface to seek within an open file/resource asynchronously."},{"url":"/runtime/reference/std/io/~/SeekerSync/","title":"SeekerSync","description":"@ende/io: An abstract interface which when implemented provides an interface to seek within an open file/resource synchronously."},{"url":"/runtime/reference/std/io/~/ToReadableStreamOptions/","title":"ToReadableStreamOptions","description":"@ende/io: Options for toReadableStream."},{"url":"/runtime/reference/std/io/~/Writer/","title":"Writer","description":"@ende/io: An abstract interface which when implemented provides an interface to write bytes from an array buffer to a file/resource asynchronously."},{"url":"/runtime/reference/std/io/~/WriterSync/","title":"WriterSync","description":"@ende/io: An abstract interface which when implemented provides an interface to write bytes from an array buffer to a file/resource synchronously."},{"url":"/runtime/reference/std/io/~/copy/","title":"copy","description":"@ende/io: Copies from `src` to `dst` until either EOF (`null`) is read from `src` or an error occurs. It resolves to the number of bytes copied or rejects with the first error encountered while copying."},{"url":"/runtime/reference/std/io/~/iterateReader/","title":"iterateReader","description":"@ende/io: Turns a Reader into an async iterator."},{"url":"/runtime/reference/std/io/~/iterateReaderSync/","title":"iterateReaderSync","description":"@ende/io: Turns a ReaderSync into an iterator."},{"url":"/runtime/reference/std/io/~/readAll/","title":"readAll","description":"@ende/io: Read Reader `r` until EOF (`null`) and resolve to the content as Uint8Array."},{"url":"/runtime/reference/std/io/~/readAllSync/","title":"readAllSync","description":"@ende/io: Synchronously reads ReaderSync `r` until EOF (`null`) and returns the content as Uint8Array."},{"url":"/runtime/reference/std/io/~/readerFromStreamReader/","title":"readerFromStreamReader","description":"@ende/io: Create a Reader from a ReadableStreamDefaultReader."},{"url":"/runtime/reference/std/io/~/toReadableStream/","title":"toReadableStream","description":"@ende/io: Create a ReadableStream of Uint8Arrays from a Reader."},{"url":"/runtime/reference/std/io/~/toWritableStream/","title":"toWritableStream","description":"@ende/io: Create a WritableStream from a Writer."},{"url":"/runtime/reference/std/io/~/toWritableStreamOptions/","title":"toWritableStreamOptions","description":"@ende/io: Options for toWritableStream."},{"url":"/runtime/reference/std/io/~/writeAll/","title":"writeAll","description":"@ende/io: Write all the content of the array buffer (`arr`) to the writer (`w`)."},{"url":"/runtime/reference/std/io/~/writeAllSync/","title":"writeAllSync","description":"@ende/io: Synchronously write all the content of the array buffer (`arr`) to the writer (`w`)."},{"url":"/runtime/reference/std/json/","title":"@ende/json","description":"Utilities for parsing streaming JSON data."},{"url":"/runtime/reference/std/json/canonicalize/","title":"@ende/json/canonicalize"},{"url":"/runtime/reference/std/json/concatenated-json-parse-stream/","title":"@ende/json/concatenated-json-parse-stream"},{"url":"/runtime/reference/std/json/parse-stream/","title":"@ende/json/parse-stream"},{"url":"/runtime/reference/std/json/stringify-stream/","title":"@ende/json/stringify-stream"},{"url":"/runtime/reference/std/json/types/","title":"@ende/json/types"},{"url":"/runtime/reference/std/json/~/ConcatenatedJsonParseStream/","title":"ConcatenatedJsonParseStream","description":"@ende/json: Stream to parse Concatenated JSON."},{"url":"/runtime/reference/std/json/~/JsonParseStream/","title":"JsonParseStream","description":"@ende/json: Parse each chunk as JSON."},{"url":"/runtime/reference/std/json/~/JsonPrimitive/","title":"JsonPrimitive","description":"@ende/json: A primitive JSON value."},{"url":"/runtime/reference/std/json/~/JsonStringifyStream/","title":"JsonStringifyStream","description":"@ende/json: Convert each chunk to JSON string."},{"url":"/runtime/reference/std/json/~/JsonValue/","title":"JsonValue","description":"@ende/json: The type of the result of parsing JSON."},{"url":"/runtime/reference/std/json/~/StringifyStreamOptions/","title":"StringifyStreamOptions","description":"@ende/json: Options for JsonStringifyStream."},{"url":"/runtime/reference/std/json/~/canonicalize/","title":"canonicalize","description":"@ende/json: Serializes a JSON value to a canonical string per RFC 8785 JSON Canonicalization Scheme (JCS)."},{"url":"/runtime/reference/std/json/~/canonicalizeToBytes/","title":"canonicalizeToBytes","description":"@ende/json: Serializes a JSON value to canonical UTF-8 bytes per RFC 8785 JSON Canonicalization Scheme (JCS)."},{"url":"/runtime/reference/std/jsonc/","title":"@ende/jsonc","description":"Provides tools for working with JSONC (JSON with comments)."},{"url":"/runtime/reference/std/jsonc/parse/","title":"@ende/jsonc/parse"},{"url":"/runtime/reference/std/jsonc/~/JsonValue/","title":"JsonValue","description":"@ende/jsonc: The type of the result of parsing JSON."},{"url":"/runtime/reference/std/jsonc/~/parse/","title":"parse","description":"@ende/jsonc: Converts a JSON with Comments (JSONC) string into an object."},{"url":"/runtime/reference/std/markdown/","title":"@ende/markdown","description":"A CommonMark parser and HTML renderer, with optional GitHub Flavored Markdown, and the features a documentation site needs:"},{"url":"/runtime/reference/std/markdown/parse/","title":"@ende/markdown/parse"},{"url":"/runtime/reference/std/markdown/render/","title":"@ende/markdown/render"},{"url":"/runtime/reference/std/markdown/slug/","title":"@ende/markdown/slug"},{"url":"/runtime/reference/std/markdown/toc/","title":"@ende/markdown/toc"},{"url":"/runtime/reference/std/markdown/types/","title":"@ende/markdown/types","description":"Types for the Markdown syntax tree. The node names and fields follow mdast, including its GitHub Flavored Markdown nodes (tables, `delete` and footnotes), with these differences: link reference definitions are resolved into the Link and Image nodes that use them (so there are no `definition`, `linkReference` or `imageReference` nodes), nodes have no `position`, a Heading has an `id`, and GitHub alerts are Admonition nodes."},{"url":"/runtime/reference/std/markdown/visit/","title":"@ende/markdown/visit"},{"url":"/runtime/reference/std/markdown/~/Admonition/","title":"Admonition","description":"@ende/markdown: A GitHub alert, such as `> [!NOTE]`. Only parsed with the `gfm` option, from a block quote at the top level of the document whose first line is just the marker (`[!NOTE]`, `[!TIP]`, `[!IMPORTANT]`, `[!WARNING]` or `[!CAUTION]`, in any case) and that has content after it. The marker line isn't part of the children."},{"url":"/runtime/reference/std/markdown/~/AlignType/","title":"AlignType","description":"@ende/markdown: The alignment of a table column: `:--` is `\"left\"`, `--:` is `\"right\"`, `:-:` is `\"center\"`, and `---` is `null`."},{"url":"/runtime/reference/std/markdown/~/BlockContent/","title":"BlockContent","description":"@ende/markdown: Nodes that can appear in a block container (Root, Blockquote, ListItem or FootnoteDefinition)."},{"url":"/runtime/reference/std/markdown/~/Blockquote/","title":"Blockquote","description":"@ende/markdown: A block quote."},{"url":"/runtime/reference/std/markdown/~/Break/","title":"Break","description":"@ende/markdown: A hard line break: two or more spaces, or a backslash, before a newline."},{"url":"/runtime/reference/std/markdown/~/Code/","title":"Code","description":"@ende/markdown: A fenced or indented code block."},{"url":"/runtime/reference/std/markdown/~/DefinitionContent/","title":"DefinitionContent","description":"@ende/markdown: Definitions, which can appear in a block container next to BlockContent. Link reference definitions are resolved while parsing, so the only definition in the tree is FootnoteDefinition."},{"url":"/runtime/reference/std/markdown/~/Delete/","title":"Delete","description":"@ende/markdown: Strikethrough text, such as `~~this~~`. Only parsed with the `gfm` option."},{"url":"/runtime/reference/std/markdown/~/Emphasis/","title":"Emphasis","description":"@ende/markdown: Emphasis, such as `*this*`."},{"url":"/runtime/reference/std/markdown/~/FootnoteDefinition/","title":"FootnoteDefinition","description":"@ende/markdown: A footnote definition, such as `[^1]: The note.`. Only parsed with the `gfm` option. The definition stays where it was written; `render()` moves the definitions that are referenced into a footnotes section at the end."},{"url":"/runtime/reference/std/markdown/~/FootnoteReference/","title":"FootnoteReference","description":"@ende/markdown: A reference to a footnote, such as `[^1]`. Only parsed with the `gfm` option, and only when a FootnoteDefinition with the same identifier exists; otherwise the text stays as it is."},{"url":"/runtime/reference/std/markdown/~/Heading/","title":"Heading","description":"@ende/markdown: An ATX (`# Title`) or setext (`Title` underlined with `=` or `-`) heading."},{"url":"/runtime/reference/std/markdown/~/Html/","title":"Html","description":"@ende/markdown: Raw HTML. As a child of a block container it's an HTML block; inside a paragraph or other phrasing content it's inline HTML."},{"url":"/runtime/reference/std/markdown/~/Image/","title":"Image","description":"@ende/markdown: An image. Like Link, reference images are resolved."},{"url":"/runtime/reference/std/markdown/~/InlineCode/","title":"InlineCode","description":"@ende/markdown: A code span, such as `` `code` ``."},{"url":"/runtime/reference/std/markdown/~/Link/","title":"Link","description":"@ende/markdown: A link. Inline links, autolinks, and reference links all become this node; a reference link carries the URL and title of its definition."},{"url":"/runtime/reference/std/markdown/~/List/","title":"List","description":"@ende/markdown: A bullet or ordered list."},{"url":"/runtime/reference/std/markdown/~/ListItem/","title":"ListItem","description":"@ende/markdown: A list item."},{"url":"/runtime/reference/std/markdown/~/Literal/","title":"Literal","description":"@ende/markdown: Nodes that have a string `value`."},{"url":"/runtime/reference/std/markdown/~/Nodes/","title":"Nodes","description":"@ende/markdown: Any node, as a union discriminated by `type`."},{"url":"/runtime/reference/std/markdown/~/Paragraph/","title":"Paragraph","description":"@ende/markdown: A paragraph."},{"url":"/runtime/reference/std/markdown/~/Parent/","title":"Parent","description":"@ende/markdown: Nodes that have children."},{"url":"/runtime/reference/std/markdown/~/ParseOptions/","title":"ParseOptions","description":"@ende/markdown: Options for `parse()`."},{"url":"/runtime/reference/std/markdown/~/PhrasingContent/","title":"PhrasingContent","description":"@ende/markdown: Nodes that can appear in paragraphs, headings and other inline content."},{"url":"/runtime/reference/std/markdown/~/RenderOptions/","title":"RenderOptions","description":"@ende/markdown: Options for `render()`."},{"url":"/runtime/reference/std/markdown/~/Root/","title":"Root","description":"@ende/markdown: The root of a document."},{"url":"/runtime/reference/std/markdown/~/Strong/","title":"Strong","description":"@ende/markdown: Strong emphasis, such as `**this**`."},{"url":"/runtime/reference/std/markdown/~/Table/","title":"Table","description":"@ende/markdown: A table. Only parsed with the `gfm` option. The first row is the header row, and every row has one cell per column."},{"url":"/runtime/reference/std/markdown/~/TableCell/","title":"TableCell","description":"@ende/markdown: A cell of a TableRow."},{"url":"/runtime/reference/std/markdown/~/TableRow/","title":"TableRow","description":"@ende/markdown: A row of a Table."},{"url":"/runtime/reference/std/markdown/~/Text/","title":"Text","description":"@ende/markdown: Plain text."},{"url":"/runtime/reference/std/markdown/~/ThematicBreak/","title":"ThematicBreak","description":"@ende/markdown: A thematic break, such as `***` or `---`."},{"url":"/runtime/reference/std/markdown/~/TocEntry/","title":"TocEntry","description":"@ende/markdown: A heading in the list `toc()` returns."},{"url":"/runtime/reference/std/markdown/~/TocOptions/","title":"TocOptions","description":"@ende/markdown: Options for `toc()`."},{"url":"/runtime/reference/std/markdown/~/parse/","title":"parse","description":"@ende/markdown: Parses CommonMark into an mdast-shaped syntax tree. With the `gfm` option, it also parses the GitHub Flavored Markdown extensions: tables, task list items, strikethrough, extended autolinks, and footnotes, and GitHub's alerts (`> [!NOTE]`), which become `admonition` nodes."},{"url":"/runtime/reference/std/markdown/~/render/","title":"render","description":"@ende/markdown: Renders a syntax tree from `parse()` to HTML. The output matches the CommonMark reference implementation, commonmark.js, and for the GitHub Flavored Markdown nodes, cmark-gfm, with one difference by default: headings have an `id` attribute (their Heading.id). The `headingIds: false` option turns that off."},{"url":"/runtime/reference/std/markdown/~/slug/","title":"slug","description":"@ende/markdown: Turns text into a heading id the way GitHub does (with the algorithm of github-slugger): it lowercases the text, removes everything except letters, marks, numbers, connector punctuation such as `_`, hyphens and spaces, and turns each space into a hyphen. Runs of spaces and hyphens aren't collapsed, and the result isn't trimmed, so ids match GitHub's anchors."},{"url":"/runtime/reference/std/markdown/~/toc/","title":"toc","description":"@ende/markdown: Lists the headings of a document for a table of contents: each heading's level, plain text and id, in document order. The list is flat; use `depth` to indent or nest it. Headings inside block quotes, lists and admonitions count too."},{"url":"/runtime/reference/std/markdown/~/visit/","title":"visit","description":"@ende/markdown: Calls `fn` for every node of the given type in a tree, in pre-order (a parent before its children, children in document order), with the node's index in its parent's `children` and the parent. For the node `visit()` starts from, the index and parent are `null`."},{"url":"/runtime/reference/std/math/","title":"@ende/math","description":"Math functions such as modulo and clamp."},{"url":"/runtime/reference/std/math/clamp/","title":"@ende/math/clamp"},{"url":"/runtime/reference/std/math/modulo/","title":"@ende/math/modulo"},{"url":"/runtime/reference/std/math/round-to/","title":"@ende/math/round-to"},{"url":"/runtime/reference/std/math/~/RoundingOptions/","title":"RoundingOptions","description":"@ende/math: Options for roundTo."},{"url":"/runtime/reference/std/math/~/clamp/","title":"clamp","description":"@ende/math: Clamp a number within the inclusive [min, max] range."},{"url":"/runtime/reference/std/math/~/modulo/","title":"modulo","description":"@ende/math: Computes the floored modulo of a number."},{"url":"/runtime/reference/std/math/~/roundTo/","title":"roundTo","description":"@ende/math: Round a number to a specified number of digits."},{"url":"/runtime/reference/std/media-types/","title":"@ende/media-types","description":"Utility functions for media types (MIME types)."},{"url":"/runtime/reference/std/media-types/all-extensions/","title":"@ende/media-types/all-extensions"},{"url":"/runtime/reference/std/media-types/content-type/","title":"@ende/media-types/content-type"},{"url":"/runtime/reference/std/media-types/extension/","title":"@ende/media-types/extension"},{"url":"/runtime/reference/std/media-types/format-media-type/","title":"@ende/media-types/format-media-type"},{"url":"/runtime/reference/std/media-types/get-charset/","title":"@ende/media-types/get-charset"},{"url":"/runtime/reference/std/media-types/parse-media-type/","title":"@ende/media-types/parse-media-type"},{"url":"/runtime/reference/std/media-types/type-by-extension/","title":"@ende/media-types/type-by-extension"},{"url":"/runtime/reference/std/media-types/~/ContentTypeToExtension/","title":"ContentTypeToExtension","description":"@ende/media-types: Maps content types to their corresponding file extensions."},{"url":"/runtime/reference/std/media-types/~/DB/","title":"DB","description":"@ende/media-types: MIME-types database."},{"url":"/runtime/reference/std/media-types/~/KnownExtensionOrType/","title":"KnownExtensionOrType","description":"@ende/media-types: Known extension or type. Used in contentType."},{"url":"/runtime/reference/std/media-types/~/allExtensions/","title":"allExtensions","description":"@ende/media-types: Returns all the extensions known to be associated with the media type `type`, or `undefined` if no extensions are found."},{"url":"/runtime/reference/std/media-types/~/contentType/","title":"contentType","description":"@ende/media-types: Returns the full `Content-Type` or `Content-Disposition` header value for the given extension or media type."},{"url":"/runtime/reference/std/media-types/~/extension/","title":"extension","description":"@ende/media-types: Returns the most relevant extension for the given media type, or `undefined` if no extension can be found."},{"url":"/runtime/reference/std/media-types/~/formatMediaType/","title":"formatMediaType","description":"@ende/media-types: Serializes the media type and the optional parameters as a media type conforming to RFC 2045 and RFC 2616."},{"url":"/runtime/reference/std/media-types/~/getCharset/","title":"getCharset","description":"@ende/media-types: Given a media type or header value, identify the encoding charset. If the charset cannot be determined, the function returns `undefined`."},{"url":"/runtime/reference/std/media-types/~/parseMediaType/","title":"parseMediaType","description":"@ende/media-types: Parses the media type and any optional parameters, per RFC 1521."},{"url":"/runtime/reference/std/media-types/~/typeByExtension/","title":"typeByExtension","description":"@ende/media-types: Returns the media type associated with the file extension, or `undefined` if no media type is found."},{"url":"/runtime/reference/std/msgpack/","title":"@ende/msgpack","description":"This module provides functions to encode and decode MessagePack."},{"url":"/runtime/reference/std/msgpack/decode/","title":"@ende/msgpack/decode"},{"url":"/runtime/reference/std/msgpack/encode/","title":"@ende/msgpack/encode"},{"url":"/runtime/reference/std/msgpack/~/Uint8Array_/","title":"Uint8Array_","description":"@ende/msgpack: Proxy type of {@code Uint8Array<ArrayBuffer>} or {@code Uint8Array} in TypeScript 5.7 or below respectively."},{"url":"/runtime/reference/std/msgpack/~/ValueMap/","title":"ValueMap","description":"@ende/msgpack: Value map that can be encoded to MessagePack."},{"url":"/runtime/reference/std/msgpack/~/ValueType/","title":"ValueType","description":"@ende/msgpack: Value types that can be encoded to MessagePack."},{"url":"/runtime/reference/std/msgpack/~/decode/","title":"decode","description":"@ende/msgpack: Decode a value from the MessagePack binary format."},{"url":"/runtime/reference/std/msgpack/~/encode/","title":"encode","description":"@ende/msgpack: Encode a value to MessagePack binary format."},{"url":"/runtime/reference/std/net/","title":"@ende/net","description":"Network utilities."},{"url":"/runtime/reference/std/net/get-available-port/","title":"@ende/net/get-available-port"},{"url":"/runtime/reference/std/net/get-network-address/","title":"@ende/net/get-network-address"},{"url":"/runtime/reference/std/net/get-network-address/~/getNetworkAddress/","title":"getNetworkAddress","description":"@ende/net/get-network-address: Gets the IPv4 or IPv6 network address of the machine."},{"url":"/runtime/reference/std/net/unstable-get-network-address/","title":"@ende/net/unstable-get-network-address"},{"url":"/runtime/reference/std/net/unstable-ip/","title":"@ende/net/unstable-ip"},{"url":"/runtime/reference/std/net/unstable-ip/~/isIPv4/","title":"isIPv4","description":"@ende/net/unstable-ip: Validates whether a given string is a valid IPv4 address."},{"url":"/runtime/reference/std/net/unstable-ip/~/isIPv6/","title":"isIPv6","description":"@ende/net/unstable-ip: Validates whether a given string is a IPv6 address."},{"url":"/runtime/reference/std/net/unstable-ip/~/matchIPv4Subnet/","title":"matchIPv4Subnet","description":"@ende/net/unstable-ip: Checks if an IPv4 address matches a subnet or specific IPv4 address."},{"url":"/runtime/reference/std/net/unstable-ip/~/matchIPv6Subnet/","title":"matchIPv6Subnet","description":"@ende/net/unstable-ip: Checks if an IPv6 address matches a subnet or specific IPv6 address."},{"url":"/runtime/reference/std/net/unstable-ip/~/matchSubnets/","title":"matchSubnets","description":"@ende/net/unstable-ip: Checks if an IP address matches a subnet or specific IP address."},{"url":"/runtime/reference/std/net/unstable-ip/~/parseIPv4/","title":"parseIPv4","description":"@ende/net/unstable-ip: Parses a string as an IPv4 address."},{"url":"/runtime/reference/std/net/unstable-ip/~/parseIPv6/","title":"parseIPv6","description":"@ende/net/unstable-ip: Parses a string as an IPv6 address."},{"url":"/runtime/reference/std/net/~/GetAvailablePortOptions/","title":"GetAvailablePortOptions","description":"@ende/net: Options for getAvailablePort."},{"url":"/runtime/reference/std/net/~/getAvailablePort/","title":"getAvailablePort","description":"@ende/net: Returns an available network port."},{"url":"/runtime/reference/std/path/","title":"@ende/path","description":"Utilities for working with OS-specific file paths."},{"url":"/runtime/reference/std/path/basename/","title":"@ende/path/basename"},{"url":"/runtime/reference/std/path/common/","title":"@ende/path/common"},{"url":"/runtime/reference/std/path/constants/","title":"@ende/path/constants"},{"url":"/runtime/reference/std/path/dirname/","title":"@ende/path/dirname"},{"url":"/runtime/reference/std/path/extname/","title":"@ende/path/extname"},{"url":"/runtime/reference/std/path/format/","title":"@ende/path/format"},{"url":"/runtime/reference/std/path/from-file-url/","title":"@ende/path/from-file-url"},{"url":"/runtime/reference/std/path/glob-to-regexp/","title":"@ende/path/glob-to-regexp"},{"url":"/runtime/reference/std/path/is-absolute/","title":"@ende/path/is-absolute"},{"url":"/runtime/reference/std/path/is-glob/","title":"@ende/path/is-glob"},{"url":"/runtime/reference/std/path/join-globs/","title":"@ende/path/join-globs"},{"url":"/runtime/reference/std/path/join/","title":"@ende/path/join"},{"url":"/runtime/reference/std/path/normalize-glob/","title":"@ende/path/normalize-glob"},{"url":"/runtime/reference/std/path/normalize/","title":"@ende/path/normalize"},{"url":"/runtime/reference/std/path/parse/","title":"@ende/path/parse"},{"url":"/runtime/reference/std/path/posix/","title":"@ende/path/posix","description":"Utilities for working with POSIX-formatted paths."},{"url":"/runtime/reference/std/path/posix/basename/","title":"@ende/path/posix/basename"},{"url":"/runtime/reference/std/path/posix/basename/~/basename/","title":"basename","description":"@ende/path/posix/basename: Return the last portion of a `path`. Trailing directory separators are ignored, and optional suffix is removed."},{"url":"/runtime/reference/std/path/posix/common/","title":"@ende/path/posix/common"},{"url":"/runtime/reference/std/path/posix/common/~/common/","title":"common","description":"@ende/path/posix/common: Determines the common path from a set of paths for POSIX systems."},{"url":"/runtime/reference/std/path/posix/constants/","title":"@ende/path/posix/constants"},{"url":"/runtime/reference/std/path/posix/constants/~/DELIMITER/","title":"DELIMITER","description":"@ende/path/posix/constants: The character used to separate entries in the PATH environment variable."},{"url":"/runtime/reference/std/path/posix/constants/~/SEPARATOR/","title":"SEPARATOR","description":"@ende/path/posix/constants: The character used to separate components of a file path."},{"url":"/runtime/reference/std/path/posix/constants/~/SEPARATOR_PATTERN/","title":"SEPARATOR_PATTERN","description":"@ende/path/posix/constants: A regular expression that matches one or more path separators."},{"url":"/runtime/reference/std/path/posix/dirname/","title":"@ende/path/posix/dirname"},{"url":"/runtime/reference/std/path/posix/dirname/~/dirname/","title":"dirname","description":"@ende/path/posix/dirname: Return the directory path of a `path`."},{"url":"/runtime/reference/std/path/posix/extname/","title":"@ende/path/posix/extname"},{"url":"/runtime/reference/std/path/posix/extname/~/extname/","title":"extname","description":"@ende/path/posix/extname: Return the extension of the `path` with leading period."},{"url":"/runtime/reference/std/path/posix/format/","title":"@ende/path/posix/format"},{"url":"/runtime/reference/std/path/posix/format/~/format/","title":"format","description":"@ende/path/posix/format: Generate a path from `ParsedPath` object."},{"url":"/runtime/reference/std/path/posix/from-file-url/","title":"@ende/path/posix/from-file-url"},{"url":"/runtime/reference/std/path/posix/from-file-url/~/fromFileUrl/","title":"fromFileUrl","description":"@ende/path/posix/from-file-url: Converts a file URL to a path string."},{"url":"/runtime/reference/std/path/posix/glob-to-regexp/","title":"@ende/path/posix/glob-to-regexp"},{"url":"/runtime/reference/std/path/posix/glob-to-regexp/~/globToRegExp/","title":"globToRegExp","description":"@ende/path/posix/glob-to-regexp: Convert a glob string to a regular expression."},{"url":"/runtime/reference/std/path/posix/is-absolute/","title":"@ende/path/posix/is-absolute"},{"url":"/runtime/reference/std/path/posix/is-absolute/~/isAbsolute/","title":"isAbsolute","description":"@ende/path/posix/is-absolute: Verifies whether provided path is absolute."},{"url":"/runtime/reference/std/path/posix/is-glob/","title":"@ende/path/posix/is-glob"},{"url":"/runtime/reference/std/path/posix/join-globs/","title":"@ende/path/posix/join-globs"},{"url":"/runtime/reference/std/path/posix/join-globs/~/joinGlobs/","title":"joinGlobs","description":"@ende/path/posix/join-globs: Like join(), but doesn't collapse \"**\\/..\" when `globstar` is true."},{"url":"/runtime/reference/std/path/posix/join/","title":"@ende/path/posix/join"},{"url":"/runtime/reference/std/path/posix/join/~/join/","title":"join","description":"@ende/path/posix/join: Join all given a sequence of `paths`,then normalizes the resulting path."},{"url":"/runtime/reference/std/path/posix/normalize-glob/","title":"@ende/path/posix/normalize-glob"},{"url":"/runtime/reference/std/path/posix/normalize-glob/~/normalizeGlob/","title":"normalizeGlob","description":"@ende/path/posix/normalize-glob: Like normalize(), but doesn't collapse \"**\\/..\" when `globstar` is true."},{"url":"/runtime/reference/std/path/posix/normalize/","title":"@ende/path/posix/normalize"},{"url":"/runtime/reference/std/path/posix/normalize/~/normalize/","title":"normalize","description":"@ende/path/posix/normalize: Normalize the `path`, resolving `'..'` and `'.'` segments. Note that resolving these segments does not necessarily mean that all will be eliminated. A `'..'` at the top-level will be preserved, and an empty path is canonically `'.'`."},{"url":"/runtime/reference/std/path/posix/parse/","title":"@ende/path/posix/parse"},{"url":"/runtime/reference/std/path/posix/parse/~/parse/","title":"parse","description":"@ende/path/posix/parse: Return a `ParsedPath` object of the `path`."},{"url":"/runtime/reference/std/path/posix/relative/","title":"@ende/path/posix/relative"},{"url":"/runtime/reference/std/path/posix/relative/~/relative/","title":"relative","description":"@ende/path/posix/relative: Return the relative path from `from` to `to` based on current working directory."},{"url":"/runtime/reference/std/path/posix/resolve/","title":"@ende/path/posix/resolve"},{"url":"/runtime/reference/std/path/posix/resolve/~/resolve/","title":"resolve","description":"@ende/path/posix/resolve: Resolves path segments into a `path`."},{"url":"/runtime/reference/std/path/posix/to-file-url/","title":"@ende/path/posix/to-file-url"},{"url":"/runtime/reference/std/path/posix/to-file-url/~/toFileUrl/","title":"toFileUrl","description":"@ende/path/posix/to-file-url: Converts a path string to a file URL."},{"url":"/runtime/reference/std/path/posix/to-namespaced-path/","title":"@ende/path/posix/to-namespaced-path"},{"url":"/runtime/reference/std/path/posix/to-namespaced-path/~/toNamespacedPath/","title":"toNamespacedPath","description":"@ende/path/posix/to-namespaced-path: Converts a path to a namespaced path. This function returns the path as is on posix."},{"url":"/runtime/reference/std/path/relative/","title":"@ende/path/relative"},{"url":"/runtime/reference/std/path/resolve/","title":"@ende/path/resolve"},{"url":"/runtime/reference/std/path/to-file-url/","title":"@ende/path/to-file-url"},{"url":"/runtime/reference/std/path/to-namespaced-path/","title":"@ende/path/to-namespaced-path"},{"url":"/runtime/reference/std/path/types/","title":"@ende/path/types"},{"url":"/runtime/reference/std/path/types/~/ParsedPath/","title":"ParsedPath","description":"@ende/path/types: A parsed path object generated by path.parse() or consumed by path.format()."},{"url":"/runtime/reference/std/path/windows/","title":"@ende/path/windows","description":"Utilities for working with Windows-specific paths."},{"url":"/runtime/reference/std/path/windows/basename/","title":"@ende/path/windows/basename"},{"url":"/runtime/reference/std/path/windows/basename/~/basename/","title":"basename","description":"@ende/path/windows/basename: Return the last portion of a `path`. Trailing directory separators are ignored, and optional suffix is removed."},{"url":"/runtime/reference/std/path/windows/common/","title":"@ende/path/windows/common"},{"url":"/runtime/reference/std/path/windows/common/~/common/","title":"common","description":"@ende/path/windows/common: Determines the common path from a set of paths for Windows systems."},{"url":"/runtime/reference/std/path/windows/constants/","title":"@ende/path/windows/constants"},{"url":"/runtime/reference/std/path/windows/constants/~/DELIMITER/","title":"DELIMITER","description":"@ende/path/windows/constants: The character used to separate entries in the PATH environment variable."},{"url":"/runtime/reference/std/path/windows/constants/~/SEPARATOR/","title":"SEPARATOR","description":"@ende/path/windows/constants: The character used to separate components of a file path."},{"url":"/runtime/reference/std/path/windows/constants/~/SEPARATOR_PATTERN/","title":"SEPARATOR_PATTERN","description":"@ende/path/windows/constants: A regular expression that matches one or more path separators."},{"url":"/runtime/reference/std/path/windows/dirname/","title":"@ende/path/windows/dirname"},{"url":"/runtime/reference/std/path/windows/dirname/~/dirname/","title":"dirname","description":"@ende/path/windows/dirname: Return the directory path of a `path`."},{"url":"/runtime/reference/std/path/windows/extname/","title":"@ende/path/windows/extname"},{"url":"/runtime/reference/std/path/windows/extname/~/extname/","title":"extname","description":"@ende/path/windows/extname: Return the extension of the `path` with leading period."},{"url":"/runtime/reference/std/path/windows/format/","title":"@ende/path/windows/format"},{"url":"/runtime/reference/std/path/windows/format/~/format/","title":"format","description":"@ende/path/windows/format: Generate a path from `ParsedPath` object."},{"url":"/runtime/reference/std/path/windows/from-file-url/","title":"@ende/path/windows/from-file-url"},{"url":"/runtime/reference/std/path/windows/from-file-url/~/fromFileUrl/","title":"fromFileUrl","description":"@ende/path/windows/from-file-url: Converts a file URL to a path string."},{"url":"/runtime/reference/std/path/windows/glob-to-regexp/","title":"@ende/path/windows/glob-to-regexp"},{"url":"/runtime/reference/std/path/windows/glob-to-regexp/~/globToRegExp/","title":"globToRegExp","description":"@ende/path/windows/glob-to-regexp: Convert a glob string to a regular expression."},{"url":"/runtime/reference/std/path/windows/is-absolute/","title":"@ende/path/windows/is-absolute"},{"url":"/runtime/reference/std/path/windows/is-absolute/~/isAbsolute/","title":"isAbsolute","description":"@ende/path/windows/is-absolute: Verifies whether provided path is absolute."},{"url":"/runtime/reference/std/path/windows/is-glob/","title":"@ende/path/windows/is-glob"},{"url":"/runtime/reference/std/path/windows/join-globs/","title":"@ende/path/windows/join-globs"},{"url":"/runtime/reference/std/path/windows/join-globs/~/joinGlobs/","title":"joinGlobs","description":"@ende/path/windows/join-globs: Like join(), but doesn't collapse \"**\\/..\" when `globstar` is true."},{"url":"/runtime/reference/std/path/windows/join/","title":"@ende/path/windows/join"},{"url":"/runtime/reference/std/path/windows/join/~/join/","title":"join","description":"@ende/path/windows/join: Join all given a sequence of `paths`,then normalizes the resulting path."},{"url":"/runtime/reference/std/path/windows/normalize-glob/","title":"@ende/path/windows/normalize-glob"},{"url":"/runtime/reference/std/path/windows/normalize-glob/~/normalizeGlob/","title":"normalizeGlob","description":"@ende/path/windows/normalize-glob: Like normalize(), but doesn't collapse \"**\\/..\" when `globstar` is true."},{"url":"/runtime/reference/std/path/windows/normalize/","title":"@ende/path/windows/normalize"},{"url":"/runtime/reference/std/path/windows/normalize/~/normalize/","title":"normalize","description":"@ende/path/windows/normalize: Normalize the `path`, resolving `'..'` and `'.'` segments. Note that resolving these segments does not necessarily mean that all will be eliminated. A `'..'` at the top-level will be preserved, and an empty path is canonically `'.'`."},{"url":"/runtime/reference/std/path/windows/parse/","title":"@ende/path/windows/parse"},{"url":"/runtime/reference/std/path/windows/parse/~/parse/","title":"parse","description":"@ende/path/windows/parse: Return a `ParsedPath` object of the `path`."},{"url":"/runtime/reference/std/path/windows/relative/","title":"@ende/path/windows/relative"},{"url":"/runtime/reference/std/path/windows/relative/~/relative/","title":"relative","description":"@ende/path/windows/relative: Return the relative path from `from` to `to` based on current working directory."},{"url":"/runtime/reference/std/path/windows/resolve/","title":"@ende/path/windows/resolve"},{"url":"/runtime/reference/std/path/windows/resolve/~/resolve/","title":"resolve","description":"@ende/path/windows/resolve: Resolves path segments into a `path`."},{"url":"/runtime/reference/std/path/windows/to-file-url/","title":"@ende/path/windows/to-file-url"},{"url":"/runtime/reference/std/path/windows/to-file-url/~/toFileUrl/","title":"toFileUrl","description":"@ende/path/windows/to-file-url: Converts a path string to a file URL."},{"url":"/runtime/reference/std/path/windows/to-namespaced-path/","title":"@ende/path/windows/to-namespaced-path"},{"url":"/runtime/reference/std/path/windows/to-namespaced-path/~/toNamespacedPath/","title":"toNamespacedPath","description":"@ende/path/windows/to-namespaced-path: Resolves path to a namespace path"},{"url":"/runtime/reference/std/path/~/DELIMITER/","title":"DELIMITER","description":"@ende/path: The character used to separate entries in the PATH environment variable. On Windows, this is `;`. On all other platforms, this is `:`."},{"url":"/runtime/reference/std/path/~/GlobOptions/","title":"GlobOptions","description":"@ende/path: Options for globToRegExp, joinGlobs, normalizeGlob and expandGlob."},{"url":"/runtime/reference/std/path/~/SEPARATOR/","title":"SEPARATOR","description":"@ende/path: The character used to separate components of a file path. On Windows, this is `\\`. On all other platforms, this is `/`."},{"url":"/runtime/reference/std/path/~/SEPARATOR_PATTERN/","title":"SEPARATOR_PATTERN","description":"@ende/path: A regular expression that matches one or more path separators."},{"url":"/runtime/reference/std/path/~/basename/","title":"basename","description":"@ende/path: Return the last portion of a path."},{"url":"/runtime/reference/std/path/~/common/","title":"common","description":"@ende/path: Determines the common path from a set of paths for the given OS."},{"url":"/runtime/reference/std/path/~/dirname/","title":"dirname","description":"@ende/path: Return the directory path of a path."},{"url":"/runtime/reference/std/path/~/extname/","title":"extname","description":"@ende/path: Return the extension of the path with leading period (\".\")."},{"url":"/runtime/reference/std/path/~/format/","title":"format","description":"@ende/path: Generate a path from a ParsedPath object. It does the opposite of parse()."},{"url":"/runtime/reference/std/path/~/fromFileUrl/","title":"fromFileUrl","description":"@ende/path: Converts a file URL to a path string."},{"url":"/runtime/reference/std/path/~/globToRegExp/","title":"globToRegExp","description":"@ende/path: Converts a glob string to a regular expression."},{"url":"/runtime/reference/std/path/~/isAbsolute/","title":"isAbsolute","description":"@ende/path: Verifies whether provided path is absolute."},{"url":"/runtime/reference/std/path/~/isGlob/","title":"isGlob","description":"@ende/path: Test whether the given string is a glob."},{"url":"/runtime/reference/std/path/~/join/","title":"join","description":"@ende/path: Joins a sequence of paths, then normalizes the resulting path."},{"url":"/runtime/reference/std/path/~/joinGlobs/","title":"joinGlobs","description":"@ende/path: Joins a sequence of globs, then normalizes the resulting glob."},{"url":"/runtime/reference/std/path/~/normalize/","title":"normalize","description":"@ende/path: Normalize the path, resolving `'..'` and `'.'` segments."},{"url":"/runtime/reference/std/path/~/normalizeGlob/","title":"normalizeGlob","description":"@ende/path: Normalizes a glob string."},{"url":"/runtime/reference/std/path/~/parse/","title":"parse","description":"@ende/path: Return an object containing the parsed components of the path."},{"url":"/runtime/reference/std/path/~/relative/","title":"relative","description":"@ende/path: Return the relative path from `from` to `to` based on current working directory."},{"url":"/runtime/reference/std/path/~/resolve/","title":"resolve","description":"@ende/path: Resolves path segments into a path."},{"url":"/runtime/reference/std/path/~/toFileUrl/","title":"toFileUrl","description":"@ende/path: Converts a path string to a file URL."},{"url":"/runtime/reference/std/path/~/toNamespacedPath/","title":"toNamespacedPath","description":"@ende/path: Resolves path to a namespace path. This is a no-op on non-windows systems."},{"url":"/runtime/reference/std/random/","title":"@ende/random","description":"Utilities for generating random numbers."},{"url":"/runtime/reference/std/random/between/","title":"@ende/random/between"},{"url":"/runtime/reference/std/random/get-random-values-seeded/","title":"@ende/random/get-random-values-seeded"},{"url":"/runtime/reference/std/random/integer-between/","title":"@ende/random/integer-between"},{"url":"/runtime/reference/std/random/next-float-64/","title":"@ende/random/next-float-64"},{"url":"/runtime/reference/std/random/sample/","title":"@ende/random/sample"},{"url":"/runtime/reference/std/random/seeded/","title":"@ende/random/seeded"},{"url":"/runtime/reference/std/random/shuffle/","title":"@ende/random/shuffle"},{"url":"/runtime/reference/std/random/~/IntegerTypedArray/","title":"IntegerTypedArray","description":"@ende/random: An integer typed array"},{"url":"/runtime/reference/std/random/~/Prng/","title":"Prng","description":"@ende/random: A pseudo-random number generator implementing the same contract as `Math.random`, i.e. taking zero arguments and returning a random number in the range `[0, 1)`. The behavior of a function that accepts a `Prng` an option may be customized by passing a `Prng` with different behavior from `Math.random`, for example it may be seeded."},{"url":"/runtime/reference/std/random/~/RandomOptions/","title":"RandomOptions","description":"@ende/random: Options for random number generation."},{"url":"/runtime/reference/std/random/~/RandomValueGenerator/","title":"RandomValueGenerator","description":"@ende/random: A pseudo-random number generator implementing the same contract as `crypto.getRandomValues`, i.e. taking a typed array and mutating it by filling it with random bytes, returning the mutated typed array instance."},{"url":"/runtime/reference/std/random/~/SampleOptions/","title":"SampleOptions","description":"@ende/random: Options for sample."},{"url":"/runtime/reference/std/random/~/getRandomValuesSeeded/","title":"getRandomValuesSeeded","description":"@ende/random: Creates a pseudo-random value generator that populates typed arrays, based on the given seed. The algorithm used for generation is PCG32."},{"url":"/runtime/reference/std/random/~/nextFloat64/","title":"nextFloat64","description":"@ende/random: Get a float64 in the range `[0, 1)` from a random value generator."},{"url":"/runtime/reference/std/random/~/randomBetween/","title":"randomBetween","description":"@ende/random: Generates a random number between the provided minimum and maximum values."},{"url":"/runtime/reference/std/random/~/randomIntegerBetween/","title":"randomIntegerBetween","description":"@ende/random: Generates a random integer between the provided minimum and maximum values."},{"url":"/runtime/reference/std/random/~/randomSeeded/","title":"randomSeeded","description":"@ende/random: Creates a pseudo-random number generator that generates random numbers in the range `[0, 1)`, based on the given seed, with 32 bits of entropy. The algorithm used for generation is PCG32."},{"url":"/runtime/reference/std/random/~/sample/","title":"sample","description":"@ende/random: Returns a random element from the given array."},{"url":"/runtime/reference/std/random/~/shuffle/","title":"shuffle","description":"@ende/random: Shuffles the provided array, returning a copy and without modifying the original array."},{"url":"/runtime/reference/std/regexp/","title":"@ende/regexp","description":"Functions for tasks related to regular expression (regexp), such as escaping text for interpolation into a regexp."},{"url":"/runtime/reference/std/regexp/escape/","title":"@ende/regexp/escape"},{"url":"/runtime/reference/std/regexp/unstable-replace-all-async/","title":"@ende/regexp/unstable-replace-all-async"},{"url":"/runtime/reference/std/regexp/unstable-replace-all-async/~/replaceAllAsync/","title":"replaceAllAsync","description":"@ende/regexp/unstable-replace-all-async: Asynchronously replaces all occurrences of a pattern in a string."},{"url":"/runtime/reference/std/regexp/~/escape/","title":"escape","description":"@ende/regexp: Escapes arbitrary text for interpolation into a regexp, such that it will match exactly that text and nothing else."},{"url":"/runtime/reference/std/semver/","title":"@ende/semver","description":"The Semantic Version parser."},{"url":"/runtime/reference/std/semver/can-parse/","title":"@ende/semver/can-parse"},{"url":"/runtime/reference/std/semver/compare/","title":"@ende/semver/compare"},{"url":"/runtime/reference/std/semver/difference/","title":"@ende/semver/difference"},{"url":"/runtime/reference/std/semver/equals/","title":"@ende/semver/equals"},{"url":"/runtime/reference/std/semver/format-range/","title":"@ende/semver/format-range"},{"url":"/runtime/reference/std/semver/format/","title":"@ende/semver/format"},{"url":"/runtime/reference/std/semver/greater-or-equal/","title":"@ende/semver/greater-or-equal"},{"url":"/runtime/reference/std/semver/greater-than-range/","title":"@ende/semver/greater-than-range"},{"url":"/runtime/reference/std/semver/greater-than/","title":"@ende/semver/greater-than"},{"url":"/runtime/reference/std/semver/increment/","title":"@ende/semver/increment"},{"url":"/runtime/reference/std/semver/is-range/","title":"@ende/semver/is-range"},{"url":"/runtime/reference/std/semver/is-semver/","title":"@ende/semver/is-semver"},{"url":"/runtime/reference/std/semver/less-or-equal/","title":"@ende/semver/less-or-equal"},{"url":"/runtime/reference/std/semver/less-than-range/","title":"@ende/semver/less-than-range"},{"url":"/runtime/reference/std/semver/less-than/","title":"@ende/semver/less-than"},{"url":"/runtime/reference/std/semver/max-satisfying/","title":"@ende/semver/max-satisfying"},{"url":"/runtime/reference/std/semver/min-satisfying/","title":"@ende/semver/min-satisfying"},{"url":"/runtime/reference/std/semver/not-equals/","title":"@ende/semver/not-equals"},{"url":"/runtime/reference/std/semver/parse-range/","title":"@ende/semver/parse-range"},{"url":"/runtime/reference/std/semver/parse/","title":"@ende/semver/parse"},{"url":"/runtime/reference/std/semver/range-intersects/","title":"@ende/semver/range-intersects"},{"url":"/runtime/reference/std/semver/satisfies/","title":"@ende/semver/satisfies"},{"url":"/runtime/reference/std/semver/try-parse-range/","title":"@ende/semver/try-parse-range"},{"url":"/runtime/reference/std/semver/try-parse/","title":"@ende/semver/try-parse"},{"url":"/runtime/reference/std/semver/types/","title":"@ende/semver/types"},{"url":"/runtime/reference/std/semver/~/Comparator/","title":"Comparator","description":"@ende/semver: The shape of a valid SemVer comparator."},{"url":"/runtime/reference/std/semver/~/IncrementOptions/","title":"IncrementOptions","description":"@ende/semver: Options for increment."},{"url":"/runtime/reference/std/semver/~/Operator/","title":"Operator","description":"@ende/semver: SemVer comparison operators."},{"url":"/runtime/reference/std/semver/~/Range/","title":"Range","description":"@ende/semver: A type representing a semantic version range. The ranges consist of a nested array, which represents a set of OR comparisons while the inner array represents AND comparisons."},{"url":"/runtime/reference/std/semver/~/ReleaseType/","title":"ReleaseType","description":"@ende/semver: The possible release types are used as an operator for the increment function and as a result of the difference function."},{"url":"/runtime/reference/std/semver/~/SemVer/","title":"SemVer","description":"@ende/semver: A SemVer object parsed into its constituent parts."},{"url":"/runtime/reference/std/semver/~/canParse/","title":"canParse","description":"@ende/semver: Returns true if the string can be parsed as SemVer."},{"url":"/runtime/reference/std/semver/~/compare/","title":"compare","description":"@ende/semver: Compare two SemVers."},{"url":"/runtime/reference/std/semver/~/difference/","title":"difference","description":"@ende/semver: Returns difference between two SemVers by the release type, or `undefined` if the SemVers are the same."},{"url":"/runtime/reference/std/semver/~/equals/","title":"equals","description":"@ende/semver: Returns `true` if both SemVers are equivalent."},{"url":"/runtime/reference/std/semver/~/format/","title":"format","description":"@ende/semver: Format a SemVer object into a string."},{"url":"/runtime/reference/std/semver/~/formatRange/","title":"formatRange","description":"@ende/semver: Formats the SemVerrange into a string."},{"url":"/runtime/reference/std/semver/~/greaterOrEqual/","title":"greaterOrEqual","description":"@ende/semver: Greater than or equal to comparison for two SemVers."},{"url":"/runtime/reference/std/semver/~/greaterThan/","title":"greaterThan","description":"@ende/semver: Greater than comparison for two SemVers."},{"url":"/runtime/reference/std/semver/~/greaterThanRange/","title":"greaterThanRange","description":"@ende/semver: Check if the SemVer is greater than the range."},{"url":"/runtime/reference/std/semver/~/increment/","title":"increment","description":"@ende/semver: Returns the new SemVer resulting from an increment by release type."},{"url":"/runtime/reference/std/semver/~/isRange/","title":"isRange","description":"@ende/semver: Does a deep check on the object to determine if its a valid range."},{"url":"/runtime/reference/std/semver/~/isSemVer/","title":"isSemVer","description":"@ende/semver: Checks to see if value is a valid SemVer object. It does a check into each field including prerelease and build."},{"url":"/runtime/reference/std/semver/~/lessOrEqual/","title":"lessOrEqual","description":"@ende/semver: Less than or equal to comparison for two SemVers."},{"url":"/runtime/reference/std/semver/~/lessThan/","title":"lessThan","description":"@ende/semver: Less than comparison for two SemVers."},{"url":"/runtime/reference/std/semver/~/lessThanRange/","title":"lessThanRange","description":"@ende/semver: Check if the SemVer is less than the range."},{"url":"/runtime/reference/std/semver/~/maxSatisfying/","title":"maxSatisfying","description":"@ende/semver: Returns the highest SemVer in the list that satisfies the range, or `undefined` if none of them do."},{"url":"/runtime/reference/std/semver/~/minSatisfying/","title":"minSatisfying","description":"@ende/semver: Returns the lowest SemVer in the list that satisfies the range, or `undefined` if none of them do."},{"url":"/runtime/reference/std/semver/~/notEquals/","title":"notEquals","description":"@ende/semver: Not equal comparison for two SemVers."},{"url":"/runtime/reference/std/semver/~/parse/","title":"parse","description":"@ende/semver: Attempt to parse a string as a semantic version, returning a SemVer object."},{"url":"/runtime/reference/std/semver/~/parseRange/","title":"parseRange","description":"@ende/semver: Parses a range string into a Range object."},{"url":"/runtime/reference/std/semver/~/rangeIntersects/","title":"rangeIntersects","description":"@ende/semver: The ranges intersect every range of AND comparators intersects with a least one range of OR ranges."},{"url":"/runtime/reference/std/semver/~/satisfies/","title":"satisfies","description":"@ende/semver: Test to see if the SemVer satisfies the range."},{"url":"/runtime/reference/std/semver/~/tryParse/","title":"tryParse","description":"@ende/semver: Returns the parsed SemVer, or `undefined` if it's not valid."},{"url":"/runtime/reference/std/semver/~/tryParseRange/","title":"tryParseRange","description":"@ende/semver: Parses the given range string and returns a Range object. If the range string is invalid, `undefined` is returned."},{"url":"/runtime/reference/std/streams/","title":"@ende/streams","description":"Utilities for working with the Streams API."},{"url":"/runtime/reference/std/streams/batch-stream/","title":"@ende/streams/batch-stream"},{"url":"/runtime/reference/std/streams/buffer/","title":"@ende/streams/buffer"},{"url":"/runtime/reference/std/streams/byte-slice-stream/","title":"@ende/streams/byte-slice-stream"},{"url":"/runtime/reference/std/streams/concat-readable-streams/","title":"@ende/streams/concat-readable-streams"},{"url":"/runtime/reference/std/streams/delimiter-stream/","title":"@ende/streams/delimiter-stream"},{"url":"/runtime/reference/std/streams/early-zip-readable-streams/","title":"@ende/streams/early-zip-readable-streams"},{"url":"/runtime/reference/std/streams/limited-bytes-transform-stream/","title":"@ende/streams/limited-bytes-transform-stream"},{"url":"/runtime/reference/std/streams/limited-transform-stream/","title":"@ende/streams/limited-transform-stream"},{"url":"/runtime/reference/std/streams/merge-readable-streams/","title":"@ende/streams/merge-readable-streams"},{"url":"/runtime/reference/std/streams/text-delimiter-stream/","title":"@ende/streams/text-delimiter-stream"},{"url":"/runtime/reference/std/streams/text-line-stream/","title":"@ende/streams/text-line-stream"},{"url":"/runtime/reference/std/streams/to-array-buffer/","title":"@ende/streams/to-array-buffer"},{"url":"/runtime/reference/std/streams/to-blob/","title":"@ende/streams/to-blob"},{"url":"/runtime/reference/std/streams/to-bytes/","title":"@ende/streams/to-bytes"},{"url":"/runtime/reference/std/streams/to-json/","title":"@ende/streams/to-json"},{"url":"/runtime/reference/std/streams/to-text/","title":"@ende/streams/to-text"},{"url":"/runtime/reference/std/streams/to-transform-stream/","title":"@ende/streams/to-transform-stream"},{"url":"/runtime/reference/std/streams/unstable-abort-stream/","title":"@ende/streams/unstable-abort-stream"},{"url":"/runtime/reference/std/streams/unstable-abort-stream/~/AbortStream/","title":"AbortStream","description":"@ende/streams/unstable-abort-stream: A transform stream that accepts a AbortSignal to easily abort a stream pipeThrough."},{"url":"/runtime/reference/std/streams/unstable-capped-delimiter-stream/","title":"@ende/streams/unstable-capped-delimiter-stream"},{"url":"/runtime/reference/std/streams/unstable-capped-delimiter-stream/~/CappedDelimiterEntry/","title":"CappedDelimiterEntry","description":"@ende/streams/unstable-capped-delimiter-stream: Represents an entry in a CappedDelimiterStream."},{"url":"/runtime/reference/std/streams/unstable-capped-delimiter-stream/~/CappedDelimiterOptions/","title":"CappedDelimiterOptions","description":"@ende/streams/unstable-capped-delimiter-stream: The options for the CappedDelimiterStream."},{"url":"/runtime/reference/std/streams/unstable-capped-delimiter-stream/~/CappedDelimiterStream/","title":"CappedDelimiterStream","description":"@ende/streams/unstable-capped-delimiter-stream: CappedDelimiterStream is a TransformStream that splits a `ReadableStream<Uint8Array>` by a provided `delimiter`, returning CappedDelimiterEntry objects. Each entry's match property indicates whether the corresponding value ended with the delimiter. The class also requires a `limit` property to specify the max length that each entry can be, which can be preferable if your delimiter is unlikely to appear often."},{"url":"/runtime/reference/std/streams/unstable-fixed-chunk-stream/","title":"@ende/streams/unstable-fixed-chunk-stream"},{"url":"/runtime/reference/std/streams/unstable-fixed-chunk-stream/~/FixedChunkStream/","title":"FixedChunkStream","description":"@ende/streams/unstable-fixed-chunk-stream: A transform stream that resize Uint8Array chunks into perfectly `size` chunks with the exception of the last chunk."},{"url":"/runtime/reference/std/streams/unstable-to-byte-stream/","title":"@ende/streams/unstable-to-byte-stream"},{"url":"/runtime/reference/std/streams/unstable-to-byte-stream/~/toByteStream/","title":"toByteStream","description":"@ende/streams/unstable-to-byte-stream: The function takes a `ReadableStream<Uint8Array>` and wraps it in a BYOB stream if it doesn't already support it."},{"url":"/runtime/reference/std/streams/unstable-to-lines/","title":"@ende/streams/unstable-to-lines"},{"url":"/runtime/reference/std/streams/unstable-to-lines/~/toLines/","title":"toLines","description":"@ende/streams/unstable-to-lines: Converts a ReadableStream of Uint8Arrays into one of lines delimited by `\\n` or `\\r\\n`. Trims the last line if empty."},{"url":"/runtime/reference/std/streams/zip-readable-streams/","title":"@ende/streams/zip-readable-streams"},{"url":"/runtime/reference/std/streams/~/BatchStream/","title":"BatchStream","description":"@ende/streams: A TransformStream that groups input chunks into fixed-size batches. Emits a `T[]` once `size` input chunks have been collected and flushes any final non-empty partial batch when the input closes."},{"url":"/runtime/reference/std/streams/~/Buffer/","title":"Buffer","description":"@ende/streams: A variable-sized buffer of bytes with `readable` and `writable` getters that allows you to work with Web Streams API."},{"url":"/runtime/reference/std/streams/~/BufferBytesOptions/","title":"BufferBytesOptions","description":"@ende/streams: Options for Buffer.bytes."},{"url":"/runtime/reference/std/streams/~/ByteSliceStream/","title":"ByteSliceStream","description":"@ende/streams: A transform stream that only transforms from the zero-indexed `start` and `end` bytes (both inclusive)."},{"url":"/runtime/reference/std/streams/~/DelimiterDisposition/","title":"DelimiterDisposition","description":"@ende/streams: Disposition of the delimiter for DelimiterStreamOptions."},{"url":"/runtime/reference/std/streams/~/DelimiterStream/","title":"DelimiterStream","description":"@ende/streams: Divide a stream into chunks delimited by a given byte sequence."},{"url":"/runtime/reference/std/streams/~/DelimiterStreamOptions/","title":"DelimiterStreamOptions","description":"@ende/streams: Options for DelimiterStream."},{"url":"/runtime/reference/std/streams/~/LimitedBytesTransformStream/","title":"LimitedBytesTransformStream","description":"@ende/streams: A TransformStream that will only read & enqueue chunks until the total amount of enqueued data exceeds `size`. The last chunk that would exceed the limit will NOT be enqueued, in which case a RangeError is thrown when `options.error` is set to true, otherwise the stream is just terminated."},{"url":"/runtime/reference/std/streams/~/LimitedBytesTransformStreamOptions/","title":"LimitedBytesTransformStreamOptions","description":"@ende/streams: Options for LimitedBytesTransformStream."},{"url":"/runtime/reference/std/streams/~/LimitedTransformStream/","title":"LimitedTransformStream","description":"@ende/streams: A TransformStream that will only read & enqueue `size` amount of chunks."},{"url":"/runtime/reference/std/streams/~/LimitedTransformStreamOptions/","title":"LimitedTransformStreamOptions","description":"@ende/streams: Options for LimitedTransformStream"},{"url":"/runtime/reference/std/streams/~/TextDelimiterStream/","title":"TextDelimiterStream","description":"@ende/streams: Transform a stream `string` into a stream where each chunk is divided by a given delimiter."},{"url":"/runtime/reference/std/streams/~/TextLineStream/","title":"TextLineStream","description":"@ende/streams: Transform a stream into a stream where each chunk is divided by a newline, be it `\\n` or `\\r\\n`. `\\r` can be enabled via the `allowCR` option."},{"url":"/runtime/reference/std/streams/~/TextLineStreamOptions/","title":"TextLineStreamOptions","description":"@ende/streams: Options for TextLineStream."},{"url":"/runtime/reference/std/streams/~/concatReadableStreams/","title":"concatReadableStreams","description":"@ende/streams: Concatenates multiple `ReadableStream`s into a single ordered `ReadableStream`."},{"url":"/runtime/reference/std/streams/~/earlyZipReadableStreams/","title":"earlyZipReadableStreams","description":"@ende/streams: Merge multiple streams into a single one, taking order into account, and each stream will wait for a chunk to enqueue before the next stream can append another chunk."},{"url":"/runtime/reference/std/streams/~/mergeReadableStreams/","title":"mergeReadableStreams","description":"@ende/streams: Merge multiple streams into a single one, not taking order into account. If a stream ends before other ones, the other will continue adding data, and the finished one will not add any more data."},{"url":"/runtime/reference/std/streams/~/toArrayBuffer/","title":"toArrayBuffer","description":"@ende/streams: Converts a ReadableStream of Uint8Arrays to an ArrayBuffer. Works the same as Response.arrayBuffer."},{"url":"/runtime/reference/std/streams/~/toBlob/","title":"toBlob","description":"@ende/streams: Converts a ReadableStream of Uint8Arrays to a Blob. Works the same as Response.blob."},{"url":"/runtime/reference/std/streams/~/toBytes/","title":"toBytes","description":"@ende/streams: Converts a ReadableStream of Uint8Arrays to a Uint8Array. Works the same as Response.bytes."},{"url":"/runtime/reference/std/streams/~/toJson/","title":"toJson","description":"@ende/streams: Converts a https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON-formatted ReadableSteam of strings or Uint8Arrays to an object. Works the same as Response.json and Request.json, but also extends to support streams of strings."},{"url":"/runtime/reference/std/streams/~/toText/","title":"toText","description":"@ende/streams: Converts a ReadableSteam of strings or Uint8Arrays to a single string. Works the same as Response.text and Request.text, but also extends to support streams of strings."},{"url":"/runtime/reference/std/streams/~/toTransformStream/","title":"toTransformStream","description":"@ende/streams: Convert the generator function into a TransformStream."},{"url":"/runtime/reference/std/streams/~/zipReadableStreams/","title":"zipReadableStreams","description":"@ende/streams: Merge multiple streams into a single one, taking order into account, and each stream will wait for a chunk to enqueue before the next stream can append another chunk."},{"url":"/runtime/reference/std/tar/","title":"@ende/tar","description":"Streaming utilities for working with tar archives."},{"url":"/runtime/reference/std/tar/tar-stream/","title":"@ende/tar/tar-stream"},{"url":"/runtime/reference/std/tar/untar-stream/","title":"@ende/tar/untar-stream"},{"url":"/runtime/reference/std/tar/~/OldStyleFormat/","title":"OldStyleFormat","description":"@ende/tar: The original tar archive header format."},{"url":"/runtime/reference/std/tar/~/PosixUstarFormat/","title":"PosixUstarFormat","description":"@ende/tar: The POSIX ustar archive header format."},{"url":"/runtime/reference/std/tar/~/TarStream/","title":"TarStream","description":"@ende/tar: ### Overview A TransformStream to create a tar archive. Tar archives allow for storing multiple files in a single file (called an archive, or sometimes a tarball). These archives typically have a single '.tar' extension. This implementation follows the FreeBSD 15.0 spec."},{"url":"/runtime/reference/std/tar/~/TarStreamDir/","title":"TarStreamDir","description":"@ende/tar: The interface required to provide a directory."},{"url":"/runtime/reference/std/tar/~/TarStreamEntry/","title":"TarStreamEntry","description":"@ende/tar: The structure of an entry extracted from a Tar archive."},{"url":"/runtime/reference/std/tar/~/TarStreamFile/","title":"TarStreamFile","description":"@ende/tar: The interface required to provide a file."},{"url":"/runtime/reference/std/tar/~/TarStreamInput/","title":"TarStreamInput","description":"@ende/tar: A union type merging all the TarStream interfaces that can be piped into the TarStream class."},{"url":"/runtime/reference/std/tar/~/TarStreamOptions/","title":"TarStreamOptions","description":"@ende/tar: The options that can go along with a file or directory."},{"url":"/runtime/reference/std/tar/~/TarStreamSymlink/","title":"TarStreamSymlink","description":"@ende/tar: The interface required to provide a symbolic link."},{"url":"/runtime/reference/std/tar/~/Uint8Array_/","title":"Uint8Array_","description":"@ende/tar: Proxy type of {@code Uint8Array<ArrayBuffer>} or {@code Uint8Array} in TypeScript 5.7 or below respectively."},{"url":"/runtime/reference/std/tar/~/UntarStream/","title":"UntarStream","description":"@ende/tar: ### Overview A TransformStream to expand a tar archive. Tar archives allow for storing multiple files in a single file (called an archive, or sometimes a tarball)."},{"url":"/runtime/reference/std/tar/~/assertValidLinkname/","title":"assertValidLinkname","description":"@ende/tar: Asserts that the linkname provided is valid for a TarStream."},{"url":"/runtime/reference/std/tar/~/assertValidPath/","title":"assertValidPath","description":"@ende/tar: Asserts that the path provided is valid for a TarStream."},{"url":"/runtime/reference/std/tar/~/assertValidTarStreamOptions/","title":"assertValidTarStreamOptions","description":"@ende/tar: Asserts that the options provided are valid for a TarStream."},{"url":"/runtime/reference/std/testing/","title":"@ende/testing","description":"A BDD interface to `Ende.test()` API."},{"url":"/runtime/reference/std/testing/bdd/","title":"@ende/testing/bdd","description":"A BDD interface to `Ende.test()` API."},{"url":"/runtime/reference/std/testing/bdd/~/DescribeArgs/","title":"DescribeArgs","description":"@ende/testing/bdd: The arguments for a DescribeFunction."},{"url":"/runtime/reference/std/testing/bdd/~/DescribeDefinition/","title":"DescribeDefinition","description":"@ende/testing/bdd: The options for creating a test suite with the describe function."},{"url":"/runtime/reference/std/testing/bdd/~/ItArgs/","title":"ItArgs","description":"@ende/testing/bdd: The arguments for an ItFunction."},{"url":"/runtime/reference/std/testing/bdd/~/ItDefinition/","title":"ItDefinition","description":"@ende/testing/bdd: The options for creating an individual test case with the it function."},{"url":"/runtime/reference/std/testing/bdd/~/TestSuite/","title":"TestSuite","description":"@ende/testing/bdd: A group of tests."},{"url":"/runtime/reference/std/testing/bdd/~/after/","title":"after","description":"@ende/testing/bdd: Alias of afterAll."},{"url":"/runtime/reference/std/testing/bdd/~/afterAll/","title":"afterAll","description":"@ende/testing/bdd: Run some shared teardown after all of the tests in the suite."},{"url":"/runtime/reference/std/testing/bdd/~/afterEach/","title":"afterEach","description":"@ende/testing/bdd: Run some shared teardown after each test in the suite."},{"url":"/runtime/reference/std/testing/bdd/~/before/","title":"before","description":"@ende/testing/bdd: Alias of beforeAll"},{"url":"/runtime/reference/std/testing/bdd/~/beforeAll/","title":"beforeAll","description":"@ende/testing/bdd: Run some shared setup before all of the tests in the group. Useful for async setup in `describe` blocks. Outside them, top-level initialization code should be used instead."},{"url":"/runtime/reference/std/testing/bdd/~/beforeEach/","title":"beforeEach","description":"@ende/testing/bdd: Run some shared setup before each test in the suite."},{"url":"/runtime/reference/std/testing/bdd/~/describe/","title":"describe","description":"@ende/testing/bdd: Registers a test suite."},{"url":"/runtime/reference/std/testing/bdd/~/it/","title":"it","description":"@ende/testing/bdd: Registers an individual test case."},{"url":"/runtime/reference/std/testing/bdd/~/test/","title":"test","description":"@ende/testing/bdd: Alias of it"},{"url":"/runtime/reference/std/testing/mock/","title":"@ende/testing/mock","description":"A mocking and spying library."},{"url":"/runtime/reference/std/testing/mock/~/ConstructorSpy/","title":"ConstructorSpy","description":"@ende/testing/mock: A constructor wrapper that records all calls made to it."},{"url":"/runtime/reference/std/testing/mock/~/ExpectedSpyCall/","title":"ExpectedSpyCall","description":"@ende/testing/mock: Call information recorded by a spy."},{"url":"/runtime/reference/std/testing/mock/~/GetParametersFromProp/","title":"GetParametersFromProp","description":"@ende/testing/mock: Utility for extracting the arguments type from a property"},{"url":"/runtime/reference/std/testing/mock/~/GetReturnFromProp/","title":"GetReturnFromProp","description":"@ende/testing/mock: Utility for extracting the return type from a property"},{"url":"/runtime/reference/std/testing/mock/~/MethodSpy/","title":"MethodSpy","description":"@ende/testing/mock: An instance method wrapper that records all calls made to it."},{"url":"/runtime/reference/std/testing/mock/~/MockError/","title":"MockError","description":"@ende/testing/mock: An error related to spying on a function or instance method."},{"url":"/runtime/reference/std/testing/mock/~/Spy/","title":"Spy","description":"@ende/testing/mock: A function or instance method wrapper that records all calls made to it."},{"url":"/runtime/reference/std/testing/mock/~/SpyCall/","title":"SpyCall","description":"@ende/testing/mock: Call information recorded by a spy."},{"url":"/runtime/reference/std/testing/mock/~/SpyLike/","title":"SpyLike","description":"@ende/testing/mock: SpyLink object type."},{"url":"/runtime/reference/std/testing/mock/~/Stub/","title":"Stub","description":"@ende/testing/mock: An instance method replacement that records all calls made to it."},{"url":"/runtime/reference/std/testing/mock/~/assertSpyCall/","title":"assertSpyCall","description":"@ende/testing/mock: Asserts that a spy is called as expected."},{"url":"/runtime/reference/std/testing/mock/~/assertSpyCallArg/","title":"assertSpyCallArg","description":"@ende/testing/mock: Asserts that a spy is called with a specific arg as expected."},{"url":"/runtime/reference/std/testing/mock/~/assertSpyCallArgs/","title":"assertSpyCallArgs","description":"@ende/testing/mock: Asserts that an spy is called with a specific range of args as expected. If a start and end index is not provided, the expected will be compared against all args. If a start is provided without an end index, the expected will be compared against all args from the start index to the end. The end index is not included in the range of args that are compared."},{"url":"/runtime/reference/std/testing/mock/~/assertSpyCallAsync/","title":"assertSpyCallAsync","description":"@ende/testing/mock: Asserts that an async spy is called as expected."},{"url":"/runtime/reference/std/testing/mock/~/assertSpyCalls/","title":"assertSpyCalls","description":"@ende/testing/mock: Asserts that a spy is called as much as expected and no more."},{"url":"/runtime/reference/std/testing/mock/~/mockSession/","title":"mockSession","description":"@ende/testing/mock: Creates a session that tracks all mocks created before it's restored. If a callback is provided, it restores all mocks created within it."},{"url":"/runtime/reference/std/testing/mock/~/mockSessionAsync/","title":"mockSessionAsync","description":"@ende/testing/mock: Creates an async session that tracks all mocks created before the promise resolves."},{"url":"/runtime/reference/std/testing/mock/~/resolvesNext/","title":"resolvesNext","description":"@ende/testing/mock: Creates a function that resolves the awaited iterable values. Any awaited iterable values that are errors will be thrown."},{"url":"/runtime/reference/std/testing/mock/~/restore/","title":"restore","description":"@ende/testing/mock: Restores all mocks registered in the current session that have not already been restored. If an id is provided, it will restore all mocks registered in the session associed with that id that have not already been restored."},{"url":"/runtime/reference/std/testing/mock/~/returnsArg/","title":"returnsArg","description":"@ende/testing/mock: Creates a function that returns one of its arguments."},{"url":"/runtime/reference/std/testing/mock/~/returnsArgs/","title":"returnsArgs","description":"@ende/testing/mock: Creates a function that returns its arguments or a subset of them. If end is specified, it will return arguments up to but not including the end."},{"url":"/runtime/reference/std/testing/mock/~/returnsNext/","title":"returnsNext","description":"@ende/testing/mock: Creates a function that returns the iterable values. Any iterable values that are errors will be thrown."},{"url":"/runtime/reference/std/testing/mock/~/returnsThis/","title":"returnsThis","description":"@ende/testing/mock: Creates a function that returns the instance the method was called on."},{"url":"/runtime/reference/std/testing/snapshot/","title":"@ende/testing/snapshot","description":"A snapshotting library."},{"url":"/runtime/reference/std/testing/snapshot/~/SnapshotMode/","title":"SnapshotMode","description":"@ende/testing/snapshot: The mode of snapshot testing."},{"url":"/runtime/reference/std/testing/snapshot/~/SnapshotOptions/","title":"SnapshotOptions","description":"@ende/testing/snapshot: The options for assertSnapshot."},{"url":"/runtime/reference/std/testing/snapshot/~/assertSnapshot/","title":"assertSnapshot","description":"@ende/testing/snapshot: Make an assertion that `actual` matches a snapshot. If the snapshot and `actual` do not match, then throw."},{"url":"/runtime/reference/std/testing/snapshot/~/createAssertSnapshot/","title":"createAssertSnapshot","description":"@ende/testing/snapshot: Create assertSnapshot function with the given options."},{"url":"/runtime/reference/std/testing/snapshot/~/serialize/","title":"serialize","description":"@ende/testing/snapshot: Default serializer for `assertSnapshot`."},{"url":"/runtime/reference/std/testing/time/","title":"@ende/testing/time","description":"Utilities for mocking time while testing."},{"url":"/runtime/reference/std/testing/time/~/DelayOptions/","title":"DelayOptions","description":"@ende/testing/time: Options for delay."},{"url":"/runtime/reference/std/testing/time/~/FakeTime/","title":"FakeTime","description":"@ende/testing/time: Overrides the real Date object and timer functions with fake ones that can be controlled through the fake time instance."},{"url":"/runtime/reference/std/testing/time/~/FakeTimeOptions/","title":"FakeTimeOptions","description":"@ende/testing/time: The option for FakeTime"},{"url":"/runtime/reference/std/testing/time/~/TimeError/","title":"TimeError","description":"@ende/testing/time: Represents an error when trying to execute an invalid operation on fake time, given the state fake time is in."},{"url":"/runtime/reference/std/testing/types/","title":"@ende/testing/types","description":"Testing utilities for types."},{"url":"/runtime/reference/std/testing/types/~/AnyBrand/","title":"AnyBrand","description":"@ende/testing/types: The utility type to represent any type."},{"url":"/runtime/reference/std/testing/types/~/AnyToBrand/","title":"AnyToBrand","description":"@ende/testing/types: The utility type to convert any to AnyBrand."},{"url":"/runtime/reference/std/testing/types/~/Assert/","title":"Assert","description":"@ende/testing/types: Asserts at compile time that the provided type argument's type resolves to the expected boolean literal type."},{"url":"/runtime/reference/std/testing/types/~/AssertFalse/","title":"AssertFalse","description":"@ende/testing/types: Asserts at compile time that the provided type argument's type resolves to false."},{"url":"/runtime/reference/std/testing/types/~/AssertTrue/","title":"AssertTrue","description":"@ende/testing/types: Asserts at compile time that the provided type argument's type resolves to true."},{"url":"/runtime/reference/std/testing/types/~/DeepPrepareIsExact/","title":"DeepPrepareIsExact","description":"@ende/testing/types"},{"url":"/runtime/reference/std/testing/types/~/DeepPrepareIsExactProp/","title":"DeepPrepareIsExactProp","description":"@ende/testing/types"},{"url":"/runtime/reference/std/testing/types/~/FlatType/","title":"FlatType","description":"@ende/testing/types: The utility type to flatten record types."},{"url":"/runtime/reference/std/testing/types/~/Has/","title":"Has","description":"@ende/testing/types: Checks if type `T` has the specified type `U`."},{"url":"/runtime/reference/std/testing/types/~/IsAny/","title":"IsAny","description":"@ende/testing/types: Checks if type `T` is the `any` type."},{"url":"/runtime/reference/std/testing/types/~/IsExact/","title":"IsExact","description":"@ende/testing/types: Checks if type `T` exactly matches type `U`."},{"url":"/runtime/reference/std/testing/types/~/IsNever/","title":"IsNever","description":"@ende/testing/types: Checks if type `T` is the `never` type."},{"url":"/runtime/reference/std/testing/types/~/IsNullable/","title":"IsNullable","description":"@ende/testing/types: Checks if type `T` is possibly null or undefined."},{"url":"/runtime/reference/std/testing/types/~/IsUnknown/","title":"IsUnknown","description":"@ende/testing/types: Checks if type `T` is the `unknown` type."},{"url":"/runtime/reference/std/testing/types/~/Matches/","title":"Matches","description":"@ende/testing/types: The internal utility type to match the given types."},{"url":"/runtime/reference/std/testing/types/~/NotHas/","title":"NotHas","description":"@ende/testing/types: Checks if type `T` does not have the specified type `U`."},{"url":"/runtime/reference/std/testing/types/~/ParametersAndReturnTypeMatches/","title":"ParametersAndReturnTypeMatches","description":"@ende/testing/types: The internal utility type to match the given types as return types."},{"url":"/runtime/reference/std/testing/types/~/TupleMatches/","title":"TupleMatches","description":"@ende/testing/types: The internal utility type to match the given types as tuples."},{"url":"/runtime/reference/std/testing/types/~/assertType/","title":"assertType","description":"@ende/testing/types: Asserts at compile time that the provided type argument's type resolves to the expected boolean literal type."},{"url":"/runtime/reference/std/testing/unstable-bdd/","title":"@ende/testing/unstable-bdd"},{"url":"/runtime/reference/std/testing/unstable-bdd/~/ConfigureGlobalSanitizersOptions/","title":"ConfigureGlobalSanitizersOptions","description":"@ende/testing/unstable-bdd: Options for configureGlobalSanitizers."},{"url":"/runtime/reference/std/testing/unstable-bdd/~/configureGlobalSanitizers/","title":"configureGlobalSanitizers","description":"@ende/testing/unstable-bdd: Configures the global sanitizers."},{"url":"/runtime/reference/std/testing/unstable-bdd/~/describe/","title":"describe","description":"@ende/testing/unstable-bdd: Registers a test suite."},{"url":"/runtime/reference/std/testing/unstable-bdd/~/it/","title":"it","description":"@ende/testing/unstable-bdd: Registers an individual test case."},{"url":"/runtime/reference/std/testing/unstable-bdd/~/test/","title":"test","description":"@ende/testing/unstable-bdd: Alias of it"},{"url":"/runtime/reference/std/testing/unstable-snapshot/","title":"@ende/testing/unstable-snapshot"},{"url":"/runtime/reference/std/testing/unstable-snapshot/~/InlineSnapshotOptions/","title":"InlineSnapshotOptions","description":"@ende/testing/unstable-snapshot: The options for assertInlineSnapshot."},{"url":"/runtime/reference/std/testing/unstable-snapshot/~/assertInlineSnapshot/","title":"assertInlineSnapshot","description":"@ende/testing/unstable-snapshot: Make an assertion that `actual` matches `expectedSnapshot`. If they do not match, then throw."},{"url":"/runtime/reference/std/testing/unstable-snapshot/~/createAssertInlineSnapshot/","title":"createAssertInlineSnapshot","description":"@ende/testing/unstable-snapshot: Create assertInlineSnapshot function with the given options."},{"url":"/runtime/reference/std/testing/unstable-stub-property/","title":"@ende/testing/unstable-stub-property"},{"url":"/runtime/reference/std/testing/unstable-stub-property/~/stubProperty/","title":"stubProperty","description":"@ende/testing/unstable-stub-property: Stubs a property on an object, retaining the attributes of the original property descriptor as far as possible."},{"url":"/runtime/reference/std/testing/unstable-stub/","title":"@ende/testing/unstable-stub"},{"url":"/runtime/reference/std/testing/unstable-stub/~/Stub/","title":"Stub","description":"@ende/testing/unstable-stub: An instance method replacement that records all calls made to it."},{"url":"/runtime/reference/std/testing/unstable-types/","title":"@ende/testing/unstable-types"},{"url":"/runtime/reference/std/testing/unstable-types/~/IsMutuallyAssignable/","title":"IsMutuallyAssignable","description":"@ende/testing/unstable-types: Checks if the actual type `A` is assignable to the expected type `E`, and vice versa."},{"url":"/runtime/reference/std/text/","title":"@ende/text","description":"Utility functions for working with text."},{"url":"/runtime/reference/std/text/closest-string/","title":"@ende/text/closest-string"},{"url":"/runtime/reference/std/text/compare-similarity/","title":"@ende/text/compare-similarity"},{"url":"/runtime/reference/std/text/levenshtein-distance/","title":"@ende/text/levenshtein-distance"},{"url":"/runtime/reference/std/text/to-camel-case/","title":"@ende/text/to-camel-case"},{"url":"/runtime/reference/std/text/to-kebab-case/","title":"@ende/text/to-kebab-case"},{"url":"/runtime/reference/std/text/to-pascal-case/","title":"@ende/text/to-pascal-case"},{"url":"/runtime/reference/std/text/to-snake-case/","title":"@ende/text/to-snake-case"},{"url":"/runtime/reference/std/text/truncate/","title":"@ende/text/truncate"},{"url":"/runtime/reference/std/text/unstable-dedent/","title":"@ende/text/unstable-dedent"},{"url":"/runtime/reference/std/text/unstable-dedent/~/dedent/","title":"dedent","description":"@ende/text/unstable-dedent: Removes indentation from multiline strings."},{"url":"/runtime/reference/std/text/unstable-longest-common-prefix/","title":"@ende/text/unstable-longest-common-prefix"},{"url":"/runtime/reference/std/text/unstable-longest-common-prefix/~/longestCommonPrefix/","title":"longestCommonPrefix","description":"@ende/text/unstable-longest-common-prefix: Gets the longest common prefix of an array of strings."},{"url":"/runtime/reference/std/text/unstable-reverse/","title":"@ende/text/unstable-reverse"},{"url":"/runtime/reference/std/text/unstable-reverse/~/ReverseOptions/","title":"ReverseOptions","description":"@ende/text/unstable-reverse: Options for reverse"},{"url":"/runtime/reference/std/text/unstable-reverse/~/reverse/","title":"reverse","description":"@ende/text/unstable-reverse: Performs a Unicode-aware string reversal."},{"url":"/runtime/reference/std/text/unstable-slugify/","title":"@ende/text/unstable-slugify"},{"url":"/runtime/reference/std/text/unstable-slugify/~/ASCII_DIACRITICS_REGEXP/","title":"ASCII_DIACRITICS_REGEXP","description":"@ende/text/unstable-slugify: A regular expression for stripping ASCII diacritics (but not other diacritics) from slugs."},{"url":"/runtime/reference/std/text/unstable-slugify/~/DIACRITICS_REGEXP/","title":"DIACRITICS_REGEXP","description":"@ende/text/unstable-slugify: A regular expression for stripping diacritics from slugs."},{"url":"/runtime/reference/std/text/unstable-slugify/~/NON_ASCII_REGEXP/","title":"NON_ASCII_REGEXP","description":"@ende/text/unstable-slugify: A regular expression for stripping non-ASCII characters from slugs."},{"url":"/runtime/reference/std/text/unstable-slugify/~/NON_WORD_REGEXP/","title":"NON_WORD_REGEXP","description":"@ende/text/unstable-slugify: A regular expression for stripping non-word characters from slugs."},{"url":"/runtime/reference/std/text/unstable-slugify/~/SlugifyOptions/","title":"SlugifyOptions","description":"@ende/text/unstable-slugify: Options for slugify."},{"url":"/runtime/reference/std/text/unstable-slugify/~/slugify/","title":"slugify","description":"@ende/text/unstable-slugify: Converts a string into a slug."},{"url":"/runtime/reference/std/text/unstable-to-constant-case/","title":"@ende/text/unstable-to-constant-case"},{"url":"/runtime/reference/std/text/unstable-to-constant-case/~/toConstantCase/","title":"toConstantCase","description":"@ende/text/unstable-to-constant-case: Converts a string into CONSTANT_CASE (also known as SCREAMING_SNAKE_CASE)."},{"url":"/runtime/reference/std/text/unstable-to-sentence-case/","title":"@ende/text/unstable-to-sentence-case"},{"url":"/runtime/reference/std/text/unstable-to-sentence-case/~/BaseTitleCaseOptions/","title":"BaseTitleCaseOptions","description":"@ende/text/unstable-to-sentence-case: Base options for title-case functions"},{"url":"/runtime/reference/std/text/unstable-to-sentence-case/~/SentenceCaseOptions/","title":"SentenceCaseOptions","description":"@ende/text/unstable-to-sentence-case: Options for toSentenceCase"},{"url":"/runtime/reference/std/text/unstable-to-sentence-case/~/toSentenceCase/","title":"toSentenceCase","description":"@ende/text/unstable-to-sentence-case: Converts a string into Sentence Case."},{"url":"/runtime/reference/std/text/unstable-to-title-case/","title":"@ende/text/unstable-to-title-case"},{"url":"/runtime/reference/std/text/unstable-to-title-case/~/ExcludeWordConfig/","title":"ExcludeWordConfig","description":"@ende/text/unstable-to-title-case: A filter function or array of stop words to exclude them from title casing, or multiple filter functions and stop word arrays to combine for filtering."},{"url":"/runtime/reference/std/text/unstable-to-title-case/~/ExcludeWordFilter/","title":"ExcludeWordFilter","description":"@ende/text/unstable-to-title-case: A function that filters words in the string. If a word returns `true` from this function, it will not be title-cased."},{"url":"/runtime/reference/std/text/unstable-to-title-case/~/TitleCaseOptions/","title":"TitleCaseOptions","description":"@ende/text/unstable-to-title-case: Options for toTitleCase"},{"url":"/runtime/reference/std/text/unstable-to-title-case/~/TrailingCase/","title":"TrailingCase","description":"@ende/text/unstable-to-title-case: The case for the remaining characters in the string"},{"url":"/runtime/reference/std/text/unstable-to-title-case/~/toTitleCase/","title":"toTitleCase","description":"@ende/text/unstable-to-title-case: Converts a string into Title Case."},{"url":"/runtime/reference/std/text/unstable-trim-by/","title":"@ende/text/unstable-trim-by"},{"url":"/runtime/reference/std/text/unstable-trim-by/~/TrimPattern/","title":"TrimPattern","description":"@ende/text/unstable-trim-by: A pattern that can be used to trim characters from an input string. - If `string`, trim all substrings equal to the string. - If `Iterable<string>`, trim all substrings equal to any member. - If `RegExp`, trim all substrings that match the regex."},{"url":"/runtime/reference/std/text/unstable-trim-by/~/trimBy/","title":"trimBy","description":"@ende/text/unstable-trim-by: Trims all instances of the specified pattern at the start and end of the string."},{"url":"/runtime/reference/std/text/unstable-trim-by/~/trimEndBy/","title":"trimEndBy","description":"@ende/text/unstable-trim-by: Trims all instances of the specified pattern at the end of the string."},{"url":"/runtime/reference/std/text/unstable-trim-by/~/trimStartBy/","title":"trimStartBy","description":"@ende/text/unstable-trim-by: Trims all instances of the specified pattern at the start of the string."},{"url":"/runtime/reference/std/text/word-similarity-sort/","title":"@ende/text/word-similarity-sort"},{"url":"/runtime/reference/std/text/~/ClosestStringOptions/","title":"ClosestStringOptions","description":"@ende/text: Options for closestString."},{"url":"/runtime/reference/std/text/~/CompareSimilarityOptions/","title":"CompareSimilarityOptions","description":"@ende/text: Options for compareSimilarity."},{"url":"/runtime/reference/std/text/~/TruncateOptions/","title":"TruncateOptions","description":"@ende/text: Options for truncate."},{"url":"/runtime/reference/std/text/~/WordSimilaritySortOptions/","title":"WordSimilaritySortOptions","description":"@ende/text: Options for wordSimilaritySort."},{"url":"/runtime/reference/std/text/~/closestString/","title":"closestString","description":"@ende/text: Finds the most similar string from an array of strings."},{"url":"/runtime/reference/std/text/~/compareSimilarity/","title":"compareSimilarity","description":"@ende/text: Takes a string and generates a comparator function to determine which of two strings is more similar to the given one."},{"url":"/runtime/reference/std/text/~/levenshteinDistance/","title":"levenshteinDistance","description":"@ende/text: Calculates the Levenshtein distance between two strings."},{"url":"/runtime/reference/std/text/~/toCamelCase/","title":"toCamelCase","description":"@ende/text: Converts a string into camelCase."},{"url":"/runtime/reference/std/text/~/toKebabCase/","title":"toKebabCase","description":"@ende/text: Converts a string into kebab-case."},{"url":"/runtime/reference/std/text/~/toPascalCase/","title":"toPascalCase","description":"@ende/text: Converts a string into PascalCase."},{"url":"/runtime/reference/std/text/~/toSnakeCase/","title":"toSnakeCase","description":"@ende/text: Converts a string into snake_case."},{"url":"/runtime/reference/std/text/~/truncate/","title":"truncate","description":"@ende/text: Truncates a string to at most `maxLength` UTF-16 code units. When truncation occurs the suffix is included within the `maxLength` budget. Surrogate pairs are never split, so the result may be shorter than `maxLength` when a cut would land inside a pair. When the suffix itself contains surrogate pairs and `maxLength` is very small, the result can even be empty."},{"url":"/runtime/reference/std/text/~/wordSimilaritySort/","title":"wordSimilaritySort","description":"@ende/text: Sorts a string-array by similarity to a given string."},{"url":"/runtime/reference/std/toml/","title":"@ende/toml","description":"parse and stringify for handling TOML encoded data."},{"url":"/runtime/reference/std/toml/parse/","title":"@ende/toml/parse"},{"url":"/runtime/reference/std/toml/stringify/","title":"@ende/toml/stringify"},{"url":"/runtime/reference/std/toml/~/StringifyOptions/","title":"StringifyOptions","description":"@ende/toml: Options for stringify."},{"url":"/runtime/reference/std/toml/~/parse/","title":"parse","description":"@ende/toml: Parses a TOML string into an object."},{"url":"/runtime/reference/std/toml/~/stringify/","title":"stringify","description":"@ende/toml: Converts an object to a TOML string."},{"url":"/runtime/reference/std/ulid/","title":"@ende/ulid","description":"Utilities for generating and working with Universally Unique Lexicographically Sortable Identifiers (ULIDs)."},{"url":"/runtime/reference/std/ulid/decode-time/","title":"@ende/ulid/decode-time"},{"url":"/runtime/reference/std/ulid/monotonic-ulid/","title":"@ende/ulid/monotonic-ulid"},{"url":"/runtime/reference/std/ulid/ulid/","title":"@ende/ulid/ulid"},{"url":"/runtime/reference/std/ulid/~/decodeTime/","title":"decodeTime","description":"@ende/ulid: Extracts the number of milliseconds since the Unix epoch that had passed when the ULID was generated. If the ULID is malformed, an error will be thrown."},{"url":"/runtime/reference/std/ulid/~/monotonicUlid/","title":"monotonicUlid","description":"@ende/ulid: Generate a ULID that monotonically increases even for the same millisecond, optionally passing the current time. If the current time is not passed, it will default to `Date.now()`."},{"url":"/runtime/reference/std/ulid/~/ulid/","title":"ulid","description":"@ende/ulid: Generate a ULID, optionally based on a given timestamp. If the timestamp is not passed, it will default to `Date.now()`."},{"url":"/runtime/reference/std/uuid/","title":"@ende/uuid","description":"Generators and validators for RFC 9562 UUIDs for versions v1, v3, v4, v5, v6 and v7."},{"url":"/runtime/reference/std/uuid/common/","title":"@ende/uuid/common"},{"url":"/runtime/reference/std/uuid/constants/","title":"@ende/uuid/constants"},{"url":"/runtime/reference/std/uuid/unstable-v6/","title":"@ende/uuid/unstable-v6"},{"url":"/runtime/reference/std/uuid/unstable-v6/~/GenerateOptions/","title":"GenerateOptions","description":"@ende/uuid/unstable-v6: Options for generate."},{"url":"/runtime/reference/std/uuid/unstable-v6/~/generate/","title":"generate","description":"@ende/uuid/unstable-v6: Generates a UUIDv6."},{"url":"/runtime/reference/std/uuid/unstable-v6/~/validate/","title":"validate","description":"@ende/uuid/unstable-v6: Determines whether a string is a valid UUIDv6."},{"url":"/runtime/reference/std/uuid/v1/","title":"@ende/uuid/v1"},{"url":"/runtime/reference/std/uuid/v1/~/GenerateOptions/","title":"GenerateOptions","description":"@ende/uuid/v1: Options for generate."},{"url":"/runtime/reference/std/uuid/v1/~/generate/","title":"generate","description":"@ende/uuid/v1: Generates a UUIDv1."},{"url":"/runtime/reference/std/uuid/v1/~/validate/","title":"validate","description":"@ende/uuid/v1: Determines whether a string is a valid UUIDv1."},{"url":"/runtime/reference/std/uuid/v3/","title":"@ende/uuid/v3"},{"url":"/runtime/reference/std/uuid/v3/~/generate/","title":"generate","description":"@ende/uuid/v3: Generates a UUIDv3."},{"url":"/runtime/reference/std/uuid/v3/~/validate/","title":"validate","description":"@ende/uuid/v3: Determines whether a string is a valid UUIDv3."},{"url":"/runtime/reference/std/uuid/v4/","title":"@ende/uuid/v4"},{"url":"/runtime/reference/std/uuid/v4/~/validate/","title":"validate","description":"@ende/uuid/v4: Determines whether a string is a valid UUIDv4."},{"url":"/runtime/reference/std/uuid/v5/","title":"@ende/uuid/v5"},{"url":"/runtime/reference/std/uuid/v5/~/generate/","title":"generate","description":"@ende/uuid/v5: Generates a UUIDv5."},{"url":"/runtime/reference/std/uuid/v5/~/validate/","title":"validate","description":"@ende/uuid/v5: Determines whether a string is a valid UUIDv5."},{"url":"/runtime/reference/std/uuid/v7/","title":"@ende/uuid/v7","description":"Functions for working with UUID Version 7 strings."},{"url":"/runtime/reference/std/uuid/v7/~/extractTimestamp/","title":"extractTimestamp","description":"@ende/uuid/v7: Extracts the timestamp from a UUIDv7."},{"url":"/runtime/reference/std/uuid/v7/~/generate/","title":"generate","description":"@ende/uuid/v7: Generates a UUIDv7."},{"url":"/runtime/reference/std/uuid/v7/~/validate/","title":"validate","description":"@ende/uuid/v7: Determines whether a string is a valid UUIDv7."},{"url":"/runtime/reference/std/uuid/~/NAMESPACE_DNS/","title":"NAMESPACE_DNS","description":"@ende/uuid: Name string is a fully-qualified domain name."},{"url":"/runtime/reference/std/uuid/~/NAMESPACE_OID/","title":"NAMESPACE_OID","description":"@ende/uuid: Name string is an ISO OID."},{"url":"/runtime/reference/std/uuid/~/NAMESPACE_URL/","title":"NAMESPACE_URL","description":"@ende/uuid: Name string is a URL."},{"url":"/runtime/reference/std/uuid/~/NAMESPACE_X500/","title":"NAMESPACE_X500","description":"@ende/uuid: Name string is an X.500 DN (in DER or a text output format)."},{"url":"/runtime/reference/std/uuid/~/NIL_UUID/","title":"NIL_UUID","description":"@ende/uuid: The nil UUID is special form of UUID that is specified to have all 128 bits set to zero."},{"url":"/runtime/reference/std/uuid/~/isNil/","title":"isNil","description":"@ende/uuid: Determines whether the UUID is the nil UUID."},{"url":"/runtime/reference/std/uuid/~/v1/","title":"v1","description":"@ende/uuid: Generator and validator for UUIDv1."},{"url":"/runtime/reference/std/uuid/~/v3/","title":"v3","description":"@ende/uuid: Generator and validator for UUIDv3."},{"url":"/runtime/reference/std/uuid/~/v4/","title":"v4","description":"@ende/uuid: Validator for UUIDv4."},{"url":"/runtime/reference/std/uuid/~/v5/","title":"v5","description":"@ende/uuid: Generator and validator for UUIDv5."},{"url":"/runtime/reference/std/uuid/~/v7/","title":"v7","description":"@ende/uuid: Generator and validator for UUIDv7"},{"url":"/runtime/reference/std/uuid/~/validate/","title":"validate","description":"@ende/uuid: Determines whether a string is a valid UUID."},{"url":"/runtime/reference/std/uuid/~/version/","title":"version","description":"@ende/uuid: Detect RFC version of a UUID."},{"url":"/runtime/reference/std/webgpu/","title":"@ende/webgpu","description":"Utilities for interacting with the WebGPU API."},{"url":"/runtime/reference/std/webgpu/create-capture/","title":"@ende/webgpu/create-capture"},{"url":"/runtime/reference/std/webgpu/describe-texture-format/","title":"@ende/webgpu/describe-texture-format"},{"url":"/runtime/reference/std/webgpu/row-padding/","title":"@ende/webgpu/row-padding"},{"url":"/runtime/reference/std/webgpu/texture-with-data/","title":"@ende/webgpu/texture-with-data"},{"url":"/runtime/reference/std/webgpu/~/BYTES_PER_PIXEL/","title":"BYTES_PER_PIXEL","description":"@ende/webgpu: Number of bytes per pixel."},{"url":"/runtime/reference/std/webgpu/~/COPY_BYTES_PER_ROW_ALIGNMENT/","title":"COPY_BYTES_PER_ROW_ALIGNMENT","description":"@ende/webgpu: Buffer-Texture copies must have [`bytes_per_row`] aligned to this number."},{"url":"/runtime/reference/std/webgpu/~/CreateCapture/","title":"CreateCapture","description":"@ende/webgpu: Return value for createCapture."},{"url":"/runtime/reference/std/webgpu/~/Padding/","title":"Padding","description":"@ende/webgpu: Return value for getRowPadding."},{"url":"/runtime/reference/std/webgpu/~/TextureFormatInfo/","title":"TextureFormatInfo","description":"@ende/webgpu: Return type for describeTextureFormat."},{"url":"/runtime/reference/std/webgpu/~/createTextureWithData/","title":"createTextureWithData","description":"@ende/webgpu: Create a GPUTexture with data."},{"url":"/runtime/reference/std/webgpu/~/describeTextureFormat/","title":"describeTextureFormat","description":"@ende/webgpu: Get various information about a specific GPUTextureFormat."},{"url":"/runtime/reference/std/webgpu/~/getRowPadding/","title":"getRowPadding","description":"@ende/webgpu: Calculates the number of bytes including necessary padding when passing a GPUImageCopyBuffer."},{"url":"/runtime/reference/std/webgpu/~/resliceBufferWithPadding/","title":"resliceBufferWithPadding","description":"@ende/webgpu: Creates a new buffer while removing any unnecessary empty bytes. Useful for when wanting to save an image as a specific format."},{"url":"/runtime/reference/std/xml/","title":"@ende/xml","description":"XML parsing and serialization for Ende."},{"url":"/runtime/reference/std/xml/parse-records/","title":"@ende/xml/parse-records","description":"Async-generator adapter that turns an XML chunk source into a stream of application-defined records assembled inside SAX-style event callbacks."},{"url":"/runtime/reference/std/xml/parse-stream/","title":"@ende/xml/parse-stream","description":"Streaming XML parser with callback-based API for maximum throughput."},{"url":"/runtime/reference/std/xml/parse/","title":"@ende/xml/parse","description":"Builds an in-memory XML document tree from a string."},{"url":"/runtime/reference/std/xml/stringify/","title":"@ende/xml/stringify","description":"XML serialization module."},{"url":"/runtime/reference/std/xml/types/","title":"@ende/xml/types","description":"Type definitions for the XML parser and serializer."},{"url":"/runtime/reference/std/xml/~/BaseParseOptions/","title":"BaseParseOptions","description":"@ende/xml: Base options shared by parsing functions."},{"url":"/runtime/reference/std/xml/~/ParseOptions/","title":"ParseOptions","description":"@ende/xml: Options for parse."},{"url":"/runtime/reference/std/xml/~/ParseStreamOptions/","title":"ParseStreamOptions","description":"@ende/xml: Options for parseXmlStream."},{"url":"/runtime/reference/std/xml/~/StringifyOptions/","title":"StringifyOptions","description":"@ende/xml: Options for stringify."},{"url":"/runtime/reference/std/xml/~/XmlAttributeIterator/","title":"XmlAttributeIterator","description":"@ende/xml: Reusable attribute accessor that avoids allocating attribute object arrays."},{"url":"/runtime/reference/std/xml/~/XmlCDataNode/","title":"XmlCDataNode","description":"@ende/xml: A CDATA section node in the XML tree."},{"url":"/runtime/reference/std/xml/~/XmlCommentNode/","title":"XmlCommentNode","description":"@ende/xml: A comment node in the XML tree."},{"url":"/runtime/reference/std/xml/~/XmlContentCallback/","title":"XmlContentCallback","description":"@ende/xml: Callback for text, CDATA, or comment content with position."},{"url":"/runtime/reference/std/xml/~/XmlDeclaration/","title":"XmlDeclaration","description":"@ende/xml: The XML declaration of a document, exposed as XmlDocument.declaration."},{"url":"/runtime/reference/std/xml/~/XmlDeclarationCallback/","title":"XmlDeclarationCallback","description":"@ende/xml: Callback for XML declarations."},{"url":"/runtime/reference/std/xml/~/XmlDoctypeCallback/","title":"XmlDoctypeCallback","description":"@ende/xml: Callback for DOCTYPE declarations."},{"url":"/runtime/reference/std/xml/~/XmlDocument/","title":"XmlDocument","description":"@ende/xml: A parsed XML document."},{"url":"/runtime/reference/std/xml/~/XmlElement/","title":"XmlElement","description":"@ende/xml: An element node in the XML tree."},{"url":"/runtime/reference/std/xml/~/XmlEventCallbacks/","title":"XmlEventCallbacks","description":"@ende/xml: Callbacks for event-level output - enables zero-allocation event emission."},{"url":"/runtime/reference/std/xml/~/XmlName/","title":"XmlName","description":"@ende/xml: A qualified XML name with optional namespace prefix and resolved URI."},{"url":"/runtime/reference/std/xml/~/XmlNode/","title":"XmlNode","description":"@ende/xml: Discriminated union of all node types in an XML tree."},{"url":"/runtime/reference/std/xml/~/XmlPosition/","title":"XmlPosition","description":"@ende/xml: Position information for error reporting."},{"url":"/runtime/reference/std/xml/~/XmlProcessingInstructionCallback/","title":"XmlProcessingInstructionCallback","description":"@ende/xml: Callback for processing instructions."},{"url":"/runtime/reference/std/xml/~/XmlSyntaxError/","title":"XmlSyntaxError","description":"@ende/xml: Error thrown when XML parsing fails."},{"url":"/runtime/reference/std/xml/~/XmlTextNode/","title":"XmlTextNode","description":"@ende/xml: A text node in the XML tree."},{"url":"/runtime/reference/std/xml/~/isCData/","title":"isCData","description":"@ende/xml: Type guard to check if a node is a CDATA node."},{"url":"/runtime/reference/std/xml/~/isComment/","title":"isComment","description":"@ende/xml: Type guard to check if a node is a comment."},{"url":"/runtime/reference/std/xml/~/isElement/","title":"isElement","description":"@ende/xml: Type guard to check if a node is an element."},{"url":"/runtime/reference/std/xml/~/isText/","title":"isText","description":"@ende/xml: Type guard to check if a node is a text node."},{"url":"/runtime/reference/std/xml/~/parse/","title":"parse","description":"@ende/xml: Parses an XML string into a document tree."},{"url":"/runtime/reference/std/xml/~/parseXmlRecords/","title":"parseXmlRecords","description":"@ende/xml: Parses an async iterable of XML chunks and yields records assembled inside SAX-style event callbacks."},{"url":"/runtime/reference/std/xml/~/parseXmlRecordsFromBytes/","title":"parseXmlRecordsFromBytes","description":"@ende/xml: Parses an async iterable of XML byte chunks and yields records assembled inside SAX-style event callbacks."},{"url":"/runtime/reference/std/xml/~/parseXmlStream/","title":"parseXmlStream","description":"@ende/xml: Parse XML from a stream with maximum throughput using direct callbacks."},{"url":"/runtime/reference/std/xml/~/parseXmlStreamFromBytes/","title":"parseXmlStreamFromBytes","description":"@ende/xml: Parse XML from a byte stream with maximum throughput using direct callbacks."},{"url":"/runtime/reference/std/xml/~/stringify/","title":"stringify","description":"@ende/xml: Converts an XML document or element to an XML string."},{"url":"/runtime/reference/std/yaml/","title":"@ende/yaml","description":"parse and stringify for handling YAML encoded data."},{"url":"/runtime/reference/std/yaml/parse/","title":"@ende/yaml/parse"},{"url":"/runtime/reference/std/yaml/stringify/","title":"@ende/yaml/stringify"},{"url":"/runtime/reference/std/yaml/types/","title":"@ende/yaml/types","description":"Type definitions for the YAML parser."},{"url":"/runtime/reference/std/yaml/unstable-parse/","title":"@ende/yaml/unstable-parse"},{"url":"/runtime/reference/std/yaml/unstable-parse/~/ImplicitType/","title":"ImplicitType","description":"@ende/yaml/unstable-parse: A type that can be implicitly resolved (i.e. without using a tag) when loading a YAML document."},{"url":"/runtime/reference/std/yaml/unstable-parse/~/KindType/","title":"KindType","description":"@ende/yaml/unstable-parse: The kind of YAML node."},{"url":"/runtime/reference/std/yaml/unstable-parse/~/ParseOptions/","title":"ParseOptions","description":"@ende/yaml/unstable-parse: Options for parse."},{"url":"/runtime/reference/std/yaml/unstable-parse/~/RepresentFn/","title":"RepresentFn","description":"@ende/yaml/unstable-parse: Function to convert data to a string for YAML serialization."},{"url":"/runtime/reference/std/yaml/unstable-parse/~/Type/","title":"Type","description":"@ende/yaml/unstable-parse: A type definition for a YAML node."},{"url":"/runtime/reference/std/yaml/unstable-parse/~/parse/","title":"parse","description":"@ende/yaml/unstable-parse: Parse and return a YAML string as a parsed YAML document object."},{"url":"/runtime/reference/std/yaml/unstable-parse/~/parseAll/","title":"parseAll","description":"@ende/yaml/unstable-parse: Same as parse, but understands multi-document YAML sources, and returns multiple parsed YAML document objects."},{"url":"/runtime/reference/std/yaml/unstable-stringify/","title":"@ende/yaml/unstable-stringify"},{"url":"/runtime/reference/std/yaml/unstable-stringify/~/StringifyOptions/","title":"StringifyOptions","description":"@ende/yaml/unstable-stringify: Options for stringify."},{"url":"/runtime/reference/std/yaml/unstable-stringify/~/stringify/","title":"stringify","description":"@ende/yaml/unstable-stringify: Converts a JavaScript object or value to a YAML document string."},{"url":"/runtime/reference/std/yaml/~/ParseOptions/","title":"ParseOptions","description":"@ende/yaml: Options for parse."},{"url":"/runtime/reference/std/yaml/~/SchemaType/","title":"SchemaType","description":"@ende/yaml: Name of the schema to use."},{"url":"/runtime/reference/std/yaml/~/StringifyOptions/","title":"StringifyOptions","description":"@ende/yaml: Options for stringify."},{"url":"/runtime/reference/std/yaml/~/StyleVariant/","title":"StyleVariant","description":"@ende/yaml: The style variation for `styles` option of stringify"},{"url":"/runtime/reference/std/yaml/~/YamlPosition/","title":"YamlPosition","description":"@ende/yaml: Position information for error reporting."},{"url":"/runtime/reference/std/yaml/~/YamlSyntaxError/","title":"YamlSyntaxError","description":"@ende/yaml: Error thrown when YAML parsing fails."},{"url":"/runtime/reference/std/yaml/~/parse/","title":"parse","description":"@ende/yaml: Parse and return a YAML string as a parsed YAML document object."},{"url":"/runtime/reference/std/yaml/~/parseAll/","title":"parseAll","description":"@ende/yaml: Same as parse, but understands multi-document YAML sources, and returns multiple parsed YAML document objects."},{"url":"/runtime/reference/std/yaml/~/stringify/","title":"stringify","description":"@ende/yaml: Converts a JavaScript object or value to a YAML document string."},{"url":"/runtime/reference/ts_config_migration/","title":"Configuring TypeScript","description":"A guide to TypeScript configuration in Ende. Learn about compiler options, type checking JavaScript, JSDoc support, type declarations, and configuring TypeScript for cross-platform compatibility.","headings":[{"text":"Configuring TypeScript in Ende","slug":"configuring-typescript-in-ende"},{"text":"tsconfig.json compatibility","slug":"tsconfigjson-compatibility"},{"text":"TS Compiler Options","slug":"ts-compiler-options"},{"text":"Using the \"lib\" property","slug":"using-the-lib-property"},{"text":"Targeting Ende and the Browser","slug":"targeting-ende-and-the-browser"},{"text":"Types and Type Declarations","slug":"types-and-type-declarations"},{"text":"Type Checking Web Workers","slug":"type-checking-web-workers"},{"text":"Triple-slash directives","slug":"triple-slash-directives"},{"text":"Providing \"lib\" setting in ende.json","slug":"providing-lib-setting-in-endejson"},{"text":"Important points","slug":"important-points"},{"text":"Type declaration semantics","slug":"type-declaration-semantics"},{"text":"Behavior of JavaScript when type checking","slug":"behavior-of-javascript-when-type-checking"},{"text":"Internals","slug":"internals"}],"text":"This page covers advanced TypeScript configuration in Ende, including compiler options, tsconfig.json compatibility, and library targeting. For an introduction to using TypeScript with Ende, see TypeScript support. Ende aims to simplify TypeScript configuration based on the following design choices: Strict and modern defaults for type-checking rules. Allowing the omission of settings relating to the target runtime or compatibility, leveraging direct integration with the execution environment. Project references using ende.json directory scopes. The last point presents a simpler format than tsconfig.json's references and extends fields, replacing them with ende.json workspaces and root-member inheritance. See the section on type checking in workspaces. While using tsconfig.json files is not recommended for Ende projects, existing TypeScript workspaces using them will work out-of-the-box under Ende's type checker and LSP. Each workspace directory containing an ende.json is probed for a tsconfig.json. If it exists, it is added as a 'root' project reference and contained references are included recursively. As with tsc, the scope of a TSConfig is determined by its root fields. In case of overlap: A reference takes precedence over its referrer. For root references, foo/bar/tsconfig.json takes precedence over foo/tsconfig.json. If a parent ende.json contains compilerOptions, that will take precedence over any TSConfig. The following fields are supported: Except for compilerOptions, these fields cannot be specified in ende.json. You may be forced to use a tsconfig.json file when, for example, the required granularity for include cannot be represented with ende.json workspaces and directory scopes. Here is a table of compiler options that can be changed, their default in Ende and any other notes about that option: Option Default Notes allowUnreachableCode false allowUnusedLabels false baseUrl \"./\" This is used for resolving bare specifier entries in paths and rootDirs, but"},{"url":"/runtime/reference/wasm/","title":"WebAssembly","description":"A guide to using WebAssembly (Wasm) in Ende. Learn about module imports, type checking, streaming APIs, optimization techniques, and how to work with various programming languages that compile to Wasm.","headings":[{"text":"Wasm modules","slug":"wasm-modules"},{"text":"Type Checking","slug":"type-checking"},{"text":"Imports","slug":"imports"},{"text":"Overriding import specifiers","slug":"overriding-import-specifiers"},{"text":"Using WebAssembly via the WebAssembly API","slug":"using-webassembly-via-the-webassembly-api"},{"text":"Using the Streaming WebAssembly APIs","slug":"using-the-streaming-webassembly-apis"},{"text":"WebAssembly API","slug":"webassembly-api"},{"text":"Working with Non-Numeric Types","slug":"working-with-non-numeric-types"},{"text":"Using wasmbuild for Rust WebAssembly in Ende","slug":"using-wasmbuild-for-rust-webassembly-in-ende"},{"text":"Optimization","slug":"optimization"}],"text":"Designed to be used alongside JavaScript to speed up key application components, WebAssembly (Wasm) can have much higher, and more consistent execution speed than JavaScript - similar to C, C++, or Rust. Ende can execute WebAssembly modules with the same interfaces that browsers provide and by importing them as modules. WebAssembly modules can be imported and their use is type checked. Say we have a WebAssembly text format file that exports an add function that adds two numbers and returns the result: We can compile this to add.wasm via wat2wasm: Then use this WebAssembly module via an import statement: Ende understands the exports of Wasm modules and type checks their use. If we call the add function incorrectly in the previous example, we'll see a type checking error. Like JavaScript, Wasm modules can also import other modules. For example, we can create a Wasm module that imports the \"./values.js\" specifier and calls the getValue export: Now running: Often Wasm modules don't use a relative specifier to make importing another JavaScript module convenient. Say we have the following similar setup to before, but notice that the Wasm module is importing via the \"env\" specifier. That's not super convenient because we want it to import \"./env.ts\". Luckily, it's pretty simple to make this work by mapping the specifier in an import map via the ende.json: Now it works: To run WebAssembly in Ende, all you need is a Wasm module to run. The following module exports a main function that just returns 42 upon invocation: In order to load WebAssembly via the WebAssembly API, the following steps need to be performed: Fetching the binary (usually in the form of a .wasm file, though we are using a simple byte array for now) Compiling the binary into a WebAssembly.Module object Instantiating the WebAssembly module WebAssembly is a binary data format, not intended to be human readable, nor to be written by hand. Your .wasm files should be generated by a compiler for a language such as"},{"url":"/runtime/reference/web_platform_apis/","title":"Web Platform APIs","description":"A guide to the Web Platform APIs available in Ende. Learn about fetch, events, workers, storage, and other web standard APIs, including implementation details and deviations from browser specifications.","headings":[{"text":"fetch","slug":"fetch"},{"text":"Spec deviations","slug":"spec-deviations"},{"text":"Fetching local files","slug":"fetching-local-files"},{"text":"Structured Clone & Transferable Objects","slug":"structured-clone--transferable-objects"},{"text":"Serializable types","slug":"serializable-types"},{"text":"Transferable types","slug":"transferable-types"},{"text":"CustomEvent and EventTarget","slug":"customevent-and-eventtarget"},{"text":"Spec deviations","slug":"spec-deviations-1"},{"text":"Typings","slug":"typings"},{"text":"Location","slug":"location"},{"text":"Location flag","slug":"location-flag"},{"text":"Extended usage","slug":"extended-usage"},{"text":"Fetch API","slug":"fetch-api"},{"text":"Worker modules","slug":"worker-modules"},{"text":"Web Storage","slug":"web-storage"},{"text":"Web Workers","slug":"web-workers"},{"text":"Sending messages back to the main thread","slug":"sending-messages-back-to-the-main-thread"},{"text":"Instantiation permissions","slug":"instantiation-permissions"},{"text":"Using Ende in a worker","slug":"using-ende-in-a-worker"},{"text":"Specifying worker permissions","slug":"specifying-worker-permissions"},{"text":"OffscreenCanvas","slug":"offscreencanvas"},{"text":"Supported rendering contexts","slug":"supported-rendering-contexts"},{"text":"Example: encoding an image to PNG","slug":"example-encoding-an-image-to-png"},{"text":"Geometry Interfaces","slug":"geometry-interfaces"},{"text":"navigator","slug":"navigator"},{"text":"Temporal","slug":"temporal"},{"text":"CompressionStream and DecompressionStream","slug":"compressionstream-and-decompressionstream"},{"text":"Supported formats","slug":"supported-formats"},{"text":"Web Crypto","slug":"web-crypto"},{"text":"Feature detection","slug":"feature-detection"},{"text":"SHA-3 hash algorithms","slug":"sha-3-hash-algorithms"},{"text":"Extendable-output functions","slug":"extendable-output-functions"},{"text":"KMAC","slug":"kmac"},{"text":"Argon2","slug":"argon2"},{"text":"ChaCha20-Poly1305","slug":"chacha20-poly1305"},{"text":"Post-quantum cryptography","slug":"post-quantum-cryptography"},{"text":"ML-DSA signatures","slug":"ml-dsa-signatures"},{"text":"SLH-DSA signatures","slug":"slh-dsa-signatures"},{"text":"ML-KEM key encapsulation","slug":"ml-kem-key-encapsulation"},{"text":"createImageBitmap","slug":"createimagebitmap"},{"text":"Supported input formats","slug":"supported-input-formats"},{"text":"File locking","slug":"file-locking"},{"text":"Deviations of other APIs from spec","slug":"deviations-of-other-apis-from-spec"},{"text":"Cache API","slug":"cache-api"}],"text":"One way Ende simplifies web and cloud development is by using standard Web Platform APIs (like fetch, WebSockets and more) over proprietary APIs. This means if you've ever built for the browser, you're likely already familiar with Ende, and if you're learning Ende, you're also investing in your knowledge of the web. Explore supported Web APIs Below we'll highlight some of the standard Web APIs that Ende supports. To check if a Web Platform API is available in Ende, you can click on the interface on MDN and refer to its Browser Compatibility table. The fetch API can be used to make HTTP requests. It is implemented as specified in the WHATWG fetch spec. The Ende user agent does not have a cookie jar. As such, the set-cookie header on a response is not processed, or filtered from the visible response headers. Ende does not follow the same-origin policy, because the Ende user agent currently does not have the concept of origins, and it does not have a cookie jar. This means Ende does not need to protect against leaking authenticated data cross origin. Because of this Ende does not implement the following sections of the WHATWG fetch specification: Section 3.1. 'Origin' header. Section 3.2. CORS protocol. Section 3.5. CORB. Section 3.6. 'Cross-Origin-Resource-Policy' header. Atomic HTTP redirect handling. The opaqueredirect response type. A fetch with a redirect mode of manual will return a basic response rather than an opaqueredirect response. The specification is vague on how file: URLs are to be handled. Firefox is the only mainstream browser that implements fetching file: URLs, and even then it doesn't work by default. Ende supports fetching local files. See the next section for details. The request and response header guards are implemented, but unlike browsers do not have any constraints on which header names are allowed. The referrer, referrerPolicy, mode, credentials, cache, integrity, keepalive, and window properties and their relevant behaviours in RequestInit"},{"url":"/runtime/run/","title":"Run code","description":"Run JavaScript and TypeScript with Ende: the secure-by-default permission model, running files, URLs and stdin, script arguments, watch mode, and project tasks.","headings":[{"text":"Run a file","slug":"run-a-file"},{"text":"Permissions: secure by default","slug":"permissions-secure-by-default"},{"text":"Passing script arguments","slug":"passing-script-arguments"},{"text":"Argument and flag ordering","slug":"argument-and-flag-ordering"},{"text":"Run from a URL or stdin","slug":"run-from-a-url-or-stdin"},{"text":"Reload on change with watch mode","slug":"reload-on-change-with-watch-mode"},{"text":"Run project tasks","slug":"run-project-tasks"},{"text":"Try code quickly","slug":"try-code-quickly"},{"text":"Going further","slug":"going-further"}],"text":"Ende runs JavaScript and TypeScript directly (no build step, no config) behind a security sandbox that grants access only when you ask for it. This page covers how your code actually runs: permissions, the ways to launch it, watch mode, and tasks. Point Ende at a file. TypeScript runs as-is: ende run is explicit, but you can drop run for a file or task and Ende will figure it out: This is the part that's different from Node. Code runs in a sandbox with no access to the network, filesystem, environment, or subprocesses until you grant it. A script that tries to read a file without permission stops and asks, or fails if prompts are disabled. Grant access with --allow-* flags (each has a short form), and scope them down to exactly what's needed: Use --deny-* to carve out exceptions, or -A / --allow-all to skip the sandbox entirely. That is handy in trusted environments, but it gives up the guarantees. See Permissions for every flag and Security for the model behind them. Arguments for your own script go after the script name; Ende passes them through in Ende.args: For anything beyond a flat list, parse the arguments with parseArgs from jsr:@ende/cli or parseArgs from node:util. Anything passed after the script name is a script argument, not an Ende runtime flag. This is a common source of confusion, so make sure runtime flags appear before the script name. This leads to the following pitfall: Ende can run code straight from a URL (handy for one-off tools and installers) or from stdin: Remote code is sandboxed like everything else: it gets no permissions unless you grant them. Add --watch and Ende reruns your program whenever a file it depends on changes. No nodemon, no extra dependency: ende test, ende fmt, and others accept --watch too. For what gets watched, excluding paths, and hot module replacement, see Watch mode and HMR. Define repeatable commands in ende.json and run them with ende task: Tasks can run other tasks, set environment variables, and work"},{"url":"/runtime/run/watch_mode/","title":"Watch mode and HMR","description":"Ende's built-in file watcher: re-run code on change with --watch, control what gets watched, and hot-replace modules with --watch-hmr.","headings":[{"text":"Watch mode","slug":"watch-mode"},{"text":"Hot module replacement","slug":"hot-module-replacement"},{"text":"Editors with atomic save","slug":"editors-with-atomic-save"}],"text":"Ende has a built-in file watcher, so you don't need nodemon or any other external tool to reload your program as you edit. This page covers what gets watched, how to exclude paths, and hot module replacement. You can supply the --watch flag to ende run, ende test, and ende fmt to enable the built-in file watcher. The watcher enables automatic reloading of your application whenever changes are detected in the source files. This is particularly useful during development, as it allows you to see the effects of your changes immediately without manually restarting the application. The files that are watched will depend on the subcommand used: for ende run and ende test the entrypoint, and all local files that the entrypoint statically imports will be watched. for ende fmt all local files and directories specified as command line arguments (or the working directory if no specific files/directories is passed) are watched. You can exclude paths or patterns from watching by providing the --watch-exclude flag. The syntax is --watch-exclude=path1,path2. For example: This will exclude file1.ts and file2.ts from being watched. To exclude a pattern, remember to surround it in quotes to prevent your shell from expanding the glob: ende run also supports the --watch-hmr flag, which hot-replaces changed modules in the running process instead of restarting it. This keeps your application's state across edits. If hot replacement fails, the process falls back to a full restart. Because this is such a common development workflow, ende watch is a shorthand for ende run --watch-hmr: Some editors use \"atomic save\" (also called safe write), where the editor writes your changes to a temporary file and then renames it over the original on each save. On Linux this replaces the file with a new one on disk, which can detach the file watcher used by --watch-hmr after the first change. The symptom is that hot replacement works once and then stops detecting further edits to that module. If you hit"},{"url":"/runtime/test/","title":"Testing","description":"Write and run tests with Ende's built-in test runner: assertions, test steps, hooks, filtering, and reporters, with dedicated guides for mocking, snapshots, and coverage.","headings":[{"text":"Writing Tests","slug":"writing-tests"},{"text":"Running Tests","slug":"running-tests"},{"text":"Test Steps","slug":"test-steps"},{"text":"Timeouts","slug":"timeouts"},{"text":"Retrying and repeating tests","slug":"retrying-and-repeating-tests"},{"text":"Parameterized tests","slug":"parameterized-tests"},{"text":"Test Hooks","slug":"test-hooks"},{"text":"Available Hooks","slug":"available-hooks"},{"text":"Hook Execution Order","slug":"hook-execution-order"},{"text":"Examples","slug":"examples"},{"text":"Multiple Hooks","slug":"multiple-hooks"},{"text":"Filtering tests","slug":"filtering-tests"},{"text":"Running affected tests","slug":"running-affected-tests"},{"text":"Tests affected by your git changes","slug":"tests-affected-by-your-git-changes"},{"text":"Tests that depend on specific files","slug":"tests-that-depend-on-specific-files"},{"text":"How selection works","slug":"how-selection-works"},{"text":"Test definition selection","slug":"test-definition-selection"},{"text":"Ignoring/Skipping Tests","slug":"ignoringskipping-tests"},{"text":"Only Run Specific Tests","slug":"only-run-specific-tests"},{"text":"Failing fast","slug":"failing-fast"},{"text":"Reporters","slug":"reporters"},{"text":"Mocking and test doubles","slug":"mocking-and-test-doubles"},{"text":"Coverage","slug":"coverage"},{"text":"Behavior-Driven Development","slug":"behavior-driven-development"},{"text":"Documentation tests","slug":"documentation-tests"},{"text":"Sanitizers","slug":"sanitizers"},{"text":"Snapshot testing","slug":"snapshot-testing"},{"text":"Tests and Permissions","slug":"tests-and-permissions"},{"text":"Related tutorials","slug":"related-tutorials"}],"text":"Ende provides a built-in test runner for writing and running tests in both JavaScript and TypeScript. This makes it easy to ensure your code is reliable and functions as expected without needing to install any additional dependencies or tools. The ende test runner allows you fine-grained control over permissions for each test, ensuring that code does not do anything unexpected. In addition to the built-in test runner, you can also use other test runners from the JS ecosystem, such as Jest, Mocha, or AVA, with Ende. Moving an existing Jest suite over? See Migrating from Jest. To define a test in Ende, you use the Ende.test() function. Here are some examples: If you prefer a \"jest-like\" expect style of assertions, the Ende standard library provides an expect function that can be used in place of assertEquals: To run your tests, use the ende test subcommand. If run without a file name or directory name, this subcommand will automatically find and execute all tests in the current directory (recursively) that match the glob {*_,*.,}test.{ts, tsx, mts, js, mjs, jsx}. Additionally, any script file inside a directory named __tests__ is treated as a test file, regardless of its file name. Ende also supports test steps, which allow you to break down tests into smaller, manageable parts. This is useful for setup and teardown operations within a test: You can set a maximum duration for individual tests using the timeout option. If a test exceeds its deadline it is marked as failed. Both asynchronous hangs (a promise that never resolves) and synchronous hot loops (while (true) {}) are caught. If a test times out the next test in the same file still runs normally. Setting timeout to 0 or omitting it means the test runs without a deadline. Two per-test options control how many times a test runs. retry re-runs a failing test and passes if any attempt passes, which is useful for tolerating a known-flaky test. repeats runs the test several times and requires every run to pass, which"},{"url":"/runtime/test/coverage/","title":"Test coverage","description":"Collect coverage data with ende test --coverage and turn it into terminal summaries, HTML reports, and lcov files for CI with ende coverage.","headings":[{"text":"Collect coverage data","slug":"collect-coverage-data"},{"text":"Collect coverage outside ende test","slug":"collect-coverage-outside-ende-test"},{"text":"Read the report","slug":"read-the-report"},{"text":"Generate an HTML report","slug":"generate-an-html-report"},{"text":"Export lcov for CI","slug":"export-lcov-for-ci"},{"text":"Enforce a coverage threshold","slug":"enforce-a-coverage-threshold"},{"text":"Choose which files appear","slug":"choose-which-files-appear"},{"text":"Ignore code in the report","slug":"ignore-code-in-the-report"},{"text":"Keep going","slug":"keep-going"}],"text":"Code coverage tells you which lines, branches, and functions of your code actually ran while your tests executed. Ende has coverage built in: no instrumentation step, no extra dependencies. The workflow is two commands: ende test --coverage collects the data, and ende coverage turns it into a report. Pass --coverage when you run your tests: This writes raw coverage data into a coverage/ directory as one JSON profile per module. The data comes directly from the V8 JavaScript engine, which tracks execution as your code runs, so the numbers reflect exactly what executed rather than an approximation from source rewriting. Ende also prints a coverage summary table after the test results and writes an lcov.info file and an HTML report into the coverage directory. If you only want the raw profiles, pass --coverage-raw-data-only. To use a different directory, give the flag a value, or set the ENDE_COVERAGE_DIR environment variable: Coverage data accumulates across runs. When you rename or delete files, stale profiles can linger and skew the report, so pass --clean to empty the directory before the tests run: ende run accepts the same --coverage flag, which is useful when the code you want to measure doesn't run under the test runner: integration scripts, CLI invocations of your tool, or a server exercised from the outside. When your tests spawn Ende subprocesses, set the ENDE_COVERAGE_DIR environment variable instead. Child processes inherit it, so their execution is collected into the same directory and shows up in the combined report: Point ende coverage at the directory you collected into: For a fresh project created with ende init, which generates a main.ts HTTP handler and a main_test.ts that exercises it, the report looks like this: Each row shows three percentages for a file: Branch %: how many conditional paths (each side of an if, ternary, and so on) were taken Function %: how many declared functions were called at least once Line %: how many executable lines ran"},{"url":"/runtime/test/doc_tests/","title":"Documentation tests","description":"Run the code examples in your JSDoc comments and markdown files as tests with ende test --doc, so your documentation never goes stale.","headings":[{"text":"Example code blocks","slug":"example-code-blocks"},{"text":"Exported items are automatically imported","slug":"exported-items-are-automatically-imported"},{"text":"Hashbang and narrowed permissions","slug":"hashbang-and-narrowed-permissions"},{"text":"Skipping code blocks","slug":"skipping-code-blocks"}],"text":"Ende can evaluate the code snippets written in your JSDoc comments and markdown files and run them as tests. This keeps the examples in your documentation honest: when an API changes, its outdated examples fail in CI instead of misleading readers. The triple backticks mark the start and end of code blocks, the language is determined by the language identifier attribute which may be one of the following: js javascript mjs cjs jsx ts typescript mts cts tsx If no language identifier is specified then the language is inferred from media type of the source document that the code block is extracted from. The above command will extract this example, turn it into a pseudo test case that looks like below: and then run it as a standalone module living in the same directory as the module being documented. If you want to type-check your code snippets in JSDoc and markdown files without actually running them, you can use ende check command with --doc option (for JSDoc) or with --doc-only option (for markdown) instead. Looking at the generated test code above, you will notice that it includes the import statement to import the add function even though the original code block does not have it. When documenting a module, any items exported from the module are automatically included in the generated test code using the same name. Let's say we have the following module: This will get converted to the following test case: If a code example starts with a hashbang, it is validated against supported Ende cli flags, and permissions flags are forwarded to the generated Ende.test. Below is how each permission flag is interpreted: Flag Generated permissions --allow-all Inherits all permissions from ende test --allow-* Inherits the specified permission from ende test --allow-*=… Restrict the specified permission to provided values --deny-* Explicitly revoke the specified permission --deny-*=… Currently unsupported (results in a test failure) --permission-set Currently unsupported (ignored)"},{"url":"/runtime/test/migrate_from_jest/","title":"Migrating from Jest","description":"Move a Jest test suite to ende test: describe/it via @ende/testing/bdd, expect mappings, mock function equivalents, snapshot testing, fake timers, and translating Jest configuration.","headings":[{"text":"The same test, in Ende","slug":"the-same-test-in-ende"},{"text":"What maps to what","slug":"what-maps-to-what"},{"text":"Translate the configuration","slug":"translate-the-configuration"},{"text":"Module mocks","slug":"module-mocks"}],"text":"Most Jest suites translate to ende test without rewriting test logic: the standard library's @ende/testing/bdd module provides the same describe/it structure, and @ende/expect ships the matchers you already use. What changes is a handful of imports and how the runner is configured. A typical Jest test needs only new imports: Unlike Jest, nothing is injected as a global: describe, it, expect, and the hooks are explicit imports, so each file states what it uses. Jest Ende describe, it, beforeEach, … @ende/testing/bdd expect(...) matchers jsr:@ende/expect jest.fn() fn() from jsr:@ende/expect jest.spyOn(obj, \"m\") spy/stub from @ende/testing/mock toMatchSnapshot() assertSnapshot jest.useFakeTimers() FakeTime npx jest ende test npx jest --watch ende test --watch npx jest -t \"name\" ende test --filter \"name\" Jest configuration mostly disappears: TypeScript, JSX, and ES modules work without transforms, so ts-jest, babel-jest, and transform entries have no equivalent to migrate. File selection moves into ende.json: There is no equivalent of jest.mock(\"./module\"), because module records are immutable in Ende. Tests that rely on it migrate to one of: dependency injection: pass the collaborator in, and hand the test a spy or stub, stubbing the object the module exposes, with stub from @ende/testing/mock. This is usually the only part of a migration that requires touching the code under test."},{"url":"/runtime/test/mocking/","title":"Mocking and test doubles","description":"Isolate the code under test with spies, stubs, mocks, and fake time using the Ende Standard Library's @ende/testing package.","headings":[{"text":"Spies","slug":"spies"},{"text":"Stubs","slug":"stubs"},{"text":"Returning a sequence of values","slug":"returning-a-sequence-of-values"},{"text":"Spy, stub, or mock?","slug":"spy-stub-or-mock"},{"text":"Faking time","slug":"faking-time"},{"text":"Choosing the right double","slug":"choosing-the-right-double"},{"text":"Keep going","slug":"keep-going"}],"text":"Unit tests are most useful when they test one thing at a time. Real dependencies, such as databases, HTTP APIs, or the system clock, make tests slow, flaky, and hard to set up. A test double is a controlled stand-in for such a dependency. It lets you verify how your code interacts with the dependency without paying the cost of the real thing. The Ende Standard Library ships everything you need in @ende/testing/mock and @ende/testing/time. A spy wraps a function and records every call: how many times it ran and which arguments it received. Spies do not change the function's behavior, so they are the lightest-touch double available. Here we test a saveUser() function that hands a user off to a database object. Instead of a real database, we pass an object whose save method is a spy: assertSpyCalls checks the total number of calls, while assertSpyCall inspects a single call by index: its arguments, and optionally what it returned. We verified the whole interaction without setting up or tearing down any database state. You can also spy on an existing method of an object. Method spies are disposable, so declare them with the using keyword and they restore the original method automatically when the test ends. No try/finally cleanup is needed: If you cannot use using, call addSpy.restore() in a finally block instead. Either way, restoring spies keeps state from leaking between tests. A stub goes one step further than a spy: it replaces the original implementation entirely. Use stubs to return predetermined values, simulate errors, or keep tests from touching external services. A stub still records its calls, so all the spy assertions work on it too. Like method spies, stubs are disposable. The using keyword restores the original implementation when the stub goes out of scope, and restore() is available when you need manual control. When a stub should answer differently on each call, pass returnsNext with the values in order. This is handy for simulating a missing record, a"},{"url":"/runtime/test/sanitizers/","title":"Test sanitizers","description":"Ende's test sanitizers catch leaking async operations, resources, and surprise exits in your tests. Learn what each sanitizer checks and how to enable them.","headings":[{"text":"Resource sanitizer","slug":"resource-sanitizer"},{"text":"Async operation sanitizer","slug":"async-operation-sanitizer"},{"text":"Enabling sanitizers globally","slug":"enabling-sanitizers-globally"},{"text":"Exit sanitizer","slug":"exit-sanitizer"}],"text":"The ende test runner offers several sanitizers that catch tests misbehaving in ways assertions don't see: leaking async operations, unclosed resources, and unexpected process exits. The resource sanitizer ensures that all I/O resources created during a test are closed, to prevent leaks. I/O resources are things like Ende.FsFile handles, network connections, fetch bodies, timers, and other resources that are not automatically garbage collected. You should always close resources when you are done with them. For example, to close a file: To close a network connection: To close a fetch body: This sanitizer is off by default. Opt in with sanitizeResources: true, or with one of the global mechanisms described in Enabling sanitizers globally. The async operation sanitizer ensures that all async operations started in a test are completed before the test ends. This is important because if an async operation is not awaited, the test will end before the operation is completed, and the test will be marked as successful even if the operation may have actually failed. You should always await all async operations in your tests. For example: This sanitizer is off by default. Opt in with sanitizeOps: true, or with one of the global mechanisms described below. If you want the pre-2.8 behavior (resource and op sanitizers on for every test), you can re-enable them at any of five scopes. Higher-precedence settings override lower ones. Per-test (highest precedence): Per-module with Ende.test.sanitizer(): CLI flags: --sanitize-ops and --sanitize-resources. Environment variables: ENDE_TEST_SANITIZE_OPS=1 and ENDE_TEST_SANITIZE_RESOURCES=1. ende.json (lowest precedence): The exit sanitizer ensures that tested code doesn’t call Ende.exit(), which could signal a false test success. This sanitizer is enabled by default, but can be disabled with sanitizeExit: false."},{"url":"/runtime/test/snapshots/","title":"Snapshot testing","description":"Capture program output as reference snapshots with Ende's built-in test runner, compare against them on every run, and update them with ende test --update-snapshots.","headings":[{"text":"Write your first snapshot test","slug":"write-your-first-snapshot-test"},{"text":"Read the snapshot file","slug":"read-the-snapshot-file"},{"text":"Update snapshots","slug":"update-snapshots"},{"text":"Verify snapshots in CI","slug":"verify-snapshots-in-ci"},{"text":"Control serialization and snapshot location","slug":"control-serialization-and-snapshot-location"},{"text":"When not to snapshot","slug":"when-not-to-snapshot"},{"text":"Keep going","slug":"keep-going"}],"text":"Snapshot testing captures the output of your code and compares it against a stored reference version on every test run. Instead of hand-writing an assertion for each property, you let the test runner record the entire serialized output once, then fail loudly whenever that output changes. This is ideal when the value you want to verify is large or hard to express by hand (rendered HTML, CLI output, API response shapes, error objects), or when the expected output changes often enough that maintaining manual assertions becomes a chore. Ende's built-in test runner provides snapshot testing through the t.assertSnapshot method on the test context, with no imports or dependencies. The test context t that Ende passes to each test has an assertSnapshot method. It serializes a value and compares it against a reference snapshot stored alongside your test file, using the test name to key the snapshot: No snapshot exists yet, so the first run must create one. Snapshots are created and updated with the --update-snapshots flag (short form -u): The runner manages the snapshot files itself, so no read or write permission is needed for snapshots in the default location. Once the snapshot exists, run the test normally; it passes if the serialized value still matches, or fails with an AssertionError showing a diff if it does not: Snapshots are written to a __snapshots__ directory next to the test file, in a .snap file named after the test module. For the example above, the file is __snapshots__/example_test.ts.snap: Each entry is keyed by the test name plus a counter, so a test that calls assertSnapshot multiple times produces isSnapshotMatch 1, isSnapshotMatch 2, and so on. The value is the result of serializing your data with Ende.inspect, with object keys sorted alphabetically. Snapshot files are plain TypeScript, so they are easy to read in code review. Commit snapshot files to version control. That way, snapshot changes are reviewed alongside the code changes that caused them, and"}]