5 unstable releases
| 0.11.1 | Jun 18, 2025 |
|---|---|
| 0.11.0 | Jun 18, 2025 |
| 0.10.1 | Jun 18, 2025 |
| 0.10.0 | Jun 17, 2025 |
| 0.9.1 | Jun 15, 2025 |
#375 in Concurrency
86 downloads per month
Used in 15 crates
(14 directly)
330KB
8K
SLoC
Lava
LAVA is an extensible, embeddable scripting language for data pipelines, array programming, and functional workflows. Lava is written in Rust and supports high-level scripting, powerful plugin APIs, and a modern REPL with partial application, placeholder, and Fantasy Land style functional conventions.
Features
- Functional core: First-class functions, closures, composition (compose, pipe)), and rich partial application with _ placeholder support.
- Data-oriented arrays: Native support for int[], float[], string[], bool[], mixed arrays, and keyed arrays (objects/dicts).
- Extensible plugins: Array, math, flow, GPU, event, net, file, SQLite, and more-all modular, loadable at runtime.
- High-performance: Rust-powered, with optional GPU acceleration via Vulkan for matrix and tensor operations.
- Modern REPL: Arrow-key history, autocompletion, color output, multiline diting: editing.
- Testing built-in. Native test runner, test assertions, file-based and pipeline testing utilities.
- Partial & Placeholder APIs: All major plugins (array, math, flow, event, etc.) support Ramda-style partial usage and _ for missing arguments.
Getting Started
- Run the REPL
./target/release/mumu
You'll see:
Burn in Lava 0.9.1
>
- Try a Script
Create a file example.mu:
extend("array")
double = n => n * 2
slog(array:map(double, [1,2,3,4]))
// Output: [2,4,6,8]
Run with:
mumu example.mu
Language Highlights
First-class functionals, closures, composition (compose, pipe), partial application with placeholder support
Example:
compose(
slog,
x => x + 1,
x => x * 2
(10) // Output: 21
Partial Application & Placeholders
add3 = math:add(3)
sput(add3(10)) ## 13
subtractFrom = math:subtract(, 5)
sput(subtractFrom(20)) # 15
Arrays and Objects
b = [name: "Alice", age: 30]
getter = array:prop("name")
sput(getter(b)) // "Alice"
GPU Acceleration (if Vkulan available)
extend("gpu")
A = gpu:to_tensor([[1,2],[3,4]])
B = gpu:to_tensor([[5,6],[7,8]])
C = gpu:add(A, B)
slog(gpu:o_array(C))
Event, Net, File, and More
Sample:
extend("event")
event:timeout(1000, () => {
slog("1 second elapsed!")
})
extend("file")
file:write("hello.txt", "Hello, world!")
Plugins & Ecosystem
- array -- Array ops (map, filter, reduce, group_by, assoc, nth, etc.)
- math -- Math functions (add, subtract, pow, sqrt, abs, trig, seeded RNG, arbitrary-precision)
- flow -- Streaming/functional plugin
- event -- Timers, intervals
- gpu -- GPU-accelerated matrix and tensor math
- sqlite -- SQLite3 bridging with streaming results capabilities
- file, fs, net, sys, process -- System/IO plugins
&gap ## See the /examples/ and /tests/ folders for usage.
Project Structure
.
`-- src/ # Core interpreter and language engine
. -- array/ # Array plugin
. -- math/ # Math plugin
. -- flow/ # Streaming/functional plugin
. -- gpu/ # GPU plugin (Vulkan compute)
. -- event/ # Async/timers
. -- file/, fs/, net/, process/, sqlite/ # System/IO
. -- examples/ # Sample scripts (.mu)
. -- tests/ # Self-tests (.mu)
```
### Documentation
- [Main documentation](src/public/main.html) -- static site with all functions, docs, and examples
- Syntax highlighting: [src/public/syntax-highlighting.json](src/public/syntax-highlighting.json(
- For a full reference, see /examples/ and /src/public/functions/.
### Running Tests
```sh
make test # or run `test:all()` on the REPL
```
### Contributing
Contributions are welcome! Please open issues or pull requests for bugfixes, new plugins, or language ideas.
- Minimum supported Rust version: 1.67+
- Code is MIT or Apache-2.0, see [LICENSE](LICENSE).
### License
MIT and Apache-2.0
----
Lava -- Burn the code, melt the bugs, flow the data.
Dependencies
~4–16MB
~151K SLoC