A modern, high-performance, pure-Python SSHv2 and SFTP client/server library
Project description
SpindleX
A modern, high-performance, pure-Python SSHv2 and SFTP library.
Explore the Docs »
Quick Start
•
Migration Guide
•
Cookbook
•
Performance
•
Security
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 with Adaptive Buffering and TCP Fast-Path. Up to 60% faster SFTP transfers.
- 📦 Zero Dependencies: Pure-Python core. No
gcc, nopython-dev. Perfect for minimal Docker images. - 🔄 Native Async: First-class support for
asynciowithAsyncSSHClientandAsyncSFTPClient. - 🛡️ Modern Security: Ed25519, ECDSA, ChaCha20-Poly1305 by default.
- 🏷️ 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 low-latency environments. In head-to-head comparisons, SpindleX demonstrates a commanding lead in protocol efficiency:
| Operation | SpindleX (avg) | Traditional (avg) | Improvement |
|---|---|---|---|
| Handshake & Connect | 0.035s | 0.077s | 54% Faster |
| SFTP Transfer (10MB) | 0.019s | 0.061s | 69% Faster |
🛡️ Security
- Hardened Defaults: Legacy SHA-1 and weak ciphers are disabled by design.
- Mandatory Verification: Host key verification is enforced unless explicitly overridden.
- Privacy Aware: Built-in log sanitizers ensure credentials never reach telemetry.
- Vulnerability Reporting: See SECURITY.md.
🤝 Contributing
Contributions are welcome! See CONTRIBUTING.md to get started.
📄 License
SpindleX is released under the MIT License. See LICENSE for the full text.
© 2024 SpindleX Project
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file spindlex-0.4.2.tar.gz.
File metadata
- Download URL: spindlex-0.4.2.tar.gz
- Upload date:
- Size: 122.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1ec5b19d067934fea8db20383086e53765bb3e2473f069a99b4b98a266c83520
|
|
| MD5 |
8412e7062474fb3bcff9f49cba57d19e
|
|
| BLAKE2b-256 |
452549d490db981a65209e5697608116ae9e22b410898d5eedb78170e1c6636b
|
Provenance
The following attestation bundles were made for spindlex-0.4.2.tar.gz:
Publisher:
release.yml on Di3Z1E/spindlex
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
spindlex-0.4.2.tar.gz -
Subject digest:
1ec5b19d067934fea8db20383086e53765bb3e2473f069a99b4b98a266c83520 - Sigstore transparency entry: 1278629049
- Sigstore integration time:
-
Permalink:
Di3Z1E/spindlex@20986039e11dbff1005be8a89e83274dc35b01da -
Branch / Tag:
refs/tags/v0.4.2 - Owner: https://github.com/Di3Z1E
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@20986039e11dbff1005be8a89e83274dc35b01da -
Trigger Event:
release
-
Statement type:
File details
Details for the file spindlex-0.4.2-py3-none-any.whl.
File metadata
- Download URL: spindlex-0.4.2-py3-none-any.whl
- Upload date:
- Size: 122.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0a10cb13bd7e7ad8bb3026696fb8d38c3d29844837080da65d8cea1613b9c9ac
|
|
| MD5 |
b4987f79b9d2b76045f53a4f74dfb9f9
|
|
| BLAKE2b-256 |
8978859030271529e17de09d94bb3cdc8e472180d78baf6ba945b0e572e3bc6e
|
Provenance
The following attestation bundles were made for spindlex-0.4.2-py3-none-any.whl:
Publisher:
release.yml on Di3Z1E/spindlex
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
spindlex-0.4.2-py3-none-any.whl -
Subject digest:
0a10cb13bd7e7ad8bb3026696fb8d38c3d29844837080da65d8cea1613b9c9ac - Sigstore transparency entry: 1278629057
- Sigstore integration time:
-
Permalink:
Di3Z1E/spindlex@20986039e11dbff1005be8a89e83274dc35b01da -
Branch / Tag:
refs/tags/v0.4.2 - Owner: https://github.com/Di3Z1E
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@20986039e11dbff1005be8a89e83274dc35b01da -
Trigger Event:
release
-
Statement type: