@better-openclaw/core 1.0.23 → 1.0.25

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 (335) hide show
  1. package/dist/addon-stack.cjs +673 -0
  2. package/dist/addon-stack.cjs.map +1 -0
  3. package/dist/addon-stack.d.cts +23 -0
  4. package/dist/addon-stack.d.cts.map +1 -0
  5. package/dist/addon-stack.d.mts +23 -0
  6. package/dist/addon-stack.d.mts.map +1 -0
  7. package/dist/addon-stack.mjs +671 -0
  8. package/dist/addon-stack.mjs.map +1 -0
  9. package/dist/addon-stack.test.cjs +349 -0
  10. package/dist/addon-stack.test.cjs.map +1 -0
  11. package/dist/addon-stack.test.d.cts +1 -0
  12. package/dist/addon-stack.test.d.mts +1 -0
  13. package/dist/addon-stack.test.mjs +349 -0
  14. package/dist/addon-stack.test.mjs.map +1 -0
  15. package/dist/bare-metal-partition.test.cjs +20 -21
  16. package/dist/bare-metal-partition.test.cjs.map +1 -1
  17. package/dist/bare-metal-partition.test.mjs +4 -5
  18. package/dist/bare-metal-partition.test.mjs.map +1 -1
  19. package/dist/composer.cjs +17 -1
  20. package/dist/composer.cjs.map +1 -1
  21. package/dist/composer.d.cts +24 -1
  22. package/dist/composer.d.cts.map +1 -1
  23. package/dist/composer.d.mts +24 -1
  24. package/dist/composer.d.mts.map +1 -1
  25. package/dist/composer.mjs +14 -2
  26. package/dist/composer.mjs.map +1 -1
  27. package/dist/composer.snapshot.test.cjs +20 -20
  28. package/dist/composer.snapshot.test.cjs.map +1 -1
  29. package/dist/composer.snapshot.test.mjs +2 -2
  30. package/dist/composer.test.cjs +53 -52
  31. package/dist/composer.test.cjs.map +1 -1
  32. package/dist/composer.test.mjs +4 -3
  33. package/dist/composer.test.mjs.map +1 -1
  34. package/dist/deployers/strip-host-ports.test.cjs +26 -26
  35. package/dist/deployers/strip-host-ports.test.cjs.map +1 -1
  36. package/dist/deployers/strip-host-ports.test.mjs +1 -1
  37. package/dist/generate.cjs +8 -4
  38. package/dist/generate.cjs.map +1 -1
  39. package/dist/generate.d.cts.map +1 -1
  40. package/dist/generate.d.mts.map +1 -1
  41. package/dist/generate.mjs +9 -5
  42. package/dist/generate.mjs.map +1 -1
  43. package/dist/generate.test.cjs +55 -55
  44. package/dist/generate.test.cjs.map +1 -1
  45. package/dist/generate.test.mjs +2 -2
  46. package/dist/generate.test.mjs.map +1 -1
  47. package/dist/generators/bare-metal-install.test.cjs +18 -18
  48. package/dist/generators/bare-metal-install.test.cjs.map +1 -1
  49. package/dist/generators/bare-metal-install.test.mjs +1 -1
  50. package/dist/generators/caddy.test.cjs +13 -13
  51. package/dist/generators/caddy.test.cjs.map +1 -1
  52. package/dist/generators/caddy.test.mjs +1 -1
  53. package/dist/generators/clone-repos.cjs +140 -0
  54. package/dist/generators/clone-repos.cjs.map +1 -0
  55. package/dist/generators/clone-repos.d.cts +11 -0
  56. package/dist/generators/clone-repos.d.cts.map +1 -0
  57. package/dist/generators/clone-repos.d.mts +11 -0
  58. package/dist/generators/clone-repos.d.mts.map +1 -0
  59. package/dist/generators/clone-repos.mjs +139 -0
  60. package/dist/generators/clone-repos.mjs.map +1 -0
  61. package/dist/generators/clone-repos.test.cjs +140 -0
  62. package/dist/generators/clone-repos.test.cjs.map +1 -0
  63. package/dist/generators/clone-repos.test.d.cts +1 -0
  64. package/dist/generators/clone-repos.test.d.mts +1 -0
  65. package/dist/generators/clone-repos.test.mjs +141 -0
  66. package/dist/generators/clone-repos.test.mjs.map +1 -0
  67. package/dist/generators/env.test.cjs +17 -17
  68. package/dist/generators/env.test.cjs.map +1 -1
  69. package/dist/generators/env.test.mjs +1 -1
  70. package/dist/generators/health-check.test.cjs +39 -39
  71. package/dist/generators/health-check.test.cjs.map +1 -1
  72. package/dist/generators/health-check.test.mjs +1 -1
  73. package/dist/generators/postgres-init.cjs +20 -0
  74. package/dist/generators/postgres-init.cjs.map +1 -1
  75. package/dist/generators/postgres-init.d.cts.map +1 -1
  76. package/dist/generators/postgres-init.d.mts.map +1 -1
  77. package/dist/generators/postgres-init.mjs +20 -0
  78. package/dist/generators/postgres-init.mjs.map +1 -1
  79. package/dist/generators/scripts.cjs +332 -3
  80. package/dist/generators/scripts.cjs.map +1 -1
  81. package/dist/generators/scripts.d.cts +3 -1
  82. package/dist/generators/scripts.d.cts.map +1 -1
  83. package/dist/generators/scripts.d.mts +3 -1
  84. package/dist/generators/scripts.d.mts.map +1 -1
  85. package/dist/generators/scripts.mjs +332 -3
  86. package/dist/generators/scripts.mjs.map +1 -1
  87. package/dist/generators/scripts.test.cjs +57 -23
  88. package/dist/generators/scripts.test.cjs.map +1 -1
  89. package/dist/generators/scripts.test.mjs +39 -5
  90. package/dist/generators/scripts.test.mjs.map +1 -1
  91. package/dist/generators/stack-manifest.cjs +1 -0
  92. package/dist/generators/stack-manifest.cjs.map +1 -1
  93. package/dist/generators/stack-manifest.d.cts +3 -2
  94. package/dist/generators/stack-manifest.d.cts.map +1 -1
  95. package/dist/generators/stack-manifest.d.mts +3 -2
  96. package/dist/generators/stack-manifest.d.mts.map +1 -1
  97. package/dist/generators/stack-manifest.mjs +1 -0
  98. package/dist/generators/stack-manifest.mjs.map +1 -1
  99. package/dist/generators/traefik.test.cjs +32 -32
  100. package/dist/generators/traefik.test.cjs.map +1 -1
  101. package/dist/generators/traefik.test.mjs +1 -1
  102. package/dist/index.cjs +28 -5
  103. package/dist/index.d.cts +7 -4
  104. package/dist/index.d.mts +7 -4
  105. package/dist/index.mjs +10 -7
  106. package/dist/migrations.test.cjs +16 -16
  107. package/dist/migrations.test.cjs.map +1 -1
  108. package/dist/migrations.test.mjs +1 -1
  109. package/dist/presets/registry.cjs.map +1 -1
  110. package/dist/presets/registry.d.cts.map +1 -1
  111. package/dist/presets/registry.d.mts.map +1 -1
  112. package/dist/presets/registry.mjs.map +1 -1
  113. package/dist/presets/registry.test.cjs +14 -14
  114. package/dist/presets/registry.test.cjs.map +1 -1
  115. package/dist/presets/registry.test.mjs +1 -1
  116. package/dist/resolver.cjs +8 -0
  117. package/dist/resolver.cjs.map +1 -1
  118. package/dist/resolver.mjs +9 -1
  119. package/dist/resolver.mjs.map +1 -1
  120. package/dist/resolver.test.cjs +125 -90
  121. package/dist/resolver.test.cjs.map +1 -1
  122. package/dist/resolver.test.mjs +47 -12
  123. package/dist/resolver.test.mjs.map +1 -1
  124. package/dist/{schema-B4c64P8N.d.cts → schema-CKBRu-Rt.d.cts} +355 -8
  125. package/dist/schema-CKBRu-Rt.d.cts.map +1 -0
  126. package/dist/{schema-CXNhYci1.d.mts → schema-Dn-_Jpb6.d.mts} +355 -8
  127. package/dist/schema-Dn-_Jpb6.d.mts.map +1 -0
  128. package/dist/schema.cjs +160 -5
  129. package/dist/schema.cjs.map +1 -1
  130. package/dist/schema.d.cts +2 -2
  131. package/dist/schema.d.mts +2 -2
  132. package/dist/schema.mjs +150 -6
  133. package/dist/schema.mjs.map +1 -1
  134. package/dist/schema.test.cjs +86 -86
  135. package/dist/schema.test.cjs.map +1 -1
  136. package/dist/schema.test.mjs +1 -1
  137. package/dist/services/definitions/apptension-saas.cjs +87 -0
  138. package/dist/services/definitions/apptension-saas.cjs.map +1 -0
  139. package/dist/services/definitions/apptension-saas.d.cts +7 -0
  140. package/dist/services/definitions/apptension-saas.d.cts.map +1 -0
  141. package/dist/services/definitions/apptension-saas.d.mts +7 -0
  142. package/dist/services/definitions/apptension-saas.d.mts.map +1 -0
  143. package/dist/services/definitions/apptension-saas.mjs +86 -0
  144. package/dist/services/definitions/apptension-saas.mjs.map +1 -0
  145. package/dist/services/definitions/boxyhq-saas.cjs +88 -0
  146. package/dist/services/definitions/boxyhq-saas.cjs.map +1 -0
  147. package/dist/services/definitions/boxyhq-saas.d.cts +7 -0
  148. package/dist/services/definitions/boxyhq-saas.d.cts.map +1 -0
  149. package/dist/services/definitions/boxyhq-saas.d.mts +7 -0
  150. package/dist/services/definitions/boxyhq-saas.d.mts.map +1 -0
  151. package/dist/services/definitions/boxyhq-saas.mjs +87 -0
  152. package/dist/services/definitions/boxyhq-saas.mjs.map +1 -0
  153. package/dist/services/definitions/browserless.cjs +4 -1
  154. package/dist/services/definitions/browserless.cjs.map +1 -1
  155. package/dist/services/definitions/browserless.mjs +4 -1
  156. package/dist/services/definitions/browserless.mjs.map +1 -1
  157. package/dist/services/definitions/cmsaas-starter.cjs +86 -0
  158. package/dist/services/definitions/cmsaas-starter.cjs.map +1 -0
  159. package/dist/services/definitions/cmsaas-starter.d.cts +7 -0
  160. package/dist/services/definitions/cmsaas-starter.d.cts.map +1 -0
  161. package/dist/services/definitions/cmsaas-starter.d.mts +7 -0
  162. package/dist/services/definitions/cmsaas-starter.d.mts.map +1 -0
  163. package/dist/services/definitions/cmsaas-starter.mjs +85 -0
  164. package/dist/services/definitions/cmsaas-starter.mjs.map +1 -0
  165. package/dist/services/definitions/convex.cjs +43 -1
  166. package/dist/services/definitions/convex.cjs.map +1 -1
  167. package/dist/services/definitions/convex.mjs +43 -1
  168. package/dist/services/definitions/convex.mjs.map +1 -1
  169. package/dist/services/definitions/grafana.cjs +11 -1
  170. package/dist/services/definitions/grafana.cjs.map +1 -1
  171. package/dist/services/definitions/grafana.mjs +11 -1
  172. package/dist/services/definitions/grafana.mjs.map +1 -1
  173. package/dist/services/definitions/index.cjs +51 -36
  174. package/dist/services/definitions/index.cjs.map +1 -1
  175. package/dist/services/definitions/index.d.cts +30 -25
  176. package/dist/services/definitions/index.d.cts.map +1 -1
  177. package/dist/services/definitions/index.d.mts +30 -25
  178. package/dist/services/definitions/index.d.mts.map +1 -1
  179. package/dist/services/definitions/index.mjs +47 -37
  180. package/dist/services/definitions/index.mjs.map +1 -1
  181. package/dist/services/definitions/ixartz-saas.cjs +88 -0
  182. package/dist/services/definitions/ixartz-saas.cjs.map +1 -0
  183. package/dist/services/definitions/ixartz-saas.d.cts +7 -0
  184. package/dist/services/definitions/ixartz-saas.d.cts.map +1 -0
  185. package/dist/services/definitions/ixartz-saas.d.mts +7 -0
  186. package/dist/services/definitions/ixartz-saas.d.mts.map +1 -0
  187. package/dist/services/definitions/ixartz-saas.mjs +87 -0
  188. package/dist/services/definitions/ixartz-saas.mjs.map +1 -0
  189. package/dist/services/definitions/meilisearch.cjs +11 -1
  190. package/dist/services/definitions/meilisearch.cjs.map +1 -1
  191. package/dist/services/definitions/meilisearch.mjs +11 -1
  192. package/dist/services/definitions/meilisearch.mjs.map +1 -1
  193. package/dist/services/definitions/minio.cjs +3 -1
  194. package/dist/services/definitions/minio.cjs.map +1 -1
  195. package/dist/services/definitions/minio.mjs +3 -1
  196. package/dist/services/definitions/minio.mjs.map +1 -1
  197. package/dist/services/definitions/mission-control.cjs +16 -2
  198. package/dist/services/definitions/mission-control.cjs.map +1 -1
  199. package/dist/services/definitions/mission-control.mjs +16 -2
  200. package/dist/services/definitions/mission-control.mjs.map +1 -1
  201. package/dist/services/definitions/n8n.cjs +11 -1
  202. package/dist/services/definitions/n8n.cjs.map +1 -1
  203. package/dist/services/definitions/n8n.mjs +11 -1
  204. package/dist/services/definitions/n8n.mjs.map +1 -1
  205. package/dist/services/definitions/ollama.cjs +3 -1
  206. package/dist/services/definitions/ollama.cjs.map +1 -1
  207. package/dist/services/definitions/ollama.mjs +3 -1
  208. package/dist/services/definitions/ollama.mjs.map +1 -1
  209. package/dist/services/definitions/open-saas.cjs +81 -0
  210. package/dist/services/definitions/open-saas.cjs.map +1 -0
  211. package/dist/services/definitions/open-saas.d.cts +7 -0
  212. package/dist/services/definitions/open-saas.d.cts.map +1 -0
  213. package/dist/services/definitions/open-saas.d.mts +7 -0
  214. package/dist/services/definitions/open-saas.d.mts.map +1 -0
  215. package/dist/services/definitions/open-saas.mjs +80 -0
  216. package/dist/services/definitions/open-saas.mjs.map +1 -0
  217. package/dist/services/definitions/qdrant.cjs +3 -1
  218. package/dist/services/definitions/qdrant.cjs.map +1 -1
  219. package/dist/services/definitions/qdrant.mjs +3 -1
  220. package/dist/services/definitions/qdrant.mjs.map +1 -1
  221. package/dist/services/definitions/searxng.cjs +8 -1
  222. package/dist/services/definitions/searxng.cjs.map +1 -1
  223. package/dist/services/definitions/searxng.mjs +8 -1
  224. package/dist/services/definitions/searxng.mjs.map +1 -1
  225. package/dist/services/definitions/uptime-kuma.cjs +8 -1
  226. package/dist/services/definitions/uptime-kuma.cjs.map +1 -1
  227. package/dist/services/definitions/uptime-kuma.mjs +8 -1
  228. package/dist/services/definitions/uptime-kuma.mjs.map +1 -1
  229. package/dist/services/registry.cjs +3 -0
  230. package/dist/services/registry.cjs.map +1 -1
  231. package/dist/services/registry.d.cts.map +1 -1
  232. package/dist/services/registry.d.mts.map +1 -1
  233. package/dist/services/registry.mjs +3 -0
  234. package/dist/services/registry.mjs.map +1 -1
  235. package/dist/services/registry.test.cjs +40 -33
  236. package/dist/services/registry.test.cjs.map +1 -1
  237. package/dist/services/registry.test.mjs +8 -1
  238. package/dist/services/registry.test.mjs.map +1 -1
  239. package/dist/{skill-manifest-BVUXU0__.mjs → skill-manifest-6XhrhWsG.mjs} +49 -1
  240. package/dist/{skill-manifest--IgY9REK.cjs.map → skill-manifest-6XhrhWsG.mjs.map} +1 -1
  241. package/dist/{skill-manifest--IgY9REK.cjs → skill-manifest-B8znSsym.cjs} +49 -1
  242. package/dist/{skill-manifest-BVUXU0__.mjs.map → skill-manifest-B8znSsym.cjs.map} +1 -1
  243. package/dist/skills/registry.cjs +3 -3
  244. package/dist/skills/registry.cjs.map +1 -1
  245. package/dist/skills/registry.mjs +3 -3
  246. package/dist/skills/registry.mjs.map +1 -1
  247. package/dist/skills/skill-manifest.cjs +1 -1
  248. package/dist/skills/skill-manifest.mjs +1 -1
  249. package/dist/{vi.2VT5v0um-DvC3SVNc.mjs → test.CTcmp4Su-ClCHJ3FA.mjs} +6793 -6403
  250. package/dist/test.CTcmp4Su-ClCHJ3FA.mjs.map +1 -0
  251. package/dist/{vi.2VT5v0um-CRqXre87.cjs → test.CTcmp4Su-DlzTarwH.cjs} +6793 -6403
  252. package/dist/test.CTcmp4Su-DlzTarwH.cjs.map +1 -0
  253. package/dist/track-analytics.cjs +50 -0
  254. package/dist/track-analytics.cjs.map +1 -0
  255. package/dist/track-analytics.d.cts +34 -0
  256. package/dist/track-analytics.d.cts.map +1 -0
  257. package/dist/track-analytics.d.mts +34 -0
  258. package/dist/track-analytics.d.mts.map +1 -0
  259. package/dist/track-analytics.mjs +48 -0
  260. package/dist/track-analytics.mjs.map +1 -0
  261. package/dist/track-analytics.test.cjs +91 -0
  262. package/dist/track-analytics.test.cjs.map +1 -0
  263. package/dist/track-analytics.test.d.cts +1 -0
  264. package/dist/track-analytics.test.d.mts +1 -0
  265. package/dist/track-analytics.test.mjs +92 -0
  266. package/dist/track-analytics.test.mjs.map +1 -0
  267. package/dist/types.cjs +7 -0
  268. package/dist/types.cjs.map +1 -1
  269. package/dist/types.d.cts +12 -2
  270. package/dist/types.d.cts.map +1 -1
  271. package/dist/types.d.mts +12 -2
  272. package/dist/types.d.mts.map +1 -1
  273. package/dist/types.mjs +7 -0
  274. package/dist/types.mjs.map +1 -1
  275. package/dist/validator.test.cjs +15 -15
  276. package/dist/validator.test.cjs.map +1 -1
  277. package/dist/validator.test.mjs +2 -2
  278. package/dist/version-manager.cjs +1 -1
  279. package/dist/version-manager.cjs.map +1 -1
  280. package/dist/version-manager.mjs +1 -1
  281. package/dist/version-manager.mjs.map +1 -1
  282. package/dist/version-manager.test.cjs +40 -38
  283. package/dist/version-manager.test.cjs.map +1 -1
  284. package/dist/version-manager.test.mjs +7 -5
  285. package/dist/version-manager.test.mjs.map +1 -1
  286. package/package.json +4 -4
  287. package/src/__snapshots__/composer.snapshot.test.ts.snap +160 -0
  288. package/src/addon-stack.test.ts +490 -0
  289. package/src/addon-stack.ts +998 -0
  290. package/src/bare-metal-partition.test.ts +4 -3
  291. package/src/composer.test.ts +4 -2
  292. package/src/composer.ts +24 -5
  293. package/src/generate.test.ts +2 -1
  294. package/src/generate.ts +10 -1
  295. package/src/generators/clone-repos.test.ts +154 -0
  296. package/src/generators/clone-repos.ts +159 -0
  297. package/src/generators/postgres-init.ts +17 -0
  298. package/src/generators/scripts.test.ts +52 -4
  299. package/src/generators/scripts.ts +351 -3
  300. package/src/generators/stack-manifest.ts +4 -2
  301. package/src/index.ts +28 -2
  302. package/src/presets/registry.ts +241 -329
  303. package/src/resolver.test.ts +53 -15
  304. package/src/resolver.ts +13 -1
  305. package/src/schema.ts +216 -4
  306. package/src/services/definitions/apptension-saas.ts +84 -0
  307. package/src/services/definitions/boxyhq-saas.ts +84 -0
  308. package/src/services/definitions/browserless.ts +3 -0
  309. package/src/services/definitions/cmsaas-starter.ts +84 -0
  310. package/src/services/definitions/convex.ts +31 -0
  311. package/src/services/definitions/grafana.ts +9 -0
  312. package/src/services/definitions/index.ts +90 -70
  313. package/src/services/definitions/ixartz-saas.ts +84 -0
  314. package/src/services/definitions/meilisearch.ts +9 -0
  315. package/src/services/definitions/minio.ts +2 -0
  316. package/src/services/definitions/mission-control.ts +19 -2
  317. package/src/services/definitions/n8n.ts +9 -0
  318. package/src/services/definitions/ollama.ts +2 -0
  319. package/src/services/definitions/open-saas.ts +79 -0
  320. package/src/services/definitions/qdrant.ts +2 -0
  321. package/src/services/definitions/searxng.ts +3 -0
  322. package/src/services/definitions/uptime-kuma.ts +3 -0
  323. package/src/services/registry.test.ts +8 -0
  324. package/src/services/registry.ts +7 -0
  325. package/src/skills/manifest.json +64 -0
  326. package/src/skills/registry.ts +3 -3
  327. package/src/track-analytics.test.ts +82 -0
  328. package/src/track-analytics.ts +76 -0
  329. package/src/types.ts +29 -0
  330. package/src/version-manager.test.ts +10 -5
  331. package/src/version-manager.ts +1 -1
  332. package/dist/schema-B4c64P8N.d.cts.map +0 -1
  333. package/dist/schema-CXNhYci1.d.mts.map +0 -1
  334. package/dist/vi.2VT5v0um-CRqXre87.cjs.map +0 -1
  335. package/dist/vi.2VT5v0um-DvC3SVNc.mjs.map +0 -1
