Go Snowflake Driver release notes for 2026¶
This article contains the release notes for the Go Snowflake Driver, including the following when applicable:
- Behavior changes
- New features
- Customer-facing bug fixes
Snowflake uses semantic versioning for Go Snowflake Driver updates.
See Go Snowflake Driver for documentation.
Version 2.2.0 (Sep 03, 2026)¶
Security fixes¶
- Restricted the
WORKLOAD_IDENTITYauthenticator to recognized Snowflake hosts (*.snowflakecomputing.com,*.snowflakecomputing.cn, and*.snowflakecomputing.mil), normalizing the host before matching. TheSNOWFLAKE_WIF_ALLOWED_HOST_SUFFIXESenvironment variable can additively extend the list of recognized hosts. - Azure workload identity federation requests now URL-encode the resource and client ID query parameters, so their values can’t alter the rest of the request URL.
- The Azure
IDENTITY_ENDPOINTmust now resolve to a loopback or link-local address before the driver attaches theIDENTITY_HEADERvalue to the request. - Account identifier and region values supplied in the DSN are now validated as well-formed URL-authority components before being used to construct driver URLs. OCSP cache-server and retry URLs are now built using Go’s
net/urlpackage instead of direct string formatting. - Improved OCSP response validation to correctly distinguish transient network failures from definitive certificate status results, so a definitive result is always honored regardless of the
ocspFailOpensetting. - Extended secret masking in debug logs to cover the S3 SSE-C customer-key header and the
X-Amz-CredentialandX-Amz-Security-TokenURL query parameters. - HTTP response headers, including the chunk-header debug line, are now logged as header names only, without their values, everywhere the driver previously logged full header collections. This prevents session tokens, storage credentials, and SSE-C customer keys from appearing in debug logs.
- The TOML connection configuration loader now logs only setting names, not their values, when reporting a parsing error.
- Corrected the SAS token masking pattern in debug logs so signed URL query parameters are fully masked.
- Corrected the connection token masking pattern in debug logs to properly match and mask Snowflake session tokens that contain a colon (for example,
ver:1-hint:...).
New features and updates¶
- Added the
WorkloadIdentityAwsUseOutboundTokenconfiguration option (DSN fieldworkloadIdentityAwsUseOutboundToken) to produce the AWS workload identity federation attestation as an STSGetWebIdentityTokenJWT instead of the default signedGetCallerIdentityrequest envelope. - Added the
CleanupTimeoutconfiguration option (DSN fieldcleanupTimeout, in seconds) to bound how long post-cancellation cleanup can run. - Increased the CRL disk cache removal delay to 7 days.
- Added support for loading a private key from a
connections.tomlfile. - Added support for Go 1.27.
- Dropped support for Go 1.24. The minimum supported Go version is now 1.25.
- Added the
SNOWFLAKE_MIN_TLS_VERSIONenvironment variable to enforce a minimum TLS version for all connections.
Bug fixes¶
- Fixed token cache key collisions that could occur across multiple accounts sharing an identity provider, or across multiple roles, by switching to a versioned, SHA-256-hashed cache key that includes the token type.
- Fixed a nil pointer dereference panic when the driver encountered a corrupt or malformed OCSP cache key, whether from the remote OCSP cache server or the local cache file.
- Fixed
WithFileGetStreamreturning corrupt or wrong-file bytes when aGETpattern matched more than one file. A multi-file match now returns the newErrGetStreamMultipleFileserror instead of an unpredictable mix of file contents. - The driver no longer attempts to fetch S3 bucket accelerate configuration for Snowflake-internal stages, since that permission isn’t granted for those stages.
- Fixed gosnowflake creating a
gosnowflake-cgodirectory under the system temp directory at package import time, even when the driver was never used (for example, when imported only as a transitive dependency). Minicore now loads lazily when the driver is first referenced instead of at package initialization. - Fixed
GETfrom aLOCAL_FSstage downloading 0 files and returning a264011: not implementederror. Downloads from cloud stages were unaffected. - Fixed
NUMBERcolumns with a non-zero scale losing precision when a value needed more significant digits than a binary float’s mantissa could hold. For example, aNUMBER(20,10)column holding1234567890.1234567890returned1234567890.1234567889. TheWithHigherPrecisionoption is unaffected and continues to return a 64-bit*big.Float. - Fixed
ArrowBatch.WithContextbeing able to unintentionally change the conversion options (timestamp handling, higher precision, UTF-8 validation) applied to an already-created batch. These options are now captured when the batch is created and are no longer re-read from a laterWithContextcall. - Fixed proxy configuration for a literal IPv6
ProxyHost, which previously produced an unparseable proxy URL. - Fixed the
regionparameter overriding an explicitly providedhostvalue (for example,host=myacct.snowflakecomputing.comcombined withregion=us-east-1incorrectly becamemyacct.us-east-1.snowflakecomputing.com). An explicit host now takes precedence.
Internal changes¶
- Migrated from the deprecated
github.com/aws/aws-sdk-go-v2/feature/s3/managerpackage togithub.com/aws/aws-sdk-go-v2/feature/s3/transfermanager. - Modernized Go syntax idioms throughout the codebase now that the minimum supported Go version is 1.25.
- Updated AWS SDK dependencies:
github.com/aws/aws-sdk-go-v2from v1.38.1 to v1.43.0github.com/aws/aws-sdk-go-v2/configfrom v1.27.11 to v1.32.31github.com/aws/aws-sdk-go-v2/credentialsfrom v1.17.11 to v1.19.30github.com/aws/aws-sdk-go-v2/feature/ec2/imdsfrom v1.16.1 to v1.18.31github.com/aws/aws-sdk-go-v2/service/s3from v1.53.1 to v1.106.0github.com/aws/aws-sdk-go-v2/service/stsfrom v1.28.6 to v1.45.0github.com/aws/smithy-gofrom v1.22.5 to v1.27.4
Version 2.1.0 (Jun 08, 2026)¶
New features and updates¶
- Added the
SF_DISABLE_OCSP_CHECKSenvironment variable as an additional option to override the default behavior of OCSP checks, alongside the existingDisableOCSPChecksconfiguration option. The environment variable is explicitly refused when OCSP fail-closed mode is active. - Added the
ArrowStreamBatch.Reset()method, which closes any existing stream and clears the cached reader. This method lets callers retryGetStreamafter a mid-stream failure (such as a TCP RST) without re-executing the entire query. Inline (RowSetBase64) batches are restored from cached bytes on reset. - Added one in-band telemetry record per successful login that describes which connection-identifier fields the user supplied (
account_provided,account_with_region,account_org_provided,region_provided, andhost_provided). No hostname or account value is included. This record is gated by the existing server-sideCLIENT_TELEMETRY_ENABLEDparameter and can also be disabled locally by settingSF_TELEMETRY_DISABLE_CONNECTION_SHAPEtotrue. This telemetry collection is time-boxed and will be removed in a future release.
Bug fixes¶
- Fixed a stale OCSP cache
.lckdirectory permanently blocking cache writes, which forced online OCSP validation when OCSP is enabled (the default). The driver now usesos.RemoveAllinstead ofos.Removefor stale lock recovery. - Fixed regular chunk downloader reads so that canceling the query context now interrupts stalled chunk downloads and wakes waiting row readers instead of hanging on the HTTP body read.
- Fixed
QueryArrowStreamchunk reads so that canceling the query context now interrupts stalled Arrow stream downloads and reports the cancellation instead of hanging on the HTTP body read. - Fixed
baseNamesilently dropping files whose name ends with a dot (such asmyfile.txt.), which caused PUT uploads to discard such files without an error. - Improved the error message when
Hostis incorrectly configured with a URL scheme (such ashttps://myorg-myaccount.snowflakecomputing.com). Previously, this produced a cryptic260004: failed to parse a port numbererror. - Fixed the minicore build on OpenBSD by skipping the
-ldllinker flag, because libdl is not a separate library on OpenBSD (dlopenanddlsymare provided by libc).
Internal changes¶
- Introduced the
SKIP_FILE_PERMISSIONS_VERIFICATIONenvironment variable to allow bypassing file permissions checks forconnections.tomland the credential cache. This option is useful for environments where strict permissions can’t be set. - Added support for
SPCS_TOKENin the login request. When the driver detects that it’s running inside a Snowpark Container Services workload (using theSNOWFLAKE_RUNNING_INSIDE_SPCSenvironment variable), it reads an opaque service token from/snowflake/session/spcs_tokenon every login and attaches it to the login-request payload asSPCS_TOKEN. Read failures are logged at the warn level and don’t affect login. - Minicore binaries for Windows and macOS are now signed. The content is the same.
Version 2.0.2 (Apr 28, 2026)¶
New features and updates¶
- Added the
QueryResultFormatProviderinterface, which exposes the server-reported query result format (Arrow or JSON) fromQueryArrowStream. This interface enables callers to distinguish Arrow IPC from JSON responses before interpreting batch streams.
Bug fixes¶
- Fixed an issue where the
Accountfield was empty when connecting with programmaticConfiganddatabase/sql.Connector. The driver now derivesAccountfrom the first DNS label ofHostwhen it matches the Snowflake hostname pattern. - Fixed the PAT (Programmatic Access Token) authenticator to properly require the
TokenorTokenFilePathfield. Previously, the authenticator would silently accept thePasswordfield but never forward it to the authentication service. - Fixed the logger reporting incorrect source locations when called without
WithContext. - Fixed GCP workload identity federation (WIF) attestation to use hostname
metadata.google.internalinstead of the IPv4 link-local address, enabling support for IPv6-only GCP VMs. - Fixed query failures on large inline results (such as 64 MB LOBs) caused by truncated HTTP response bodies. The driver now retries the query when
json.Decoderreturnsio.ErrUnexpectedEOF, reusing the same request ID to retrieve the cached result from Snowflake.
Version 2.0.1 (Apr 08, 2026)¶
Bug fixes¶
- Reduced the default
CrlDownloadMaxSizesetting from 200 MB to 20 MB to prevent potential out-of-memory errors. - Fixed an issue where parameter values could change across connections in the same connection pool.
- Fixed Azure multi-part file uploads to properly populate the blob content-MD5 property.
- Fixed 403 errors from Google Cloud Storage PUT queries on versioned stages.
- Fixed the query context cache not being updated for failed queries, which could result in stale session data.
- Improved connection handling performance by optimizing parameter synchronization.
Internal changes¶
-
Moved configuration to a dedicated internal package.
-
Modernized Go syntax idioms throughout the codebase.
-
Added libc family, version, and dynamic linking marker to client environment telemetry.
-
Updated dependencies to address security vulnerabilities:
golang.org/x/cryptofrom v0.41.0 to v0.46.0golang.org/x/netfrom v0.43.0 to v0.48.0golang.org/x/oauth2from v0.30.0 to v0.34.0golang.org/x/sysfrom v0.35.0 to v0.40.0golang.org/x/modfrom v0.27.0 to v0.30.0golang.org/x/syncfrom v0.16.0 to v0.19.0golang.org/x/termfrom v0.34.0 to v0.38.0golang.org/x/textfrom v0.28.0 to v0.32.0golang.org/x/toolsfrom v0.36.0 to v0.39.0google.golang.org/grpcfrom v1.73.0 to v1.79.3google.golang.org/protobuffrom v1.36.6 to v1.36.10- OpenTelemetry packages from v1.37.0 to v1.40.0
-
Removed pointer indirection from query context cache in
snowflakeConn.
Version 1.9.1 (Apr 08, 2026)¶
New features and updates¶
- Added support for Go 1.26 and dropped support for Go 1.23.
Bug fixes¶
- Fixed minicore crashes (SIGFPE) on fully statically linked Linux binaries by detecting static linking via ELF PT_INTERP inspection and skipping
dlopengracefully.
Internal changes¶
- Added libc family, version, and dynamic linking marker to client environment telemetry.
Version 2.0.0 (Mar 03, 2026)¶
BCR (Behavior Change Release) changes¶
-
Removed
RaisePutGetErrorfromSnowflakeFileTransferOptionsto ensure errors are raised for PUT/GET operations. -
Removed
GetFileToStreamfromSnowflakeFileTransferOptions. UseWithFileGetStreamto automatically enable file streaming for GET operations. -
Removed
WithOriginalTimestamp. UseWithArrowBatchesTimestampOption(UseOriginalTimestamp)instead. -
Removed the
ClientIPfield from theConfigstruct. This field was never used and is not needed for any functionality. -
Removed the
InsecureModefield fromConfigstruct. UseDisableOCSPChecksinstead. -
Removed the
DisableTelemetryfield from theConfigstruct. Use theCLIENT_TELEMETRY_ENABLEDsession parameter instead. -
Removed the stream chunk downloader. Use the default downloader instead.
-
Removed
SnowflakeTransport. UseConfig.Transporter, or simply register your own TLS configuration withRegisterTLSConfigif you just need a custom root certificates set. -
Renamed
WithFileStreamtoWithFilePutStreamfor consistency. -
Renamed the
KeepSessionAlivefield in theConfigstruct toServerSessionKeepAlivefor consistency with other drivers. -
The
Arrayfunction now returns an error for unsupported types. -
WithMultiStatementno longer returns an error. -
Combined
WithMapValuesNullableandWithArrayValuesNullableinto the singleWithEmbeddedValuesNullableoption. -
Hid the streaming chunk downloader. It will be removed completely in a future release.
-
The maximum number of chunk download goroutines is now configured with the
CLIENT_PREFETCH_THREADSsession parameter. -
Fixed a typo in the
GOSNOWFLAKE_SKIP_REGISTRATIONenvironment variable. -
Unexported
MfaTokenandIdToken. -
Arrow batches changes:
- Arrow batches have been extracted to a separate package, which should significantly reduce the compilation size for those who don’t need arrow batches (~34MB -> ~18MB).
- Removed
GetArrowBatchesfromSnowflakeRowsandSnowflakeResult. Usearrowbatches.GetArrowBatches(rows.(SnowflakeRows))instead. - Migrated the following functions:
sf.WithArrowBatchesTimestampOptiontoarrowbatches.WithTimestampOptionsf.WithArrowBatchesUtf8Validationtoarrowbatches.WithUtf8Validationsf.ArrowSnowflakeTimestampToTimetoarrowbatches.ArrowSnowflakeTimestampToTime
-
Logging changes:
- Removed the Logrus logger and migrated to slog.
- Simplified the
SFLoggerinterface. - Added the
SFSlogLoggerinterface for setting a custom slog handler.
New features and updates¶
- Added support for Go 1.26, and dropped support for Go 1.23.
- Added support for FIPS-only mode.
Bug fixes¶
- Added a panic recovery block for stage file upload and download operations.
- Fixed a WIF metadata request from an Azure container that manifested as an HTTP 400 error.
- Fixed a SAML authentication port validation bypass in
isPrefixEqualwhere the second URL’s port was never checked. - Fixed a race condition in the OCSP cache clearer.
- The
context.Contextquery is now propagated to cloud storage operations for PUT and GET queries, allowing for better cancellation handling. - Fixed minicore crashes (SIGFPE) on fully statically linked Linux binaries by detecting static linking via ELF PT_INTERP inspection and skipping
dlopengracefully.
Version 1.19.0 (Feb 03, 2026)¶
New features and updates¶
- Exposed
tokenFilePathin theConfigstruct, in addition to the existing DSN option. tokenFilePathis now read for every new connection, not only once at driver startup.- Added support for identity impersonation when using workload identity federation.
- Added the ability to disable minicore from loading at compile time using the
-tags minicore_disabledparameter.
Bug fixes¶
- Fixed an issue with getting files from an unencrypted stage.
- Fixed the minicore file name gathering in client environment.
- Fixed path escaping for GCS URLs that manifested in 403 responses from GCS when a file or directory contained spaces.
- Fixed leaking file descriptors when uploading files to stages (especially in GCS).