0dd95214197c349609f5e575c5fd8dac41b4de96
All checks were successful
continuous-integration/drone/push Build is passing
- Add loading spinner with 'Thinking...' text during streaming when content is not yet available - Fix :key binding to use message.id instead of message.content - Remove unnecessary TypeScript cast in file reader handler - Move test image into testdata/ directory for proper test organization - Remove t.Skip and simplify TestSummarizeChat test message
Aethera
A web dashboard for AI-powered conversations and image generation, backed by any OpenAI-compatible API.
Features
- Chat Interface — streaming responses with Markdown rendering and syntax highlighting
- Thinking Support — displays model reasoning/thinking content when available
- Multiple Conversations — switch between threads with auto-generated titles
- Image Generation & Editing — create and edit images with customizable prompts, masks, and seeds
- Token Statistics — real-time prompt/generation throughput and timing metrics
- Theme Support — light and dark mode toggle
- Structured Output — JSON schema-based structured responses from models
- Embedded Frontend — single binary deployment with assets compiled in
Quick Start
Prerequisites
- Go 1.25.5+
- Bun
- An OpenAI-compatible API endpoint
Using Make
make all # Build frontend + backend
./backend/dist/aethera
Using Docker
make docker
docker run -p 8080:8080 -v aethera-data:/app/data aethera
Manual Build
# Frontend
cd frontend && bun install && bun run build && cd ..
# Copy assets to backend
mkdir -p backend/web/static
cp -R frontend/public/. backend/web/static/
# Backend
cd backend && go build -o ./dist/aethera ./cmd
./dist/aethera
Open http://localhost:8080 in your browser.
Configuration
Configuration is available via CLI flags and environment variables (prefixed AETHERA_):
| Flag | Env Var | Default | Description |
|---|---|---|---|
--data-dir |
AETHERA_DATA_DIR |
./data |
Directory for chats, settings, and images |
--static-dir |
AETHERA_STATIC_DIR |
(embedded) | Serve frontend from disk (for development) |
--listen |
AETHERA_LISTEN |
localhost |
Listen address |
--port |
AETHERA_PORT |
8080 |
Listen port |
Example:
./backend/dist/aethera --port 3000 --listen 0.0.0.0
Development
A Nix flake is provided for the development environment:
nix develop # or use direnv with .envrc
This provides Go, Bun, gopls, typescript-language-server, golangci-lint, and watchman.
For hot-reload development:
make dev
This starts the Go backend (serving frontend from disk) and the frontend in watch mode concurrently.
Getting Started
- Configure Your API — navigate to Settings and enter your OpenAI-compatible API endpoint URL
- Start Chatting — use the Chat interface to begin conversations
- Generate Images — visit the Images page to create or edit images
- Manage Content — view, delete, and organize conversations and images
Supported AI Services
Aethera works with any OpenAI-compatible API, including:
- OpenAI
- Local LLMs (Ollama, llama.cpp, LocalAI, etc.)
- Any other compatible service
Llama.cpp-specific features like per-token timings are automatically detected.
License
See LICENSE file for details.
Description
Languages
Go
50.1%
HTML
22.9%
TypeScript
21.2%
CSS
3.4%
Makefile
0.8%
Other
1.6%