@@ -80,4 +80,13 @@ export const grafanaDefinition: ServiceDefinition = {
80
80
 
81
81
  minMemoryMB: 256,
82
82
  gpuRequired: false,
83
+ capDropCompatible: true,
84
+ proxyPath: "/grafana",
85
+ envQuirks: [
86
+ {
87
+ key: "GF_SECURITY_ADMIN_PASSWORD",
88
+ issue: "min_length" as const,
89
+ fix: { type: "generate_base64url" as const, minBytes: 16 },
90
+ },
91
+ ],
83
92
  };
@@ -1,21 +1,28 @@
1
+ export { adguardHomeDefinition } from "./adguard-home.js";
1
2
  export { airbyteDefinition } from "./airbyte.js";
2
3
  export { airflowDefinition } from "./airflow.js";
3
4
  export { anythingLlmDefinition } from "./anything-llm.js";
4
5
  export { appflowyDefinition } from "./appflowy.js";
5
6
  export { appwriteDefinition } from "./appwrite.js";
7
+ export { audiobookshelfDefinition } from "./audiobookshelf.js";
6
8
  export { autheliaDefinition } from "./authelia.js";
7
9
  export { authentikDefinition } from "./authentik.js";
8
10
  export { axolotlDefinition } from "./axolotl.js";
