Skip to content

stratza/spindlex


⚡ Overview

SpindleX is a modern SSH protocol implementation for Python 3.9+. It is designed for high-performance automation and secure file transfers, providing a clean alternative to legacy SSH libraries.

Warning

Beta software. The 0.6.x line is stabilising the core protocol, transport, and SFTP layers. Review meta/SECURITY.md before deploying in production-facing workflows, pin exact versions, and audit your host key policy.

🔥 Key Features

  • 🚀 High Performance: Optimized internal buffering (32KB chunks) for high-throughput SFTP and command execution.
  • 🔄 Native Async: First-class asyncio support via AsyncSSHClient and AsyncSFTPClient.
  • 🛡️ Security: Prioritizes modern primitives (Ed25519, AES-256-CTR) and disables legacy/weak ciphers.
  • 🔗 Advanced Tunneling: Support for ProxyJump (bastion hosts) and TCP port forwarding.
  • 📂 Recursive SFTP: Native support for recursive directory uploads and downloads.
  • 🏷️ Fully Typed: Comprehensive type hints for IDE integration and static analysis.

💎 Why SpindleX?

  • 💼 Business Friendly: MIT Licensed. Permissive use for commercial and proprietary projects.
  • 📖 Maintainable Code: Modular architecture designed for clarity and easier security auditing.
  • 🛠️ Modern API: Clean, intuitive interface with consistent error handling and minimal dependencies.
  • 🧊 Focused Scope: No support for insecure legacy protocols, resulting in a leaner and more secure codebase.

🛠️ Tech Stack

Core Logic Python Cryptography

Protocol SSH SFTP

Concurrency Asyncio


🚀 Quick Start

Installation

# Using pip
pip install spindlex

# Using uv
uv pip install spindlex

💻 Usage Preview

Synchronous Example
from spindlex import SSHClient

with SSHClient() as client:
    client.get_host_keys().load()
    client.connect('example.com', username='admin')

    stdin, stdout, stderr = client.exec_command('uptime')
    print(f"Server Status: {stdout.read().decode().strip()}")
Asynchronous Example
import asyncio
from spindlex import AsyncSSHClient

async def main():
    async with AsyncSSHClient() as client:
        await client.connect('example.com', username='admin')
        stdin, stdout, stderr = await client.exec_command('df -h')
        print(await stdout.read())

asyncio.run(main())

📊 Performance Benchmarks

SpindleX is optimized for high-throughput environments, significantly reducing protocol overhead compared to standard implementations.

Operation SpindleX Legacy Libraries Improvement
Handshake 0.32s 0.85s ~2.6x
Bulk SFTP 45 MB/s 18 MB/s ~2.5x
Overhead Low High 🔥

Tip

Run the benchmark suite on your own hardware:
python scripts/benchmark_compare.py


🛡️ Security

  • Verification Enforced: Host key verification is mandatory by default.
  • Log Sanitization: Credentials and sensitive data are automatically filtered from logs.
  • Modern Defaults: Ed25519 and ECDSA preferred for key exchange.
  • Full Policy: See meta/SECURITY.md for vulnerability reporting and security standards.

🤝 Contributing

Contributions are welcome. See meta/CONTRIBUTING.md for guidelines.

Distributed under the MIT License. See LICENSE for more information.


SpindleX Project © 2026 Stratza Labs

About

Modern async SSH & SFTP library for Python. Fast, typed, and secure by default.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Contributors