Skip to content

Getting Started

The Daytona SDK provides official Python and TypeScript interfaces for interacting with Daytona, enabling you to programmatically manage development environments and execute code.

Follow the step by step guide to create and run your first Daytona Sandbox for an AI Agent.

For steps on additional configuration, including setting environmnent variables as well as accessing experimental features on our staging deployment, visit Configuration.

Install the Daytona SDK

Daytona provides official Python and TypeScript SDKs for interacting with the Daytona platform. Install the SDK using your preferred method:

Terminal window
pip install daytona-sdk

Run Code Inside a Sandbox

Run the following code to create a Daytona Sandbox and execute commands:

from daytona_sdk import Daytona, DaytonaConfig, CreateSandboxParams
# Initialize the Daytona client
daytona = Daytona(DaytonaConfig(api_key="YOUR_API_KEY"))
# Create the Sandbox instance
sandbox = daytona.create(CreateSandboxParams(language="python"))
# Run code securely inside the Sandbox
response = sandbox.process.code_run('print("Sum of 3 and 4 is " + str(3 + 4))')
if response.exit_code != 0:
print(f"Error running code: {response.exit_code} {response.result}")
else:
print(response.result)
# Clean up the Sandbox
daytona.remove(sandbox)
Terminal window
python main.py

Preview Your App

The following snippet uploads a file containing a simple Flask app to a Daytona Sandbox. The web server runs on port 3000 and is accessible through the provided preview URL:

from daytona_sdk import Daytona, DaytonaConfig, SessionExecuteRequest
daytona = Daytona(DaytonaConfig(api_key="YOUR_API_KEY"))
sandbox = daytona.create()
app_code = b'''
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return """
<!DOCTYPE html>
<html>
<head>
<title>Hello World</title>
<link rel="icon" href="https://www.daytona.io/favicon.ico">
</head>
<body style="display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background-color: #0a0a0a; font-family: Arial, sans-serif;">
<div style="text-align: center; padding: 2rem; border-radius: 10px; background-color: white; box-shadow: 0 4px 8px rgba(0,0,0,0.1);">
<img src="https://raw.githubusercontent.com/daytonaio/daytona/main/assets/images/Daytona-logotype-black.png" alt="Daytona Logo" style="width: 180px; margin: 10px 0px;">
<p>This web app is running in a Daytona sandbox!</p>
</div>
</body>
</html>
"""
if __name__ == '__main__':
app.run(host='0.0.0.0', port=3000)
'''
# Save the Flask app to a file
sandbox.fs.upload_file(sandbox.get_user_root_dir() + "/app.py", app_code)
# Create a new session and execute a command
exec_session_id = "python-app-session"
sandbox.process.create_session(exec_session_id)
sandbox.process.execute_session_command(exec_session_id, SessionExecuteRequest(
command="python " + sandbox.get_user_root_dir() + "/app.py",
var_async=True
))
# Get the preview link for the Flask app
preview_info = sandbox.get_preview_link(3000)
print(f"Flask app is available at: {preview_info.url}")

Need to access this endpoint programmatically? Learn more about Preview & Authentication.

Connect to an LLM

The following snippet connects to an LLM using the Anthropic API and asks Claude to generate code for getting the factorial of 25 and then executes it inside of a Daytona Sandbox:

import os
import re
import requests
from daytona_sdk import Daytona, DaytonaConfig
from dotenv import load_dotenv
load_dotenv()
daytona = Daytona(DaytonaConfig())
sandbox = daytona.create()
def get_claude_response(api_key, prompt):
url = "https://api.anthropic.com/v1/messages"
headers = {
"x-api-key": api_key,
"anthropic-version": "2023-06-01",
"Content-Type": "application/json"
}
data = {
"model": "claude-3-7-sonnet-latest",
"max_tokens": 256,
"messages": [{"role": "user", "content": prompt}]
}
response = requests.post(url, json=data, headers=headers)
if response.status_code == 200:
content = response.json().get("content", [])
return "".join([item["text"] for item in content if item["type"] == "text"])
else:
return f"Error {response.status_code}: {response.text}"
prompt = "Python code that returns the factorial of 25. Output only the code. No explanation. No intro. No comments. Just raw code in a single code block."
result = get_claude_response(os.environ["ANTHROPIC_API_KEY"], prompt)
code_match = re.search(r"```python\n(.*?)```", result, re.DOTALL)
code = code_match.group(1) if code_match else result
code = code.replace('\\', '\\\\')
# Run Python code inside the Sandbox and get the output
response = sandbox.process.code_run(code)
print("The factorial of 25 is", response.result)

Running the snippet:

Terminal window
ANTHROPIC_API_KEY="your-anthropic-api-key"
DAYTONA_API_KEY="your-daytona-api-key"
DAYTONA_TARGET=us
python claude-example.py
Terminal window
> The factorial of 25 is 15511210043330985984000000

Additional Examples

Use the Daytona SDK Python examples or TypeScript/JavaScript examples to create a Sandbox and run your code.

Speed up your development on Daytona using LLMs. Copy the /llms.txt files and include them into your projects or chat context: llms-full.txt or llms.txt

Learn more by checkout out the Daytona SDK repository on GitHub.

Setting up the Daytona CLI

If you want to use images from your local device or simply prefer managing your Sandboxes using the command line interface, install the Daytona CLI by running:

Terminal window
brew install daytonaio/cli/daytona