11
+ export { baserowDefinition } from "./baserow.js";
9
12
  export { beszelDefinition } from "./beszel.js";
10
13
  export { browserlessDefinition } from "./browserless.js";
11
14
  export { caddyDefinition } from "./caddy.js";
12
15
  export { calComDefinition } from "./cal-com.js";
16
+ export { calibreWebDefinition } from "./calibre-web.js";
13
17
  export { chatwootDefinition } from "./chatwoot.js";
14
18
  export { chatwootWorkerDefinition } from "./chatwoot-worker.js";
15
19
  export { chromadbDefinition } from "./chromadb.js";
16
20
  export { claudeCodeDefinition } from "./claude-code.js";
21
+ export { clickhouseDefinition } from "./clickhouse.js";
22
+ export { cloudflaredDefinition } from "./cloudflared.js";
17
23
  export { cockroachdbDefinition } from "./cockroachdb.js";
18
24
  export { codeServerDefinition } from "./code-server.js";
25
+ export { coderDefinition } from "./coder.js";
19
26
  export { codexDefinition } from "./codex.js";
20
27
  export { comfyuiDefinition } from "./comfyui.js";
21
28
  export { convexDefinition } from "./convex.js";
@@ -27,9 +34,10 @@ export { desktopEnvironmentDefinition } from "./desktop-environment.js";
27
34
  export { difyDefinition } from "./dify.js";
