|
| 1 | +--- |
| 2 | +status: proposed |
| 3 | +date: 2025-08-20 |
| 4 | +decision-makers: Bruno Martins, Larkin Young, Joe Polny, David Rojas |
| 5 | +consulted: [TBD] |
| 6 | +--- |
| 7 | + |
| 8 | +# Package Naming Strategy for Multi-Language AlgoKit Libraries |
| 9 | + |
| 10 | +## Context and Problem Statement |
| 11 | + |
| 12 | +The AlgoKit ecosystem currently includes utilities libraries named `algokit-utils-ts` and `algokit-utils-py` for TypeScript and Python respectively. As we expand to support additional languages (Go, Kotlin, Swift, and Rust) and evolve these libraries into more comprehensive SDKs, we need to establish a consistent naming strategy. |
| 13 | + |
| 14 | +The current "utils" naming was adopted due to naming conflicts with `algosdk` packages published by Algorand Technologies. However, these libraries have evolved beyond simple utilities and now provide comprehensive SDK functionality for Algorand development. |
| 15 | + |
| 16 | +## Decision Drivers |
| 17 | + |
| 18 | +- Clear and consistent naming across all target languages |
| 19 | +- Reflect the true nature of these libraries as SDKs rather than utility collections |
| 20 | +- Avoid naming conflicts with existing Algorand packages |
| 21 | +- Follow language-specific naming conventions |
| 22 | +- Enable easy discovery and understanding of package purpose |
| 23 | + |
| 24 | +## Target Languages |
| 25 | + |
| 26 | +- TypeScript (ts) |
| 27 | +- Python (py) |
| 28 | +- Go (go) |
| 29 | +- Kotlin (kt) |
| 30 | +- Swift (swift) |
| 31 | +- Rust (rs) |
| 32 | + |
| 33 | +## Considered Options |
| 34 | + |
| 35 | +### 1. Keep current naming: `algokit-utils-{lang}` |
| 36 | + |
| 37 | +Continue using the existing naming pattern: |
| 38 | +- `algokit-utils-ts` (TypeScript) |
| 39 | +- `algokit-utils-py` (Python) |
| 40 | +- `algokit-utils-go` (Go) |
| 41 | +- `algokit-utils-kt` (Kotlin) |
| 42 | +- `algokit-utils-swift` (Swift) |
| 43 | +- `algokit-utils-rs` (Rust) |
| 44 | + |
| 45 | +**Pros:** |
| 46 | +- No breaking changes required |
| 47 | +- Existing users familiar with naming |
| 48 | +- No migration effort needed |
| 49 | + |
| 50 | +**Cons:** |
| 51 | +- Misrepresents the true nature of these comprehensive SDKs |
| 52 | +- "Utils" implies limited utility functions rather than full SDK capabilities |
| 53 | +- Inconsistent with the evolving AlgoKit ecosystem strategy |
| 54 | + |
| 55 | +### 2. Adopt SDK naming: `algokit-sdk-{lang}` |
| 56 | + |
| 57 | +Use SDK naming to reflect the true nature of these libraries: |
| 58 | +- `algokit-sdk-ts` (TypeScript) |
| 59 | +- `algokit-sdk-py` (Python) |
| 60 | +- `algokit-sdk-go` (Go) |
| 61 | +- `algokit-sdk-kt` (Kotlin) |
| 62 | +- `algokit-sdk-swift` (Swift) |
| 63 | +- `algokit-sdk-rs` (Rust) |
| 64 | + |
| 65 | +**Language-specific adaptations:** |
| 66 | +- **TypeScript/JavaScript**: `@algorandfoundation/algokit-sdk-ts` (scoped package) |
| 67 | +- **Python**: `algokit_sdk_py` (snake_case following PEP conventions) |
| 68 | +- **Swift**: `AlgoKitSDKSwift` (PascalCase following Swift conventions) |
| 69 | +- **Kotlin**: `algokit-sdk-kt` (kebab-case following Kotlin/Java conventions) |
| 70 | +- **Go**: `algokit-sdk-go` (kebab-case for module names) |
| 71 | +- **Rust**: `algokit_sdk_rs` (snake_case following Rust conventions) |
| 72 | + |
| 73 | +**Pros:** |
| 74 | +- Accurately reflects comprehensive SDK functionality |
| 75 | +- Clear indication of purpose for developers |
| 76 | +- Consistent naming strategy across all languages |
| 77 | +- Better discoverability and understanding |
| 78 | +- Avoids conflicts with existing algosdk packages |
| 79 | +- Follows established conventions in each language ecosystem |
| 80 | + |
| 81 | +**Cons:** |
| 82 | +- Breaking change requiring migration from existing packages |
| 83 | +- Requires documentation updates and migration guides |
| 84 | +- Temporary confusion during transition period |
| 85 | +- Migration coordination needed with major version releases |
| 86 | + |
| 87 | +### 3. Use AlgoKit branding: `algokit-{lang}` |
| 88 | + |
| 89 | +Simplified naming without SDK/utils designation: |
| 90 | +- `algokit-ts` (TypeScript) |
| 91 | +- `algokit-py` (Python) |
| 92 | +- `algokit-go` (Go) |
| 93 | +- `algokit-kt` (Kotlin) |
| 94 | +- `algokit-swift` (Swift) |
| 95 | +- `algokit-rs` (Rust) |
| 96 | + |
| 97 | +**Pros:** |
| 98 | +- Clean, simple naming |
| 99 | +- Strong AlgoKit brand association |
| 100 | +- Language designation still clear |
| 101 | + |
| 102 | +**Cons:** |
| 103 | +- Doesn't indicate the nature of the package (SDK vs CLI vs other tools) |
| 104 | +- Potential confusion with other AlgoKit packages |
| 105 | +- Less descriptive than SDK naming |
| 106 | +- May conflict with future AlgoKit packages |
| 107 | + |
| 108 | +## Decision Outcome |
| 109 | + |
| 110 | +_TO BE DECIDED_ |
0 commit comments