LocalStack LogoLocalStack Icon

Announcing the LocalStack for Snowflake 1.1 Release

LocalStack for Snowflake 1.1 is now available! This release introduces a new way to start the Snowflake emulator via CLI, Snowflake REST APIs, Compute Pools, Security Integrations, JavaScript Stored Procedures, Table Change Tracking, and enhanced parity with over 30 new SQL functions and improved type system.

Announcing the LocalStack for Snowflake 1.1 Release

Introduction

LocalStack for Snowflake 1.1 is here, bringing a comprehensive set of enhancements that significantly expand your local Snowflake development capabilities. This release introduces the new --stack CLI flag for simplified emulator management, comprehensive Snowflake REST APIs for programmatic database operations, and advanced features like Compute Pools, Security Integrations, and JavaScript Stored Procedures.

Additionally, we’ve added support for Table Change Tracking, Data Metric Functions, and Secure Functions, while enhancing Row Access Policy operations and introducing a new internal type system that mirrors Snowflake’s native data types with high fidelity. With over 30 new SQL functions and numerous parity improvements, LocalStack for Snowflake 1.1 brings you closer than ever to production-grade Snowflake behaviour in your local environment.

Get your free LocalStack trial to access the latest features in LocalStack for Snowflake 1.1!

How to migrate?

To upgrade to LocalStack for Snowflake 1.1 using the LocalStack CLI, run:

Terminal window
docker pull localstack/snowflake:1.1.0
localstack start --stack snowflake

If you’re using LocalStack for Snowflake with Docker CLI or Docker Compose, you can pin the image version in your docker run command or Docker Compose file to 1.1.0.

What’s new in LocalStack for Snowflake 1.1?

--stack CLI flag for starting Snowflake emulator

We’ve introduced a new --stack (-s) CLI flag in the LocalStack CLI to simplify selecting which stack (image) to start. Previously, starting different LocalStack images (e.g., Snowflake) required manually setting the IMAGE_NAME environment variable.

You can now start the Snowflake emulator with:

Terminal window
localstack start --stack snowflake

To start a specific version of the Snowflake emulator:

Terminal window
localstack start --stack snowflake:0.3

This will launch the emulator using version 0.3. The new flag streamlines development by reducing verbosity and making stack selection (AWS or Snowflake) easier and more intuitive.

Snowflake REST APIs

The Snowflake emulator now includes initial support for REST APIs to manage databases, enabling developers to interact with Snowflake objects programmatically via HTTP endpoints instead of SQL queries. This is useful for automation workflows and integrating Snowflake-like behaviour into external tools and services.

The following operations are supported:

OperationEndpointPython API
Create a databasePOST /api/v2/databasesroot.databases.create()
List databasesGET /api/v2/databasesroot.databases.iter()
Fetch a specific databaseGET /api/v2/databases/{name}root.databases[name].fetch()

Check out our documentation on getting started with Snowflake REST APIs.

Compute Pools

The Snowflake emulator now supports Compute Pools, allowing developers to define and manage scalable clusters of virtual nodes for containerised applications, similar to Snowflake’s native infrastructure for Snowpark Container Services. This enables local testing of resource management logic for data applications that rely on autoscaling compute backends.

The following operations are supported:

The Snowflake emulator provides a CRUD (Create, Read, Update, Delete) interface for Compute Pools, allowing you to mock the creation and management of Compute Pools in your local environment.

The creation and management of Compute Pools is currently mocked and do not offer any autoscaling capabilities. Check out our documentation on getting started with Compute Pools.

Security Integrations

The Snowflake emulator now supports Security Integrations, enabling local testing of identity federation and authentication flows. Security Integrations act as a bridge between Snowflake and external identity providers, APIs, or provisioning systems. With the emulator, you can now create, manage and test OAuth-based Security Integrations.

The following operations are supported:

These operations are currently mocked and do not interact with any external services. Check out our documentation on getting started with Security Integrations.

JavaScript Stored Procedures

The Snowflake emulator now supports JavaScript-based stored procedures, enabling developers to test Snowflake’s procedural logic more accurately. You can now define and execute custom procedures using JavaScript with full support for the following APIs:

  • snowflake.createStatement()
  • snowflake.execute()

Check out our documentation on getting started with JavaScript Stored Procedures.