28
35
  export { directusDefinition } from "./directus.js";
29
36
  export { docsgptDefinition } from "./docsgpt.js";
30
- export { dragonflyDefinition } from "./dragonfly.js";
31
37
  export { dokployDefinition } from "./dokploy.js";
32
38
  export { dozzleDefinition } from "./dozzle.js";
39
+ export { dragonflyDefinition } from "./dragonfly.js";
40
+ export { droneCiDefinition } from "./drone-ci.js";
33
41
  export { duplicatiDefinition } from "./duplicati.js";
34
42
  export { elementWebDefinition } from "./element-web.js";
35
43
  export { excalidrawDefinition } from "./excalidraw.js";
@@ -38,7 +46,9 @@ export { firecrawlDefinition } from "./firecrawl.js";
38
46
  export { firecrawlPlaywrightDefinition } from "./firecrawl-playwright.js";
39
47
  export { flagsmithDefinition } from "./flagsmith.js";
40
48
  export { flowiseDefinition } from "./flowise.js";
49
+ export { focalboardDefinition } from "./focalboard.js";
41
50
  export { fonosterDefinition } from "./fonoster.js";
51
+ export { forgejoDefinition } from "./forgejo.js";
42
52
  export { formbricksDefinition } from "./formbricks.js";
43
53
  export { geminiCliDefinition } from "./gemini-cli.js";
44
54
  export { ghostDefinition } from "./ghost.js";
@@ -55,10 +65,12 @@ export { hoppscotchDefinition } from "./hoppscotch.js";
55
65
  export { immichDefinition } from "./immich.js";
56
66
  export { infisicalDefinition } from "./infisical.js";
57
67
  export { influxdbDefinition } from "./influxdb.js";
68
+ export { invokeAiDefinition } from "./invoke-ai.js";
58
69
  export { jaegerDefinition } from "./jaeger.js";
59
- export { jitsiMeetDefinition } from "./jitsi-meet.js";
70
+ export { janDefinition } from "./jan.js";
60
71
  export { jellyfinDefinition } from "./jellyfin.js";
61
72
  export { jenkinsDefinition } from "./jenkins.js";
73
+ export { jitsiMeetDefinition } from "./jitsi-meet.js";
62
74
  export { keycloakDefinition } from "./keycloak.js";
63
75
  export { kimiDefinition } from "./kimi.js";
64
76
  export { kongDefinition } from "./kong.js";
@@ -73,6 +85,7 @@ export { lightpandaDefinition } from "./lightpanda.js";
73
85
  export { listmonkDefinition } from "./listmonk.js";
74
86
  export { litellmDefinition } from "./litellm.js";
75
87
  export { livekitDefinition } from "./livekit.js";
88
+ export { localAiDefinition } from "./local-ai.js";
76
89
  export { lokiDefinition } from "./loki.js";
77
90
  export { mariadbDefinition } from "./mariadb.js";
78
91
  export { matomoDefinition } from "./matomo.js";
@@ -81,16 +94,21 @@ export { mattermostDefinition } from "./mattermost.js";
81
94
  export { mauticDefinition } from "./mautic.js";
82
95
  export { medusaDefinition } from "./medusa.js";
83
96
  export { meilisearchDefinition } from "./meilisearch.js";
97
+ export { metabaseDefinition } from "./metabase.js";
84
98
  export { milvusDefinition } from "./milvus.js";
85
99
  export { minioDefinition } from "./minio.js";
86
100
  export { missionControlDefinition } from "./mission-control.js";
87
101
  export { mixpostDefinition } from "./mixpost.js";
102
+ export { mosquittoDefinition } from "./mosquitto.js";
88
103
  export { motionCanvasDefinition } from "./motion-canvas.js";
89
104
  export { mysqlDefinition } from "./mysql.js";
90
105
  export { n8nDefinition } from "./n8n.js";
106
+ export { navidromeDefinition } from "./navidrome.js";
91
107
  export { neo4jDefinition } from "./neo4j.js";
92
108
  export { nextcloudDefinition } from "./nextcloud.js";
109
+ export { nginxProxyManagerDefinition } from "./nginx-proxy-manager.js";
93
110
  export { nocodbDefinition } from "./nocodb.js";
