Skip to main content

A modern, high-performance SSHv2 and SFTP client/server library

Project description


⚡ 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.

[!NOTE] 1.0.0 - First stable release. SpindleX has graduated from beta: the public API surface is frozen under semantic versioning, with chacha20-poly1305@openssh.com as the preferred cipher, adaptive SFTP chunks via limits@openssh.com, and a hardened sync + async transport. Upgrading from 0.x? Read the migration guide. See also SECURITY.md, production usage expectations, and the compatibility policy.

🔥 Key Features

  • 🚀 High Performance: Adaptive SFTP write chunks up to 255 KB via limits@openssh.com negotiation, pipelined transfers, and zero-copy internal buffering.
  • 🔒 ChaCha20-Poly1305: Preferred AEAD cipher - no separate MAC pass, full Terrapin-defense strict-KEX, on par with leading SSH libraries.
  • 🔄 Native Async: First-class asyncio support via AsyncSSHClient and AsyncSFTPClient.
  • 🛡️ Secure by Default: Modern primitives only - Ed25519, ECDSA, ChaCha20-Poly1305, AES-CTR. Legacy/weak ciphers are not negotiated.
  • 🔗 Advanced Tunneling: ProxyJump (bastion hosts) via direct-tcpip channels 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:
        client.get_host_keys().load()
        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, with SFTP upload throughput in line with leading SSH libraries and ChaCha20-Poly1305 as the preferred cipher. See the comparison page for the full benchmark methodology.

Operation SpindleX Other libs Notes
SFTP upload (1 MiB, chacha20) ~14 ms ~14 ms On par after limits negotiation
SFTP upload (1 MiB, AES-CTR) ~14 ms ~14 ms Pipelined, 255 KB chunks
Handshake ~320 ms ~320 ms Ed25519 + Curve25519

[!TIP] Run the benchmark suite on your own hardware:

python scripts/benchmark_ciphers.py     # cipher comparison
python scripts/benchmark_production.py  # full protocol correctness + perf

🛡️ Security

  • Verification Enforced: Host key verification is mandatory by default.
  • Log Sanitization: Credentials and sensitive data are automatically filtered from logs.
  • AEAD Preferred: chacha20-poly1305@openssh.com is the default cipher - authentication is integral, no separate MAC.
  • Terrapin Defense: Strict-KEX (kex-strict-c-v00@openssh.com) enabled, sequence numbers reset after NEWKEYS.
  • Modern Defaults: Ed25519, ECDSA, ChaCha20-Poly1305, and AES-CTR only. SHA-1 and CBC mode are excluded.
  • Full Policy: See SECURITY.md for vulnerability reporting and Security Guide for operational security guidance.

🤝 Contributing

Contributions are welcome. See CONTRIBUTING.md for the GitHub entry point and docs/contributing.md for the maintained guide.

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


SpindleX Project © 2026 Stratza Labs

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

spindlex-1.0.0.tar.gz (151.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

spindlex-1.0.0-py3-none-any.whl (165.3 kB view details)

Uploaded Python 3

File details

Details for the file spindlex-1.0.0.tar.gz.

File metadata

  • Download URL: spindlex-1.0.0.tar.gz
  • Upload date:
  • Size: 151.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for spindlex-1.0.0.tar.gz
Algorithm Hash digest
SHA256 27a0185c28b8719133316016fdcc75596b77c816c59dd0eeeb9b354701214080
MD5 53226d1cf55c98328f5ad95710716ce7
BLAKE2b-256 4252961b00de99e967680caf563a382cae98635b4502bd45e88c0753664885f7

See more details on using hashes here.

Provenance

The following attestation bundles were made for spindlex-1.0.0.tar.gz:

Publisher: release.yml on stratza/spindlex

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file spindlex-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: spindlex-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 165.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for spindlex-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ce76e875aebdfcdf04c93d144294c3aabcf70b19072001966a4332c5acdb2c16
MD5 de0dc120657bfc20105e160f010b346a
BLAKE2b-256 2c6d49ff98c24c3a7c93958890daf21efa33e6aa037c9b2f3cab5892c758b2cc

See more details on using hashes here.

Provenance

The following attestation bundles were made for spindlex-1.0.0-py3-none-any.whl:

Publisher: release.yml on stratza/spindlex

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page