<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Cradicle Explorer</title>
    <link href="/css/bootstrap/bootstrap.min.css" rel="stylesheet">
    <style>
      .form-control-dark::placeholder {
          color: #aaa;
          opacity: 1;
      }
    </style>
    <link rel="stylesheet" href="/assets/fontawesome/css/all.min.css">
    <link rel="icon" type="image/png" href="/favicon.png">


                <link href="/css/dashboard.css" rel="stylesheet">
                </head>
                <body>
                <header class="navbar navbar-dark sticky-top bg-dark flex-md-nowrap p-0 shadow">
                  <a class="navbar-brand col-md-3 col-lg-2 me-0 px-3 fs-6" href="/">Cradicle Explorer</a>
                  <button class="navbar-toggler position-absolute d-md-none collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#sidebarMenu" aria-controls="sidebarMenu" aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                  </button>
                  <form method="get" action="/cgi-bin/main" style="width:100%;"><input class="form-control form-control-dark w-100 rounded-0 border-0" type="text" name="q" placeholder="Search repos" aria-label="Search"></form>
                  <div class="navbar-nav flex-row">
                    <div class="nav-item text-nowrap">
                      <a class="nav-link px-3 active" href="/cgi-bin/repo?id=zvNQQv6z4CczpSfzAUUYu5byuueK">germi</a>
                    </div>
                  </div>
                </header>
                <div class="container-fluid">
                  <div class="row">
                    <nav id="sidebarMenu" class="col-md-3 col-lg-2 d-md-block bg-dark sidebar collapse">
                      <div class="position-sticky pt-3 sidebar-sticky">
                        <ul class="nav flex-column">
                          <li class="nav-item">
                            <a class="nav-link active" href="/cgi-bin/repo?id=zvNQQv6z4CczpSfzAUUYu5byuueK">
                              <i class="align-text-bottom fa-solid fa-info"></i>
                              Info
                            </a>
                          </li>
                          <li class="nav-item">
                            <a class="nav-link" href="/cgi-bin/repo?id=zvNQQv6z4CczpSfzAUUYu5byuueK&issue=list">
                              <i class="align-text-bottom fa-solid fa-layer-group"></i>
                              Issues
                            </a>
                          </li>
                          <li class="nav-item">
                            <a class="nav-link" href="/cgi-bin/repo?id=zvNQQv6z4CczpSfzAUUYu5byuueK&patch=list">
                              <i class="align-text-bottom fa-solid fa-vest-patches"></i>
                              Patches
                            </a>
                          </li>
                          <li class="nav-item">
                            <a class="nav-link" href="/cgi-bin/repo?id=zvNQQv6z4CczpSfzAUUYu5byuueK&wallet=list">
                              <i class="align-text-bottom fa-solid fa-wallet"></i>
                              Wallets
                            </a>
                          </li>
                          <li class="nav-item">
                            <a class="nav-link" href="/cgi-bin/repo?id=zvNQQv6z4CczpSfzAUUYu5byuueK&source=.">
                              <i class="align-text-bottom fa-solid fa-code"></i>
                              Source
                            </a>
                          </li>
                        <h6 class="sidebar-heading d-flex justify-content-between align-items-center px-3 mt-4 mb-1 text-muted text-uppercase">
                          <span></span>
                        </h6>
                        <ul class="nav flex-column mb-2">
                        
                        </ul>
                      </div>
                    </nav>
                <main class="col-md-9 ms-sm-auto col-lg-10">
                  <div class="container px-1 py-3">
        

    <div class="list-group">
    <div class="list-group-item">
    <div style="font-size:1.3rem;">germi</div>
    <div class="repo-item"></div>
    <div>rad:zvNQQv6z4CczpSfzAUUYu5byuueK</div>
    </div>
    <div class="list-group-item">
    <div>Visibility</div>
    <div class="repo-item">public</div>
    </div>
    <div class="list-group-item">
    <div>Delegates</div><div class="repo-item">did:key:z6MkgJuhkBR71WsqzYzYsqE8spsS6nveAp4EHqoiq8jh9yn3</div>
    </div>
    <div class="list-group-item">
    <div>Default branch</div>
    <div><span class="repo-item">main &#8594 3766d4ae322a0292be450bd3d7eb6019efd970f6</span> (Tue Jan 13 12:30:37 2026)</div>
    </div>
    <div class="list-group-item">
    <div>Threshold</div>
    <div class="repo-item">1</div>
    </div>
    </div>
    
        <div class="list-group mt-3">
        <div class="list-group-item">
        <div class="mb-2" style="font-weight:bold;"><i class="fa-solid fa-book"></i> README.md</div>
        <pre style="margin:0; font-size:0.85rem; overflow-x:auto; color:#fafafa;"># Germi 🌱