111
+ export { nodeRedDefinition } from "./node-red.js";
94
112
  export { ntfyDefinition } from "./ntfy.js";
95
113
  export { ollamaDefinition } from "./ollama.js";
96
114
  export { openWebuiDefinition } from "./open-webui.js";
@@ -102,11 +120,17 @@ export { outlineDefinition } from "./outline.js";
102
120
  export { paperlessNgxDefinition } from "./paperless-ngx.js";
103
121
  export { pentagiDefinition } from "./pentagi.js";
104
122
  export { pentestagentDefinition } from "./pentestagent.js";
123
+ export { photoprismDefinition } from "./photoprism.js";
124
+ export { piholeDefinition } from "./pihole.js";
125
+ export { piperTtsDefinition } from "./piper-tts.js";
126
+ export { planeDefinition } from "./plane.js";
127
+ export { plausibleDefinition } from "./plausible.js";
105
128
  export { playwrightServerDefinition } from "./playwright-server.js";
106
- export { pocketbaseDefinition } from "./pocketbase.js";
107
129
  export { pocketIdDefinition } from "./pocket-id.js";
130
+ export { pocketbaseDefinition } from "./pocketbase.js";
108
131
  export { portainerDefinition } from "./portainer.js";
109
132
  export { postgresqlDefinition } from "./postgresql.js";
133
+ export { posthogDefinition } from "./posthog.js";
110
134
  export { postizDefinition } from "./postiz.js";
111
135
  export { prometheusDefinition } from "./prometheus.js";
112
136
  export { qdrantDefinition } from "./qdrant.js";
@@ -123,16 +147,20 @@ export { searxngDefinition } from "./searxng.js";
123
147
  export { sentryDefinition } from "./sentry.js";
124
148
  export { signozDefinition } from "./signoz.js";
125
149
  export { solidityGuardDefinition } from "./solidityguard.js";
150
+ export { sonarqubeDefinition } from "./sonarqube.js";
126
151
  export { stableDiffusionDefinition } from "./stable-diffusion.js";
127
152
  export { steelBrowserDefinition } from "./steel-browser.js";
128
153
  export { stirlingPdfDefinition } from "./stirling-pdf.js";
129
154
  export { strapiDefinition } from "./strapi.js";
130
155
  export { streamGatewayDefinition } from "./stream-gateway.js";
131
156
  export { supabaseDefinition } from "./supabase.js";
157
+ export { supersetDefinition } from "./superset.js";
132
158
  export { surrealdbDefinition } from "./surrealdb.js";
159
+ export { tabbyMlDefinition } from "./tabby-ml.js";
133
160
  export { tailscaleDefinition } from "./tailscale.js";
134
161
  export { tempoDefinition } from "./tempo.js";
135
162
  export { temporalDefinition } from "./temporal.js";
163
+ export { textGenWebuiDefinition } from "./text-gen-webui.js";
136
164
  export { timescaledbDefinition } from "./timescaledb.js";
137
165
  export { traefikDefinition } from "./traefik.js";
138
166
  export { twentyDefinition } from "./twenty.js";
@@ -141,64 +169,50 @@ export { uptimeKumaDefinition } from "./uptime-kuma.js";
141
169
  export { usesendDefinition } from "./usesend.js";
142
170
  export { valkeyDefinition } from "./valkey.js";
143
171
  export { vaultDefinition } from "./vault.js";
144
- export { vectorLogDefinition } from "./vector-log.js";
145
172
  export { vaultwardenDefinition } from "./vaultwarden.js";
173
+ export { vectorLogDefinition } from "./vector-log.js";
174
+ export { vikunjaDefinition } from "./vikunja.js";
146
175
  export { watchtowerDefinition } from "./watchtower.js";
147
176
  export { weaviateDefinition } from "./weaviate.js";
148
177
  export { whisperDefinition } from "./whisper.js";
149
- export { xyopsDefinition } from "./xyops.js";
150
- export { zulipDefinition } from "./zulip.js";
151
- export { adguardHomeDefinition } from "./adguard-home.js";
152
- export { audiobookshelfDefinition } from "./audiobookshelf.js";
153
- export { baserowDefinition } from "./baserow.js";
154
- export { calibreWebDefinition } from "./calibre-web.js";
155
- export { clickhouseDefinition } from "./clickhouse.js";
156
- export { cloudflaredDefinition } from "./cloudflared.js";
157
- export { coderDefinition } from "./coder.js";
158
- export { droneCiDefinition } from "./drone-ci.js";
159
- export { focalboardDefinition } from "./focalboard.js";
160
- export { forgejoDefinition } from "./forgejo.js";
161
- export { invokeAiDefinition } from "./invoke-ai.js";
162
- export { janDefinition } from "./jan.js";
163
- export { localAiDefinition } from "./local-ai.js";
164
- export { metabaseDefinition } from "./metabase.js";
165
- export { mosquittoDefinition } from "./mosquitto.js";
166
- export { navidromeDefinition } from "./navidrome.js";
167
- export { nginxProxyManagerDefinition } from "./nginx-proxy-manager.js";
168
- export { nodeRedDefinition } from "./node-red.js";
169
- export { photoprismDefinition } from "./photoprism.js";
170
- export { piholeDefinition } from "./pihole.js";
171
- export { piperTtsDefinition } from "./piper-tts.js";
172
- export { planeDefinition } from "./plane.js";
173
- export { plausibleDefinition } from "./plausible.js";
174
- export { posthogDefinition } from "./posthog.js";
175
- export { sonarqubeDefinition } from "./sonarqube.js";
176
- export { supersetDefinition } from "./superset.js";
177
- export { tabbyMlDefinition } from "./tabby-ml.js";
178
- export { textGenWebuiDefinition } from "./text-gen-webui.js";
179
- export { vikunjaDefinition } from "./vikunja.js";
180
178
  export { wireguardDefinition } from "./wireguard.js";
181
179
  export { woodpeckerCiDefinition } from "./woodpecker-ci.js";
180
+ export { xyopsDefinition } from "./xyops.js";
181
+ export { zulipDefinition } from "./zulip.js";
182
+
183
+ // ── SaaS Boilerplates ──────────────────────────────────────────────────────
184
+ export { openSaasDefinition } from "./open-saas.js";
185
+ export { apptensionSaasDefinition } from "./apptension-saas.js";
186
+ export { boxyhqSaasDefinition } from "./boxyhq-saas.js";
187
+ export { ixartzSaasDefinition } from "./ixartz-saas.js";
188
+ export { cmsaasStarterDefinition } from "./cmsaas-starter.js";
182
189
 
183
190
  import type { ServiceDefinition } from "../../types.js";
191
+ import { adguardHomeDefinition } from "./adguard-home.js";
184
192
  import { airbyteDefinition } from "./airbyte.js";
185
193
  import { airflowDefinition } from "./airflow.js";
186
194
  import { anythingLlmDefinition } from "./anything-llm.js";
187
195
  import { appflowyDefinition } from "./appflowy.js";
188
196
  import { appwriteDefinition } from "./appwrite.js";
197
+ import { audiobookshelfDefinition } from "./audiobookshelf.js";
189
198
  import { autheliaDefinition } from "./authelia.js";
190
199
  import { authentikDefinition } from "./authentik.js";
191
200
  import { axolotlDefinition } from "./axolotl.js";
201
+ import { baserowDefinition } from "./baserow.js";
192
202
  import { beszelDefinition } from "./beszel.js";
