packwise-skills 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/.cursorrules +23 -23
  2. package/CLAUDE.md +25 -25
  3. package/LICENSE +21 -0
  4. package/README.md +404 -295
  5. package/audit.md +224 -224
  6. package/bin/packwise.js +322 -155
  7. package/install.sh +123 -0
  8. package/package.json +32 -31
  9. package/skill.md +944 -719
  10. package/sub-skills/ai/local-llm.md +183 -183
  11. package/sub-skills/ai/python-ml.md +164 -164
  12. package/sub-skills/backend/go-server.md +184 -184
  13. package/sub-skills/backend/java-spring.md +241 -241
  14. package/sub-skills/backend/node-server.md +164 -164
  15. package/sub-skills/backend/php-laravel.md +175 -175
  16. package/sub-skills/backend/python-server.md +164 -164
  17. package/sub-skills/backend/rust-backend.md +118 -118
  18. package/sub-skills/cli/python-cli.md +236 -236
  19. package/sub-skills/cli/sdk-library.md +497 -497
  20. package/sub-skills/cloud/ci-cd-pipelines.md +350 -350
  21. package/sub-skills/cloud/docker.md +191 -191
  22. package/sub-skills/cloud/kubernetes.md +277 -277
  23. package/sub-skills/cloud/payment-integration.md +307 -307
  24. package/sub-skills/cross-platform/multiplatform.md +252 -252
  25. package/sub-skills/desktop/electron.md +783 -783
  26. package/sub-skills/desktop/game-dev.md +443 -443
  27. package/sub-skills/desktop/native-app.md +123 -123
  28. package/sub-skills/desktop/scenarios.md +443 -443
  29. package/sub-skills/desktop/smart-platforms.md +324 -324
  30. package/sub-skills/desktop/tauri.md +428 -428
  31. package/sub-skills/desktop/vr-ar.md +252 -252
  32. package/sub-skills/desktop/web-to-desktop.md +153 -153
  33. package/sub-skills/embedded/car-infotainment.md +129 -129
  34. package/sub-skills/embedded/esp32.md +184 -184
  35. package/sub-skills/embedded/ros.md +150 -150
  36. package/sub-skills/embedded/stm32.md +160 -160
  37. package/sub-skills/mobile/android.md +322 -322
  38. package/sub-skills/mobile/capacitor.md +232 -232
  39. package/sub-skills/mobile/flutter-mobile.md +138 -138
  40. package/sub-skills/mobile/harmonyos.md +150 -150
  41. package/sub-skills/mobile/ios.md +245 -245
  42. package/sub-skills/mobile/react-native.md +443 -443
  43. package/sub-skills/mobile/wearables.md +230 -230
  44. package/sub-skills/plugins/browser-extension.md +308 -308
  45. package/sub-skills/plugins/jetbrains-plugin.md +226 -226
  46. package/sub-skills/plugins/vscode-extension.md +204 -204
  47. package/sub-skills/security/security-tools.md +174 -174
  48. package/sub-skills/web/monorepo.md +274 -274
  49. package/sub-skills/web/pwa.md +220 -220
  50. package/sub-skills/web/serverless-edge.md +295 -295
  51. package/sub-skills/web/spa.md +266 -266
  52. package/sub-skills/web/ssr.md +228 -228
  53. package/sub-skills/web/wasm.md +243 -243
