One binary. Zero dependencies. Rust-powered. Privacy-first.
![]() |
![]() |
![]() |
| Cost Dashboard | Model Registry | Budget Management |
# Install
curl -fsSL https://ember.dev/install.sh | sh
# Set ONE environment variable
export OPENAI_API_KEY="sk-..."
# Start chatting
ember chatNo API keys. No internet. No costs. Complete privacy.
# Install Ollama (one time)
curl -fsSL https://ollama.ai/install.sh | sh
ollama pull llama3.2
# Install Ember
curl -fsSL https://ember.dev/install.sh | sh
# Chat - completely offline
ember chat --provider ollamadocker run -it --rm ghcr.io/niklasmarderx/Ember chat "Hello!"# Start the web server
ember serve
# Open in browser
open http://localhost:3000Every developer who wants to build an AI agent faces the same frustration:
# What you expect:
pip install agent-framework && python my_agent.py
# What you get:
pip install agent-framework
# -> 500+ dependencies downloading...
# -> 15 minutes later...
# -> "ERROR: Dependency conflict between X and Y"
# -> "ModuleNotFoundError: No module named 'abc'"
# -> Stack Overflow, Reddit, GitHub issues...
# -> 2 hours later: "It works... sometimes"Sound familiar? This is the reality of Python-based AI frameworks.
| Problem | Cause |
|---|---|
| Slow startup (2-5 seconds) | Python interpreter, importing hundreds of modules |
| High memory (500MB+) | Garbage collector, dynamic typing overhead |
| Dependency hell | Python's global package system, conflicting versions |
| "Works on my machine" | Different Python versions, OS-specific paths |
| Internet required | Most frameworks need cloud APIs for basic functions |
We asked: What if we started from scratch?
Not "Python but faster" - a complete rethinking of what an AI agent framework should be.
# Install (5 seconds)
curl -fsSL https://ember.dev/install.sh | sh
# Run (immediately)
ember chat "Help me refactor this code"Why it works:
| Ember | Why |
|---|---|
| Single 15MB binary | Rust compiles everything to native code |
| 80ms cold start | No interpreter, no dynamic loading |
| 45MB memory | No GC, precise memory management |
| Zero dependencies | Everything is statically linked |
| Works offline | Local models with Ollama support |
| Type-safe | Compiler catches errors before runtime |
Ember is a program that lets you chat with AI and have it do things on your computer.
Think of it like having a smart assistant that can:
- Answer your questions (like ChatGPT)
- Write code for you
- Create and edit files
- Run terminal commands
- Browse the web
But unlike other tools:
- You download ONE file, and it works
- No need to install Python, Node.js, or anything else
- It can run completely offline (free, no API costs)
- It starts instantly (not "loading... please wait")
# Ask a question
ember chat "What is the capital of France?"
# Have it write code
ember chat "Write a Python script that counts words in a file"
# Have it do something
ember chat --tools shell "Create a new folder called 'my-project' and initialize git"If you've built AI agents before, you know the pain. Here's why Ember is architecturally different:
// This compiles to the SAME assembly as hand-written loops
let response = providers
.iter()
.filter(|p| p.supports_streaming())
.find(|p| p.latency_ms() < 100)
.map(|p| p.complete(request))
.await?;No runtime overhead. No vtable lookups for hot paths. No GC pauses mid-generation.
// Spawn thousands of agents without thread-safety bugs
let handles: Vec<_> = (0..1000)
.map(|i| {
let agent = agent.clone(); // Arc<Agent>, not copying
tokio::spawn(async move {
agent.process_task(tasks[i]).await
})
})
.collect();
// All compile-time guaranteed to be data-race free
let results = futures::future::join_all(handles).await;Rust's ownership system makes it impossible to write data races. Not "unlikely" - impossible.
// This won't compile - caught at build time
let config = Config::load(&path)?; // Returns Result<Config, Error>
config.api_key.len(); // ERROR: might be None
// You must handle the error
match Config::load(&path) {
Ok(config) => use_config(config),
Err(e) => handle_error(e),
}No more "AttributeError: NoneType has no attribute 'x'" at 3 AM in production.
Python agent:
Request 1: 234ms
Request 2: 1,847ms <- GC pause
Request 3: 198ms
Request 4: 2,103ms <- GC pause
Ember:
Request 1: 12ms
Request 2: 11ms
Request 3: 12ms
Request 4: 11ms
No garbage collector means no surprise pauses. Critical for real-time applications.
# Python deployment
scp -r ./project user@server:/app
ssh user@server "cd /app && python -m venv venv && source venv/bin/activate && pip install -r requirements.txt && python main.py"
# Hope you have the same Python version... and OpenSSL... and libffi...
# Ember deployment
scp ./ember user@server:/usr/local/bin/
ssh user@server "ember serve"
# Done. It just works. User
|
+-----------+-----------+----------+
| | | |
CLI Web UI Desktop Library
| | | |
+-----------+-----------+----------+
|
[ember-core]
Agent Runtime & Memory
|
+--------+--------+--------+--------+
| | | | |
[llm] [tools] [storage] [browser] [mcp]
9+ APIs Shell,FS SQLite, Browser Model
Git,Web Vector Control Context
| | | | |
+--------+--------+--------+--------+
|
+------------+------------+
| | |
[plugins] [telemetry] [i18n]
WASM Ext. Privacy-first 6 Languages
| Crate | Purpose | Key Features |
|---|---|---|
| ember-core | Agent runtime | Memory, context, planning, checkpoints |
| ember-llm | LLM providers | OpenAI, Anthropic, Ollama, 9+ providers |
| ember-tools | Built-in tools | Shell, filesystem, Git, web, code execution |
| ember-storage | Persistence | SQLite, vector DB, RAG, embeddings |
| ember-plugins | Extensions | WASM runtime, hot reload, marketplace |
| ember-browser | Browser automation | Headless Chromium, screenshots, scraping |
| ember-mcp | Model Context Protocol | External tool integration, MCP servers |
| ember-cli | Command line | Interactive chat, TUI, configuration |
| ember-web | Web interface | REST API, WebSocket, React dashboard |
| ember-desktop | Desktop app | Tauri-based native application |
| ember-telemetry | Analytics | Privacy-first, opt-in, anonymized metrics |
| ember-i18n | Internationalization | 11 languages (EN, DE, FR, ES, ZH, JA, PT, KO, IT, RU, AR) |
| ember-benchmarks | Performance | Criterion benchmarks, CI integration |
| ember-code | Code Intelligence | Code analysis, refactoring, test generation |
| ember-learn | Adaptive Learning | User preferences, pattern recognition, smart suggestions |
| ember-voice | Voice Interface | Speech-to-text, text-to-speech, voice commands |
| ember-enterprise | Enterprise | SSO (SAML/OIDC), RBAC, audit logging, team management |
| Feature | Description | Status |
|---|---|---|
| Multi-Provider Support | Switch between 9+ LLM providers with one flag | Stable |
| Streaming Responses | Real-time token streaming for all providers | Stable |
| Conversation Memory | Persistent chat history with semantic search | Stable |
| Plan/Act Mode | Review plans before execution for complex tasks | Stable |
| Checkpoints | Undo/redo any action, never lose progress | Stable |
| Cost Tracking | Real-time pricing, budget alerts, cost prediction | Stable |
| Tool | Capability |
|---|---|
| Shell | Execute terminal commands (sandboxed) |
| Filesystem | Read, write, search files (sandboxed) |
| Git | Clone, commit, push, branch operations |
| Web | HTTP requests, web scraping |
| Browser | Headless browser automation (Chromium) |
| Code Execution | Run Python, JavaScript, Rust in sandbox |
| Feature | Description |
|---|---|
| Multi-Agent Orchestration | Teams of specialized agents working together |
| Knowledge Graph | Semantic relationships between concepts |
| Self-Healing | Automatic error recovery and circuit breakers |
| Privacy Shield | PII detection and automatic redaction |
| Security Sandbox | Syscall filtering, resource limits |
| WASM Plugins | Extend with any language that compiles to WASM |
| Feature | Description |
|---|---|
| Chat Interface | Markdown rendering, code highlighting, streaming |
| Cost Dashboard | Usage graphs, spending by provider, budget alerts |
| Model Selector | Switch providers/models without restart |
| Conversation History | Browse, search, continue past sessions |
| Dark Mode | System-aware theme switching |
| REST API | Programmatic access to all features |
| WebSocket | Real-time streaming for integrations |
| Feature | Description |
|---|---|
| Code Analysis | Static analysis, complexity metrics, dependency graphs |
| Smart Refactoring | Extract functions, rename symbols, optimize imports |
| Test Generation | Automatic unit test creation for Rust, Python, TypeScript |
| Git Integration | Semantic commit messages, PR descriptions, changelog generation |
| Feature | Description |
|---|---|
| User Preferences | Learns coding style, preferred providers, response format |
| Pattern Recognition | Detects repetitive tasks and suggests automation |
| Smart Suggestions | Context-aware recommendations based on usage history |
| Profile Management | Export/import user profiles across installations |
| Feature | Description |
|---|---|
| Speech-to-Text | Whisper integration for voice input |
| Text-to-Speech | Natural voice output for responses |
| Voice Commands | Hands-free control ("Hey Ember, run tests") |
| Multi-language | Voice recognition in 10+ languages |
| Feature | Description |
|---|---|
| SSO Authentication | SAML 2.0, OIDC, OAuth2 integration |
| Role-Based Access Control | Fine-grained permissions and policies |
| Audit Logging | Complete activity trail for compliance |
| Team Management | Organizations, projects, resource sharing |
| Feature | Description |
|---|---|
| Kubernetes | Production-ready manifests with auto-scaling |
| Helm Charts | One-command deployment with customization |
| Terraform | AWS infrastructure as code (EKS, RDS, S3) |
| High Availability | Multi-replica, health checks, rolling updates |
| Provider | Models | Best For | Pricing |
|---|---|---|---|
| OpenAI | GPT-4o, GPT-4o-mini, o1, o3-mini | General purpose | Paid |
| Anthropic | Claude 3.5 Sonnet/Haiku/Opus | Coding, analysis | Paid |
| Google Gemini | Gemini 2.0 Flash, 1.5 Pro | 2M context, multimodal | Free tier |
| DeepSeek | V3, R1 Reasoner | Cost-effective | Very cheap |
| Mistral | Large, Codestral, Pixtral | European, coding | Paid |
| xAI Grok | Grok 2, Vision | Real-time knowledge | Paid |
| Groq | Llama 3.3 70B, Mixtral | Ultra-fast inference | Free tier |
| OpenRouter | 200+ models | Access any model | Varies |
| Ollama | Llama, Qwen, DeepSeek, etc. | Privacy, offline | Free |
Measured on M2 MacBook Pro, 16GB RAM:
| Metric | LangChain | AutoGPT | CrewAI | Ember |
|---|---|---|---|---|
| Install time | 15 min | 20 min | 10 min | 5 sec |
| Cold start | 2.3s | 4.1s | 1.8s | 80ms |
| Memory idle | 450MB | 800MB | 380MB | 45MB |
| Memory active | 1.2GB | 1.8GB | 900MB | 120MB |
| Dependencies | 500+ | 300+ | 200+ | 0 |
| Binary size | N/A | N/A | N/A | 15MB |
| Scenario | Python Agents | Ember |
|---|---|---|
| Simple query | 150-300ms | 12ms |
| With tools | 400-800ms | 45ms |
| Multi-agent | 1-3s | 100ms |
use ember::prelude::*;
#[tokio::main]
async fn main() -> Result<()> {
let agent = Agent::builder()
.provider(OpenAIProvider::from_env()?)
.build()?;
let response = agent.chat("Hello!").await?;
println!("{}", response);
Ok(())
}use ember::prelude::*;
#[tokio::main]
async fn main() -> Result<()> {
let agent = Agent::builder()
.provider(OllamaProvider::new()?)
.tool(tools::Shell::new())
.tool(tools::Filesystem::sandboxed("./workspace"))
.tool(tools::Git::new())
.build()?;
agent.chat("Create a new Rust project and initialize git").await?;
Ok(())
}use ember::prelude::*;
#[derive(Tool)]
#[tool(name = "weather", description = "Get current weather for a city")]
struct WeatherTool {
api_key: String,
}
#[async_trait]
impl Tool for WeatherTool {
async fn execute(&self, input: ToolInput) -> Result<ToolOutput> {
let city = input.get_string("city")?;
let weather = fetch_weather(&self.api_key, &city).await?;
Ok(ToolOutput::text(format!("Weather in {}: {}", city, weather)))
}
}use ember::prelude::*;
#[tokio::main]
async fn main() -> Result<()> {
let orchestrator = Orchestrator::new();
orchestrator.spawn_agent("researcher", AgentRole::Researcher).await?;
orchestrator.spawn_agent("coder", AgentRole::Coder).await?;
orchestrator.spawn_agent("reviewer", AgentRole::Reviewer).await?;
let workflow = WorkflowBuilder::new()
.step("researcher", "Research best practices for REST API design")
.step("coder", "Implement a REST API based on the research")
.step("reviewer", "Review the code and suggest improvements")
.build();
orchestrator.execute(workflow).await?;
Ok(())
}| Feature | LangChain | AutoGPT | CrewAI | OpenClaw | Ember |
|---|---|---|---|---|---|
| Language | Python | Python | Python | Python | Rust |
| Single binary | No | No | No | No | Yes |
| Zero dependencies | No | No | No | No | Yes |
| Sub-100ms start | No | No | No | No | Yes |
| < 50MB memory | No | No | No | No | Yes |
| Works offline | No | No | No | No | Yes |
| Type-safe | No | No | No | No | Yes |
| Memory-safe | No | No | No | No | Yes |
| 9+ LLM providers | Partial | Partial | Partial | Partial | Yes |
| Cost tracking | No | No | No | No | Yes |
| Budget alerts | No | No | No | No | Yes |
| Web UI | No | No | Limited | Yes | Yes |
| Multi-agent | Limited | No | Yes | No | Yes |
| Checkpoints | No | No | No | No | Yes |
| WASM plugins | No | No | No | No | Yes |
| Knowledge graph | No | No | No | No | Yes |
| Self-healing | No | No | No | No | Yes |
| Privacy shield | No | No | No | No | Yes |
| Security sandbox | No | No | No | No | Yes |
| Voice interface | No | No | No | No | Yes |
| Code intelligence | No | No | No | No | Yes |
| Enterprise SSO/RBAC | No | No | No | No | Yes |
| Kubernetes/Helm | No | No | No | No | Yes |
curl -fsSL https://ember.dev/install.sh | sh# Homebrew (macOS/Linux)
brew install ember-agent
# Cargo (Rust)
cargo install ember-cli
# Docker
docker pull ghcr.io/niklasmarderx/Embergit clone https://github.com/niklasmarderx/Ember
cd Ember
./quickstart.sh# Default (port 3000)
ember serve
# Custom configuration
ember serve --port 8080 --host 0.0.0.0 --provider ollama# Chat
curl -X POST http://localhost:3000/api/chat \
-H "Content-Type: application/json" \
-d '{"message": "Hello!", "provider": "openai"}'
# Get conversations
curl http://localhost:3000/api/conversations
# Get cost statistics
curl http://localhost:3000/api/costsconst ws = new WebSocket('ws://localhost:3000/ws');
ws.send(JSON.stringify({
type: 'chat',
message: 'Write a haiku about Rust'
}));
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
process.stdout.write(data.content);
};| Resource | Description |
|---|---|
| Getting Started | First steps with Ember |
| CLI Reference | All command-line options |
| Web UI Guide | Using the web interface |
| Custom Tools | Building your own tools |
| Providers | Configuring LLM providers |
| API Reference | Rust API documentation |
# Clone
git clone https://github.com/niklasmarderx/Ember
cd Ember
# Build and configure
./quickstart.sh
# Run tests
cargo test --workspace
# Run CLI
cargo run -p ember-cli -- chat "Hello!"
# Run web server
cargo run -p ember-cli -- serveember/
├── crates/
│ ├── ember-core/ # Agent runtime, memory, planning
│ ├── ember-llm/ # LLM providers (9+ supported)
│ ├── ember-tools/ # Shell, filesystem, Git, web
│ ├── ember-storage/ # SQLite, vector DB, RAG
│ ├── ember-plugins/ # WASM plugin system
│ ├── ember-browser/ # Browser automation (Chromium)
│ ├── ember-mcp/ # Model Context Protocol
│ ├── ember-cli/ # Command-line interface
│ ├── ember-web/ # Web UI and REST API
│ ├── ember-desktop/ # Tauri desktop application
│ ├── ember-telemetry/ # Privacy-first analytics
│ ├── ember-i18n/ # Internationalization (11 langs)
│ ├── ember-benchmarks/ # Performance benchmarks
│ ├── ember-code/ # Code intelligence (v1.5)
│ ├── ember-learn/ # Adaptive learning (v1.5)
│ ├── ember-voice/ # Voice interface (v1.5)
│ └── ember-enterprise/ # Enterprise features (v1.5)
├── deploy/ # Cloud deployment (v1.5)
│ ├── kubernetes/ # K8s manifests
│ ├── helm/ # Helm charts
│ └── terraform/ # Infrastructure as code
├── examples/ # Code examples
├── docs/ # Documentation (mdBook)
├── extensions/ # VS Code extension
└── marketing/ # Press kit and resources
| Contribution | Difficulty |
|---|---|
| Report bugs | Easy |
| Improve documentation | Easy |
| Add examples | Easy |
| Add LLM providers | Medium |
| Build new tools | Medium |
| Core features | Advanced |
See CONTRIBUTING.md for guidelines.
MIT License - see LICENSE-MIT
Small spark, big fire.
Built with Rust. Built for speed. Built for developers who ship.
Get Started | Why Ember | Features | Docs
Questions? Feedback? Enterprise inquiries?
Contact: niklas.marder@gmail.com



