Learn ELVISH with Real Code Examples
Updated Nov 20, 2025
Explain
Elvish provides a powerful, object-oriented command pipeline system.
It supports structured data types like lists, maps, and records in pipelines.
Ideal for interactive shell use, scripting, and automation on Unix-like systems.
Core Features
Pipeline-based data processing
Variables, functions, and closures
Modules and package management
Structured data types (list, map, record)
Interactive REPL with autocomplete
Basic Concepts Overview
Variables and assignments
Lists, maps, and records
Functions and closures
Pipeline syntax and data flow
Modules and namespaces
Project Structure
scripts/ - main Elvish scripts
modules/ - reusable modules
tests/ - validation scripts
docs/ - documentation and usage notes
configs/ - shell configuration files
Building Workflow
Write scripts (.elv files) using structured pipelines
Test interactively in REPL
Use modules for reusable functionality
Debug with built-in debugging tools
Deploy scripts for automation or command-line tasks
Difficulty Use Cases
Beginner: simple shell scripts and variable manipulation
Intermediate: pipelines with lists/maps
Advanced: modules and closures
Expert: custom extensions and automation frameworks
System automation and interactive command-line tools
Comparisons
More modern than Bash/Zsh for structured data
Supports object-like pipelines
Smaller ecosystem than traditional shells
Easier to learn for modern scripting tasks
Better for modular and interactive workflows
Versioning Timeline
2014 – Elvish created by Jeffrey Shu
2015–2017 – Early development and stable release
2018 – Modules and advanced pipeline features introduced
2020s – Ongoing improvements, community growth
2025 – Current stable version with REPL and modules fully supported
Glossary
Pipeline: sequence of commands with structured data
Closure: function with bound variables
Module: reusable script unit
Namespace: context for variables/functions
REPL: interactive read-eval-print loop