193
203
  import { browserlessDefinition } from "./browserless.js";
194
204
  import { caddyDefinition } from "./caddy.js";
195
205
  import { calComDefinition } from "./cal-com.js";
206
+ import { calibreWebDefinition } from "./calibre-web.js";
196
207
  import { chatwootDefinition } from "./chatwoot.js";
197
208
  import { chatwootWorkerDefinition } from "./chatwoot-worker.js";
198
209
  import { chromadbDefinition } from "./chromadb.js";
199
210
  import { claudeCodeDefinition } from "./claude-code.js";
211
+ import { clickhouseDefinition } from "./clickhouse.js";
212
+ import { cloudflaredDefinition } from "./cloudflared.js";
200
213
  import { cockroachdbDefinition } from "./cockroachdb.js";
201
214
  import { codeServerDefinition } from "./code-server.js";
215
+ import { coderDefinition } from "./coder.js";
202
216
  import { codexDefinition } from "./codex.js";
203
217
  import { comfyuiDefinition } from "./comfyui.js";
204
218
  import { convexDefinition } from "./convex.js";
@@ -211,8 +225,9 @@ import { difyDefinition } from "./dify.js";
211
225
  import { directusDefinition } from "./directus.js";
212
226
  import { docsgptDefinition } from "./docsgpt.js";
213
227
  import { dokployDefinition } from "./dokploy.js";
214
- import { dragonflyDefinition } from "./dragonfly.js";
215
228
  import { dozzleDefinition } from "./dozzle.js";
229
+ import { dragonflyDefinition } from "./dragonfly.js";
230
+ import { droneCiDefinition } from "./drone-ci.js";
216
231
  import { duplicatiDefinition } from "./duplicati.js";
217
232
  import { elementWebDefinition } from "./element-web.js";
218
233
  import { excalidrawDefinition } from "./excalidraw.js";
@@ -221,7 +236,9 @@ import { firecrawlDefinition } from "./firecrawl.js";
221
236
  import { firecrawlPlaywrightDefinition } from "./firecrawl-playwright.js";
222
237
  import { flagsmithDefinition } from "./flagsmith.js";
223
238
  import { flowiseDefinition } from "./flowise.js";
239
+ import { focalboardDefinition } from "./focalboard.js";
224
240
  import { fonosterDefinition } from "./fonoster.js";
241
+ import { forgejoDefinition } from "./forgejo.js";
225
242
  import { formbricksDefinition } from "./formbricks.js";
226
243
  import { geminiCliDefinition } from "./gemini-cli.js";
227
244
  import { ghostDefinition } from "./ghost.js";
@@ -238,10 +255,12 @@ import { hoppscotchDefinition } from "./hoppscotch.js";
238
255
  import { immichDefinition } from "./immich.js";
239
256
  import { infisicalDefinition } from "./infisical.js";
240
257
  import { influxdbDefinition } from "./influxdb.js";
258
+ import { invokeAiDefinition } from "./invoke-ai.js";
241
259
  import { jaegerDefinition } from "./jaeger.js";
242
- import { jitsiMeetDefinition } from "./jitsi-meet.js";
260
+ import { janDefinition } from "./jan.js";
243
261
  import { jellyfinDefinition } from "./jellyfin.js";
244
262
  import { jenkinsDefinition } from "./jenkins.js";
263
+ import { jitsiMeetDefinition } from "./jitsi-meet.js";
245
264
  import { keycloakDefinition } from "./keycloak.js";
246
265
  import { kimiDefinition } from "./kimi.js";
247
266
  import { kongDefinition } from "./kong.js";
@@ -256,6 +275,7 @@ import { lightpandaDefinition } from "./lightpanda.js";
256
275
  import { listmonkDefinition } from "./listmonk.js";
257
276
  import { litellmDefinition } from "./litellm.js";
258
277
  import { livekitDefinition } from "./livekit.js";
278
+ import { localAiDefinition } from "./local-ai.js";
259
279
  import { lokiDefinition } from "./loki.js";
260
280
  import { mariadbDefinition } from "./mariadb.js";
261
281
  import { matomoDefinition } from "./matomo.js";
@@ -264,16 +284,21 @@ import { mattermostDefinition } from "./mattermost.js";
264
284
  import { mauticDefinition } from "./mautic.js";
265
285
  import { medusaDefinition } from "./medusa.js";
266
286
  import { meilisearchDefinition } from "./meilisearch.js";
287
+ import { metabaseDefinition } from "./metabase.js";
267
288
  import { milvusDefinition } from "./milvus.js";
268
289
  import { minioDefinition } from "./minio.js";
269
290
  import { missionControlDefinition } from "./mission-control.js";
270
291
  import { mixpostDefinition } from "./mixpost.js";
292
+ import { mosquittoDefinition } from "./mosquitto.js";
271
293
  import { motionCanvasDefinition } from "./motion-canvas.js";
272
294
  import { mysqlDefinition } from "./mysql.js";
273
295
  import { n8nDefinition } from "./n8n.js";
296
+ import { navidromeDefinition } from "./navidrome.js";
274
297
  import { neo4jDefinition } from "./neo4j.js";
275
298
  import { nextcloudDefinition } from "./nextcloud.js";
299
+ import { nginxProxyManagerDefinition } from "./nginx-proxy-manager.js";
276
300
  import { nocodbDefinition } from "./nocodb.js";
301
+ import { nodeRedDefinition } from "./node-red.js";
277
302
  import { ntfyDefinition } from "./ntfy.js";
278
303
  import { ollamaDefinition } from "./ollama.js";
279
304
  import { openWebuiDefinition } from "./open-webui.js";
@@ -285,11 +310,17 @@ import { outlineDefinition } from "./outline.js";
285
310
  import { paperlessNgxDefinition } from "./paperless-ngx.js";
286
311
  import { pentagiDefinition } from "./pentagi.js";
287
312
  import { pentestagentDefinition } from "./pentestagent.js";
313
+ import { photoprismDefinition } from "./photoprism.js";
314
+ import { piholeDefinition } from "./pihole.js";
315
+ import { piperTtsDefinition } from "./piper-tts.js";
316
+ import { planeDefinition } from "./plane.js";
317
+ import { plausibleDefinition } from "./plausible.js";
288
318
  import { playwrightServerDefinition } from "./playwright-server.js";
289
- import { pocketbaseDefinition } from "./pocketbase.js";
290
319
  import { pocketIdDefinition } from "./pocket-id.js";
320
+ import { pocketbaseDefinition } from "./pocketbase.js";
291
321
  import { portainerDefinition } from "./portainer.js";
292
322
  import { postgresqlDefinition } from "./postgresql.js";
323
+ import { posthogDefinition } from "./posthog.js";
293
324
  import { postizDefinition } from "./postiz.js";
294
325
  import { prometheusDefinition } from "./prometheus.js";
295
326
  import { qdrantDefinition } from "./qdrant.js";
@@ -306,16 +337,20 @@ import { searxngDefinition } from "./searxng.js";
306
337
  import { sentryDefinition } from "./sentry.js";
307
338
  import { signozDefinition } from "./signoz.js";
308
339
  import { solidityGuardDefinition } from "./solidityguard.js";
340
+ import { sonarqubeDefinition } from "./sonarqube.js";
309
341
  import { stableDiffusionDefinition } from "./stable-diffusion.js";
310
342
  import { steelBrowserDefinition } from "./steel-browser.js";
