LocalStack LogoLocalStack Icon

Announcing the LocalStack for Snowflake 2026.03.0 Release

LocalStack for Snowflake 2026.03.0 brings a massive list of improvements to our Snowflake emulation including to SQL scripting in stored procedures, GET_DDL support, FULL JOIN, enhanced web app UX, and support for over 50 different SQL functions.

Announcing the LocalStack for Snowflake 2026.03.0 Release

LocalStack for Snowflake 2026.03.0 is the first release following our move to calendar versioning and brings a massive list of improvements to our Snowflake emulation. We’ve implemented major improvements to our support for SQL scripting in stored procedures, added GET_DDL support for databases, tables and views, supported FULL JOIN, greatly enhanced the developer experience in our web app, and added support for over 50 different SQL functions.

In addition, we’ve enabled a new monthly subscription option. Get a free LocalStack trial to give the latest features in LocalStack for Snowflake 2026.03.0 at try!

How to upgrade?

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

Terminal window
docker pull localstack/snowflake:2026.03.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 2026.03.0.

What’s new in LocalStack for Snowflake 2026.03.0?

Improved SQL Scripting Support for Stored Procedures

Stored procedures are a powerful tool for encapsulating complex business logic, and one of the most challenging to test locally. This release delivers a major expansion of Snowflake Scripting support inside stored procedures, covering the looping constructs, exception handling primitives, and dynamic SQL capabilities that real-world procedures depend on.

  • Loop Constructs: WHILE, LOOP, REPEAT UNTIL, and FOR are now supported, enabling iterative processing patterns inside stored procedures, such as cursor-driven row processing and retry logic.
  • Custom exceptions: LocalStack for Snowflake now supports user-declared EXCEPTION types in stored procedures that can be raised with RAISE, allowing fine-grained error handling. In addition, SQLERRM, SQLSTATE, SQLCODE are now accessible inside exception handlers, giving procedures access to the error message, ANSI SQL state code, and Snowflake-specific error number for logging or conditional recovery logic.
  • Nested DECLARE blocks with scope isolation: Variables declared in inner blocks can now be properly scoped to those blocks, matching the expected behavior of nested procedural blocks in Snowflake. In addition, the emulator now properly handles when keyword tokens (e.g. NAME, ROW) are used as identifiers and correctly parses BEGIN name := 1; END.
  • Enabled dynamic object references: Added support for IDENTIFIER(:var) and IDENTIFIER('literal') inside SQL stored procedures to dynamically resolve table and column names at runtime.
  • EXECUTE IMMEDIATE improvements: We’ve improved parity around EXECUTE IMMEDIATE so that it can now appear inside IF blocks and as the first statement in a procedure body.
  • Improved parity for EXECUTE AS OWNER and EXECUTE AS CALLER: EXECUTE AS OWNER and EXECUTE AS CALLER are now properly parsed in stored procedures. In addition, Procedures created with EXECUTE AS CALLER are no longer incorrectly reported as EXECUTE AS OWNER.
  • Better CALL parity: CALL is now a first-class parsed expression, so the procedure name and arguments are fully structured nodes — enabling correct handling of qualified names, argument inspection, and transformations that the emulator applies to procedure calls internally.

GET_DDL support for tables, views, and databases

GET_DDL returns the SQL statement needed to recreate a given database object. The emulator now supports GET_DDL for TABLE, VIEW, and DATABASE object types. For databases, it returns the DDL for the database itself along with all its schemas, tables, views, and tasks.

FULL JOIN support

FULL JOIN queries now execute correctly in the emulator, including joins with complex ON conditions, NULL join keys, many-to-many matches, chained FULL JOINs, mixed join types in the same query, and VALUES clauses used as a join source. This closes a meaningful gap in SQL parity for queries that combine datasets where unmatched rows from both sides need to be preserved.

Web App UI improvements

We’ve made major improvements to the capabilities of our web app when running LocalStack for Snowflake that should greatly enhance the developer experience:

  • New searchable Query History tab: We’ve replaced the “Logs” tab with a “Query History” tab that provides a filterable data grid with text search, a status filter, and a time range filter.
  • Monaco-based SQL editor — We’ve replaced the plain text query editor with a fully-featured Monaco editor with SQL syntax highlighting, Snowflake-specific keyword/function/type autocompletion, and context-aware suggestions.
  • Collapsible resource tree — The Local Resources panel now displays databases, schemas, tables, and columns as a properly indented, expandable/collapsible hierarchical tree.
  • Manual resource refresh — A refresh icon button on the Local Resources card header lets you re-fetch all resources without reloading the page.
  • Cursor-aware query execution — The query editor now supports executing a single statement from a multi-statement editor. If text is selected, only the selection is executed. Otherwise, the statement where the cursor is positioned is detected automatically based on ; delimiters and executed.
  • Error display — Query errors are now properly caught and displayed as an error alert below the editor, instead of silently failing.
  • Full-width result columns — Result columns now flex to fill available space so that long text values are no longer truncated.

Support for 50+ new SQL functions

Aggregate Functions

  • HLL, HLL_ACCUMULATE HyperLogLog functions.
  • GROUPING_ID  identifies which columns in the grouping were aggregated away in a given output row.
  • HASH_AGG computes a single aggregate hash value over all rows or all values of specified columns in a group.
  • APPROX_COUNT_DISTINCT returns the approximate number of distinct values in a column.
  • APPROX_PERCENTILE_ACCUMULATE, APPROX_PERCENTILE_COMBINE, and APPROX_PERCENTILE_ESTIMATE functions, enabling distributed percentile computation workflows.
  • APPROX_TOP_K family of aggregate functions (HandleApproxTopK, HandleApproxTopKAccumulate, HandleApproxTopKCombine, and HandleApproxTopKEstimate) for approximate top-k frequent value analysis.

