Skip to content

niklasmarderx/Ember

Ember Logo

Ember

The AI Agent That Starts in 30 Seconds, Not 30 Minutes

Website Crates.io License CI Container

One binary. Zero dependencies. Rust-powered. Privacy-first.

Ember Chat Interface

Dashboard Overview Model Registry Budget Management
Cost Dashboard Model Registry Budget Management

Quick Start (30 Seconds)

Option A: Cloud APIs (OpenAI/Anthropic/Groq)

# Install
curl -fsSL https://ember.dev/install.sh | sh

# Set ONE environment variable
export OPENAI_API_KEY="sk-..."

# Start chatting
ember chat

Option B: 100% Free and Offline

No 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 ollama

Option C: Docker (One Command)

docker run -it --rm ghcr.io/niklasmarderx/Ember chat "Hello!"

Option D: Web UI

# Start the web server
ember serve

# Open in browser
open http://localhost:3000

Why Ember is Revolutionary

The Problem Everyone Has

Every 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.

Why This Happens

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

The Ember Solution

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

For Beginners: What is Ember?

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")

Simple Example

# 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"

For Experts: Why Rust Changes Everything

If you've built AI agents before, you know the pain. Here's why Ember is architecturally different:

1. True Zero-Cost Abstractions

// 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.

2. Fearless Concurrency

// 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.

3. Compile-Time Guarantees

// 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.

4. Predictable Performance

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.

5. Single Binary Deployment

# 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.

Architecture Overview

                    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 Responsibilities

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

Complete Feature List

Core Features

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

Tools

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

Advanced Features

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

Web UI Features

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

Code Intelligence (v1.5)

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

Adaptive Learning (v1.5)

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

Voice Interface (v1.5)

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

Enterprise Features (v1.5)

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

Cloud Deployment (v1.5)

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

Supported LLM Providers

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

Performance Benchmarks

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

Latency (request to first token)

Scenario Python Agents Ember
Simple query 150-300ms 12ms
With tools 400-800ms 45ms
Multi-agent 1-3s 100ms

Code Examples

Basic Chat

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(())
}

With Tools

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(())
}

Custom Tool

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)))
    }
}

Multi-Agent Orchestration

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(())
}

Comparison Matrix

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

Installation

One-Line Install (Recommended)

curl -fsSL https://ember.dev/install.sh | sh

Package Managers

# Homebrew (macOS/Linux)
brew install ember-agent

# Cargo (Rust)
cargo install ember-cli

# Docker
docker pull ghcr.io/niklasmarderx/Ember

From Source

git clone https://github.com/niklasmarderx/Ember
cd Ember
./quickstart.sh

Web UI

Starting the Server

# Default (port 3000)
ember serve

# Custom configuration
ember serve --port 8080 --host 0.0.0.0 --provider ollama

REST API

# 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/costs

WebSocket (Streaming)

const 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);
};

Documentation

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

Contributing

Development Setup

# 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 -- serve

Project Structure

ember/
├── 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

How to Contribute

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.


License

MIT License - see LICENSE-MIT


Small spark, big fire.

Built with Rust. Built for speed. Built for developers who ship.

Star on GitHub

Get Started | Why Ember | Features | Docs


Questions? Feedback? Enterprise inquiries?
Contact: niklas.marder@gmail.com