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.
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:
docker pull localstack/snowflake:2026.03.0
localstack start --stack snowflakeIf 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
GET_DDLsupport for tables, views, and databasesFULL JOINsupport- Web App UI improvements
- Support for 50+ new SQL functions
- Improved parity with Snowflake
- Conclusion
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, andFORare 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
EXCEPTIONtypes in stored procedures that can be raised withRAISE, allowing fine-grained error handling. In addition,SQLERRM,SQLSTATE,SQLCODEare 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
DECLAREblocks 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 parsesBEGIN name := 1; END. - Enabled dynamic object references: Added support for
IDENTIFIER(:var)andIDENTIFIER('literal')inside SQL stored procedures to dynamically resolve table and column names at runtime. EXECUTE IMMEDIATEimprovements: We’ve improved parity aroundEXECUTE IMMEDIATEso that it can now appear insideIFblocks and as the first statement in a procedure body.- Improved parity for
EXECUTE AS OWNERandEXECUTE AS CALLER:EXECUTE AS OWNERandEXECUTE AS CALLERare now properly parsed in stored procedures. In addition, Procedures created withEXECUTE AS CALLERare no longer incorrectly reported asEXECUTE AS OWNER. - Better
CALLparity:CALLis 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_ACCUMULATEHyperLogLog functions.GROUPING_IDidentifies which columns in the grouping were aggregated away in a given output row.HASH_AGGcomputes a single aggregate hash value over all rows or all values of specified columns in a group.APPROX_COUNT_DISTINCTreturns the approximate number of distinct values in a column.APPROX_PERCENTILE_ACCUMULATE,APPROX_PERCENTILE_COMBINE, andAPPROX_PERCENTILE_ESTIMATEfunctions, enabling distributed percentile computation workflows.APPROX_TOP_Kfamily of aggregate functions (HandleApproxTopK,HandleApproxTopKAccumulate,HandleApproxTopKCombine, andHandleApproxTopKEstimate) for approximate top-k frequent value analysis.
String & Similarity Functions
REGEXP_SUBSTR_ALLreturns an array of all substrings matching a regular expression.JAROWINKLER_SIMILARITYcomputes 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_COUNTandBITMAP_OR_AGG. - String functions:
CHR,SOUNDEX,UNICODE,LPAD,RPAD,STRTOK,REPEAT,SPACE,TRANSLATE,INSERT,OCTET_LENGTH,REGEXP_COUNT,REGEXP_INSTR, andREGEXP_INSTR. SPLIT_TO_TABLEsplits a string by a delimiter and explodes it into rows.
Date/Time Functions
DATE_PARTextracts 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, andGETBIT. - Date/time construction, JSON validation, and XML parsing scalar functions:
YEAR,TIMESTAMP_LTZ_FROM_PARTS,CHECK_JSONandPARSE_XML.
Encryption & Compression
ENCRYPT_RAWandDECRYPT_RAWfor AES encryption/decryption.- Compression and decompression functions:
COMPRESS,DECOMPRESS_BINARY, andDECOMPRESS_STRING.
Hash & Encoding Functions
- Commonly used string, hashing, and encoding scalar SQL functions:
BIT_LENGTH,SHA2,SHA2_HEX,DECODE,MD5_BINARYandHEX_DECODE_STRING.
Stage Functions
- Stage utility functions for working with stage paths and locations:
GET_ABSOLUTE_PATH,GET_RELATIVE_PATH, andGET_STAGE_LOCATION. - Stage file URL builder functions used to construct URLs for accessing files stored in Snowflake stages:
BUILD_SCOPED_FILE_URLandBUILD_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, andFL_GET_STAGE_FILE_URL.
Statistics Functions
- Statistics SQL functions:
Corr,CovarPop,CovarSamp,DatasketchesHllAccumulate,DatasketchesHllCombine, andDatasketchesHllEstimate.
Other Functions
- Conversion functions:
AS_ARRAY,BASE64_ENCODE,BASE64_DECODE_STRING,BASE64_DECODE_BINARY,AS_DATE,AS_TIME,AS_TIMESTAMP, andAS_OBJECT. ALL_USER_NAMESreturns an array of all user names in the account.- Miscellaneous SQL functions:
CONCAT_WS,SYSTEM$SEND_EMAIL,MONTHS_BETWEEN, andSTDDEV.
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.viewsandaccount_usage.tablesto 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 andUNSET <var>andUNSET (<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
CTASwith column definitions and constraints such asNOT NULL,PRIMARY KEY, andUNIQUE(e.g.,CREATE TABLE t (col INT NOT NULL) AS SELECT ...). DROP PROCEDUREandDROP FUNCTIONare 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 theSELECT) are now properly parsed. - Improved performance of
DATASKETCHES_HLL_ACCUMULATEandDATASKETCHES_HLL_COMBINEon 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.