Getting Started¶
This guide walks you through building Endo from source, launching the shell, and writing your first commands.
Prerequisites¶
Before building, ensure you have:
- A C++23-compatible compiler (Clang 17+ recommended, GCC 14+ also works)
- CMake 3.26 or newer
- Git for cloning the repository
- A Linux or macOS system (Windows support is in progress)
Compiler Support
Endo uses modern C++23 features including std::expected, std::format, and constexpr extensively. Clang 17+ with libc++ provides the best support.
Build from Source¶
Clone the Repository¶
Configure and Build¶
Endo uses CMake presets for streamlined builds. For a release build (recommended for daily use):
For a debug build (for development and testing):
Build Options¶
The AI agent features -- LLM providers, agent mode and the MCP client -- are experimental and off by default. Enable them at configure time:
Building with them enabled also pulls in llama.cpp for local inference, which noticeably lengthens the first build. The official packages (.deb, .msi, .dmg and the static Linux binary) are built with agent support enabled, so this only affects builds from source. See the AI Agent documentation.
Install (Optional)¶
Launch Endo¶
After building, launch the interactive shell:
You should see the Endo prompt. Try a few commands:
Hello World¶
Shell Style¶
F# Style¶
With String Interpolation¶
Combining Shell and F¶
# Capture shell output and process it functionally
let user = & whoami
println $"Welcome, {user}!"
# Pipe shell output into F# functions
ls | lines |> length |> fun n -> println $"Found {n} entries"
Run the Tests¶
To verify your build is working correctly:
Or for the debug build:
Configuration¶
Endo loads ~/.config/endo/init.endo on startup. You can place aliases, prompt configuration, and other setup there:
# ~/.config/endo/init.endo
# Set the prompt preset
set_prompt_preset "endo-signature"
# Define aliases
let ll ...args = & exa -l ...args
let gs ...args = & git status ...args
To start Endo without loading this file, use --no-profile:
Next Steps¶
- Shell Features -- Learn about interactive features, builtins, and structured output
- Language Reference -- Deep dive into the Endo language
- FAQ -- Common questions about pipes, lambdas, and more
- Examples -- Practical code examples
- Contributing -- Help shape Endo's future