@@ -1,252 +1,252 @@
1
- # Cross-Platform Multiplatform Build Sub-Skill
2
-
3
- Build apps targeting multiple platforms from a single codebase using .NET MAUI, Kotlin Multiplatform, or similar frameworks.
4
-
5
- **Current version**: .NET 9 / MAUI 9 / Kotlin 2.0 / KMP (2025-2026)
6
-
7
- ## When to Use
8
-
9
- - Need iOS + Android + Desktop + Web from one codebase
10
- - Team has C#/.NET or Kotlin experience
11
- - Want to share business logic across platforms while keeping native UI
12
- - Enterprise/internal apps where development speed matters more than pixel-perfect native UI
13
-
14
- ## Framework Comparison
15
-
16
- | Feature | .NET MAUI 9 | Kotlin Multiplatform (KMP) | Compose Multiplatform |
17
- |---------|------------|---------------------------|----------------------|
18
- | Language | C# | Kotlin | Kotlin |
19
- | UI approach | Single UI (native controls) | Shared logic, native UI | Shared UI (Compose) |
20
- | Platforms | iOS, Android, Windows, macOS | iOS, Android, Web, Desktop | iOS, Android, Desktop, Web |
21
- | Maturity | Stable (since .NET 7) | Stable (since KMP 1.9) | Beta (iOS) / Stable (Desktop) |
22
- | Shared code | 100% (including UI) | 60–80% (logic only) | 80–95% (including UI) |
23
- | Performance | Near-native | Native (compiled per platform) | Near-native |
24
- | Best for | .NET teams, enterprise | Max native feel + shared logic | Kotlin teams, cross-platform UI |
25
-
26
- ## .NET MAUI
27
-
28
- ### Prerequisites
29
-
30
- ```bash
31
- # Install .NET 9 SDK
32
- # https://dotnet.microsoft.com/download
33
-
34
- # Install MAUI workload
35
- dotnet workload install maui
36
-
37
- # Verify
38
- dotnet --list-sdks
39
- dotnet workload list
40
- ```
41
-
42
- ### Build
43
-
44
- ```bash
45
- # Create project
46
- dotnet new maui -n MyApp
47
- cd MyApp
48
-
49
- # Build for Android
50
- dotnet build -f net9.0-android -c Release
51
- # Output: bin/Release/net9.0-android/com.companyname.myapp-Signed.apk
52
-
53
- # Build for iOS (macOS only)
54
- dotnet build -f net9.0-ios -c Release
55
- # Output: bin/Release/net9.0-ios/MyApp.ipa
56
-
57
- # Build for Windows
58
- dotnet build -f net9.0-windows10.0.19041.0 -c Release
59
- # Output: bin/Release/net9.0-windows10.0.19041.0/win-x64/
60
-
61
- # Build for macOS (macOS only)
62
- dotnet build -f net9.0-maccatalyst -c Release
63
- ```
64
-
65
- ### Publish
66
-
67
- ```bash
68
- # Android AAB (for Play Store)
69
- dotnet publish -f net9.0-android -c Release /p:AndroidPackageFormat=aab
70
-
71
- # Android APK
72
- dotnet publish -f net9.0-android -c Release
73
-
74
- # iOS (requires Apple Developer account + signing)
75
- dotnet publish -f net9.0-ios -c Release /p:CodesignKey="Apple Distribution: ..." /p:CodesignProvision="MyApp Provisioning"
76
-
77
- # Windows (MSIX for Store or sideloading)
78
- dotnet publish -f net9.0-windows10.0.19041.0 -c Release /p:GenerateAppxPackageOnBuild=true
79
- ```
80
-
81
- ### Project Structure
82
-
83
- ```xml
84
- <!-- MyApp.csproj -->
85
- <Project Sdk="Microsoft.NET.Sdk">
86
- <PropertyGroup>
87
- <TargetFrameworks>net9.0-android;net9.0-ios;net9.0-windows10.0.19041.0;net9.0-maccatalyst</TargetFrameworks>
88
- <OutputType>Exe</OutputType>
89
- <ApplicationTitle>MyApp</ApplicationTitle>
90
- <ApplicationId>com.companyname.myapp</ApplicationId>
91
- <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>
92
- <ApplicationVersion>1</ApplicationVersion>
93
- </PropertyGroup>
94
- </Project>
95
- ```
96
-
97
- ### Common Pitfalls
98
-
99
- | Issue | Fix |
100
- |-------|-----|
101
- | Android build fails | Ensure Android SDK 34+ and JDK 17 installed; set `JAVA_HOME` |
102
- | iOS signing error | Set up provisioning profile; use `dotnet build -p:CodesignKey=...` |
103
- | Windows MSIX won't install | Enable Developer Mode; sign with trusted certificate |
104
- | Hot Reload not working | Use Visual Studio 2022 17.8+; ensure `net9.0` target |
105
- | Memory leaks | Dispose `IDisposable` resources; avoid circular event subscriptions |
106
- | Platform-specific code | Use `#if ANDROID` / `#if IOS` / `#if WINDOWS` conditional compilation |
107
-
108
- ## Kotlin Multiplatform (KMP)
109
-
110
- ### Prerequisites
111
-
112
- ```bash
113
- # Android Studio with KMP plugin
114
- # Kotlin 2.0+ (included in Android Studio 2024.2+)
115
-
116
- # For iOS: Xcode 15+, CocoaPods
117
- ```
118
-
119
- ### Project Structure
120
-
121
- ```
122
- my-kmp-app/
123
- ├── shared/ # Shared Kotlin code
124
- │ ├── src/
125
- │ │ ├── commonMain/ # Shared code (all platforms)
126
- │ │ ├── androidMain/ # Android-specific
127
- │ │ ├── iosMain/ # iOS-specific
128
- │ │ └── commonTest/ # Shared tests
129
- │ └── build.gradle.kts
130
- ├── androidApp/ # Android app (thin shell)
131
- │ └── build.gradle.kts
132
- ├── iosApp/ # iOS app (Xcode project)
133
- │ └── iosApp.xcodeproj
134
- └── build.gradle.kts
135
- ```
136
-
137
- ### Build Configuration
138
-
139
- ```kotlin
140
- // shared/build.gradle.kts
141
- plugins {
142
- kotlin("multiplatform")
143
- id("com.android.library")
144
- }
145
-
146
- kotlin {
147
- androidTarget {
148
- compilations.all {
149
- kotlinOptions {
150
- jvmTarget = "17"
151
- }
152
- }
153
- }
154
-
155
- listOf(
156
- iosX64(),
157
- iosArm64(),
158
- iosSimulatorArm64()
159
- ).forEach {
160
- it.binaries.framework {
161
- baseName = "shared"
162
- isStatic = true
163
- }
164
- }
165
-
166
- sourceSets {
167
- commonMain.dependencies {
168
- implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1")
169
- implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3")
170
- implementation("io.ktor:ktor-client-core:2.3.12")
171
- implementation("io.ktor:ktor-client-content-negotiation:2.3.12")
172
- implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.12")
173
- }
174
- androidMain.dependencies {
175
- implementation("io.ktor:ktor-client-okhttp:2.3.12")
176
- }
177
- iosMain.dependencies {
178
- implementation("io.ktor:ktor-client-darwin:2.3.12")
179
- }
180
- }
181
- }
182
- ```
183
-
184
- ### Build
185
-
186
- ```bash
187
- # Build shared framework for iOS
188
- ./gradlew :shared:linkDebugFrameworkIosArm64
189
- ./gradlew :shared:linkReleaseFrameworkIosArm64
190
-
191
- # Build Android
192
- ./gradlew :androidApp:assembleDebug
193
- ./gradlew :androidApp:assembleRelease
194
-
195
- # Run all tests
196
- ./gradlew :shared:allTests
197
- ```
198
-
199
- ### Common Pitfalls
200
-
201
- | Issue | Fix |
202
- |-------|-----|
203
- | iOS framework not found in Xcode | Ensure framework path is set in Xcode Build Settings |
204
- | Coroutine crash on iOS | Use `Dispatchers.Main` on iOS; wrap suspend calls in `@MainActor` |
205
- | Serialization fails on iOS | Ensure `kotlinx-serialization` plugin is applied in shared module |
206
- | Slow iOS builds | Use Simulator for development; `linkDebugFramework` caches better |
207
- | Platform-specific API access | Use `expect`/`actual` declarations |
208
-
209
- ## expect/actual Pattern (KMP)
210
-
211
- ```kotlin
212
- // commonMain: declare expected API
213
- expect class PlatformContext
214
- expect fun getPlatformName(): String
215
-
216
- // androidMain: implement
217
- actual class PlatformContext(val context: android.content.Context)
218
- actual fun getPlatformName(): String = "Android ${android.os.Build.VERSION.SDK_INT}"
219
-
220
- // iosMain: implement
221
- actual class PlatformContext
222
- actual fun getPlatformName(): String = UIDevice.currentDevice.systemName() + " " + UIDevice.currentDevice.systemVersion
223
- ```
224
-
225
- ## CI/CD — GitHub Actions (KMP)
226
-
227
- ```yaml
228
- name: KMP Build
229
- on:
230
- push:
231
- branches: [main]
232
-
233
- jobs:
234
- android:
235
- runs-on: ubuntu-latest
236
- steps:
237
- - uses: actions/checkout@v4
238
- - uses: actions/setup-java@v4
239
- with:
240
- distribution: 'temurin'
241
- java-version: '17'
242
- - run: ./gradlew :androidApp:assembleRelease
243
-
244
- ios:
245
- runs-on: macos-latest
246
- steps:
247
- - uses: actions/checkout@v4
248
- - run: ./gradlew :shared:linkReleaseFrameworkIosArm64
249
- - run: |
250
- cd iosApp
251
- xcodebuild -scheme iosApp -configuration Release -sdk iphoneos -archivePath build/MyApp.xcarchive archive
252
- ```
1
+ # Cross-Platform Multiplatform Build Sub-Skill
2
+
3
+ Build apps targeting multiple platforms from a single codebase using .NET MAUI, Kotlin Multiplatform, or similar frameworks.
4
+
5
+ **Current version**: .NET 9 / MAUI 9 / Kotlin 2.0 / KMP (2025-2026)
6
+
7
+ ## When to Use
8
+
9
+ - Need iOS + Android + Desktop + Web from one codebase
10
+ - Team has C#/.NET or Kotlin experience
11
+ - Want to share business logic across platforms while keeping native UI
12
+ - Enterprise/internal apps where development speed matters more than pixel-perfect native UI
13
+
14
+ ## Framework Comparison
15
+
16
+ | Feature | .NET MAUI 9 | Kotlin Multiplatform (KMP) | Compose Multiplatform |
17
+ |---------|------------|---------------------------|----------------------|
18
+ | Language | C# | Kotlin | Kotlin |
19
+ | UI approach | Single UI (native controls) | Shared logic, native UI | Shared UI (Compose) |
20
+ | Platforms | iOS, Android, Windows, macOS | iOS, Android, Web, Desktop | iOS, Android, Desktop, Web |
21
+ | Maturity | Stable (since .NET 7) | Stable (since KMP 1.9) | Beta (iOS) / Stable (Desktop) |
22
+ | Shared code | 100% (including UI) | 60–80% (logic only) | 80–95% (including UI) |
23
+ | Performance | Near-native | Native (compiled per platform) | Near-native |
24
+ | Best for | .NET teams, enterprise | Max native feel + shared logic | Kotlin teams, cross-platform UI |
25
+
26
+ ## .NET MAUI
27
+
28
+ ### Prerequisites
29
+
30
+ ```bash
31
+ # Install .NET 9 SDK
32
+ # https://dotnet.microsoft.com/download
33
+
34
+ # Install MAUI workload
35
+ dotnet workload install maui
36
+
37
+ # Verify
38
+ dotnet --list-sdks
39
+ dotnet workload list
40
+ ```
41
+
42
+ ### Build
43
+
44
+ ```bash
45
+ # Create project
46
+ dotnet new maui -n MyApp
47
+ cd MyApp
48
+
49
+ # Build for Android
50
+ dotnet build -f net9.0-android -c Release
51
+ # Output: bin/Release/net9.0-android/com.companyname.myapp-Signed.apk
52
+
53
+ # Build for iOS (macOS only)
54
+ dotnet build -f net9.0-ios -c Release
55
+ # Output: bin/Release/net9.0-ios/MyApp.ipa
56
+
57
+ # Build for Windows
58
+ dotnet build -f net9.0-windows10.0.19041.0 -c Release
59
+ # Output: bin/Release/net9.0-windows10.0.19041.0/win-x64/
60
+
61
+ # Build for macOS (macOS only)
62
+ dotnet build -f net9.0-maccatalyst -c Release
63
+ ```
64
+
65
+ ### Publish
66
+
67
+ ```bash
68
+ # Android AAB (for Play Store)
69
+ dotnet publish -f net9.0-android -c Release /p:AndroidPackageFormat=aab
70
+
71
+ # Android APK
72
+ dotnet publish -f net9.0-android -c Release
73
+
74
+ # iOS (requires Apple Developer account + signing)
75
+ dotnet publish -f net9.0-ios -c Release /p:CodesignKey="Apple Distribution: ..." /p:CodesignProvision="MyApp Provisioning"
76
+
77
+ # Windows (MSIX for Store or sideloading)
78
+ dotnet publish -f net9.0-windows10.0.19041.0 -c Release /p:GenerateAppxPackageOnBuild=true
79
+ ```
80
+
81
+ ### Project Structure
82
+
83
+ ```xml
84
+ <!-- MyApp.csproj -->
85
+ <Project Sdk="Microsoft.NET.Sdk">
86
+ <PropertyGroup>
87
+ <TargetFrameworks>net9.0-android;net9.0-ios;net9.0-windows10.0.19041.0;net9.0-maccatalyst</TargetFrameworks>
88
+ <OutputType>Exe</OutputType>
89
+ <ApplicationTitle>MyApp</ApplicationTitle>
90
+ <ApplicationId>com.companyname.myapp</ApplicationId>
91
+ <ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>
92
+ <ApplicationVersion>1</ApplicationVersion>
93
+ </PropertyGroup>
94
+ </Project>
95
+ ```
96
+
97
+ ### Common Pitfalls
98
+
99
+ | Issue | Fix |
100
+ |-------|-----|
101
+ | Android build fails | Ensure Android SDK 34+ and JDK 17 installed; set `JAVA_HOME` |
102
+ | iOS signing error | Set up provisioning profile; use `dotnet build -p:CodesignKey=...` |
103
+ | Windows MSIX won't install | Enable Developer Mode; sign with trusted certificate |
104
+ | Hot Reload not working | Use Visual Studio 2022 17.8+; ensure `net9.0` target |
105
+ | Memory leaks | Dispose `IDisposable` resources; avoid circular event subscriptions |
106
+ | Platform-specific code | Use `#if ANDROID` / `#if IOS` / `#if WINDOWS` conditional compilation |
107
+
108
+ ## Kotlin Multiplatform (KMP)
109
+
110
+ ### Prerequisites
111
+
112
+ ```bash
113
+ # Android Studio with KMP plugin
114
+ # Kotlin 2.0+ (included in Android Studio 2024.2+)
115
+
116
+ # For iOS: Xcode 15+, CocoaPods
117
+ ```
118
+
119
+ ### Project Structure
120
+
121
+ ```
122
+ my-kmp-app/
123
+ ├── shared/ # Shared Kotlin code
124
+ │ ├── src/
125
+ │ │ ├── commonMain/ # Shared code (all platforms)
126
+ │ │ ├── androidMain/ # Android-specific
127
+ │ │ ├── iosMain/ # iOS-specific
128
+ │ │ └── commonTest/ # Shared tests
129
+ │ └── build.gradle.kts
130
+ ├── androidApp/ # Android app (thin shell)
131
+ │ └── build.gradle.kts
132
+ ├── iosApp/ # iOS app (Xcode project)
133
+ │ └── iosApp.xcodeproj
134
+ └── build.gradle.kts
135
+ ```
136
+
137
+ ### Build Configuration
138
+
139
+ ```kotlin
140
+ // shared/build.gradle.kts
141
+ plugins {
142
+ kotlin("multiplatform")
143
+ id("com.android.library")
144
+ }
145
+
146
+ kotlin {
147
+ androidTarget {
148
+ compilations.all {
149
+ kotlinOptions {
150
+ jvmTarget = "17"
151
+ }
152
+ }
153
+ }
154
+
155
+ listOf(
156
+ iosX64(),
157
+ iosArm64(),
158
+ iosSimulatorArm64()
159
+ ).forEach {
160
+ it.binaries.framework {
161
+ baseName = "shared"
162
+ isStatic = true
163
+ }
164
+ }
165
+
166
+ sourceSets {
167
+ commonMain.dependencies {
168
+ implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1")
169
+ implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3")
170
+ implementation("io.ktor:ktor-client-core:2.3.12")
171
+ implementation("io.ktor:ktor-client-content-negotiation:2.3.12")
172
+ implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.12")
173
+ }
174
+ androidMain.dependencies {
175
+ implementation("io.ktor:ktor-client-okhttp:2.3.12")
176
+ }
177
+ iosMain.dependencies {
178
+ implementation("io.ktor:ktor-client-darwin:2.3.12")
179
+ }
180
+ }
181
+ }
182
+ ```
183
+
184
+ ### Build
185
+
186
+ ```bash
187
+ # Build shared framework for iOS
188
+ ./gradlew :shared:linkDebugFrameworkIosArm64
189
+ ./gradlew :shared:linkReleaseFrameworkIosArm64
190
+
191
+ # Build Android
192
+ ./gradlew :androidApp:assembleDebug
193
+ ./gradlew :androidApp:assembleRelease
194
+
195
+ # Run all tests
196
+ ./gradlew :shared:allTests
197
+ ```
198
+
199
+ ### Common Pitfalls
200
+
201
+ | Issue | Fix |
202
+ |-------|-----|
203
+ | iOS framework not found in Xcode | Ensure framework path is set in Xcode Build Settings |
204
+ | Coroutine crash on iOS | Use `Dispatchers.Main` on iOS; wrap suspend calls in `@MainActor` |
205
+ | Serialization fails on iOS | Ensure `kotlinx-serialization` plugin is applied in shared module |
206
+ | Slow iOS builds | Use Simulator for development; `linkDebugFramework` caches better |
207
+ | Platform-specific API access | Use `expect`/`actual` declarations |
208
+
209
+ ## expect/actual Pattern (KMP)
210
+
211
+ ```kotlin
212
+ // commonMain: declare expected API
213
+ expect class PlatformContext
214
+ expect fun getPlatformName(): String
215
+
216
+ // androidMain: implement
217
+ actual class PlatformContext(val context: android.content.Context)
218
+ actual fun getPlatformName(): String = "Android ${android.os.Build.VERSION.SDK_INT}"
219
+
220
+ // iosMain: implement
221
+ actual class PlatformContext
222
+ actual fun getPlatformName(): String = UIDevice.currentDevice.systemName() + " " + UIDevice.currentDevice.systemVersion
223
+ ```
224
+
225
+ ## CI/CD — GitHub Actions (KMP)
226
+
227
+ ```yaml
228
+ name: KMP Build
229
+ on:
230
+ push:
231
+ branches: [main]
232
+
233
+ jobs:
234
+ android:
235
+ runs-on: ubuntu-latest
236
+ steps:
237
+ - uses: actions/checkout@v4
238
+ - uses: actions/setup-java@v4
239
+ with:
240
+ distribution: 'temurin'
241
+ java-version: '17'
242
+ - run: ./gradlew :androidApp:assembleRelease
243
+
244
+ ios:
245
+ runs-on: macos-latest
246
+ steps:
247
+ - uses: actions/checkout@v4
248
+ - run: ./gradlew :shared:linkReleaseFrameworkIosArm64
249
+ - run: |
250
+ cd iosApp
251
+ xcodebuild -scheme iosApp -configuration Release -sdk iphoneos -archivePath build/MyApp.xcarchive archive
252
+ ```