|
| 1 | +# Project Roadmap |
| 2 | + |
| 3 | +## Current: v0.x (Pre-Stable) |
| 4 | + |
| 5 | +### Completed Features |
| 6 | +- File Upload (PUT via FilePut, POST multipart via FileUpload) |
| 7 | +- File Download (GetObject) |
| 8 | +- File Delete (DeleteObject) |
| 9 | +- File Details (HeadObject) |
| 10 | +- List Objects (ListObjectsV2) with pagination |
| 11 | +- ListAll iterator (Go 1.23+) for memory-efficient iteration |
| 12 | +- Presigned URLs (GET/PUT with expiry) |
| 13 | +- Upload policies for browser POST uploads |
| 14 | +- IAM Role Support (EC2 instances with IMDSv2) |
| 15 | +- IAM token auto-renewal |
| 16 | +- Custom Metadata |
| 17 | +- Custom Endpoints (MinIO, DigitalOcean Spaces, etc.) |
| 18 | +- Content-Disposition and ACL support |
| 19 | +- Zero dependencies (stdlib only) |
| 20 | + |
| 21 | +## v0.10.2 - Code Organization (Refactor) |
| 22 | +**Scope**: Internal restructuring, no API changes |
| 23 | +**Size**: Medium (refactor ~1064 LOC) |
| 24 | + |
| 25 | +Split simples3.go into logical modules: |
| 26 | +- [ ] `simples3.go` - Core (S3 struct, New(), config methods: SetEndpoint/SetToken/SetClient) |
| 27 | +- [ ] `iam.go` - IAM (fetchIMDSToken, fetchIAMData, NewUsingIAM, renewIAMToken, SetIAMData) |
| 28 | +- [ ] `object.go` - Object ops (FileUpload, FilePut, FileDownload, FileDelete, FileDetails) |
| 29 | +- [ ] `list.go` - List ops (List, ListAll) |
| 30 | +- [ ] `helpers.go` - Utils (encodePath, detectFileSize, getFirstString, getURL) |
| 31 | +- [ ] Ensure all tests pass after refactor |
| 32 | + |
| 33 | +**Why**: 1064-line file hard to navigate. Clean foundation before adding features. |
| 34 | + |
| 35 | +--- |
| 36 | + |
| 37 | +## v0.11.0 - Bucket Operations |
| 38 | +**Scope**: Essential bucket management for CLI |
| 39 | +**Size**: Small (3 APIs, ~200 LOC) |
| 40 | + |
| 41 | +- [ ] ListBuckets |
| 42 | +- [ ] CreateBucket (with region support) |
| 43 | +- [ ] DeleteBucket |
| 44 | + |
| 45 | +**Why**: These 3 operations unblock CLI development. Minimal but complete. |
| 46 | + |
| 47 | +--- |
| 48 | + |
| 49 | +## v0.12.0 - Object Operations (Copy & Batch Delete) |
| 50 | +**Scope**: Object manipulation for CLI mv/sync |
| 51 | +**Size**: Small (2 APIs, ~150 LOC) |
| 52 | + |
| 53 | +- [ ] CopyObject (within/across buckets) |
| 54 | +- [ ] DeleteObjects (batch delete up to 1000 objects) |
| 55 | + |
| 56 | +**Why**: CopyObject enables `mv` command. Batch delete improves performance. |
| 57 | + |
| 58 | +--- |
| 59 | + |
| 60 | +## v0.13.0 - Multipart Upload |
| 61 | +**Scope**: Large file support |
| 62 | +**Size**: Large (5 APIs, ~400 LOC) |
| 63 | + |
| 64 | +- [ ] InitiateMultipartUpload |
| 65 | +- [ ] UploadPart (with retry logic) |
| 66 | +- [ ] CompleteMultipartUpload |
| 67 | +- [ ] AbortMultipartUpload |
| 68 | +- [ ] ListParts |
| 69 | + |
| 70 | +**Why**: Critical for large files. Enables resumable uploads. |
| 71 | + |
| 72 | +--- |
| 73 | + |
| 74 | +## v0.14.0 - Server-Side Encryption |
| 75 | +**Scope**: Security basics |
| 76 | +**Size**: Small (~150 LOC) |
| 77 | + |
| 78 | +- [ ] SSE-S3 support (AES256) |
| 79 | +- [ ] SSE-KMS support (key ARN) |
| 80 | +- [ ] Encryption headers in Put/Upload/Copy |
| 81 | + |
| 82 | +**Why**: Security is table stakes. Simple to add to existing operations. |
| 83 | + |
| 84 | +--- |
| 85 | + |
| 86 | +## v0.15.0 - Object Tagging |
| 87 | +**Scope**: Metadata management |
| 88 | +**Size**: Small (4 APIs, ~200 LOC) |
| 89 | + |
| 90 | +- [ ] PutObjectTagging |
| 91 | +- [ ] GetObjectTagging |
| 92 | +- [ ] DeleteObjectTagging |
| 93 | +- [ ] Tagging support in Put/Upload/Copy |
| 94 | + |
| 95 | +**Why**: Common requirement for organization/billing. Simple XML operations. |
| 96 | + |
| 97 | +--- |
| 98 | + |
| 99 | +## v0.16.0 - Object Versioning |
| 100 | +**Scope**: Version control |
| 101 | +**Size**: Medium (5 APIs, ~300 LOC) |
| 102 | + |
| 103 | +- [ ] PutBucketVersioning |
| 104 | +- [ ] GetBucketVersioning |
| 105 | +- [ ] ListObjectVersions |
| 106 | +- [ ] GetObjectVersion |
| 107 | +- [ ] DeleteObjectVersion (with version ID) |
| 108 | + |
| 109 | +**Why**: Important for data safety. More complex due to version handling. |
| 110 | + |
| 111 | +--- |
| 112 | + |
| 113 | +## v0.17.0 - ACLs & Lifecycle |
| 114 | +**Scope**: Advanced management |
| 115 | +**Size**: Medium (9 APIs, ~500 LOC) |
| 116 | + |
| 117 | +ACLs: |
| 118 | +- [ ] PutObjectAcl |
| 119 | +- [ ] GetObjectAcl |
| 120 | +- [ ] PutBucketAcl |
| 121 | +- [ ] GetBucketAcl |
| 122 | + |
| 123 | +Lifecycle: |
| 124 | +- [ ] PutBucketLifecycle |
| 125 | +- [ ] GetBucketLifecycle |
| 126 | +- [ ] DeleteBucketLifecycle |
| 127 | + |
| 128 | +**Why**: Grouped advanced features. Completes library API surface. |
| 129 | + |
| 130 | +--- |
| 131 | + |
| 132 | +## v0.18.0 - CLI Complete |
| 133 | +**Scope**: Full-featured CLI with all library features |
| 134 | +**Size**: Large (~2000 LOC) |
| 135 | + |
| 136 | +CLI (`cmd/simples3/`): |
| 137 | +- [ ] Project structure (cobra or custom parser) |
| 138 | +- [ ] S3 URI parsing (`s3://bucket/key`) |
| 139 | +- [ ] Config (env vars: AWS_*, flags: --region/--profile) |
| 140 | +- [ ] AWS credentials file support (~/.aws/credentials) |
| 141 | +- [ ] Basic commands: |
| 142 | + - [ ] ls (list buckets/objects) |
| 143 | + - [ ] cp (upload/download, with multipart for large files) |
| 144 | + - [ ] rm (delete single/batch) |
| 145 | + - [ ] mb (make bucket) |
| 146 | + - [ ] rb (remove bucket) |
| 147 | + - [ ] mv (move/rename using copy+delete) |
| 148 | + - [ ] presign (generate URL) |
| 149 | + - [ ] sync (local ↔ S3 with diff algorithm) |
| 150 | +- [ ] Flags: |
| 151 | + - [ ] --recursive (cp/rm) |
| 152 | + - [ ] --sse/--sse-kms-key-id (encryption) |
| 153 | + - [ ] --tags (tagging) |
| 154 | + - [ ] --version-id (versioning) |
| 155 | + - [ ] --acl (canned ACLs) |
| 156 | + - [ ] --delete (sync) |
| 157 | + - [ ] --exclude/--include (patterns) |
| 158 | + - [ ] --json (output mode) |
| 159 | + - [ ] --dry-run |
| 160 | +- [ ] Features: |
| 161 | + - [ ] Progress indicators |
| 162 | + - [ ] Parallel transfers |
| 163 | + - [ ] Better error messages |
| 164 | +- [ ] Subcommands: |
| 165 | + - [ ] acl get/set |
| 166 | + - [ ] lifecycle get/set/delete |
| 167 | + - [ ] tags get/set/delete |
| 168 | + |
| 169 | +**Why**: Library complete. Build full-featured CLI supporting all operations. |
| 170 | + |
| 171 | +--- |
| 172 | + |
| 173 | +## v1.0.0 - Stable Release |
| 174 | +**Focus**: Production-ready stability |
| 175 | +**Size**: Documentation, tests, polish |
| 176 | + |
| 177 | +Library: |
| 178 | +- [ ] All tests passing with 80%+ coverage |
| 179 | +- [ ] API documentation complete |
| 180 | +- [ ] Performance benchmarks |
| 181 | +- [ ] Security audit of signing/crypto code |
| 182 | + |
| 183 | +CLI: |
| 184 | +- [ ] CLI tests with real/mocked S3 |
| 185 | +- [ ] CLI documentation (man pages, --help) |
| 186 | +- [ ] Installation guides (brew, apt, etc.) |
| 187 | +- [ ] Shell completions (bash, zsh, fish) |
| 188 | + |
| 189 | +Release: |
| 190 | +- [ ] CHANGELOG.md complete |
| 191 | +- [ ] Migration guide from v0.x |
| 192 | +- [ ] Examples for all features |
| 193 | +- [ ] API stability guarantee |
| 194 | + |
| 195 | +**Why**: v1.0 = stability commitment. Library + CLI production-ready. |
0 commit comments