311
343
  import { stirlingPdfDefinition } from "./stirling-pdf.js";
312
344
  import { strapiDefinition } from "./strapi.js";
313
345
  import { streamGatewayDefinition } from "./stream-gateway.js";
314
346
  import { supabaseDefinition } from "./supabase.js";
347
+ import { supersetDefinition } from "./superset.js";
315
348
  import { surrealdbDefinition } from "./surrealdb.js";
349
+ import { tabbyMlDefinition } from "./tabby-ml.js";
316
350
  import { tailscaleDefinition } from "./tailscale.js";
317
351
  import { tempoDefinition } from "./tempo.js";
318
352
  import { temporalDefinition } from "./temporal.js";
353
+ import { textGenWebuiDefinition } from "./text-gen-webui.js";
319
354
  import { timescaledbDefinition } from "./timescaledb.js";
320
355
  import { traefikDefinition } from "./traefik.js";
321
356
  import { twentyDefinition } from "./twenty.js";
@@ -324,44 +359,23 @@ import { uptimeKumaDefinition } from "./uptime-kuma.js";
324
359
  import { usesendDefinition } from "./usesend.js";
325
360
  import { valkeyDefinition } from "./valkey.js";
326
361
  import { vaultDefinition } from "./vault.js";
327
- import { vectorLogDefinition } from "./vector-log.js";
328
362
  import { vaultwardenDefinition } from "./vaultwarden.js";
363
+ import { vectorLogDefinition } from "./vector-log.js";
364
+ import { vikunjaDefinition } from "./vikunja.js";
329
365
  import { watchtowerDefinition } from "./watchtower.js";
330
366
  import { weaviateDefinition } from "./weaviate.js";
331
367
  import { whisperDefinition } from "./whisper.js";
332
- import { xyopsDefinition } from "./xyops.js";
333
- import { zulipDefinition } from "./zulip.js";
334
- import { adguardHomeDefinition } from "./adguard-home.js";
335
- import { audiobookshelfDefinition } from "./audiobookshelf.js";
336
- import { baserowDefinition } from "./baserow.js";
337
- import { calibreWebDefinition } from "./calibre-web.js";
338
- import { clickhouseDefinition } from "./clickhouse.js";
339
- import { cloudflaredDefinition } from "./cloudflared.js";
340
- import { coderDefinition } from "./coder.js";
341
- import { droneCiDefinition } from "./drone-ci.js";
342
- import { focalboardDefinition } from "./focalboard.js";
343
- import { forgejoDefinition } from "./forgejo.js";
344
- import { invokeAiDefinition } from "./invoke-ai.js";
345
- import { janDefinition } from "./jan.js";
346
- import { localAiDefinition } from "./local-ai.js";
347
- import { metabaseDefinition } from "./metabase.js";
348
- import { mosquittoDefinition } from "./mosquitto.js";
349
- import { navidromeDefinition } from "./navidrome.js";
350
- import { nginxProxyManagerDefinition } from "./nginx-proxy-manager.js";
351
- import { nodeRedDefinition } from "./node-red.js";
352
- import { photoprismDefinition } from "./photoprism.js";
353
- import { piholeDefinition } from "./pihole.js";
354
- import { piperTtsDefinition } from "./piper-tts.js";
355
- import { planeDefinition } from "./plane.js";
356
- import { plausibleDefinition } from "./plausible.js";
357
- import { posthogDefinition } from "./posthog.js";
358
- import { sonarqubeDefinition } from "./sonarqube.js";
359
- import { supersetDefinition } from "./superset.js";
360
- import { tabbyMlDefinition } from "./tabby-ml.js";
361
- import { textGenWebuiDefinition } from "./text-gen-webui.js";
362
- import { vikunjaDefinition } from "./vikunja.js";
363
368
  import { wireguardDefinition } from "./wireguard.js";
364
369
  import { woodpeckerCiDefinition } from "./woodpecker-ci.js";
370
+ import { xyopsDefinition } from "./xyops.js";
371
+ import { zulipDefinition } from "./zulip.js";
372
+
373
+ // ── SaaS Boilerplates ──────────────────────────────────────────────────────
374
+ import { openSaasDefinition } from "./open-saas.js";
375
+ import { apptensionSaasDefinition } from "./apptension-saas.js";
376
+ import { boxyhqSaasDefinition } from "./boxyhq-saas.js";
377
+ import { ixartzSaasDefinition } from "./ixartz-saas.js";
378
+ import { cmsaasStarterDefinition } from "./cmsaas-starter.js";
365
379
 
