Skip to content

TuulbeltZero-Dependency Tools

Focused, zero-dependency tools and utilities for modern software development

Available Tools

TypeScript: Test Flakiness Detector

Identify unreliable tests by running them multiple times and tracking failure rates.

  • Framework agnostic - works with any test command
  • Comprehensive JSON reports with failure statistics
  • Zero runtime dependencies

Get Started →

Rust: File-Based Semaphore

Cross-platform file-based semaphore for process coordination with stale lock detection.

  • Atomic locking with O_CREAT | O_EXCL
  • Stale lock detection and recovery
  • Zero runtime dependencies

Get Started →

View All 11 Tools →

More Tools

CLI Progress Reporting

Concurrent-safe progress tracking with file-based atomic writes.

  • Concurrent-safe operations
  • State persistence across processes

Get Started →

Cross-Platform Path Normalizer

Convert Windows/Unix paths with zero dependencies.

  • Bidirectional Windows ↔ Unix conversion
  • UNC path and mixed separator support

Get Started →

Output Diffing Utility

Semantic diff for JSON, text, and binary files with zero dependencies.

  • Smart file type detection
  • Multiple output formats (unified, JSON, summary)
  • Structural JSON comparison

Get Started →

Structured Error Handler

Structured error format with context preservation and serialization.

  • Context chain preservation through call stacks
  • Full JSON serialization/deserialization
  • Error codes and categories for routing

Get Started →

Config File Merger

Merge ENV, config files, and CLI arguments with clear precedence rules.

  • Clear precedence: CLI > ENV > File > Defaults
  • Source tracking for debugging
  • Automatic type coercion

Get Started →

Snapshot Comparison Uses odiff

Snapshot testing with integrated semantic diffs for regression detection.

  • Hash-based fast comparison
  • Library composition: Uses odiff internally
  • Text, JSON, and binary support

Get Started →

File-Based Semaphore (TS) sema compatible

Cross-platform file-based semaphore for Node.js process synchronization.

  • Atomic locking (temp file + rename)
  • Cross-language: Compatible with Rust sema
  • Security: path traversal, symlink, tag sanitization

Get Started →

Port Resolver Uses semats

Concurrent port allocation for any application - avoid port conflicts in tests, servers, microservices, and development.

  • File-based port registry with atomic operations
  • TCP bind test for actual port availability
  • Library composition: Uses semats for atomic registry access

Get Started →

Property Validator In Development

Runtime type validation with TypeScript inference - validate data from any source with graceful error handling.

  • Schema-based validation with automatic type inference
  • Result types (no exceptions) for resilient apps
  • Framework-agnostic - works anywhere (API, config, props, args)

Get Started →

Tool Composition: Snapshot Comparison is the first tool to use library-level composition (PRINCIPLES.md Exception 2). It imports output-diffing-utility as a path dependency, demonstrating how Tuulbelt tools can build on each other while maintaining zero external dependencies.

Progress

Phase 1: Quick Tools — 5 of 5 complete (100%) ✅

  • Test Flakiness Detector (TypeScript)
  • CLI Progress Reporting (TypeScript)
  • Cross-Platform Path Normalizer (TypeScript)
  • File-Based Semaphore (Rust)
  • Output Diffing Utility (Rust)

Phase 2: Started — 6 of 28

  • Structured Error Handler (TypeScript)
  • Config File Merger (TypeScript)
  • Snapshot Comparison (Rust)
  • File-Based Semaphore (TypeScript)
  • Port Resolver (TypeScript)
  • Property Validator (TypeScript) ✨ IN DEVELOPMENT

Overall Progress: 11 of 33 tools (33%)

Quick Start

TypeScript Tools

bash
# Clone the repository
git clone https://github.com/tuulbelt/tuulbelt.git
cd tuulbelt

# Try Test Flakiness Detector
cd test-flakiness-detector
npm install
flaky --test "npm test" --runs 10

Rust Tools

bash
# Try File-Based Semaphore
cd file-based-semaphore
cargo build --release

# Acquire a lock
./target/release/file-semaphore try /tmp/my.lock

# Check status
./target/release/file-semaphore status /tmp/my.lock

# Release
./target/release/file-semaphore release /tmp/my.lock

See each tool's documentation for full usage guides and API references.

Philosophy

Tuulbelt tools follow strict principles:

  1. Single Problem Per Tool — Narrow, well-defined scope
  2. Zero External Dependencies — Standard library only
  3. Portable Interface — CLI, files, sockets; not proprietary APIs
  4. Composable — Works via pipes, environment variables, file I/O
  5. Independently Cloneable — Each tool is a standalone repository
  6. Proven Implementation — No moonshots, no "works 80%" solutions

Read Full Principles →

Released under the MIT License.