ESC
Type to search...
S
Soli Docs

Modules

Organize code with exports, imports, and module structure.

Export Declarations

export

Makes a function, class, or constant available to other modules.

// math.soli

// Private function (not exported)
fn validate_number(n: Int) -> Bool {
    return n >= 0;
}

// Exported functions
export fn add(a: Int, b: Int) -> Int {
    return a + b;
}

export fn subtract(a: Int, b: Int) -> Int {
    return a - b;
}

export fn multiply(a: Int, b: Int) -> Int {
    return a * b;
}

export fn divide(a: Int, b: Int) -> Float {
    if (b == 0) {
        panic("Division by zero");
    }
    return float(a) / float(b);
}

export fn factorial(n: Int) -> Int {
    if (n <= 1) {
        return 1;
    }
    return n * factorial(n - 1);
}

Import Statements

import

Import functions and classes from other modules.

// Import all exports
import "./math.soli";
print(add(2, 3));        // 5
print(factorial(5));     // 120

// Named imports
import { add, multiply } from "./math.soli";
let sum = add(1, 2);          // 3
let product = multiply(3, 4); // 12

// Aliased imports
import { add as sum, multiply as times } from "./math.soli";
let result = sum(10, 20);  // 30
let doubled = times(5, 6); // 30

// Import everything with a namespace
import "./utils.soli" as utils;
let formatted = utils.format_date(DateTime.utc());

Project Structure

my-project/
├── soli.toml
├── src/
│   ├── main.soli
│   ├── config.soli
│   └── utils/
│       ├── mod.soli
│       ├── string.soli
│       ├── array.soli
│       └── datetime.soli
└── lib/
    └── math/
        ├── mod.soli
        ├── basic.soli
        └── advanced.soli

Package Configuration

soli.toml
[package]
name = "my-app"
version = "1.0.0"
description = "My awesome soli application"
main = "src/main.soli"

[dependencies]
# Local dependency
utils = { path = "./lib/utils" }

[dev-dependencies]
test-utils = { path = "./tests/test-utils" }

[scripts]
dev = "soli serve"
build = "soli build --release"
test = "soli test"

Use Keyword

use

Alternative syntax for importing (alias for import).

use "./math.soli";
use { add, multiply } from "./math.soli";
use "./utils.soli" as utils;