Documentation Index
Fetch the complete documentation index at: https://mintlify.com/daytonaio/daytona/llms.txt
Use this file to discover all available pages before exploring further.
Overview
Daytona sandboxes provide secure, isolated environments for running Jupyter notebooks with full Python capabilities, package management, and data processing - perfect for interactive data science, machine learning, and analysis workflows.
Getting Started
Quick Setup
Launch a Jupyter notebook server in a Daytona sandbox:
import { createSandbox } from '@daytona/sdk';
// Create sandbox and install Jupyter
const sandbox = await createSandbox({
name: 'jupyter-env',
public: true, // Enable preview links
});
// Install Jupyter and common data science packages
await sandbox.exec(`
pip install jupyter notebook pandas numpy matplotlib seaborn scikit-learn
`);
// Start Jupyter notebook server
const server = await sandbox.exec(
'jupyter notebook --ip=0.0.0.0 --port=8888 --no-browser --allow-root',
{ background: true }
);
// Get preview URL
const notebookUrl = sandbox.getPreviewUrl(8888);
console.log(`Jupyter Notebook: ${notebookUrl}`);
// Example: https://8888-abc123.proxy.daytona.works
Python SDK
from daytona_sdk import Daytona
import os
client = Daytona(api_key=os.getenv('DAYTONA_API_KEY'))
# Create sandbox
sandbox = client.create_sandbox(
name='jupyter-env',
public=True
)
# Install Jupyter
sandbox.exec('pip install jupyter notebook pandas matplotlib')
# Start server
sandbox.exec(
'jupyter notebook --ip=0.0.0.0 --port=8888 --no-browser --allow-root',
background=True
)
print(f'Jupyter: {sandbox.get_preview_url(8888)}')
AI-Powered Notebooks
Automated Notebook Generation
Use AI agents to generate and execute Jupyter notebooks:
import openai
from daytona_sdk import Daytona
client = openai.OpenAI()
darytona = Daytona()
# Generate notebook code with AI
response = client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "user",
"content": """
Create a Jupyter notebook for exploratory data analysis:
1. Load CSV data
2. Show summary statistics
3. Create visualizations
4. Identify correlations
Output as JSON cells format.
"""
}]
)
notebook_cells = response.choices[0].message.content
# Create sandbox and upload notebook
sandbox = daytona.create_sandbox(public=True)
sandbox.upload_file(
'/home/daytona/analysis.ipynb',
notebook_cells.encode()
)
# Start Jupyter
sandbox.exec('pip install jupyter pandas matplotlib seaborn')
sandbox.exec(
'jupyter notebook --ip=0.0.0.0 --port=8888 --no-browser',
background=True
)
print(f'Open: {sandbox.get_preview_url(8888)}')
Interactive Analysis with LangChain
Combine Jupyter with LangChain for AI-assisted data analysis:
from langchain_anthropic import ChatAnthropic
from langchain_daytona_data_analysis import DaytonaDataAnalysisTool
from langchain.agents import AgentExecutor, create_tool_calling_agent
# Initialize components
llm = ChatAnthropic(model="claude-3-5-sonnet-20241022")
tool = DaytonaDataAnalysisTool()
# Upload dataset to sandbox
with open('dataset.csv', 'rb') as f:
tool.upload_file(
file=f,
description="Sales data with columns: date, product, revenue, quantity"
)
# Create analysis agent
agent = create_tool_calling_agent(llm, [tool], prompt)
executor = AgentExecutor(agent=agent, tools=[tool])
# Run interactive analysis
queries = [
"Show me summary statistics for the dataset",
"What are the top 5 products by revenue?",
"Create a time series plot of daily revenue",
"Identify any seasonality patterns",
]
for query in queries:
print(f"\n> {query}")
result = executor.invoke({"input": query})
print(result["output"])
# Results are generated in sandbox, can be viewed in Jupyter
Advanced Configurations
JupyterLab Setup
Run the more feature-rich JupyterLab interface:
await sandbox.exec('pip install jupyterlab');
await sandbox.exec(
'jupyter lab --ip=0.0.0.0 --port=8888 --no-browser --allow-root',
{ background: true }
);
const labUrl = sandbox.getPreviewUrl(8888);
console.log(`JupyterLab: ${labUrl}`);
Custom Kernel Installation
Install additional Jupyter kernels:
# R kernel
await sandbox.exec(`
apt-get update && apt-get install -y r-base
R -e "install.packages('IRkernel')"
R -e "IRkernel::installspec(user = FALSE)"
`);
# Julia kernel
await sandbox.exec(`
wget https://julialang-s3.julialang.org/bin/linux/x64/1.9/julia-1.9.0-linux-x86_64.tar.gz
tar xvf julia-1.9.0-linux-x86_64.tar.gz
./julia-1.9.0/bin/julia -e 'using Pkg; Pkg.add("IJulia")'
`);
Data Science Environment
Create a fully-featured data science environment:
# Install comprehensive package set
packages = [
# Core
'jupyter', 'jupyterlab', 'notebook',
# Data manipulation
'pandas', 'numpy', 'scipy',
# Visualization
'matplotlib', 'seaborn', 'plotly', 'bokeh',
# Machine learning
'scikit-learn', 'xgboost', 'tensorflow', 'pytorch',
# Statistics
'statsmodels', 'scipy',
# Utils
'openpyxl', 'xlrd', 'requests', 'beautifulsoup4',
]
sandbox.exec(f'pip install {" ".join(packages)}')
GPU Support
For machine learning workloads requiring GPU:
const gpuSandbox = await createSandbox({
name: 'ml-notebook',
resources: {
gpu: '1', // Request GPU
memory: '16Gi',
cpu: '4',
},
public: true,
});
// Install CUDA-enabled packages
await gpuSandbox.exec(`
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install tensorflow[and-cuda]
`);
Common Workflows
Data Upload and Processing
// Upload datasets to sandbox
await sandbox.uploadFile(
'./local-data.csv',
'/home/daytona/data.csv'
);
await sandbox.uploadFile(
'./analysis.ipynb',
'/home/daytona/notebooks/analysis.ipynb'
);
// Install requirements
await sandbox.uploadFile(
'./requirements.txt',
'/home/daytona/requirements.txt'
);
await sandbox.exec('pip install -r requirements.txt');
Automated Execution
Execute notebooks programmatically:
# Install nbconvert for execution
sandbox.exec('pip install nbconvert')
# Execute notebook
result = sandbox.exec(
'jupyter nbconvert --to notebook --execute analysis.ipynb --output executed.ipynb'
)
# Download results
sandbox.download_file(
'/home/daytona/executed.ipynb',
'./results/executed.ipynb'
)
# Download generated artifacts
sandbox.download_file(
'/home/daytona/output.png',
'./results/output.png'
)
Collaborative Notebooks
Share notebook environments with teams:
// Create long-lived notebook environment
const sharedSandbox = await createSandbox({
name: 'team-analysis',
public: true,
timeout: '24h', // Keep alive for 24 hours
});
// Setup environment
await setupJupyterEnvironment(sharedSandbox);
// Share URL with team
const notebookUrl = sharedSandbox.getPreviewUrl(8888);
console.log(`Share this URL: ${notebookUrl}`);
// Optional: Set password protection
await sharedSandbox.exec(
`jupyter notebook password`,
{ input: 'team-password\nteam-password\n' }
);
Scheduled Notebook Runs
Schedule notebook execution for reporting:
import schedule
import time
from daytona_sdk import Daytona
def run_daily_report():
"""Execute daily analysis notebook"""
daytona = Daytona()
sandbox = daytona.create_sandbox()
try:
# Upload latest data
sandbox.upload_file('./daily-data.csv', '/data.csv')
# Execute notebook
sandbox.exec('pip install jupyter nbconvert pandas matplotlib')
sandbox.exec(
'jupyter nbconvert --to html --execute report.ipynb'
)
# Download report
sandbox.download_file(
'/home/daytona/report.html',
f'./reports/report-{date.today()}.html'
)
finally:
sandbox.delete()
# Schedule daily at 9 AM
schedule.every().day.at("09:00").do(run_daily_report)
while True:
schedule.run_pending()
time.sleep(60)
Integration with Data Analysis Agents
Combine Jupyter with AI coding agents for enhanced workflows:
import dspy
from daytona_interpreter import DaytonaInterpreter
# Create interpreter for Jupyter environment
interpreter = DaytonaInterpreter(
packages=['jupyter', 'pandas', 'matplotlib', 'seaborn']
)
# Create RLM that can use Jupyter-like REPL
lm = dspy.LM("openrouter/anthropic/claude-3.5-sonnet")
dspy.configure(lm=lm)
rlm = dspy.RLM(
signature="data_question -> analysis: str",
interpreter=interpreter,
verbose=True,
)
# RLM executes Python code iteratively
result = rlm(
data_question="""
Load the sales data, calculate monthly trends,
and create visualizations showing growth patterns.
"""
)
print(result.analysis)
interpreter.shutdown()
Reference: DSPy RLM Integration
Best Practices
Resource Management
// Set appropriate timeouts
const sandbox = await createSandbox({
timeout: '2h', // Auto-cleanup after 2 hours
resources: {
memory: '8Gi', // Sufficient for data processing
cpu: '4',
},
});
// Clean up when done
try {
await runNotebookWorkflow(sandbox);
} finally {
await sandbox.delete();
}
Security
# Use tokens for authentication
sandbox.exec(
'jupyter notebook --NotebookApp.token="secure-token-here"',
background=True
)
# Or disable auth for internal sandboxes only
sandbox.exec(
'jupyter notebook --NotebookApp.token="" --NotebookApp.password=""',
background=True
)
# Pre-install common packages in image
# Create custom sandbox image with packages pre-installed
# to reduce startup time
# Use persistent storage for large datasets
sandbox.mount_volume(
source='data-volume',
target='/home/daytona/data'
)
Troubleshooting
Notebook Server Not Starting
# Check if port is available
await sandbox.exec('netstat -tuln | grep 8888');
# View Jupyter logs
await sandbox.exec('jupyter notebook list');
Kernel Issues
# List available kernels
await sandbox.exec('jupyter kernelspec list');
# Reinstall kernel
await sandbox.exec('python -m ipykernel install --user');
Package Installation Failures
# Update pip first
await sandbox.exec('pip install --upgrade pip');
# Use specific package versions
await sandbox.exec('pip install pandas==2.0.0');