Both client libraries are pre-1.0, and they have separate versioning.
- (JS) Reference documentation now lives on modal.com/docs, replacing the TypeDoc site previously published to GitHub Pages.
- (Go, JS) Experimental options for Sandboxes (
ExperimentalOptionsinSandboxCreateParamsin Go,experimentalOptionsinSandbox.createin JS) now accept string values in addition to booleans. - (Go, JS) Added a
ConflictErrorerror type, returned when the current state of a resource conflicts with the requested operation. - Breaking: (Go) Unexported
AuthTokenManager,NewAuthTokenManager,TokenAndExpiry, andValidateExecArgswhich were not meant to be part of the public API. - (Go, JS)
Sandbox.Filesystem.CopyFromLocal/WriteBytes/WriteText(Go) andsandbox.filesystem.copyFromLocal/writeBytes/writeText(JS) now stream data to the Sandbox instead of issuing a request per chunk, making large writes ~2.5× faster. - Breaking: (Go)
FunctionUpdateAutoscalerParams.ScaledownWindownow is typed as a*time.Durationinstead of as a*uint32. - (Go, JS)
Function.UpdateAutoscalernow returns a struct containing the current autoscaler settings immediately after applying the change. - (Go)
RefreshWindowis deprecated and has no effect. Auth tokens are now refreshed a jittered fraction of the way through their lifetime instead of a fixed five minutes before expiry. - (Go) Added a
logsattribute forFunctionandFunctionCallobjects for fetching current and historical logs generated by that object. Thelogspropery exposes afetchmethod for time-based queries,tailfor fetching the most recent entries, andstreamfor fetching entries as they arrive.
- (Go, JS)
Functions.FromName/Cls.FromName(Go) andclient.functions.fromName/client.cls.fromName(JS) now accept an optionalVersion(Go) /version(JS) parameter to look up a version-pinned Function or Cls. - (Go, JS)
Secrets.FromMap(Go) /client.secrets.fromObject(JS) is now lazy, so the returnedSecrethas an emptySecretID(Go) /secretId(JS) until it is first used. Latency forSandbox.ExperimentalCreate/Sandbox.experimentalCreateandSandbox.Exec/Sandbox.execis improved by sending the secrets directly to the Sandbox and avoiding the secret creation limits. - (Go, JS)
Function.WithOptions/Cls.WithOptions(Go) andFunction_.withOptions/Cls.withOptions(JS) now accept aRoutingRegion/routingRegionoption to override the region the Function's or Cls's inputs and outputs are routed through. - (Go, JS) Added
Sandbox.Filesystem.Watch(Go) /Sandbox.filesystem.watch(JS) to watch a path in the Sandbox for filesystem changes. It yieldsFileWatchEventobjects and supportsRecursive/recursive, an event-typeFilter/filter, and aTimeout/timeoutMsbound. - Breaking: (Go, JS)
Sandbox.ReloadVolumes(Go) /Sandbox.reloadVolumes(JS) now blocks until the Volumes have been reloaded, bounded by a new timeout (55 seconds by default) that is configurable viaSandboxReloadVolumesParams.Timeout(Go) /SandboxReloadVolumesParams.timeoutMs(JS). If the reload does not complete within that window, aTimeoutErroris raised. - Breaking: (Go, JS) Renamed the
VolumeMountOptionstype toVolumeMountOptionsParams. In Go, updateWithMountOptions(&VolumeMountOptions{...})/withMountOptionstype annotations accordingly. - Breaking: (Go) Changed
OutboundCIDRAllowlistandOutboundDomainAllowlistinSandboxCreateParamsfrom[]stringto*Allowlist. A non-nil*Allowlistenables allowlist mode (even with emptyEntries, which blocks all traffic of that type);nilmeans open access. MigrateOutboundCIDRAllowlist: []string{"10.0.0.0/8"}toOutboundCIDRAllowlist: &Allowlist{Entries: []string{"10.0.0.0/8"}}.
- Added
Sandbox.updateNetworkPolicy(JS) andSandbox.UpdateNetworkPolicy(Go) to update the outbound network policy of a running Sandbox. BothoutboundCidrAllowlistandoutboundDomainAllowlistmust be provided.
- (Go, JS)
Sandbox.CreateConnectToken(Go) /Sandbox.createConnectToken(JS) now accept an optionalPort/portparameter on their params struct, controlling which container port requests are routed to when using the token. Defaults to 8080.
This release primarily contains a number of breaking changes as we continue working towards 1.0 in the JS and Go SDKs.
- Added support for named Images, akin to a Modal-native Image registry, decoupling Image builds from App deployment or Sandbox creation:
- (Go)
Image.PublishandImage.FromName - (JS)
Image.publishandImage.fromName
- (Go)
- Added support for restricting the domains that processes inside of a Sandbox can connect to:
- (Go)
OutboundDomainAllowlistinSandboxCreateParams - (JS)
outboundDomainAllowlistinSandbox.create
- (Go)
- Added support for dynamic configuration of Functions:
- (Go)
Function.WithOptions,Function.WithConcurrency,Function.WithBatching,Function.Instance - (JS)
Function_.withOptions,Function_.withConcurrency,Function_.withBatching,Function_.instance
- (Go)
- Improved reliability when uploading or downloading large data payloads for Function calls.
- Fixed a bug where adding Dockerfile commands to an Image loaded with
Image.FromID(Go) /Image.fromId(JS) could fail to use the resolved Image as the base. Sandbox.exec(JS) /Sandbox.Exec(Go) now reject a relativeWorkdirclient-side withInvalidError. In JS, an empty-stringworkdiris also rejected (passundefinedto use the image default).- (Go)
Sandbox.CreateandSandbox.Execnow return anInvalidErrorif anySecretsentry is nil. - Breaking: The Go and JS SDKs now read the Image Builder Version from your Modal workspace settings, like the Python SDK. Previously, the Go and JS SDKs were hardcoded to use version
2024.10. If your workspace configuration uses a different version, your Images will rebuild once (then be cached as usual), so beware that the first run after upgrading may take longer than usual. Note that version2025.06has a number of improvements that are specifically oriented towards Sandbox workflows. Accordingly, the fixedModalClient.imageBuilderVersion(JS) attribute has been removed in favor ofModalClient.getImageBuilderVersion. - Breaking:
Sandbox.SnapshotFilesystem(Go) /Sandbox.snapshotFilesystem(JS) no longer take a positionaltimeout/timeoutMsargument. The timeout now lives on the params structs asTimeout time.Duration(Go) /timeoutMs?: number(JS), bringing the methods to parity withSandbox.SnapshotDirectory. Migratesb.SnapshotFilesystem(ctx, 30*time.Second, params)tosb.SnapshotFilesystem(ctx, &SandboxSnapshotFilesystemParams{Timeout: 30*time.Second, ...}), andsb.snapshotFilesystem(30000, params)tosb.snapshotFilesystem({ timeoutMs: 30000, ...params }). - Breaking:
Sandbox.SnapshotFilesystem(Go) /Sandbox.snapshotFilesystem(JS) andSandbox.SnapshotDirectory(Go) /Sandbox.snapshotDirectory(JS) now accept an explicitTTL(Go, atime.Duration) /ttlMs(JS, in milliseconds) field on their params struct, controlling how long the resulting Image is retained. Both methods default to 30 days. This is a change of default forsnapshotFilesystemwhich previously kept Images indefinitely. PassTTL: modal.NoExpiryTTL(Go) orttlMs: null(JS) to opt out of expiry. - Breaking:
Sandbox.SnapshotDirectory(Go) /Sandbox.snapshotDirectory(JS) now also have aTimeout(Go) /timeoutMs(JS) field on their params structs with a default of 55s, which brings them to parity with filesystem snapshots. If the snapshot does not return within that window, aTimeoutErroris raised. The timeout can be set arbitrarily high to preserve the old behavior of not timing out. - Breaking: (Go)
Sandbox.Filesystemis now a field rather than a method. Migratesb.Filesystem().ReadText(...)tosb.Filesystem.ReadText(...). - Breaking:
Sandbox.FromID(Go) /Sandbox.fromId(JS) no longer checks if the sandbox ID exists. You can runPoll(Go) orpoll(JS) to get the status of your sandbox. - Breaking: Removed the deprecated low-level file-handle API:
Sandbox.Open/SandboxFile(Go), andsandbox.open/SandboxFile(JS). Use the Sandbox Filesystem API instead:sandbox.Filesystem()(Go) /sandbox.filesystem(JS). - Breaking: Removed the deprecated
Volume.ReadOnly/Volume.IsReadOnly(Go) andvolume.readOnly/volume.isReadOnly(JS). UseWithMountOptions(&VolumeMountOptions{ReadOnly: &t})/withMountOptions({ readOnly: true })instead. - Breaking: (JS) Removed the deprecated
cidrAllowlistparameter fromsandboxes.create. UseoutboundCidrAllowlistinstead. - Breaking: (JS) Removed the entire deprecated v0.5.0 backwards-compatibility surface: the global
initializeClient()/close()functions and theClientOptionstype; the deprecated static factoriesApp.lookup,Function_.lookup,Cls.lookup,Queue.lookup/Queue.ephemeral/Queue.delete,Volume.fromName/Volume.ephemeral,Secret.fromName/Secret.fromObject,Sandbox.fromId/Sandbox.fromName/Sandbox.list,Image.fromId/Image.fromRegistry/Image.fromAwsEcr/Image.fromGcpArtifactRegistry/Image.delete,Proxy.fromName, andFunctionCall.fromId. the instance shimsapp.createSandbox,app.imageFromRegistry/imageFromAwsEcr/imageFromGcpArtifactRegistry, the publicCloudBucketMountconstructor, and the deprecatedLookupOptions/DeleteOptions/EphemeralOptionstype aliases. SeeMIGRATION-GUIDE.md. - Breaking: (Go) All public methods now end with a
*XxxParamspointer argument, enabling forward-compatibility for future options without additional signature churn. Passnilto accept defaults. Affected methods:FunctionCall.FromID→FromID(ctx, id, *FunctionCallFromIDParams)Image.FromID→FromID(ctx, id, *ImageFromIDParams)Image.FromRegistry→FromRegistry(tag, *ImageFromRegistryParams), the*Secretfield remains insideImageFromRegistryParams(signature unchanged)Image.FromAwsEcr→FromAwsEcr(tag, secret, *ImageFromAwsEcrParams)— the*Secretargument is now a positional parameter preceding the params structImage.FromGcpArtifactRegistry→FromGcpArtifactRegistry(tag, secret, *ImageFromGcpArtifactRegistryParams)— the*Secretargument is now a positional parameter preceding the params structImage.Build→Build(ctx, app, *ImageBuildParams)Function.GetCurrentStats→GetCurrentStats(ctx, *FunctionGetCurrentStatsParams)ContainerProcess.Wait→Wait(ctx, *ContainerProcessWaitParams)Sandbox.FromID→FromID(ctx, id, *SandboxFromIDParams)Sandbox.Wait→Wait(ctx, *SandboxWaitParams)Sandbox.WaitUntilReady→WaitUntilReady(ctx, timeout, *SandboxWaitUntilReadyParams)Sandbox.Tunnels→Tunnels(ctx, timeout, *SandboxTunnelsParams)Sandbox.MountImage→MountImage(ctx, path, image, *SandboxMountImageParams)Sandbox.UnmountImage→UnmountImage(ctx, path, *SandboxUnmountImageParams)Sandbox.SnapshotDirectory→SnapshotDirectory(ctx, path, *SandboxSnapshotDirectoryParams)Sandbox.SnapshotFilesystem→SnapshotFilesystem(ctx, *SandboxSnapshotFilesystemParams)Sandbox.Poll→Poll(ctx, *SandboxPollParams)Sandbox.SetTags→SetTags(ctx, tags, *SandboxSetTagsParams)Sandbox.GetTags→GetTags(ctx, *SandboxGetTagsParams)
- Added Sandbox Filesystem API in the Go SDK with
sandbox.Filesystem()and in the JS SDK withsandbox.filesystem. The filesystem API contains methods:fs.WriteText(Go) /fs.writeText(JS): Write UTF-8 to a file in the Sandbox.fs.WriteBytes(Go) /fs.writeBytes(JS): Write binary content to a file in the Sandbox.fs.ReadText(Go) /fs.readText(JS): Read a file from the Sandbox and return its contents as a UTF-8 string.fs.ReadBytes(Go) /fs.readBytes(JS): Read a file from the Sandbox and return its contents as bytes.fs.MakeDirectory(Go) /fs.makeDirectory(JS): Create a new directory in the Sandbox.fs.ListFiles(Go) /fs.listFiles(JS): List files and directories in a Sandbox directory.fs.Stat(Go) /fs.stat(JS): Return metadata for a single file, directory, or symlink in the Sandbox.fs.CopyFromLocal(Go) /fs.copyFromLocal(JS): Copy a local file into the Sandbox.fs.CopyToLocal(Go) /fs.copyToLocal(JS): Copy a file from the Sandbox to a local path.fs.Remove(Go) /fs.remove(JS): Remove a file or directory in the Sandbox.
- Added
Volume.WithMountOptions(Go) andvolume.withMountOptions(JS) to configure mount-time options (ReadOnly/readOnlyandSubPath/subPath) when attaching a Volume to a Function or Sandbox. TheSubPath/subPathoption mounts a subdirectory of the Volume instead of its root. CallingwithMountOptionsmultiple times on the same Volume stacks: fields left unset preserve their previous value. - Deprecated
Volume.ReadOnly(Go) andVolume.readOnly(JS) in favor ofWithMountOptions({ReadOnly: &t})/withMountOptions({readOnly: true}). The old methods still work but will be removed in a future release. - Deprecated
Volume.IsReadOnly(Go) andVolume.isReadOnly(JS); track configured mount options at the call site that configured them instead.
- We've improved the reliability of the
Sandbox.SnapshotFilesystem(Go) andSandbox.snapshotFilesystem(JS) operation, especially for large snapshots, and we now support setting atimeout(Go) ortimeoutMs(JS) longer than 55s when necessary. - Added
Sandbox.UnmountImage(Go) andsandbox.unmountImage(JS) to remove an image mount from a path in the Sandbox filesystem and reveal the underlying directory again. Sandboxes.Create(Go) andsandboxes.create(JS) now accept aTags/tagsparameter to attach key-value tags to the Sandbox at creation time.Sandboxes.Create(Go) andsandboxes.create(JS) now accept anInboundCIDRAllowlist/inboundCidrAllowlistparameter to restrict which source IPs can connect inbound to a sandbox's tunnels and connection tokens.- Renamed
cidrAllowlisttooutboundCidrAllowlist(JS) andCIDRAllowlisttoOutboundCIDRAllowlist(Go) to distinguish from the corresponding inbound allowlists. - The Go and JS SDKs can now respond more gracefully to server throttling (e.g., rate limiting) by backing off and automatically retrying.
Sandboxes.Create(Go) andsandboxes.create(JS) now accept anIncludeOidcIdentityToken/includeOidcIdentityTokenparameter. When enabled, aMODAL_IDENTITY_TOKENenvironment variable is injected into the sandbox, enabling OIDC-based authentication (e.g., for AWS federation).- We're introducing a concept of "readiness probes" for
Sandbox. This feature lets you configure a readiness check on a TCP port,NewTCPProbe(Go) orProbe.withTcp(JS) or by executing a processNewExecProbe(Go) orProbe.withExec(JS). Callingsb.WaitUntilReady()(Go) orsb.waitUntilReady()(JS) will block until the Probe succeeds.
- Migrated SDKs from
github.com/modal-labs/libmodaltogithub.com/modal-labs/modal-client.
- Updated
Sandboxmethods to wait for newly created sandboxes to be ready and not error immediately when it's not avaliable yet. - Fixed a bug in
modal-jsso that cancelingsandbox.stdoutorsandbox.stderrcleans up background resources. - Updated
Sandbox(JS) to raise a better error when the sandbox was terminated.
- Fixed regression in
Sandbox.exec(JS) where it threw aChannelCredentialstype error.
- Added
Sandbox.MountImage(Go) andSandbox.mountImage(JS) that mounts an Image to a path in the Sandbox's filesystem. - Added
Sandbox.SnapshotDirectory(Go) andSandbox.snapshotDirectory(JS) snapshots and creates a new image from a directory in the running sandbox. - Upgraded
Sandbox.Exec(Go) andSandbox.exec(JS) bringing improved performance and reliability. - Added a
Sandbox.Detach(Go) orsandbox.detach(JS) to disconnect your client from the sandbox and cleans up any resources associated with the connection. We strongly recommend callingDetachafter you are done interacting with the sandbox.Detachdoes not close streams fromSandbox.Stdout(Go), orSandbox.stdout(JS). These streams should be closed using theirClose(Go) orclose(JS) methods. Sandbox.Terminate(Go) andSandbox.terminate(JS) detaches by default. To interact with a running sandbox, useSandboxes.FromID(Go) orsandboxes.fromId(JS) to create a new Sandbox object.Sandbox.Terminate(Go) andSandbox.terminate(JS) now accepts awaitparameter to wait for the sandbox to terminate and return the exit code.
Breaking changes:
- Changed
Sandbox.Terminatein Go which now returns(int, error). Theintis the return code when&SandboxTerminateParams{Wait: true}is passed in. - Added a
Sandbox.Detach(Go) orsandbox.detach(JS) to disconnect your client from the sandbox and cleans up any resources associated with the connection. We strongly recommend callingDetachafter you are done interacting with the sandbox.
- Fixed a bug where deleting a Volume, Queue, or Secret with
allowMissing=truecould still raise aNOT_FOUNDerror. - Improved handling of degraded HTTP/2 connections, which addresses intermittent RST_STREAM errors.
- In JS, improves reliability for reading streams from
sandbox.stdoutandsandbox.stderr.
- Added custom domains to
Sandboxes.Createin Go andsandboxes.createin JS. Note that Sandbox custom domains work differently from Function custom domains and must currently be set up manually by Modal; please get in touch if this feature interests you.
- Added
enable_dockerexperimental option toSandbox.Createto Go andSandbox.createto JS.
Breaking changes:
- Changed Sandbox parameter defaults to be consistent with the Python SDK:
- Set default Sandbox timeout to 5 minutes (was previously 10 minutes in the JS SDK).
- Leave the Sandbox entrypoint args empty by default in the JS SDK (was
previously
["sleep", "48h"]).
- Added
Sandbox.CreateConnectTokento Go andSandbox.createConnectTokento JS.
- Enabled goroutine leak detection for all tests by default.
- Fixed a few remaining goroutine leaks.
- Test clean-ups: ensure we always terminate Sandboxes, close ephemeral objects, etc.
- Added debug logging to
CloudBucketMountcreation in Go, bringing it in line with the JS SDK. - Updated the API for creating
CloudBucketMounts in JS, using the samemodal.cloudBucketMounts.create()pattern as other Modal objects, bringing it in line with the Go SDK. - Aligned the way the JS/Go SDKs handle empty/missing fields in gRPC messages, so the behavior is identical to the Python SDK.
- Enabled goleak for goroutine leak detection in tests. See DEVELOPING.md for details.
- Fixed all detected goroutine leaks in Sandboxes and Images.
- Added deletion methods for
VolumeandSecretobjects and updated the deletion methods onQueueobjects to support idempotent deletion via theallowMissingparameter.
- Fixed a bug in modal-go where
Sandbox.Execwould leak goroutines.
- Allow adding custom gRPC interceptors when creating a Modal client, to allow instrumentation, custom telemetry, etc.
- All Go SDK functions that take a Context will respect the timeout of the context.
- Improved the error message when calling a webhook Function as a normal Function.
- Allow customizing the config file path via
MODAL_CONFIG_PATHenvironment variable (defaults to~/.modal.toml). - Added support for passing
MODAL_LOGLEVEL=debugenvironment variable to also log debug logs, incl. all gRPC calls, etc.
The first beta release of the Modal SDKs for JS and Go (graduating from alpha). See the Migration Guide for a detailed list of breaking changes.
- The SDKs now expose a central Modal Client object as the main entry point for interacting with Modal resources.
- The interface for working with Modal object instances (Functions, Sandboxes, Images, etc.) is largely the same as before, with some naming changes.
- Calling deployed Functions and classes now uses a new protocol for payload serialization which requires the deployed apps to use the Modal Python SDK 1.2 or newer.
- Internally removed the global client (and config/profile data in global scope), moving all that to the Client type.
- Consistent parameter naming across both SDKs: all
Optionsstructs/interfaces renamed toParams. - JS-specific changes:
- Added explicit unit suffixes to all parameters that represent durations (in
milliseconds, suffixed with
Ms) or memory amounts (in MiB, suffixed withMiB).
- Added explicit unit suffixes to all parameters that represent durations (in
milliseconds, suffixed with
- Go-specific changes:
- Changed how we do context passing, so contexts now only affect the current operation and are not used for lifecycle management of the created resources.
- All
Paramsstructs are now passed as pointers for consistency and to support optional parameters. - Field names follow Go casing conventions (e.g.,
Id→ID,Url→URL,TokenId→TokenID). - Added explicit unit suffixes to all parameters that represent memory amounts
(in MiB, suffixed with
MiB).
Additional new features:
- Added support for setting CPU and memory limits when creating Sandboxes and Cls instances.
- Fixed a bug in modal-js related to unpickling objects from Python (Function calls, Queues, etc.), where integers between 32678 and 65535 were incorrectly decoded as signed integers.
- Internal updates for how authentication tokens are handled for input plane clients.
- Added
envparameters to several methods, as a convenience for passing environment variables into Sandboxes, etc. - Added
Sandbox.getTags()(JS) andSandbox.GetTags()(Go).
- Added support for PTYs in Sandboxes.
- Added
Image.dockerfileCommands()(JS) andImageDockerfileCommands()(Go).
- Added support for setting idle timeout when creating Sandboxes.
- Added
Image.delete()(JS) andImageDelete()(Go). - Changed
Image.fromId()(JS) andNewImageFromId()(Go) to throw aNotFoundErrorif the Image does not exist. Note that the signature ofNewImageFromId()has changed.
Sandbox.execin JS now correctly accepts a list of Secrets.
- Added
Image.build(JS) andImage.Build(Go). - Added
Image.fromId(JS) /NewImageFromId(Go). - Operations on an ehpemeral Queue after having called
CloseEhpemeral()will now explicitly fail in Go. - Added support for instantiating a Cls with custom options, using
Cls.withOptions()/.withConcurrency()/.withBatching()(JS) /Cls.WithOptions()/.WithConcurrency()/.WithBatching()(Go). - Added support for Named Sandboxes (examples in JS and Go).
- Added support for
Volume.ephemeral()(JS) /VolumeEphemeral()(Go).
- Added support for more parameters to
Sandbox.create():blockNetwork: Whether to block all network access from the Sandbox.cidrAllowlist: List of CIDRs the Sandbox is allowed to access.gpu: GPU reservation for the Sandbox (e.g. "A100", "T4:2", "A100-80GB:4").cloud: Cloud provider to run the Sandbox on.regions: Region(s) to run the Sandbox on.verbose: Enable verbose logging.proxy: Connect a Modal Proxy to a Sandbox.workdir: Set the working directory.
- Added support for mounting
CloudBucketMounts to Sandboxes. - Added top level for Image objects that are lazy. The Images are built when
creating a Sandbox.
Image.fromRegistryin typescript andNewImageFromRegistryin golang.Image.fromAwsEcrin typescript andNewImageFromAwsEcrin golang.Image.fromGcpArtifactRegistryin typescript andNewImageFromGcpArtifactRegistryin golang.
- Added
Secret.fromObject()(JS) /SecretFromMap()(Go) to create a Secret from key-value pairs (likefrom_dict()in Python). - Added
namefield toApps,Sandboxes,Secrets,Volumes, andQueues. - Added support for
Function.getCurrentStats()(JS) /Function.GetCurrentStats()(Go). - Added support for
Function.updateAutoscaler()(JS) /Function.UpdateAutoscaler()(Go). - Added support for
Function.getWebURL()(JS) /Function.GetWebURL()(Go). - Added support for
Volume.readOnly()(JS) /Volume.ReadOnly()(Go). - Added support for setting tags on Sandboxes, and for listing Sandboxes (by tag).
- Added support for getting Sandboxes from an ID.
- Added support for snapshotting the filesystem of a Sandbox.
- Added support for polling Sandboxes to check if they are still running, or get the exit code.
- Added support to execute commands in Sandboxes with Secrets.
- Added support for creating Sandboxes with Secrets.
- Added support for setting up Tunnels to expose live TCP ports for Sandboxes.
- Fixed calls of Cls with experimental
input_plane_regionoption. - (Go) Removed
Function.InputPlaneURLfrom being exposed as public API.
- Added support for passing a Secret to
imageFromRegistry()(JS) /ImageFromRegistry()(Go) to pull images from private registries. - Added support for creating Images from Google Artifact Registry with
imageFromGcpArtifactRegistry()(JS) /ImageFromGcpArtifactRegistry()(Go). - Added experimental support for calling remote Functions deployed with the
input_plane_regionoption in Python.
- Added
InitializeClient()(Go) /initializeClient()(JS) to initialize the client at runtime with credentials. - Client libraries no longer panic at startup if no token ID / Secret is provided. Instead, they will throw an error when trying to use the client.
- Added
workdirandtimeoutoptions toExecOptionsfor Sandbox processes.
- Added support for Sandbox filesystem.
- Added support for CommonJS format /
require(). Previously, modal-js only supported ESMimport.
- Added support for creating Images from AWS ECR with
App.imageFromAwsEcr()(JS) /App.ImageFromAwsEcr()(Go). - Added support for accessing Modal Secrets with
Secret.fromName()(JS) /modal.SecretFromName()(Go). - Fixed serialization of some pickled objects (negative ints, dicts) in modal-js.
- Added support for the
Queueobject to manage distributed FIFO queues.- Queues have a similar interface as Python, with
put()andget()being the primary methods. - You can put structured objects onto Queues, with limited support for the pickle format.
- Queues have a similar interface as Python, with
- Added
InvalidError,QueueEmptyError, andQueueFullErrorto support Queues. - Fixed a bug in
modal-jsthat produced incorrect bytecode for bytes objects. - Options in the Go SDK now take pointer types, and can be
nilfor default values.
- Added support for spawning Functions with
Function_.spawn()(JS) /Function.Spawn()(Go).
- Added feature for looking up and calling remote classes via the
Clsobject. - (Go) Removed the initial
ctx context.Contextargument fromFunction.Remote().
- Support calling remote Functions with arguments greater than 2 MiB in byte payload size.
- First public release
- Basic
Function,Sandbox,Image, andContainerProcesssupport