Skip to content

Commit 6fe7484

Browse files
committed
docs: added target lib naming convention ADR
1 parent 3388cc7 commit 6fe7484

File tree

3 files changed

+112
-1
lines changed

3 files changed

+112
-1
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ wheelhouse/
1616

1717
# AI artifacts
1818
CLAUDE.local.md
19-
.claude/settings.local.json
19+
.claude/
2020
AGENTS.md
2121
.tasks/
2222
.opencode/
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
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_

docs/book/decisions/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ This section contains Architecture Decision Records documenting important decisi
55
## Contents
66

77
- **[0000: Native Implementations vs FFI](./0000-native-implementations-vs-ffi.md)** - Decision on implementation strategy for multi-language support
8+
- **[0001: Package Naming Strategy](./0001-package-naming-strategy.md)** - Decision on naming convention for multi-language AlgoKit libraries
89

910
## ADR Format
1011

0 commit comments

Comments
 (0)