SOUL is the new compiled language for developers who need filesystem work to be fast, predictable and boring (in the good way).
Soul is designed for developers who need file operations, scanning, cleanup, sync and analysis to run as small native binaries with predictable behavior.
Compile standalone executables with no runtime dependency and low deployment overhead.
Files, folders and paths are core primitives for copy, backup, cleanup and analysis workflows.
Designed for servers, containers and infrastructure environments where these workloads actually run.
Readable syntax, clear control flow and minimal hidden behavior for maintainable automation code.
Soul is built for explicit, readable filesystem automation. Tasks that usually require dozens of lines in Python, Bash or Go can often be expressed in a few Soul lines and compiled into a tiny native binary.
str src = arg("--folderSrc")
str dst = arg("--folderDst")
printStr("Copying...")
copyFolder(src, dst)
printStr("Finished.")
import os, shutil, argparse, time
parser = argparse.ArgumentParser()
parser.add_argument('--folderSrc', required=True)
parser.add_argument('--folderDst', required=True)
args = parser.parse_args()
print("Copying...")
start = time.time()
count = 0
for root, dirs, files in os.walk(args.folderSrc):
rel = os.path.relpath(root, args.folderSrc)
dst_dir = os.path.join(args.folderDst, rel)
os.makedirs(dst_dir, exist_ok=True)
for f in files:
src_f = os.path.join(root, f)
dst_f = os.path.join(dst_dir, f)
shutil.copy2(src_f, dst_f)
count += 1
#!/bin/bash
SRC=""
DST=""
while [[ $# -gt 0 ]]; do
case $1 in
--folderSrc) SRC="$2"; shift 2 ;;
--folderDst) DST="$2"; shift 2 ;;
*) shift ;;
esac
done
echo "Copying..."
cp -r "$SRC" "$DST"
package main
import (
"flag"
"fmt"
"io"
"os"
"path/filepath"
)
func copyFile(src, dst string) error {
in, _ := os.Open(src)
defer in.Close()
out, _ := os.Create(dst)
defer out.Close()
_, err := io.Copy(out, in)
return err
}
str src = arg("--folderSrc")
str dst = arg("--folderDst")
mkdir(dst)
backup(src, dst)
import os, shutil, argparse, time
parser = argparse.ArgumentParser()
parser.add_argument('--folderSrc', required=True)
parser.add_argument('--folderDst', required=True)
args = parser.parse_args()
os.makedirs(args.folderDst, exist_ok=True)
copied = deleted = skipped = 0
for root, dirs, files in os.walk(args.folderSrc):
rel = os.path.relpath(root, args.folderSrc)
dst_dir = os.path.join(args.folderDst, rel)
os.makedirs(dst_dir, exist_ok=True)
for f in files:
s = os.path.join(root, f)
d = os.path.join(dst_dir, f)
#!/bin/bash
while [[ $# -gt 0 ]]; do
case $1 in
--folderSrc) SRC="$2"; shift 2 ;;
--folderDst) DST="$2"; shift 2 ;;
*) shift ;;
esac
done
if ! command -v rsync &>/dev/null; then
echo "ERROR: rsync not found"
exit 1
fi
rsync -av --delete "$SRC/" "$DST/"
str folder = arg("--folder")
str ext = arg("--ext")
str password = arg("--password")
if startswith(password, "CONFIRM_DELETE"):
printStr("Password confirmed")
removeByExt(folder, ext)
import os, argparse, time
parser = argparse.ArgumentParser()
parser.add_argument('--folder', required=True)
parser.add_argument('--ext', required=True)
parser.add_argument('--password', required=True)
args = parser.parse_args()
if not args.password.startswith("CONFIRM_DELETE"):
print("PASSWORD NOT APPROVED")
exit(1)
#!/bin/bash
while [[ $# -gt 0 ]]; do
case $1 in
--folder) FOLDER="$2"; shift 2 ;;
--ext) EXT="$2"; shift 2 ;;
--password) PASSWORD="$2"; shift 2 ;;
*) shift ;;
esac
done
if [[ "$PASSWORD" != CONFIRM_DELETE* ]]; then
exit 1
fi
str folder = arg("--folder")
str password = arg("--password")
str dias = arg("--days")
if dias == "":
int days = 1
else:
int days = toInt(dias)
if startswith(password, "CONFIRM_DELETE"):
printStr("Password confirmed")
if folder != "":
int maxAgeSeconds = days * 86400
printStr("Cleaning files...")
removeOlderThan(folder, maxAgeSeconds)
This example shows the kind of maintenance task Soul is built for: argument parsing, explicit confirmation, defaults, numeric conversion and a direct filesystem action in a small amount of code.
str src = arg("--folderSrc")
str dst = arg("--folderDst")
mkdir(dst)
diriter it = listdir(src)
while true:
str name = dir_next(it)
if name == 0:
break
str from = join(src, name)
str to = join(dst, name)
move(from, to)
dir_close(it)
rmdir(src)
This example is useful because it shows Soul doing more than a single builtin call. You can validate inputs, iterate over a directory, build source and destination paths, move entries and clean up the original folder in a compact and readable flow.
str folder = arg("--folder")
printStr(folder)
overviewinfo ov = overview(folder)
str txt = overviewSummary(ov)
printStr(txt)
Soul is not only about copy, delete or move operations. It can also expose higher-level analysis primitives so a program can inspect a folder, summarize its contents and produce actionable output with very little code.
soul plan
Same machine • Same datasets • Cold cache • Native binaries.
Note: Soul shines especially in tasks that combine filesystem access with logic and
processing.
| Task | Dataset | Soul | Go | Python | PHP | Bash |
|---|---|---|---|---|---|---|
| Soul Core Tools Performance | ||||||
| Analyzer – Full scan (extensions + biggest files) | 210K files, 18 dirs | 0.39s | 0.71s | 4.2s | 5.8s | 2.4s |
| Incremental Backup (scan + selective copy, 4 workers) | ~1,600 files, 1.4 GB | 1.9s | 4.3s | 38s | 47s | — |
| Detailed Overview (stats + extensions breakdown) | 210K files, 18 dirs | 0.28s | 0.44s | 2.4s | 3.1s | — |
| Recursive Folder Copy (4 parallel workers) | ~1,600 files, 1.4 GB | 4.8s | 11.2s | 48s | 1m 14s | — |
| File search (walk + match across all dirs) | 210K files, 18 dirs | 2.3s | — | — | — | ~2.5s |
| Other common operations | ||||||
| Create files | 100K files | 1.74s | 2.3s | 5.1s | 5.7s | 4.2s |
| Delete folder | 100K files | 1.34s | 1.8s | 4.3s | 4.9s | 3.1s |
| Create files | 1M files | 2m 01s | — | — | — | — |
| Delete by extension (selective) | ~800 files | 18ms | 95ms | 310ms | 420ms | 2.7s |
Measured with /usr/bin/time -v on Linux (NVMe SSD, cold cache).
Soul results are from real executions of compiled Soul binaries (30–50 KB standalone, no runtime).
Other languages show optimized equivalent implementations.
Folder Copy and Backup use 4 parallel workers in Soul; Go comparison uses equivalent goroutine-based
implementation.
Soul compiles to fully static binaries via musl-gcc. Docker images use FROM scratch —
no base OS, no runtime, no layers. Just the binary.
| Tool | Soul binary | Soul Docker (scratch) | Go (Docker) | Python (Docker) | Node.js (Docker) |
|---|---|---|---|---|---|
| hello-world | 16 KB | 44 KB | ~2 MB | ~50 MB | ~70 MB |
| overview | 17 KB | 68 KB | ~4 MB | ~50 MB | ~70 MB |
| analyzer | 30 KB | 91 KB | ~5 MB | ~55 MB | ~75 MB |
| backup (4 workers) | 22 KB | 130 KB | ~6 MB | ~55 MB | ~75 MB |
| copy-folder (4 workers) | 22 KB | 130 KB | ~6 MB | ~55 MB | ~75 MB |
| Full catalog: 13 tools — 247 KB total on disk • Docker images: 44–130 KB each • Pull any tool in under a second on any connection | |||||
Soul Docker images measured from Docker Hub via Docker Desktop. Go/Python/Node.js figures are representative
of typical minimal implementations.
Soul binaries compiled with musl-gcc -O3 -static -s. Dockerfile uses FROM scratch
with zero additional layers.
No subscriptions. No lock-in. Compile native binaries and run locally.
Local evaluation of the Soul compiler and runtime.
Build and run filesystem tools in real environments.
Includes support for production use and troubleshooting.
All plans generate Linux-native binaries, run without runtime dependencies, and execute entirely on your
infrastructure. “Unlimited” is subject to reasonable technical limits.
Additional support hours or monthly support plans are available if needed.
Soul Longevity Promise: Should the online compiler service ever be permanently discontinued, the final version of the compiler backend will be released under a source-available license to ensure legacy builds remain possible indefinitely.