name: langfuse-install-auth description: 'Install and configure Langfuse SDK authentication for LLM observability.
Use when setting up a new Langfuse integration, configuring API keys,
or initializing Langfuse tracing in your project.
Trigger with phrases like "install langfuse", "setup langfuse",
"langfuse auth", "configure langfuse API key", "langfuse tracing setup".
' allowed-tools: Read, Write, Edit, Bash(npm:), Bash(pip:), Bash(pnpm:*), Grep version: 1.0.0 license: MIT author: Jeremy Longshore jeremy@intentsolutions.io tags:
- saas
- langfuse
- api
- observability
- llm compatibility: Designed for Claude Code, also compatible with Codex and OpenClaw
Langfuse Install & Auth
Overview
Install the Langfuse SDK and configure authentication for LLM observability. Covers both the legacy langfuse package (v3) and the modern modular SDK (v4+/v5) built on OpenTelemetry.
Prerequisites
- Node.js 18+ or Python 3.9+
- Package manager (npm, pnpm, or pip)
- Langfuse account (cloud at https://cloud.langfuse.com or self-hosted)
- Public Key (
pk-lf-...) and Secret Key (sk-lf-...) from project settings
Instructions
Step 1: Install SDK
TypeScript/JavaScript (v4+ modular SDK -- recommended):
set -euo pipefail
# Core client for prompt management, datasets, scores
npm install @langfuse/client
# Tracing (observe, startActiveObservation)
npm install @langfuse/tracing @langfuse/otel @opentelemetry/sdk-node
# OpenAI integration (drop-in wrapper)
npm install @langfuse/openai
# LangChain integration
npm install @langfuse/langchain
TypeScript/JavaScript (v3 legacy -- single package):
npm install langfuse
Python:
pip install langfuse
Step 2: Get API Keys
- Open Langfuse dashboard (https://cloud.langfuse.com or your self-hosted URL)
- Go to Settings > API Keys
- Click Create new API key pair
- Copy both keys:
- Public Key:
pk-lf-...(identifies your project) - Secret Key:
sk-lf-...(grants write access -- keep secret)
- Public Key:
- Note the host URL (cloud default:
https://cloud.langfuse.com)
Step 3: Configure Environment Variables
# Set environment variables
export LANGFUSE_PUBLIC_KEY="pk-lf-..."
export LANGFUSE_SECRET_KEY="sk-lf-..."
export LANGFUSE_BASE_URL="https://cloud.langfuse.com"
# Or create .env file
cat >> .env << 'EOF'
LANGFUSE_PUBLIC_KEY=pk-lf-your-public-key
LANGFUSE_SECRET_KEY=sk-lf-your-secret-key
LANGFUSE_BASE_URL=https://cloud.langfuse.com
EOF
Note: v4+ uses
LANGFUSE_BASE_URL. Legacy v3 usesLANGFUSE_HOSTorLANGFUSE_BASEURL.
Step 4: Initialize and Verify (v4+ Modular SDK)
// src/lib/langfuse.ts
import { LangfuseClient } from "@langfuse/client";
import { startActiveObservation } from "@langfuse/tracing";
import { LangfuseSpanProcessor } from "@langfuse/otel";
import { NodeSDK } from "@opentelemetry/sdk-node";
// 1. Register the OpenTelemetry span processor (once at app startup)
const sdk = new NodeSDK({
spanProcessors: [new LangfuseSpanProcessor()],
});
sdk.start();
// 2. Create the Langfuse client for prompt/dataset/score operations
export const langfuse = new LangfuseClient({
publicKey: process.env.LANGFUSE_PUBLIC_KEY,
secretKey: process.env.LANGFUSE_SECRET_KEY,
baseUrl: process.env.LANGFUSE_BASE_URL,
});
// 3. Verify connection
async function verify() {
await startActiveObservation("connection-test", async (span) => {
span.update({ input: { test: true } });
span.update({ output: { status: "connected" } });
});
console.log("Langfuse connection verified. Check dashboard for trace.");
}
verify();
Step 5: Initialize and Verify (v3 Legacy SDK)
import { Langfuse } from "langfuse";
const langfuse = new Langfuse({
publicKey: process.env.LANGFUSE_PUBLIC_KEY,
secretKey: process.env.LANGFUSE_SECRET_KEY,
baseUrl: process.env.LANGFUSE_HOST,
});
// Verify with a test trace
const trace = langfuse.trace({
name: "connection-test",
metadata: { test: true },
});
await langfuse.flushAsync();
console.log("Connected. Trace URL:", trace.getTraceUrl());
// Clean shutdown
process.on("beforeExit", async () => {
await langfuse.shutdownAsync();
});
Step 6: Python Verification
from langfuse import Langfuse
import os
langfuse = Langfuse(
public_key=os.environ["LANGFUSE_PUBLIC_KEY"],
secret_key=os.environ["LANGFUSE_SECRET_KEY"],
host=os.environ.get("LANGFUSE_HOST", "https://cloud.langfuse.com"),
)
# Test trace
trace = langfuse.trace(name="connection-test", metadata={"test": True})
langfuse.flush()
print(f"Connected. Trace: {trace.get_trace_url()}")
SDK Version Comparison
| Feature | v3 (langfuse) | v4+ (@langfuse/*) |
|---|---|---|
| Package | Single langfuse | Modular: @langfuse/client, @langfuse/tracing, @langfuse/otel |
| Base URL env var | LANGFUSE_HOST | LANGFUSE_BASE_URL |
| Tracing | langfuse.trace() | startActiveObservation() / observe() |
| Client class | Langfuse | LangfuseClient |
| OpenAI wrapper | observeOpenAI() from langfuse | observeOpenAI() from @langfuse/openai |
| Foundation | Custom | OpenTelemetry |
Error Handling
| Error | Cause | Solution |
|---|---|---|
401 Unauthorized | Invalid or expired API key | Re-check keys in Langfuse dashboard Settings > API Keys |
ECONNREFUSED | Wrong host URL or server down | Verify LANGFUSE_BASE_URL / LANGFUSE_HOST |
Missing required configuration | Env vars not loaded | Ensure dotenv/config imported at entry point |
Module not found | Package not installed | Run npm install or pip install again |
| Using pk- key as secret | Keys swapped | Public key starts pk-lf-, secret starts sk-lf- |
Resources
Next Steps
After auth is working, proceed to langfuse-hello-world for your first traced LLM call.