**Germi** is an ultra-high-performance, feature-rich environment variable interpolation engine for Rust. It is designed to be the fastest and most correct interpolation library available, making it ideal for high-throughput configuration systems and tooling.

## 🚀 Features

- **⚡ Blazing Fast**: Uses SIMD (`memchr`) for scanning, resulting in sub-microsecond performance for most payloads.
- **🚫 Zero-Copy Friendly**: Returns `Cow&lt;&#x27;a, str&gt;` to avoid allocations whenever possible (zero heap allocation for variable-free strings).
- **🐚 Shell-Compatible Syntax**: Supports a wide range of standard shell parameter expansions.
- **🔄 Iterative &amp; Recursive**: Correctly handles nested variables (`${A${B}}`) and recursive definitions with configurable depth limits.
- **⌨️ Asynchronous Command Substitution**: Supports `$(command)` expansion (requires `async` feature).
- **🛡️ Safe**: Recursion detection, depth limits, and strict error handling options.
- **🎛️ Highly Configurable**: Enable/disable specific features (commands, recursion, defaults) via `Config`.

## 📦 Installation

Add `germi` to your `Cargo.toml`:

```toml
[dependencies]
germi = &quot;0.2.2&quot;
# For async command substitution:
# germi = { version = &quot;0.2.2&quot;, features = [&quot;async&quot;] }
```

## 📖 Usage

### Basic Usage

```rust
use germi::Germi;

fn main() {
    let mut germi = Germi::new();
    germi.add_variable(&quot;USER&quot;, &quot;Alice&quot;);
    germi.add_variable(&quot;GREETING&quot;, &quot;Hello&quot;);

    // Simple interpolation
    let result = germi.interpolate(&quot;${GREETING}, ${USER}!&quot;).unwrap();
    assert_eq!(result, &quot;Hello, Alice!&quot;);

    // With defaults
    let result = germi.interpolate(&quot;Value: ${MISSING:-Default}&quot;).unwrap();
    assert_eq!(result, &quot;Value: Default&quot;);
}
```

### Async Command Substitution

_Requires `features = [&quot;async&quot;]`_

```rust
use germi::Germi;

#[tokio::main]
async fn main() {
    let germi = Germi::new();
    // Executes command and substitutes output (trimmed)
    let result = germi.interpolate_async(&quot;Date: $(date +%Y)&quot;).await.unwrap();
    println!(&quot;{}&quot;, result); // &quot;Date: 2024&quot;
}
```

## 📝 Syntax Support

Germi supports a growing subset of standard shell expansions:

| Syntax            | Description                                                                  | Strict vs Loose                |
| ----------------- | ---------------------------------------------------------------------------- | ------------------------------ |
| `${VAR}`          | Basic substitution                                                           | -                              |
| `${VAR:-default}` | **Use Default**. Use `default` if VAR is unset or empty.                     | Strict (`:`) checks for empty. |
| `${VAR-default}`  | **Use Default**. Use `default` only if VAR is unset (empty string is valid). | Loose.                         |
| `${VAR:+alt}`     | **Use Alternate**. Use `alt` if VAR is set and not empty.                    | Strict.                        |
| `${VAR+alt}`      | **Use Alternate**. Use `alt` if VAR is set (even if empty).                  | Loose.                         |
| `$(command)`      | **Command Substitution**. Executes command and substitutes stdout.           | Requires `async`.              |
| `\n`, `\$`        | **Escapes**. Standard escape sequences.                                      | -                              |

## ⚡ Performance

Germi is built for speed. Recent benchmarks (running on Apple Silicon) show:

- **Simple Variables**: ~8 ns
- **Nested Variables**: ~8 ns
- **Large Payloads (100+ vars)**: ~90 ns
- **Literals**: ~12 ns

It achieves this by using `memchr::memchr3` to skip non-special characters using SIMD, avoiding expensive per-character iteration for the bulk of string processing.

## ⚙️ Configuration

You can fine-tune the engine:

```rust
use germi::{Config, Germi};

let mut config = Config::default();
config.max_depth = 5;            // Limit recursion depth
config.features.commands = false; // Disable $(cmd) for security

let germi = Germi::with_config(config);
```

## 📄 License

MIT
</pre>
        </div>
        </div>

</div>
</main>
</div>
</div>


</body>
</html>

