Skip to main content

Multi-language notebook extension for JupyterLab with SQL, charting, and cross-language data sharing

Project description

Alloy Notebooks

Multi-language notebooks for JupyterLab -- write SQL, Python, and R in the same notebook with seamless data sharing between languages.

Built as a replacement for Azure Data Studio's notebook experience, which was retired in February 2026.

JupyterLab 4 Python 3.10+ License

Features

SQL Cells with Inline Results

  • Set any cell to SQL using the unified dropdown (Python | SQL | R | Markdown | Raw)
  • SQL syntax highlighting
  • Results rendered as interactive tables with row counts
  • Click Chart to see value-count bar charts for each column -- no code needed
  • Click Configure Chart for custom visualizations (bar, line, scatter, pie, area, histogram)

Connection Manager

  • Sidebar panel to save and manage database connections
  • Supports SQL Server, PostgreSQL, MySQL, SQLite, DuckDB
  • Auto-detects installed ODBC drivers
  • Windows Authentication and SQL Authentication
  • Connections persist across sessions (~/.alloy/connections.json)

DuckDB Cells — Query DataFrames with SQL

  • Set any cell to DuckDB in the dropdown
  • Write SQL that queries your pandas DataFrames as if they were tables
  • JOIN across DataFrames, use window functions, CTEs — full SQL power
  • Results saved as _alloy_last_result or via -- save as: varname
  • No database connection needed — DuckDB runs in-process
  • Can also read Parquet/CSV files: SELECT * FROM 'data.parquet'

Multiple Database Connections

  • Connect to multiple databases simultaneously (SQL Server, PostgreSQL, MariaDB, etc.)
  • Each connection gets a named alias
  • Target specific connections with -- connection: alias in SQL cells
  • Sidebar shows all active connections with green indicators
  • Auto-reconnects all connections when the kernel restarts

Cross-Language Data Sharing

  • SQL results automatically available as pandas DataFrames in Python
  • Name your results with -- save as: my_data in SQL cells
  • R cells automatically receive only the Python variables they reference (smart transfer)
  • New R variables (data.frames) automatically come back to Python after execution
  • Uses Apache Arrow for near-zero-copy transfers when pyarrow + rpy2-arrow are installed (~425x faster than pandas2ri)
  • %alloy_vars magic to list all available DataFrames

Language Icons

  • Small language icons (Python, SQL, R, Markdown) on the left margin of each cell
  • Toggleable via Settings > Alloy Notebooks > "Show language icons"

Unified Cell Type Dropdown

  • Single dropdown replacing JupyterLab's Code/Markdown/Raw and a separate language selector
  • Options: Python | SQL | R | Markdown | Raw
  • Switching languages updates syntax highlighting instantly

Install

From PyPI (recommended)

pip install alloy-notebooks

From GitHub (latest development version)

pip install git+https://github.com/Columbia-Data-Labs/alloy-notebooks.git

Optional dependencies

For SQL Server connections:

pip install pyodbc

For R support:

pip install rpy2

For fast data transfer between Python and R (near-zero-copy via Apache Arrow):

pip install pyarrow rpy2-arrow

Quick Start

  1. Install: pip install alloy-notebooks
  2. Start JupyterLab: jupyter lab
  3. Connect: Click "Alloy" in the left sidebar, add a database connection
  4. Write SQL: Create a cell, select "SQL" from the dropdown, write a query, run it
  5. See results: Table with Chart button appears below the cell
  6. Use in Python: Results are in _alloy_last_result, or use -- save as: my_df to name them
  7. Use in R: Switch a cell to "R", reference your DataFrame by name -- it transfers automatically

Example Workflow

SQL cell (default connection):

-- save as: orders
SELECT customer_name, product, quantity, price
FROM sales.orders
WHERE order_date > '2026-01-01'

SQL cell (specific connection):

-- connection: nas
-- save as: backups
SELECT * FROM backup_logs ORDER BY created_at DESC

DuckDB cell (query DataFrames with SQL — no database needed):

-- save as: top_customers
SELECT customer_name, SUM(quantity * price) as revenue
FROM orders
GROUP BY customer_name
ORDER BY revenue DESC
LIMIT 10

Python cell:

# 'orders' and 'top_customers' are both pandas DataFrames
orders['total'] = orders['quantity'] * orders['price']
print(orders.describe())

R cell:

# 'orders' transfers automatically -- only this variable, not everything
summary(orders)
model <- lm(total ~ quantity, data = orders)
summary(model)

Python cell:

# 'model' created in R is available if it's a data.frame
# Use %alloy_vars to see all available DataFrames
%alloy_vars

Platform Support

Works on Windows, Linux, and macOS. R and ODBC driver paths are auto-detected per platform.

Requirements

  • JupyterLab >= 4.0.0
  • Python >= 3.10

Database drivers

Database Package Notes
SQL Server pyodbc Windows: ODBC Driver 17/18. Linux/Mac: unixodbc + Microsoft ODBC driver or FreeTDS
PostgreSQL psycopg2 pip install psycopg2-binary
MySQL/MariaDB pymysql pip install pymysql
SQLite (built-in) No extra install needed
DuckDB duckdb pip install duckdb

SQL Server on Linux/Mac

# Ubuntu/Debian
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
sudo apt-get install -y msodbcsql18 unixodbc-dev
pip install pyodbc

# macOS (Homebrew)
brew install unixodbc microsoft/mssql-release/msodbcsql18
pip install pyodbc

R integration

  • Install R (4.4+) for your platform
  • pip install rpy2
  • For fast transfers: pip install pyarrow rpy2-arrow
  • R_HOME is auto-detected on all platforms

Development

# Clone and install in development mode
git clone https://github.com/Columbia-Data-Labs/alloy-notebooks.git
cd alloy-notebooks
pip install -e ".[dev]"
jlpm install
jlpm build

# Watch for changes
jlpm watch  # in one terminal
jupyter lab  # in another terminal

License

BSD-3-Clause

Acknowledgments

Inspired by Azure Data Studio notebooks and built on top of JupySQL for SQL execution.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

alloy_notebooks-0.4.1.tar.gz (212.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

alloy_notebooks-0.4.1-py3-none-any.whl (72.1 kB view details)

Uploaded Python 3

File details

Details for the file alloy_notebooks-0.4.1.tar.gz.

File metadata

  • Download URL: alloy_notebooks-0.4.1.tar.gz
  • Upload date:
  • Size: 212.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for alloy_notebooks-0.4.1.tar.gz
Algorithm Hash digest
SHA256 eb24149683c597e64bee6a0754093cb05d4d55d0e6c72b4f45ad46c2e26107b1
MD5 c6a748885eeec302fdb5c7ec2ea5bdc5
BLAKE2b-256 bf7d4f7d06e16e181daa6f2a1aa66a6a83dd68a5d0a175eb7015f6d771e5a452

See more details on using hashes here.

File details

Details for the file alloy_notebooks-0.4.1-py3-none-any.whl.

File metadata

File hashes

Hashes for alloy_notebooks-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4fcc8f39a9cd166c28824a3964994119f1359da62810bb2de4159f85debb1aab
MD5 1a5ca98e45871121ebacfbe3f5f70b1b
BLAKE2b-256 e9f1d6ad15ee5eb44a9f4728467e8f42f0555ade9af44bef0b28077f4e3d54ef

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page