Table Change Tracking

The Snowflake emulator now supports Table Change Tracking, enabling you to monitor row-level changes (inserts, updates, deletes) over time in a table. This is useful for building & testing incremental data pipelines, audit trails, and synchronisation workflows locally. Similar to Snowflake, change tracking is enabled via the CHANGE_TRACKING = TRUE clause in CREATE TABLE or ALTER TABLE statements, and changes can be queried using the CHANGES clause in SELECT statements.

The current implementation includes initial support for Table Change Tracking, Streams, and DML changes (CHANGES ( INFORMATION => DEFAULT )), but full end-to-end tracking is not yet supported. Full change capture and tracking behaviour will be addressed in future releases.

Data Metric Functions and Monitoring Results

The Snowflake emulator now supports Data Metric Functions (DMFs) and the DATA_QUALITY_MONITORING_RESULTS view, enabling developers to define and test custom data quality checks locally. DMFs allow you to attach SQL-based validation logic to table columns and inspect the results through standard Snowflake monitoring views.

The following operations are supported:

Support currently focuses on basic DMF definitions and result querying. Future updates will expand coverage to include more advanced metrics and execution scenarios.

Check out our documentation on getting started with Data Metric Functions and Monitoring Results.

Secure Functions

The Snowflake emulator now supports Secure User-Defined Functions (UDFs), enabling you to build and test privacy-preserving logic for sensitive workloads. Secure UDFs protect function definitions and prevent unauthorised access to implementation details or underlying data.

To define a Secure UDF, you can use the SECURE keyword in the CREATE FUNCTION statement. Currently, only the SECURE syntax is supported - actual access restrictions are not enforced or emulated.

Check out our documentation on getting started with the Secure Functions.

New Row Access Policy operations

The Snowflake emulator in LocalStack now includes support for new Row Access Policy operations, enabling you to fully build and test row-level access control logic. These new operations include:

Check out our documentation on getting started with Row Access Policies.

New Type System

The Snowflake emulator now features a new internal type system designed to mirror Snowflake’s native data types with high fidelity. This system introduces custom PostgreSQL types and modifiers to represent Snowflake-specific types like VARIANT and TIMESTAMP_TZ, enabling accurate type parsing, coercion, and enforcement. By serialising and deserialising types at query boundaries, we ensure consistent behaviour with Snowflake semantics while maintaining compatibility with PostgreSQL’s execution engine.

This change allows the emulator to handle complex typing rules, including precision control, custom casting behaviour, and future-proof extensibility. While performance optimisations are planned (e.g., native handling of primitive types when safe), the current design prioritises correctness and Snowflake parity. This internal refactor also sets the stage for future features like static type checks and improved function resolution using tools like sqlglot.

Support for several new SQL functions

We have added support for several new SQL functions in LocalStack for Snowflake. The new functions include:

FunctionNotes
ALTER APPLICATIONModifies the properties of an installed Snowflake Native App.
DESCRIBE APPLICATIONDisplays information about a Snowflake Native App.
DESCRIBE PROCEDUREDescribes the specified stored procedure, including its signature, return value, language, and body.
SYSTEM$VALIDATE_NATIVE_APP_SETUPUsed to validate the setup of a native application in Snowflake.
SHOW TELEMETRY EVENT DEFINITIONS IN APPLICATIONLists the event definitions for the specified app.
ALTER SESSION UNSETResets session parameters to their default values.
GRANT OWNERSHIPTransfers ownership of an object from one role to another.
LOWERConverts a string to lowercase.
UPPERConverts a string to uppercase.
CONCATConcatenates two or more strings.
DESCRIBE SCHEMADescribes the schema, for example, lists the tables and views in the schema.
LAST_DAYReturns the last day of the specified date part for a date or timestamp.
SYSTEM$TASK_DEPENDENTS_ENABLERecursively resumes a specified task and all its dependent tasks.
TRY_TO_TIMESTAMPA special version of TO_TIMESTAMP that returns a NULL value instead of raising an error if the conversion can not be performed.
PERCENT_RANKReturns the relative rank of a value within a group of values, specified as a percentage ranging from 0.0 to 1.0.
TRUNCATETruncates a DATE, TIME, or TIMESTAMP value to the specified precision.
TRY_CASTA special version of CAST that returns a NULL value instead of raising an error when the conversion can not be performed.
HAVERSINECalculates the great-circle distance in kilometres between two points on the Earth’s surface.
SUBSTRReturns the portion of the string or binary value from a starting position, with an optional length.
MD5Returns a 32-character hex-encoded string containing the 128-bit MD5 message digest.
STARTSWITHReturns true if the first expression starts with the second expression.
ENDSWITHReturns TRUE if the first expression ends with the second expression.
SYSDATEReturns the current timestamp for the system in the UTC zone.
ROUNDRounds a numeric value to a specified number of decimal places or to the nearest integer.

