Eule is a privacy-first, local-first learning assistant for children with adult oversight built in. The alpha focuses on safe local operation: child chat, audit visibility for parents and teachers, and curriculum-grounded responses through a local retrieval pipeline.
The long-term vision is a trustworthy family and school companion where learning support stays on-device by default, safety decisions are auditable, and adults remain in control. Today, the repository ships a practical backend-first alpha with working APIs, local storage, local model hooks, and UI slices for both child and oversight experiences.
These steps are designed to get a new developer from clone to local run in about 10 minutes.
- Clone and enter the repository.
git clone https://github.com/isartor-ai/euleki.git
cd euleki- Build and run tests.
cargo build --workspace
cargo test --workspace- Start the backend.
cargo run -p eule-core- Verify health and open UIs.
curl http://localhost:8080/health
open http://localhost:8080/
open http://localhost:8080/dashboard- Optional: load demo curriculum data for RAG grounding.
bash curriculum/download-samples.sh
bash curriculum/ingest-samples.sh
cargo run -p eule-cli -- search-curriculum --query "Was ist Fotosynthese?" --subject biologie --limit 5eule-core: Rust backend service (Axum), storage, inference integration, embedding and RAG pipelines, child/dashboard routeseule-cli: maintenance CLI for ingestion, retrieval checks, benchmarking, and model statuseule-ui: child-facing UI assetseule-dashboard: oversight dashboard UI assetsdocs: architecture, changelog, infrastructure notes, evaluation docs, and user manuals
The voice synth endpoints (/api/child/voice/synthesize, /api/dashboard/voice/synthesize) now run through a pluggable TTS service.
The voice upload endpoint (/api/child/voice/ask-upload) runs through a pluggable STT strategy.
Default behavior:
- If
EULE_TTS_MODEL_PATHis not set, Euleki prefers native macOS voice synthesis when available (say+afconvert) and falls back to the internal tone backend only when native tools are unavailable. - If
EULE_TTS_MODEL_PATHis set, Euleki attempts to run a command-backed TTS backend (default command:piper).
Supported environment variables:
EULE_TTS_VOICEdefault voice profile (euli,neutral,teacher)EULE_TTS_MODETTS runtime (native,tone; default remains fallback behavior)EULE_TTS_MODEL_PATHmodel path for command backendEULE_TTS_COMMANDcommand binary (default:piper)EULE_TTS_SPEAKER_EULIoptional speaker id foreuliEULE_TTS_SPEAKER_NEUTRALoptional speaker id forneutralEULE_TTS_SPEAKER_TEACHERoptional speaker id forteacherEULE_TTS_NATIVE_VOICE_EULIoptional macOSsayvoice for euli profile (default:Anna)EULE_TTS_NATIVE_VOICE_NEUTRALoptional macOSsayvoice for neutral profile (default:Anna)EULE_TTS_NATIVE_VOICE_TEACHERoptional macOSsayvoice for teacher profile (default:Markus)EULE_TTS_NATIVE_RATE_WPMoptional macOSsayspeech rate in words per minute (default:165, allowed:110-240)EULE_TTS_NATIVE_SAMPLE_RATEoptional output WAV sample rate (22050,24000,32000,44100,48000; default:44100)EULE_STT_MODESTT strategy mode (auto,voxtral_single_pass,stt_fallback)EULE_STT_MODEL_PATHmodel path forwhisper-clifallback backendEULE_STT_COMMANDcommand binary for fallback STT (default:whisper-cli)EULE_STT_FFMPEG_COMMANDconversion command for WebM uploads (default:ffmpeg)EULE_STT_LANGUAGEtranscription language for fallback backend (default:de)EULE_STT_THREADSoptional thread count for fallback STT backend
Health/status:
GET /api/statusnow includestts(boolean readiness) andtts_backend(active backend name).GET /api/inference/statusnow includes voice mode and capability fields (voice_mode,voice_available_modes,voice_startup_alerts,voice_capabilities).- Current runtime behavior:
voxtral_single_passis reported as unsupported and the active mode falls back tostt_fallback.
A cross-platform desktop shell is being built with Tauri v2. See desktop-app/README.md for full setup instructions.
Quick start:
# prerequisite: install Rust and Xcode CLT (macOS)
cargo install tauri-cli --version "^2"
# launch desktop window
cd desktop-app
cargo tauri devRust-only compile check (no window, no Node.js needed):
cargo build -p eule-desktopSidecar lifecycle is integrated in issue #31:
- starts
eule-coreon desktop app launch - uses a dynamic free localhost port (no hardcoded
:8080) - waits for
/healthbefore enabling UI links - surfaces crash/retry state in the desktop shell
Security hardening from issue #34 adds:
- OS secure storage for desktop session token (with in-memory fallback)
- localhost-only backend request validation in desktop shell
- constrained model/audio env paths before sidecar launch
See the detailed architecture document:
Additional design context:
- Changelog: docs/CHANGELOG.md
- Alpha release notes: docs/RELEASE_NOTES_v0.1.0-alpha.1.md
- Alpha2 release notes: docs/RELEASE_NOTES_v0.1.0-alpha.2.md
- Alpha3 release notes: docs/RELEASE_NOTES_v0.1.0-alpha.3.md
- User Manual (English): docs/USER_MANUAL.md
- Benutzerhandbuch (Deutsch): docs/USER_MANUAL.de.md
- Voice UI manual checklist: docs/VOICE_UI_CHECKLIST.md
- Dashboard voice audit checklist: docs/DASHBOARD_VOICE_CHECKLIST.md
- DMG cold-start voice checklist: docs/DMG_COLD_START_VOICE_CHECKLIST.md
- Desktop beta QA gate checklist: docs/DESKTOP_BETA_QA_GATE.md
- Voice quality acceptance samples: docs/VOICE_QUALITY_ACCEPTANCE.md
- Infrastructure notes: docs/INFRASTRUCTURE.md
- macOS app bundle guide: docs/MACOS_APP_BUNDLE.md
- macOS DMG installer guide: docs/MACOS_DMG.md
- Windows signing and installer release guide: docs/WINDOWS_RELEASE.md
- GitHub release: https://github.com/isartor-ai/euleki/releases/tag/v0.1.0-alpha.3
- Bug reports: alpha bug report template
- Download the DMG from the release page.
- Drag Euleki.app into Applications.
- Launch Euleki from Applications.
- If setup is prompted, choose
Install core + voice(recommended),Install core only, orSkip for now. - Keep internet connection active until selected downloads finish.
- Euleki opens child chat automatically at http://127.0.0.1:8080/.
- Open oversight dashboard at http://127.0.0.1:8080/dashboard.
No terminal commands are needed for the tester flow.
Please read:
At minimum before opening a PR:
cargo fmt --all --check
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test --workspaceThis project is licensed under EUPL-1.2.