Show HN: Dakora – OSS tool to manage LLM prompts without redeploys

1 month ago 2

Try Live at playground.dakora.io

The modern prompt management platform for Python developers

Manage, version, and hot-reload prompts with type-safe inputs, interactive playground, and zero-deploy updates.

pip install dakora

🎯 Interactive Web playground like Jupyter

🛡️ Type-safe Validated inputs & outputs

⚡ Hot-reload Live template updates

🎯 Interactive Playground

Try it now at playground.dakora.io - no installation required!

Experience the exact same playground that runs locally with dakora playground, now available in your browser.

Dakora Playground Interface

Live Template Editing

Real-time syntax highlighting and validation

Interactive Testing

Test templates instantly with custom inputs

Mobile Responsive

Works perfectly on all devices

Modern UI

Built with shadcn/ui components

Powerful Features

Type-Safe Templates

Define inputs with strict typing: string, number, boolean, array, and object types with validation.

File-Based Management

Organize templates in YAML files with clear structure for easy version control.

Hot Reload

Automatic template reloading during development with built-in file watching.

Jinja2 Templating

Full Jinja2 support with custom filters for powerful template composition.

Semantic Versioning

Built-in version management with semantic versioning support.

Execution Logging

Optional SQLite logging of template executions for debugging.

CLI Interface

Complete command-line interface for template management.

Thread-Safe Caching

Production-ready with thread-safe template caching using RLock.

Quick Start

1. Initialize Project

Creates configuration file and example templates

2. Create Template

id: greeting version: 1.0.0 description: A personalized greeting template template: | Hello {{ name }}! {% if age %}You are {{ age }} years old.{% endif %} inputs: name: type: string required: true age: type: number required: false

3. Use in Python

from dakora import Vault vault = Vault("dakora.yaml") template = vault.get("greeting") result = template.render(name="Alice", age=25) print(result)

Real-World Examples

FastAPI + OpenAI Integration

Perfect for building LLM-powered APIs with structured prompts and type validation.

from fastapi import FastAPI from dakora import Vault from openai import OpenAI app = FastAPI() vault = Vault("dakora.yaml") client = OpenAI() @app.post("/chat") async def chat_endpoint( message: str, template_id: str ): template = vault.get(template_id) # Define completion function def get_completion(prompt): response = client.chat.completions.create( model="gpt-4", messages=[{ "role": "user", "content": prompt }] ) return response.choices[0].message.content result = template.run( get_completion, message=message ) return {"response": result}

Development Workflow

Hot-reload templates during development for rapid iteration and testing.

from dakora import Vault from dakora.watcher import Watcher vault = Vault("dakora.yaml") # Setup file watcher watcher = Watcher( "./prompts", on_change=vault.invalidate_cache ) watcher.start() # Templates reload automatically template = vault.get("my_template") result = template.render( input_text="Hello world" )

CLI Workflow

Manage templates, versions, and development workflow from the command line.

# List all templates dakora list # Get template content dakora get summarizer # Bump version dakora bump summarizer --minor # Watch for changes dakora watch

Join the Community

Help make Dakora better for everyone

Read Entire Article