You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Brings trunk up to date with all work on main through v0.3.0:
- S3 streaming transfers and sccache integration
- SMB2 compounding, small-file fast paths, benchmarks (v0.2.0)
- Non-blocking file logging with slog!/serr! macros, ISO-8601 timestamps
- Version bump to 0.3.0, README updates
S3-compatible API proxy to SMB file shares. Translates S3 HTTP requests into SMB 3.1.x wireprotocol operations over TCP.
3
+
**S3-compatible API proxy that turns any SMB share into an S3 endpoint** -- no mounting, no `libsmbclient`, no FUSE. Translates S3 HTTP requests directly into SMB 3.1.x wire-protocol operations over TCP.
4
4
5
-
- Speaks SMB directly — no mount, no libsmbclient
6
-
- NTLMv2 authentication via macOS CommonCrypto (no external crypto crates)
7
-
- macOS 26+ only
5
+
## Why spiceio
8
6
9
-
## Supported S3 operations
7
+
Most tools that bridge SMB and S3 (MinIO, s3proxy, VersityGW) require mounting the share to the local filesystem first. spiceio skips that entirely -- it speaks the SMB wire protocol directly over TCP (port 445), so there's no mount, no kernel driver, and no FUSE layer in the way.
8
+
9
+
This makes it the simplest path from "I have an SMB share" to "any S3 client can use it":
Path-style addressing only (no virtual-hosted-style).
97
+
98
+
## Architecture
99
+
100
+
Three modules:
101
+
102
+
-**`s3`** -- HTTP layer. Parses S3 requests, produces XML responses. Router dispatches to the appropriate handler. Small files (<64KB) use compound fast paths; large files stream.
103
+
-**`smb`** -- Wire protocol client. Manages TCP connection, negotiate/session-setup handshake, and file operations. Supports SMB2 compounding for batching multiple operations in a single round trip.
104
+
-**`crypto`** -- FFI bindings to macOS CommonCrypto. MD4, SHA-256, SHA-512, HMAC-MD5, HMAC-SHA256, AES-128-CMAC. No Rust crypto crates.
41
105
42
-
```bash
43
-
export SPICEIO_SMB_SERVER=nas.local
44
-
export SPICEIO_SMB_USER=admin
45
-
export SPICEIO_SMB_PASS=secret
46
-
export SPICEIO_SMB_SHARE=files
47
-
./target/release/spiceio
106
+
```
107
+
HTTP request
108
+
-> s3::router::handle_request
109
+
-> smb::ops::ShareSession method
110
+
-> smb::client::SmbClient wire operations
111
+
-> TCP to SMB server
48
112
```
49
113
50
-
Then use any S3 client pointed at `http://localhost:8333`:
114
+
## Development
51
115
52
116
```bash
53
-
aws s3 ls s3://files/ --endpoint-url http://localhost:8333
0 commit comments