String & Similarity Functions

  • REGEXP_SUBSTR_ALL returns an array of all substrings matching a regular expression.
  • JAROWINKLER_SIMILARITY computes a similarity score between two strings using the Jaro-Winkler algorithm.
  • Number of bitmap and similarity functions: MINHASH, APPROXIMATE_JACCARD_INDEX, APPROXIMATE_SIMILARITY, BITMAP_BUCKET_NUMBER, BITMAP_CONSTRUCT_AGG, BITMAP_COUNT and BITMAP_OR_AGG.
  • String functions: CHR, SOUNDEX, UNICODE, LPAD, RPAD, STRTOK, REPEAT, SPACE, TRANSLATE, INSERT, OCTET_LENGTH, REGEXP_COUNT, REGEXP_INSTR, and REGEXP_INSTR.
  • SPLIT_TO_TABLE splits a string by a delimiter and explodes it into rows.

Date/Time Functions

  • DATE_PART extracts date/time components (year, month, day, hour, minute, second, epoch, timezone, week, etc.) with support for large years (>9999)z
  • Miscellaneous scalar functions: GETDATE, GETVARIABLE, GET_IGNORE_CASE, and GETBIT.
  • Date/time construction, JSON validation, and XML parsing scalar functions: YEAR, TIMESTAMP_LTZ_FROM_PARTS, CHECK_JSON and PARSE_XML.

Encryption & Compression

  • ENCRYPT_RAW and DECRYPT_RAW for AES encryption/decryption.
  • Compression and decompression functions: COMPRESS, DECOMPRESS_BINARY, and DECOMPRESS_STRING.

Hash & Encoding Functions

  • Commonly used string, hashing, and encoding scalar SQL functions: BIT_LENGTH, SHA2, SHA2_HEX, DECODE, MD5_BINARY and HEX_DECODE_STRING.

Stage Functions

  • Stage utility functions for working with stage paths and locations: GET_ABSOLUTE_PATH, GET_RELATIVE_PATH, and GET_STAGE_LOCATION.
  • Stage file URL builder functions used to construct URLs for accessing files stored in Snowflake stages: BUILD_SCOPED_FILE_URL and BUILD_STAGE_FILE_URL.
  • Stage file metadata functions used in directory table queries: FL_GET_CONTENT_TYPE, FL_GET_ETAG, FL_GET_RELATIVE_PATH, FL_GET_SCOPED_FILE_URL, FL_GET_SIZE, FL_GET_STAGE, and FL_GET_STAGE_FILE_URL.

Statistics Functions

  • Statistics SQL functions: Corr, CovarPop, CovarSamp, DatasketchesHllAccumulate, DatasketchesHllCombine, and DatasketchesHllEstimate.

Other Functions

  • Conversion functions: AS_ARRAY, BASE64_ENCODE, BASE64_DECODE_STRING, BASE64_DECODE_BINARY, AS_DATE, AS_TIME, AS_TIMESTAMP, and AS_OBJECT.
  • ALL_USER_NAMES returns an array of all user names in the account.
  • Miscellaneous SQL functions: CONCAT_WS, SYSTEM$SEND_EMAIL, MONTHS_BETWEEN, and STDDEV .

Improved parity with Snowflake

  • Added initial support for CREATE DYNAMIC ICEBERG TABLE, extending the existing dynamic table functionality to handle Iceberg format dynamic tables.
  • Added support for querying information_schema.views and account_usage.tables to retrieve comprehensive metadata about views and tables, including definitions, owners, creation dates, and schema information.
  • Added support for SHOW VARIABLES [LIKE '<pattern>'] to list session variables with optional pattern filtering and UNSET <var> and UNSET (<var1>, <var2>, ...) to remove session variables from the current session.
  • Improved handling of Snowpipe that reduces latency when uploading large JSON files.
  • The emulator now supports CTAS with column definitions and constraints such as NOT NULL, PRIMARY KEY, and UNIQUE (e.g., CREATE TABLE t (col INT NOT NULL) AS SELECT ...).
  • DROP PROCEDURE and DROP FUNCTION are now properly handled within the emulator.
  • The emulator will now correctly handle dropping dependent views before dropping the table.
  • Queries with the syntax of INSERT INTO t (SELECT ...) (i.e. with parentheses around the SELECT) are now properly parsed.
  • Improved performance of DATASKETCHES_HLL_ACCUMULATE and DATASKETCHES_HLL_COMBINE on datasets with 5000+ rows so that they no longer time out and return empty results.

Conclusion

As you can see, LocalStack for Snowflake 2026.03.0 is a major step forward in our local emulation of Snowflake that also brings big improvements to the overall developer experience. So give it a try! Sign up for a free trial or upgrade to LocalStack for Snowflake 2026.03.0 to use all the latest improvements in your local development environment.


Brian Rinaldi
Brian Rinaldi
Head of Developer Relations at LocalStack
Brian Rinaldi leads the Developer Relations team at LocalStack. Brian has over 25 years experience as a developer – mostly for the web – and over a decade in Developer Relations for companies like Adobe, Progress Software and LaunchDarkly.