Improved parity with Snowflake

We have made several enhancements to LocalStack for Snowflake to improve compatibility with the Snowflake service. These include:

  • Improved handling of ALTER DATABASE statements, including support for SET COMMENT operations.
  • Aligned SHOW ROLES output with SnowSQL to return correct values, addressing parity issues.
  • Aligned CREATE ROLE and DROP ROLE with Snowflake behaviour, adding support for IF NOT EXISTS.
  • Added support for NOT NULL as a return type modifier in SQL UDFs.
  • Enhanced metadata structure in COPY INTO responses, including fixed column types.
  • Added handling for the OR REPLACE clause in CREATE STREAM statements.
  • Added models for users and roles, with enhanced support for CREATE, SHOW, and DROP operations.
  • Added support for the IF NOT EXISTS clause in CREATE TASK statements, enabling idempotent task creation.
  • Added support for the LIMIT clause in SHOW DATABASES queries to restrict the number of returned results.
  • Enhanced handling of CREATE STORAGE INTEGRATION statements to support IF NOT EXISTS, preventing errors on repeated executions.
  • Addressed gaps affecting Terraform compatibility by handling extended file format options and fixing parsing for CREATE SCHEMA.
  • Enhanced handling of subqueries that define column aliases to better match Snowflake’s query parsing and execution behaviour.
  • Enhanced sorting logic for VARIANT-encoded values to enable more consistent behaviour across functions and query operators.
  • Enhanced CONCAT SQL function to return VARCHAR, improving compatibility with Snowflake type inference, especially in CASE WHEN expressions.

Miscellaneous

The Snowflake emulator now also supports:

  • Suspending tasks via the ALTER TASK statement.
  • Mocked handling for COLLATE clauses in table column definitions.
  • Number formatting patterns in TO_DOUBLE and TO_DECIMAL functions.
  • Timezone and fractional seconds formatting in TO_CHAR for timestamp values.
  • AWS_ENDPOINT_URL configuration variable to make AWS service endpoints configurable.
  • SF_PROXY_PRIVATE_KEY configuration variable to support Snowflake RSA private key authentication.
  • Handling for ON_ERROR=CONTINUE in COPY INTO statements, allowing rows with errors to be skipped while loading valid data.
  • Cross-database CREATE TABLE AS SELECT (CTAS) and CREATE VIEW AS SELECT (CVAS) statements to define target tables or views in a different database from the source.
  • Dictionary-style bindings with named query parameters (e.g., :var1, :var2) in SQL queries, improving compatibility with Snowflake clients.
  • Creating temporary views and ensuring temporary objects are automatically dropped at session end, improving compatibility with DBT incremental models.
  • Mocked support for additional columns in information_schema.tables, including commit_action, created, last_altered, cluster_by, transient, and comment, to improve compatibility and parity with Snowflake integrations.

Additionally, we’ve improved query performance by optimising query processor skipping, reducing overhead by up to 65% in complex queries like MERGE INTO.

Conclusion

LocalStack for Snowflake 1.1 represents a major leap forward in local Snowflake development, delivering enterprise-grade capabilities that bridge the gap between local testing and production environments. This release empowers developers to build, test, and validate Snowflake applications with unprecedented fidelity. Upgrade to LocalStack for Snowflake 1.1 today to unlock these powerful new capabilities and experience the future of local-first Snowflake development!


Harsh Mishra
Harsh Mishra
Engineer at LocalStack
Harsh Mishra is an Engineer at LocalStack and AWS Community Builder. Harsh has previously worked at HackerRank, Red Hat, and Quansight, and specialized in DevOps, Platform Engineering, and CI/CD pipelines.