366
380
  export const allServiceDefinitions: ServiceDefinition[] = [
367
381
  redisDefinition,
@@ -547,4 +561,10 @@ export const allServiceDefinitions: ServiceDefinition[] = [
547
561
  vikunjaDefinition,
548
562
  wireguardDefinition,
549
563
  woodpeckerCiDefinition,
564
+ // ── SaaS Boilerplates ────────────────────────────────────────────────────
565
+ openSaasDefinition,
566
+ apptensionSaasDefinition,
567
+ boxyhqSaasDefinition,
568
+ ixartzSaasDefinition,
569
+ cmsaasStarterDefinition,
550
570
  ];
@@ -0,0 +1,84 @@
1
+ import type { ServiceDefinition } from "../../types.js";
2
+
3
+ export const ixartzSaasDefinition: ServiceDefinition = {
4
+ id: "ixartz-saas",
5
+ name: "SaaS Boilerplate (Ixartz)",
6
+ description:
7
+ "Modern Next.js 14 SaaS boilerplate with TypeScript, DrizzleORM, Tailwind CSS, ShadCN UI, Clerk auth, Stripe billing, i18n support, and comprehensive testing.",
8
+ category: "saas-boilerplate",
9
+ icon: "🚀",
10
+
11
+ gitSource: {
12
+ repoUrl: "https://github.com/ixartz/SaaS-Boilerplate.git",
13
+ branch: "main",
14
+ postCloneCommands: [],
15
+ },
16
+ buildContext: {
17
+ dockerfile: "Dockerfile",
18
+ context: ".",
19
+ },
20
+
21
+ ports: [
22
+ {
23
+ host: 3103,
24
+ container: 3000,
25
+ description: "Ixartz SaaS web application",
26
+ exposed: true,
27
+ },
28
+ ],
29
+ volumes: [],
30
+ environment: [
31
+ {
32
+ key: "IXARTZ_SAAS_DB_PASSWORD",
33
+ defaultValue: "",
34
+ secret: true,
35
+ description: "Database password for Ixartz SaaS",
36
+ required: true,
37
+ },
38
+ {
39
+ key: "DATABASE_URL",
40
+ defaultValue: "postgresql://ixartzsaas:${IXARTZ_SAAS_DB_PASSWORD}@postgresql:5432/ixartzsaas",
41
+ secret: false,
42
+ description: "PostgreSQL connection string",
43
+ required: true,
44
+ },
45
+ {
46
+ key: "CLERK_SECRET_KEY",
47
+ defaultValue: "",
48
+ secret: true,
49
+ description: "Clerk authentication secret key",
50
+ required: true,
51
+ },
52
+ {
53
+ key: "NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY",
54
+ defaultValue: "",
55
+ secret: false,
56
+ description: "Clerk publishable key (client-side)",
57
+ required: true,
58
+ },
59
+ ],
60
+ healthcheck: {
61
+ test: "wget -q --spider http://localhost:3000/ || exit 1",
62
+ interval: "30s",
63
+ timeout: "10s",
64
+ retries: 3,
65
+ startPeriod: "60s",
66
+ },
67
+ dependsOn: ["postgresql"],
68
+ restartPolicy: "unless-stopped",
69
+ networks: ["openclaw-network"],
70
+
71
+ skills: [],
72
+ openclawEnvVars: [],
73
+
74
+ docsUrl: "https://github.com/ixartz/SaaS-Boilerplate#readme",
75
+ tags: ["saas", "boilerplate", "nextjs", "typescript", "drizzle", "clerk", "stripe", "tailwind"],
76
+ maturity: "beta",
77
+
78
+ requires: ["postgresql"],
79
+ recommends: [],
80
+ conflictsWith: [],
81
+
82
+ minMemoryMB: 512,
83
+ gpuRequired: false,
84
+ };
@@ -80,4 +80,13 @@ export const meilisearchDefinition: ServiceDefinition = {
80
80
 
81
81
  minMemoryMB: 256,
82
82
  gpuRequired: false,
83
+ capDropCompatible: true,
84
+ proxyPath: "/meilisearch",
85
+ envQuirks: [
86
+ {
87
+ key: "MEILI_MASTER_KEY",
88
+ issue: "min_length" as const,
89
+ fix: { type: "generate_base64url" as const, minBytes: 24 },
90
+ },
91
+ ],
83
92
  };
@@ -102,4 +102,6 @@ export const minioDefinition: ServiceDefinition = {
102
102
 
103
103
  minMemoryMB: 256,
104
104
  gpuRequired: false,
105
+ capDropCompatible: true,
106
+ proxyPath: "/minio",
105
107
  };
@@ -8,8 +8,18 @@ export const missionControlDefinition: ServiceDefinition = {
8
8
  category: "dev-tools",
9
9
  icon: "🛸",
10
10
 
11
- image: "ghcr.io/bidewio/mission-control",
12
- imageTag: "latest",
11
+ // Pre-built image available at ghcr.io/bidewio/mission-control:latest
12
+ // but gitSource is preferred so users always get the latest source
13
+ gitSource: {
14
+ repoUrl: "https://github.com/bidewio/better-openclaw-mission-control.git",
15
+ branch: "main",
16
+ postCloneCommands: [],
17
+ },
18
+ buildContext: {
19
+ dockerfile: "Dockerfile",
20
+ context: ".",
21
+ },
22
+
13
23
  ports: [
14
24
  {
15
25
  host: 3660,
@@ -44,6 +54,13 @@ export const missionControlDefinition: ServiceDefinition = {
44
54
  required: true,
45
55
  },
46
56
  ],
57
+ healthcheck: {
58
+ test: "wget -q --spider http://localhost:3660/ || exit 1",
59
+ interval: "10s",
60
+ timeout: "5s",
61
+ retries: 3,
62
+ startPeriod: "15s",
63
+ },
47
64
  dependsOn: ["convex"],
48
65
  restartPolicy: "unless-stopped",
49
66
  networks: ["openclaw-network"],
@@ -150,4 +150,13 @@ export const n8nDefinition: ServiceDefinition = {
150
150
 
151
151
  minMemoryMB: 512,
152
152
  gpuRequired: false,
153
+ capDropCompatible: true,
154
+ proxyPath: "/n8n",
155
+ envQuirks: [
156
+ {
157
+ key: "DB_POSTGRESDB_PASSWORD",
158
+ issue: "must_sync" as const,
159
+ fix: { type: "sync_with" as const, syncKey: "N8N_DB_PASSWORD" },
160
+ },
161
+ ],
153
162
  };
@@ -65,4 +65,6 @@ export const ollamaDefinition: ServiceDefinition = {
65
65
 
66
66
  minMemoryMB: 2048,
67
67
  gpuRequired: false,
68
+ capDropCompatible: false,
69
+ proxyPath: "/ollama",
68
70
  };
@@ -0,0 +1,79 @@
1
+ import type { ServiceDefinition } from "../../types.js";
2
+
3
+ export const openSaasDefinition: ServiceDefinition = {
4
+ id: "open-saas",
5
+ name: "Open SaaS",
6
+ description:
7
+ "Full-stack React + Node.js SaaS starter built on the Wasp framework with auth, payments (Stripe/Lemon Squeezy), email, analytics, and admin dashboard.",
8
+ category: "saas-boilerplate",
9
+ icon: "🚀",
10
+
11
+ // Git-based service — built from source
12
+ gitSource: {
13
+ repoUrl: "https://github.com/wasp-lang/open-saas.git",
14
+ branch: "main",
15
+ subdirectory: "template",
16
+ postCloneCommands: [],
17
+ },
18
+ buildContext: {
19
+ dockerfile: "Dockerfile",
20
+ context: ".",
21
+ },
22
+
23
+ ports: [
24
+ {
25
+ host: 3100,
26
+ container: 3000,
27
+ description: "Open SaaS web application",
28
+ exposed: true,
29
+ },
30
+ ],
31
+ volumes: [],
32
+ environment: [
33
+ {
34
+ key: "DATABASE_URL",
35
+ defaultValue: "postgresql://opensaas:${OPENSAAS_DB_PASSWORD}@postgresql:5432/opensaas",
36
+ secret: false,
37
+ description: "PostgreSQL connection string",
38
+ required: true,
39
+ },
40
+ {
41
+ key: "OPENSAAS_DB_PASSWORD",
42
+ defaultValue: "",
43
+ secret: true,
44
+ description: "Database password for Open SaaS",
45
+ required: true,
46
+ },
47
+ {
48
+ key: "JWT_SECRET",
49
+ defaultValue: "",
50
+ secret: true,
51
+ description: "JWT signing secret",
52
+ required: true,
53
+ },
54
+ ],
55
+ healthcheck: {
56
+ test: "wget -q --spider http://localhost:3000/ || exit 1",
57
+ interval: "30s",
58
+ timeout: "10s",
59
+ retries: 3,
60
+ startPeriod: "60s",
61
+ },
62
+ dependsOn: ["postgresql"],
63
+ restartPolicy: "unless-stopped",
64
+ networks: ["openclaw-network"],
65
+
66
+ skills: [],
67
+ openclawEnvVars: [],
68
+
69
+ docsUrl: "https://opensaas.sh/docs",
70
+ tags: ["saas", "boilerplate", "react", "nodejs", "wasp", "stripe", "auth"],
71
+ maturity: "beta",
72
+
73
+ requires: ["postgresql"],
74
+ recommends: ["redis"],
75
+ conflictsWith: [],
76
+
77
+ minMemoryMB: 512,
78
+ gpuRequired: false,
79
+ };
@@ -79,4 +79,6 @@ export const qdrantDefinition: ServiceDefinition = {
79
79
 
80
80
  minMemoryMB: 512,
81
81
  gpuRequired: false,
82
+ capDropCompatible: true,
83
+ proxyPath: "/qdrant",
82
84
  };
@@ -65,4 +65,7 @@ export const searxngDefinition: ServiceDefinition = {
65
65
 
66
66
  minMemoryMB: 256,
67
67
  gpuRequired: false,
68
+ capDropCompatible: false,
69
+ proxyPath: "/searxng",
70
+ firstBootCapabilities: ["CHOWN", "SETGID", "SETUID"],
68
71
  };