fcoreutils 0.7.0

High-performance GNU coreutils replacement with SIMD and parallelism
Documentation
[package]
name = "fcoreutils"
version = "0.7.0"
edition = "2024"
license = "MIT"
description = "High-performance GNU coreutils replacement with SIMD and parallelism"
homepage = "https://github.com/AiBrush/coreutils-rs"
repository = "https://github.com/AiBrush/coreutils-rs"
readme = "README.md"
keywords = ["coreutils", "cli", "performance", "simd"]
categories = ["command-line-utilities", "filesystem"]
exclude = [
    "dist/",
    ".github/",
    "scripts/",
    "benches/",
    "instructions.md",
    "research-reference.md",
    "ARCHITECTURE.md",
    "PROGRESS.md",
    "CONTRIBUTING.md",
    "SECURITY.md",
    "CODE_OF_CONDUCT.md",
]

[lib]
name = "coreutils_rs"
path = "src/lib.rs"

[[bin]]
name = "fwc"
path = "src/bin/fwc.rs"

[[bin]]
name = "fcut"
path = "src/bin/fcut.rs"

[[bin]]
name = "fbase64"
path = "src/bin/fbase64.rs"

[[bin]]
name = "fsha256sum"
path = "src/bin/fsha256sum.rs"

[[bin]]
name = "fsort"
path = "src/bin/fsort.rs"

[[bin]]
name = "ftr"
path = "src/bin/ftr.rs"

[[bin]]
name = "funiq"
path = "src/bin/funiq.rs"

[[bin]]
name = "fb2sum"
path = "src/bin/fb2sum.rs"

[[bin]]
name = "ftac"
path = "src/bin/ftac.rs"

[[bin]]
name = "fmd5sum"
path = "src/bin/fmd5sum.rs"

[[bin]]
name = "frev"
path = "src/bin/frev.rs"

[[bin]]
name = "fexpand"
path = "src/bin/fexpand.rs"

[[bin]]
name = "funexpand"
path = "src/bin/funexpand.rs"

[[bin]]
name = "ffold"
path = "src/bin/ffold.rs"

[[bin]]
name = "fhead"
path = "src/bin/fhead.rs"

[[bin]]
name = "ftail"
path = "src/bin/ftail.rs"

[[bin]]
name = "fcat"
path = "src/bin/fcat.rs"

[[bin]]
name = "fcomm"
path = "src/bin/fcomm.rs"

[[bin]]
name = "fjoin"
path = "src/bin/fjoin.rs"

[[bin]]
name = "fpaste"
path = "src/bin/fpaste.rs"

[[bin]]
name = "fnl"
path = "src/bin/fnl.rs"

[[bin]]
name = "ftrue"
path = "src/bin/ftrue.rs"

[[bin]]
name = "ffalse"
path = "src/bin/ffalse.rs"

[[bin]]
name = "flink"
path = "src/bin/flink.rs"

[[bin]]
name = "funlink"
path = "src/bin/funlink.rs"

[[bin]]
name = "fsync"
path = "src/bin/fsync.rs"

[[bin]]
name = "fhostid"
path = "src/bin/fhostid.rs"

[[bin]]
name = "flogname"
path = "src/bin/flogname.rs"

[[bin]]
name = "fwhoami"
path = "src/bin/fwhoami.rs"

[[bin]]
name = "ftty"
path = "src/bin/ftty.rs"

[[bin]]
name = "fnproc"
path = "src/bin/fnproc.rs"

[[bin]]
name = "farch"
path = "src/bin/farch.rs"

[[bin]]
name = "fprintenv"
path = "src/bin/fprintenv.rs"

[[bin]]
name = "fpwd"
path = "src/bin/fpwd.rs"

[[bin]]
name = "fmkfifo"
path = "src/bin/fmkfifo.rs"

[[bin]]
name = "frmdir"
path = "src/bin/frmdir.rs"

[[bin]]
name = "fyes"
path = "src/bin/fyes.rs"

[[bin]]
name = "fbasename"
path = "src/bin/fbasename.rs"

[[bin]]
name = "fdirname"
path = "src/bin/fdirname.rs"

[[bin]]
name = "freadlink"
path = "src/bin/freadlink.rs"

[[bin]]
name = "frealpath"
path = "src/bin/frealpath.rs"

[[bin]]
name = "fpathchk"
path = "src/bin/fpathchk.rs"

[[bin]]
name = "fsleep"
path = "src/bin/fsleep.rs"

[[bin]]
name = "fnice"
path = "src/bin/fnice.rs"

[[bin]]
name = "fnohup"
path = "src/bin/fnohup.rs"

[[bin]]
name = "fgroups"
path = "src/bin/fgroups.rs"

