Supports two runtime options: Warehouse Runtime (personal instances, Anaconda packages) and Container Runtime (shared instances, PyPI packages, significantly lower cost)
Includes Snowpark session integration for native data access, multi-page app structure, and caller's rights connections (v1.53.0+) for per-user data isolation
Prevents 14 documented errors including package cha
Confirm successful installation by checking the skill directory location:
.cursor/skills/streamlit-snowflake
Restart Cursor to activate streamlit-snowflake. Access via /streamlit-snowflake in your agent's command palette.
โ
Security Notice
We perform automated surface-level scans (Gen AI Scanner, Socket, Snyk) during installation. These checks detect common vulnerabilities but do not guarantee complete security. Always review skill source code and verify the publisher's reputation before production use.
Skills execute code in your environment. Always review source, verify the publisher, and test in isolation before production.
import streamlit as st
# Get Snowpark session (native SiS connection)conn = st.connection("snowflake")session = conn.session()# Query datadf = session.sql("SELECT * FROM my_table LIMIT 100").to_pandas()st.dataframe(df)
Caller's Rights Connection (v1.53.0+)
Execute queries with viewer's privileges instead of owner's privileges:
import streamlit as st
# Use caller's rights for data isolationconn = st.connection("snowflake",type="callers_rights")# Each viewer sees only data they have permission to accessdf = conn.query("SELECT * FROM sensitive_customer_data")st.dataframe(df)
@st.cache_data(ttl=600)# Cache for 10 minutesdefload_data(query:str): conn = st.connection("snowflake")return conn.session().sql(query).to_pandas()# Use cached functiondf = load_data("SELECT * FROM large_table")
Warning: In Streamlit v1.22.0-1.53.0, params argument is not included in cache key. Use ttl=0 to disable caching when using parametrized queries, or upgrade to 1.54.0+ when available (Issue #13644).
Optimizing Snowpark DataFrame Performance
When using Snowpark DataFrames with charts or tables, select only required columns to avoid fetching unnecessary data:
# โ Fetches all 50 columns even though chart only needs 2df = session.table("wide_table")# 50 columnsst.line_chart(df, x="date", y="value")# โ Fetch only needed columns for better performancedf = session.table("wide_table").select("date","value")st.line_chart(df, x="date", y="value")# 5-10x faster for wide tables
Why it matters: st.dataframe() and chart components call df.to_pandas() which evaluates ALL columns, even if the visualization only needs some. Pre-selecting columns reduces data transfer and improves performance (Issue #11701).
Environment Configuration
environment.yml (required format):
name: sf_env
channels:- snowflake # REQUIRED - only supported channeldependencies:- streamlit=1.35.0 # Explicit version (default is old 1.22.0)- pandas
- plotly
- altair=4.0 # Version 4.0 supported in SiS- snowflake-snowpark-python
Error Prevention
This skill prevents 14 documented errors:
Error
Cause
Prevention
PackageNotFoundError
Using conda-forge or external channel
Use channels: - snowflake (or Container Runtime for PyPI)
Missing Streamlit features
Default version 1.22.0
Explicitly set streamlit=1.35.0 (or use Container Runtime for 1.49+)
ROOT_LOCATION deprecated
Old CLI syntax
Use Snowflake CLI 3.14.0+ with FROM source_location
Auth failures (2026+)
Password-only authentication
Use key-pair or OAuth (see references/authentication.md)
File upload fails
File >200MB
Keep uploads under 200MB limit
DataFrame display fails
Data >32MB
Paginate or limit data before display
page_title not supported
SiS limitation
Don't use page_title, page_icon, or menu_items in st.set_page_config()
Custom component error
SiS limitation
Only components without external service calls work
_snowflake module not found
Container Runtime migration
Use from snowflake.snowpark.context import get_active_session instead of from _snowflake import get_active_session (Migration Guide)
Cached query returns wrong data with different params
params not in cache key (v1.22.0-1.53.0)
Use ttl=0 to disable caching for parametrized queries, or upgrade to 1.54.0+ when available (Issue #13644)
Invalid connection_name 'default' with kwargs only
Missing secrets.toml or connections.toml
Create minimal .streamlit/secrets.toml with [connections.snowflake] section (Issue #9016)
Native App upgrades unexpectedly
Implicit default Streamlit version (BCR-1857)
Explicitly set streamlit=1.35.0 in environment.yml to prevent automatic version changes (BCR-1857)
File paths fail in Container Runtime subdirectories
Some commands use entrypoint-relative paths
Use pathlib to resolve absolute paths: Path(__file__).parent / "assets/logo.png" (Runtime Docs)
Slow performance with wide Snowpark DataFrames
st.dataframe() fetches all columns even if unused
Pre-select only needed columns: df.select("col1", "col2") before passing to Streamlit (Issue #11701)
Deployment Commands
Basic Deployment
# Deploy and replace existingsnow streamlit deploy --replace# Deploy and open in browsersnow streamlit deploy --replace--open# Deploy specific entity (if multiple in snowflake.yml)snow streamlit deploy my_app --replace
CI/CD Deployment
See references/ci-cd.md for GitHub Actions workflow template.
Marketplace Publishing (Native App)
To publish your Streamlit app to Snowflake Marketplace:
Convert to Native App - Use templates-native-app/ templates
Create Provider Profile - Required for Marketplace listings
Submit for Approval - Snowflake reviews before publishing
See templates-native-app/README.md for complete workflow.
Only packages from the Snowflake Anaconda Channel are available:
-- Query available packagesSELECT*FROM information_schema.packages
Implementation Guide
Prerequisites
โบClaude Desktop or compatible AI client with skill support
โบClear understanding of task or problem to solve
โบWillingness to iterate and refine outputs
Time Estimate
15-45 minutes depending on use case complexity
Steps
1Install skill using provided installation command
2Test with simple use case relevant to your work
3Evaluate output quality and relevance
4Iterate on prompts to improve results
5Integrate into regular workflow if valuable
Common Pitfalls
โ Expecting perfect results without iteration
โ Not providing enough context in prompts
โ Using skill for tasks outside its intended scope
โ Accepting outputs without review and validation
Best Practices
โ Do
+Start with clear, specific prompts
+Provide relevant context and constraints
+Review and refine all outputs before using
+Iterate to improve output quality
+Document successful prompt patterns
โ Don't
โDon't use without understanding skill limitations
โDon't skip validation of outputs
โDon't share sensitive information in prompts
โDon't expect skill to replace human judgment
๐ก Pro Tips
โ Be specific about desired format and style
โ Ask for multiple options to choose from
โ Request explanations to understand reasoning
โ Combine AI efficiency with human expertise
When to Use This
โ Use when
Use when skill capabilities match your task, clear ROI on time saved, and you can validate outputs. Best for repetitive tasks, learning, and quality improvement.
โ Avoid when
Avoid when task requires deep expertise you can't validate, involves sensitive decisions, or when learning process is more valuable than speed of completion.
Learning Path
1Familiarize yourself with skill capabilities and limitations
2Start with low-risk, non-critical tasks
3Progress to more complex and valuable use cases
4Build expertise through regular use and experimentation