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.

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:
docker pull localstack/snowflake:1.1.0localstack 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- Snowflake REST APIs
- Compute Pools
- Security Integrations
- JavaScript Stored Procedures
- Table Change Tracking
- Data Metric Functions and Monitoring Results
- Secure Functions
- New Row Access Policy operations
- New Type System
- Support for several new SQL functions
- Improved parity with Snowflake
- Miscellaneous
--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:
localstack start --stack snowflake
To start a specific version of the Snowflake emulator:
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:
Operation | Endpoint | Python API |
---|---|---|
Create a database | POST /api/v2/databases | root.databases.create() |
List databases | GET /api/v2/databases | root.databases.iter() |
Fetch a specific database | GET /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:
- CREATE SECURITY INTEGRATION
- DESCRIBE SECURITY INTEGRATION
- ALTER SECURITY INTEGRATION
- SHOW SECURITY INTEGRATIONS
- DROP SECURITY INTEGRATION
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:
- CREATE DATA METRIC FUNCTION
- ALTER TABLE … ADD DATA METRIC FUNCTION
- SELECT * FROM DATA_QUALITY_MONITORING_RESULTS
- SELECT … (SELECT * FROM …)
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:
Function | Notes |
---|---|
ALTER APPLICATION | Modifies the properties of an installed Snowflake Native App. |
DESCRIBE APPLICATION | Displays information about a Snowflake Native App. |
DESCRIBE PROCEDURE | Describes the specified stored procedure, including its signature, return value, language, and body. |
SYSTEM$VALIDATE_NATIVE_APP_SETUP | Used to validate the setup of a native application in Snowflake. |
SHOW TELEMETRY EVENT DEFINITIONS IN APPLICATION | Lists the event definitions for the specified app. |
ALTER SESSION UNSET | Resets session parameters to their default values. |
GRANT OWNERSHIP | Transfers ownership of an object from one role to another. |
LOWER | Converts a string to lowercase. |
UPPER | Converts a string to uppercase. |
CONCAT | Concatenates two or more strings. |
DESCRIBE SCHEMA | Describes the schema, for example, lists the tables and views in the schema. |
LAST_DAY | Returns the last day of the specified date part for a date or timestamp. |
SYSTEM$TASK_DEPENDENTS_ENABLE | Recursively resumes a specified task and all its dependent tasks. |
TRY_TO_TIMESTAMP | A special version of TO_TIMESTAMP that returns a NULL value instead of raising an error if the conversion can not be performed. |
PERCENT_RANK | Returns the relative rank of a value within a group of values, specified as a percentage ranging from 0.0 to 1.0. |
TRUNCATE | Truncates a DATE, TIME, or TIMESTAMP value to the specified precision. |
TRY_CAST | A special version of CAST that returns a NULL value instead of raising an error when the conversion can not be performed. |
HAVERSINE | Calculates the great-circle distance in kilometres between two points on the Earth’s surface. |
SUBSTR | Returns the portion of the string or binary value from a starting position, with an optional length. |
MD5 | Returns a 32-character hex-encoded string containing the 128-bit MD5 message digest. |
STARTSWITH | Returns true if the first expression starts with the second expression. |
ENDSWITH | Returns TRUE if the first expression ends with the second expression. |
SYSDATE | Returns the current timestamp for the system in the UTC zone. |
ROUND | Rounds 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 forSET COMMENT
operations. - Aligned
SHOW ROLES
output with SnowSQL to return correct values, addressing parity issues. - Aligned
CREATE ROLE
andDROP ROLE
with Snowflake behaviour, adding support forIF 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 inCREATE STREAM
statements. - Added models for users and roles, with enhanced support for
CREATE
,SHOW
, andDROP
operations. - Added support for the
IF NOT EXISTS
clause inCREATE TASK
statements, enabling idempotent task creation. - Added support for the
LIMIT
clause inSHOW DATABASES
queries to restrict the number of returned results. - Enhanced handling of
CREATE STORAGE INTEGRATION
statements to supportIF 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 returnVARCHAR
, improving compatibility with Snowflake type inference, especially inCASE 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
andTO_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
inCOPY INTO
statements, allowing rows with errors to be skipped while loading valid data. - Cross-database
CREATE TABLE AS SELECT
(CTAS
) andCREATE 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
, includingcommit_action
,created
,last_altered
,cluster_by
,transient
, andcomment
, 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!