[[bin]]
name = "funame"
path = "src/bin/funame.rs"

[[bin]]
name = "fmktemp"
path = "src/bin/fmktemp.rs"

[[bin]]
name = "fmknod"
path = "src/bin/fmknod.rs"

[[bin]]
name = "fmkdir"
path = "src/bin/fmkdir.rs"

[[bin]]
name = "fuptime"
path = "src/bin/fuptime.rs"

[[bin]]
name = "ftruncate"
path = "src/bin/ftruncate.rs"

[[bin]]
name = "ftouch"
path = "src/bin/ftouch.rs"

[[bin]]
name = "fln"
path = "src/bin/fln.rs"

[[bin]]
name = "fsha1sum"
path = "src/bin/fsha1sum.rs"

[[bin]]
name = "fsha224sum"
path = "src/bin/fsha224sum.rs"

[[bin]]
name = "fsha384sum"
path = "src/bin/fsha384sum.rs"

[[bin]]
name = "fsha512sum"
path = "src/bin/fsha512sum.rs"

[[bin]]
name = "fsum"
path = "src/bin/fsum.rs"

[[bin]]
name = "fcksum"
path = "src/bin/fcksum.rs"

[[bin]]
name = "fbase32"
path = "src/bin/fbase32.rs"

[[bin]]
name = "fbasenc"
path = "src/bin/fbasenc.rs"

[[bin]]
name = "fid"
path = "src/bin/fid.rs"

[[bin]]
name = "fenv"
path = "src/bin/fenv.rs"

[[bin]]
name = "ftimeout"
path = "src/bin/ftimeout.rs"

[[bin]]
name = "ftee"
path = "src/bin/ftee.rs"

[[bin]]
name = "fchroot"
path = "src/bin/fchroot.rs"

[[bin]]
name = "fseq"
path = "src/bin/fseq.rs"

[[bin]]
name = "ftsort"
path = "src/bin/ftsort.rs"

[[bin]]
name = "fshuf"
path = "src/bin/fshuf.rs"

[[bin]]
name = "fdircolors"
path = "src/bin/fdircolors.rs"

[dependencies]
# CLI argument parsing
clap = { version = "4", features = ["derive", "cargo"] }

# SIMD byte operations (auto-detects AVX2/NEON)
memchr = "2"

# Memory-mapped I/O
memmap2 = "0.9"

# Parallelism
rayon = "1"

# Hashing
blake2b_simd = "1"

# SHA-256 fallback for Apple targets (ring 0.17 doesn't compile on macOS aarch64)
sha2 = "0.10"

# SHA-1 hashing
sha1 = "0.10"

# MD5 hashing (ring doesn't support MD5)
md-5 = "0.10"

# Digest trait (for generic hash interface used by md-5/sha2)
digest = "0.10"

# Base64 (SIMD-accelerated)
base64-simd = "0.8"

# Regex for tac -r and nl -b pBRE
regex = "1"

# Fast integer-to-string conversion (for nl line numbers)
itoa = "1"

# System calls (readahead, madvise)
libc = "0.2"

# Error handling
thiserror = "2"
anyhow = "1"

# Fast allocator (2-3x faster than glibc malloc for small allocs)
mimalloc = { version = "0.1", default-features = false }

[dev-dependencies]
criterion = { version = "0.8", features = ["html_reports"] }
proptest = "1"
tempfile = "3"

[[bench]]
name = "wc_benchmark"
harness = false

[[bench]]
name = "hash_benchmark"
harness = false

[profile.release]
lto = "fat"
codegen-units = 1
panic = "abort"
strip = true
opt-level = 3

[profile.bench]
inherits = "release"
debug = true
strip = false

# ring for SHA-256 on non-Apple targets: BoringSSL assembly with SHA-NI/AVX2
# (ring 0.17 has compile error on macOS aarch64 / Apple Silicon)
[target.'cfg(not(target_vendor = "apple"))'.dependencies]
ring = "0.17"

# Enable ASM acceleration for hash crates on non-MSVC targets
# (sha2-asm/md5-asm use .S assembly files that MSVC cl.exe can't compile)
[target.'cfg(not(target_env = "msvc"))'.dependencies]
sha1 = { version = "0.10", features = ["asm"] }
sha2 = { version = "0.10", features = ["asm"] }
md-5 = { version = "0.10", features = ["asm"] }

# OpenSSL for optimized MD5 and SHA-256 on Linux (uses system OpenSSL assembly)
# Windows doesn't have OpenSSL by default; falls back to md-5/ring crates
[target.'cfg(target_os = "linux")'.dependencies]
openssl = { version = "0.10", features = ["vendored"] }