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.6.tar.gz (214.2 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.6-py3-none-any.whl (72.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: alloy_notebooks-0.4.6.tar.gz
  • Upload date:
  • Size: 214.2 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.6.tar.gz
Algorithm Hash digest
SHA256 c6fcb870880034a8a6ea826bd1b08000120fefbc02ebac6de85a2acc5198c835
MD5 8455806f1708584334f678b5cc64945a
BLAKE2b-256 08aab35ce47d28a9a4278258d625fae8d03720ff8e533d3f09b3642b6196464d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for alloy_notebooks-0.4.6-py3-none-any.whl
Algorithm Hash digest
SHA256 defd5e22cec6a91f77839425f508aef10f914ac3923da18811d317de0ea431f3
MD5 45d73f288031ce43c1e9bf9700f62c52
BLAKE2b-256 fa73179a34eecb40e2da1a670ec7d35eacd5523759d80e912710e0ab1b5785e0

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