Skip to main content

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

Project description

SpindleX Logo

SpindleX

A modern, high-performance SSHv2 and SFTP library.

CI Status Coverage PyPI Version Python Support License PyPI Downloads Socket Badge

Explore the Docs »

Quick StartMigration GuideCookbookPerformanceSecurityContributing


SpindleX is a modern SSH protocol implementation engineered for speed, security, and a seamless developer experience. It provides a significantly more performant and cleaner alternative to legacy Python SSH libraries.

✨ Key Features

  • 🚀 High Performance: Optimized protocol implementation with internal buffering designed for high-throughput SFTP and command execution.
  • 📦 Modern Architecture: Clean, modular codebase built from the ground up for maintainability. Leverages the industry-standard cryptography library for robust, hardware-accelerated security.
  • 🔄 Native Async: First-class support for asyncio with AsyncSSHClient and AsyncSFTPClient.
  • 🛡️ Secure by Default: Modern algorithms like Ed25519, ECDSA, and ChaCha20-Poly1305 are prioritized. Legacy SHA-1 and weak ciphers are disabled in the default configuration.
  • 🏷️ Fully Typed: 100% type-hinted codebase for robust IDE integration.

🚀 Quick Start

Installation

# Using pip
pip install spindlex

# Using uv (recommended)
uv pip install spindlex

Basic Usage

Synchronous Example
from spindlex import SSHClient
from spindlex.hostkeys.policy import AutoAddPolicy

with SSHClient() as client:
    client.set_missing_host_key_policy(AutoAddPolicy())
    client.connect('example.com', username='admin')
    
    stdin, stdout, stderr = client.exec_command('uptime')
    print(f"Status: {stdout.read().decode().strip()}")
Asynchronous Example
import asyncio
from spindlex import AsyncSSHClient

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

asyncio.run(run())

⚡ Performance

SpindleX is designed for high-throughput, low-latency environments. It utilizes internal read buffering (32KB chunks) and optimized packet handling to reduce system call overhead and improve protocol efficiency.

While performance varies significantly based on network conditions and hardware, SpindleX aims to provide a modern, efficient alternative to legacy Python SSH implementations.

[!TIP] Use the included spindlex-benchmark tool to evaluate performance in your specific environment.


🛡️ Security

  • Hardened Defaults: Modern cryptographic primitives are used by default. Legacy algorithms are disabled unless explicitly configured.
  • Mandatory Verification: Host key verification is enforced unless explicitly overridden.
  • Privacy Aware: Built-in log sanitizers ensure credentials never reach telemetry.
  • Vulnerability Reporting: See meta/SECURITY.md.

🤝 Contributing

Contributions are welcome! See meta/CONTRIBUTING.md to get started.


📄 License

SpindleX is released under the MIT License. See LICENSE for the full text.


Developed with precision by Di3Z1E.
© 2024 SpindleX Project

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-0.5.0.tar.gz (126.6 kB view details)

Uploaded Source

Built Distribution

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

spindlex-0.5.0-py3-none-any.whl (126.7 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for spindlex-0.5.0.tar.gz
Algorithm Hash digest
SHA256 78bdbbea3738acc8e8c0ea53183eed1649379d1d2f11391fba80652156da8263
MD5 d2eed7b288b023692ee9033f89a286e3
BLAKE2b-256 75ccaac145cd407c1f5e1064b6d198bd4e6e9dff7017fb24101e8c205ae6dbd9

See more details on using hashes here.

Provenance

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

Publisher: release.yml on Di3Z1E/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-0.5.0-py3-none-any.whl.

File metadata

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

File hashes

Hashes for spindlex-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 91d4efa02024e14d34f922e518da3c0cb7e92ec43d948391c6e88c9354077bb7
MD5 1c4e7ba9f7615b1e963fd36612544f34
BLAKE2b-256 60743dbfb96e52a9e3664f6af32856550095b08306b26a9f0620cff60653c67a

See more details on using hashes here.

Provenance

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

Publisher: release.yml on Di3Z1E/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