Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

1,189 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐ŸŠ Croco Framework

Move fast, build robustly.
Croco๋Š” AWS Lambda์™€ API Gateway๋ฅผ 1๊ธ‰ ์‹œ๋ฏผ(First-class Citizen)์œผ๋กœ ์ง€์›ํ•˜๋Š” Node.js ๊ธฐ๋ฐ˜์˜ Opinionated(์ฃผ๊ฒฌ์ด ๋šœ๋ ทํ•œ) ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.
๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ค๋ฃจ๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ๋ถ€ํ„ฐ ๋น ๋ฅธ ๋ฐฐํฌ๊ฐ€ ํ•„์š”ํ•œ ์Šคํƒ€ํŠธ์—…๊นŒ์ง€, DDD(Domain-Driven Design) ํŒจํ„ด๊ณผ ๊ฐ•๋ ฅํ•œ ํƒ€์ž… ์•ˆ์ „์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


โœจ ํ•œ ์ค„ ์†Œ๊ฐœ

AWS Lambda์— ์ตœ์ ํ™”๋œ Node.js ๊ธฐ๋ฐ˜ Opinionated(์ฃผ๊ฒฌ์ด ๋šœ๋ ทํ•œ) ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. DDD(Domain-Driven Design) ํŒจํ„ด๊ณผ ๊ฐ•๋ ฅํ•œ ํƒ€์ž… ์•ˆ์ „์„ฑ์„ ํ†ตํ•ด ๋น ๋ฅด๊ณ  ๊ฒฌ๊ณ ํ•˜๊ฒŒ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐ŸŽฏ ์™œ Croco์ธ๊ฐ€?

Croco๋Š” AWS Lambda ์ง€ํ–ฅ TypeScript ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ HTTP ์ง„์ž…์ , DDD ์ด๋ฒคํŠธ, ํŠธ๋žœ์žญ์…˜, SaaS ์ง€ํ‘œ/๋ฏธํ„ฐ๋ง, ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ์„ ํ•˜๋‚˜์˜ ์ผ๊ด€๋œ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐยทํƒ€์ž… ์‹œ์Šคํ…œ์œผ๋กœ ๋ฌถ์–ด ์ฃผ๋Š” opinionated TypeScript ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.

๊ธฐ์กด์˜ Node.js ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์€ ์œ ์—ฐํ•˜์ง€๋งŒ, ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ์•„ํ‚คํ…์ฒ˜์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. Croco๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค:

  • ์ •ํ˜•ํ™”๋œ 5๊ณ„์ธต ๊ตฌ์กฐ: ํŒ€ ๊ฐ„ ์ฝ”๋“œ ์ผ๊ด€์„ฑ ์œ ์ง€
  • AWS Lambda ํ™˜๊ฒฝ์— ์ตœ์ ํ™”๋œ ๊ฒฝ๋Ÿ‰ ์‹คํ–‰ ์–ด๋Œ‘ํ„ฐ
  • ์ด๋ฒคํŠธ ์ฃผ๋„ ์•„ํ‚คํ…์ฒ˜(EDA)์™€ Unit of Work ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ ๊ธฐ๋ณธ ์ œ๊ณต
  • ํƒ€์ž… ์ •์˜๋งŒ์œผ๋กœ REST/GraphQL API์™€ ๋ฌธ์„œ ์ž๋™ ์ƒ์„ฑ ์ง€์›

๐Ÿงญ ํ•ต์‹ฌ ์„ค๊ณ„ ์›์น™

Croco๋Š” ๋Ÿฐํƒ€์ž„์—์„œ ์ถ”์ธกํ•˜๊ฒŒ ํ•˜์ง€ ์•Š๊ณ , ๋นŒ๋“œํƒ€์ž„์— ์˜๋„๋ฅผ ๋ช…์‹œํ•˜๊ณ  ๊ฒ€์ฆํ•˜๋ฉฐ, ์‚ฌ๋žŒ๊ณผ LLM์ด ๋ชจ๋‘ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ณ„์•ฝ์„ ์ค‘์‹ฌ์œผ๋กœ ๋™์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • Shift left: route, DI, policy, runtime capability, package boundary ์˜ค๋ฅ˜๋Š” ๊ฐ€๋Šฅํ•˜๋ฉด runtime ์˜ˆ์™ธ๋ณด๋‹ค typecheck, build, lint, codegen, CI ๋‹จ๊ณ„์—์„œ ๋จผ์ € ์‹คํŒจํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Type is the product: public API, RPC contract, Problem code, capability, scope, middleware graph๋Š” ๋ฌธ์„œ์—๋งŒ ๋‚จ๊ธฐ์ง€ ์•Š๊ณ  ์†Œ๋น„์ž๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํƒ€์ž…๊ณผ stable artifact๋กœ ๋“œ๋Ÿฌ๋‚˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Explicit over implicit: decorator์™€ reflection์€ ํŽธ์˜ ๊ณ„์ธต์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์ตœ์ข… controller, provider, event handler, route, manifest, registration table์€ ๊ฒ€์‚ฌ ๊ฐ€๋Šฅํ•œ ๋ช…์‹œ์  ์‚ฐ์ถœ๋ฌผ๋กœ ์„ค๋ช…๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Contracts over conventions alone: route contract, OpenAPI/RPC snapshot, Problem union, public package entrypoint์ฒ˜๋Ÿผ ๊นจ์ง€๋Š” ๊ณ„์•ฝ์€ ์‚ฌ๋žŒ์ด ๋ˆˆ์œผ๋กœ ๋งž์ถ”๋Š” ์•ฝ์†๋ณด๋‹ค ์ž๋™ ๊ฒ€์ฆ๋˜๋Š” contract๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • Failure is a first-class model: ์‹คํŒจ๋Š” ์ผ๋ฐ˜ Error๋‚˜ silent fallback์œผ๋กœ ์ˆจ๊ธฐ์ง€ ์•Š๊ณ  Problem, retry, timeout, circuit breaker, idempotency, exhaustive handling์œผ๋กœ ๋ชจ๋ธ๋งํ•ฉ๋‹ˆ๋‹ค.
  • Observable by default: request lifecycle, trace, retry, event, Problem, DI scope, telemetry flush ๊ฒฝ๊ณ„๋Š” ์šด์˜์ž๊ฐ€ ์›์ธ์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋Š” evidence๋ฅผ ๋‚จ๊ฒจ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Generated, not hand-wired: client, OpenAPI/RPC spec, manifest, intent map, docs example, registration table ๊ฐ™์€ glue code๋Š” ์ˆ˜๋™ ๋™๊ธฐํ™”๋ณด๋‹ค ์ƒ์„ฑ๊ณผ drift gate๋ฅผ ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • Production path first: toy example๋ณด๋‹ค ๋ฐฐํฌ, runtime limitation, compatibility, migration, CI quality gate, zero-credential smoke path๋ฅผ ๋จผ์ € ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.
  • LLM-readable architecture: ์•ˆ์ •์ ์ธ ์—๋Ÿฌ ์ฝ”๋“œ, source location, manifest, intent map, ํƒ€์ž… ๊ธฐ๋ฐ˜ ๋ฌธ์„œ, deterministic generated output์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๊ณผ LLM์ด ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ์ฝ๊ณ  ๊ฐ™์€ ์ˆ˜์ • ์ง€์ ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Composable boundaries: adapter, middleware graph, policy, runtime capability, package layering ๊ฒฝ๊ณ„๋ฅผ ๋ช…ํ™•ํžˆ ํ•˜๋ฉฐ core package๊ฐ€ provider/runtime ๊ตฌํ˜„์ฒด์— ์˜ค์—ผ๋˜์ง€ ์•Š๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ†š ์„ค๊ณ„ ์ฒ ํ•™ ๋น„๊ต

Croco NestJS Hono tRPC
์ฃผ ํƒ€๊ฒŸ AWS Lambda + SaaS ๋„๋ฉ”์ธ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์ผ๋ฐ˜ ์„œ๋ฒ„ ์ดˆ๊ฒฝ๋Ÿ‰ ์—ฃ์ง€/๋ฉ€ํ‹ฐ๋Ÿฐํƒ€์ž„ ํƒ€์ž… ์•ˆ์ „ RPC
์•„ํ‚คํ…์ฒ˜ 5๊ณ„์ธต ์˜๊ฒฌ์žˆ๋Š” ๊ตฌ์กฐ ๋ชจ๋“ˆ ๊ธฐ๋ฐ˜ MVC ๋ผ์šฐํ„ฐ ์ค‘์‹ฌ ์Šคํ‚ค๋งˆ๋ฆฌ์Šค RPC
SaaS ๋นŒ๋”ฉ ๋ธ”๋ก ๋นŒ๋ง/๋ฉ”ํŠธ๋ฆญ/๋ฉค๋ฒ„์‹ญ/๋ฏธํ„ฐ๋ง ์ œ๊ณต ๋ณ„๋„ ํ†ตํ•ฉ ํ•„์š” ๋ณ„๋„ ํ†ตํ•ฉ ํ•„์š” ๋ณ„๋„ ํ†ตํ•ฉ ํ•„์š”
DDD ์ด๋ฒคํŠธ/ํŠธ๋žœ์žญ์…˜ ๊ธฐ๋ณธ ๋‚ด์žฅ ๋ณ„๋„ ํ†ตํ•ฉ ํ•„์š” โŒ โŒ
Lambda ์ตœ์ ํ™” โœ… lambdaHandler ๋‚ด์žฅ โŒ โœ… (๋ณ„๋„ ์–ด๋Œ‘ํ„ฐ) โŒ

์œ„ ํ‘œ๋Š” Croco์˜ ์„ค๊ณ„ ์ค‘์‹ฌ์„ ์„ค๋ช…ํ•˜๋ฉฐ, ์„ฑ๋Šฅ ์ˆ˜์น˜๋‚˜ ๊ฒฝ์Ÿ์‚ฌ ๋ถ€์ •ํ‰๊ฐ€๋Š” ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


๐Ÿ— ์•„ํ‚คํ…์ฒ˜

Croco๋Š” ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๋ฅผ ์œ„ํ•ด 5๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ์ตœ์‹  ์„ธ๋ถ€ ์„ค๋ช…์€ Architecture Guide๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

flowchart TD
  frameworkContext[framework-context]
  frameworkModule[framework-module]

  frameworkContext --> frameworkModule
  frameworkContext --> protocolsRest[protocols-rest]
  frameworkContext --> protocolsGraphql[protocols-graphql]
  frameworkContext --> protocolsTrpc[protocols-trpc]

  frameworkContext --> transportsHttp[transports-http]
  frameworkContext --> transportsGraphql[transports-graphql]
  frameworkContext --> transportsWorkers[transports-cloudflare-workers]

  protocolsRest --> transportsHttp
  protocolsGraphql --> transportsGraphql
  protocolsTrpc --> transportsHttp
  transportsHttp --> presentation[presentation packages]
  transportsWorkers --> presentation
Loading
graph LR
  subgraph "๐Ÿ’ฐ SaaS Business"
    billing[billing-core] --> metrics[metrics-core]
    membership[membership-core] --> invitation[invitation-core]
    tenant[tenant-core] --> membership
    metering[metering-core] --> billing
    auth[auth-core] --> access[access-core]
    onboarding[onboarding-core]
    entitlements[entitlements-core] --> metering
    entitlements --> billing
    customer-health[customer-health-core] --> metering
    impersonation[impersonation-core] --> auth
  end
Loading

1. framework (๊ธฐ๋ฐ˜ ๊ณ„์ธต)

ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋ฟŒ๋ฆฌ๊ฐ€ ๋˜๋Š” ๊ณ„์ธต์ž…๋‹ˆ๋‹ค.

  • framework-context: ๊ณตํ†ต Context ์ธํ„ฐํŽ˜์ด์Šค, DI ์ปจํ…Œ์ด๋„ˆ, ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

2. Protocols (์ •์˜ ๊ณ„์ธต)

๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  • protocols-rest: @Controller, @Get ๋“ฑ REST API ์ •์˜๋ฅผ ์œ„ํ•œ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • protocols-graphql: Yoga ๋Ÿฐํƒ€์ž„์„ ํ™œ์šฉํ•œ Code-first GraphQL ์ •์˜๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • protocols-trpc: tRPC ์Šคํƒ€์ผ RPC ๊ณ„์•ฝ์„ ์ •์˜ํ•˜๊ณ  ํƒ€์ž… ์•ˆ์ „ํ•œ API ํ‘œ๋ฉด์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

3. Transports (์‹คํ–‰ ๊ณ„์ธต)

์ •์˜๋œ ํ”„๋กœํ† ์ฝœ์„ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•˜๋Š” ์–ด๋Œ‘ํ„ฐ์ž…๋‹ˆ๋‹ค.

  • transports-http: Hono ๊ธฐ๋ฐ˜์˜ ๊ณ ์„ฑ๋Šฅ ์‹คํ–‰ ์—”์ง„์ž…๋‹ˆ๋‹ค. AWS Lambda (API Gateway v2) ํ•ธ๋“ค๋Ÿฌ ์ƒ์„ฑ๊ธฐ๋ฅผ ๋‚ด์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • transports-graphql: GraphQL ํ”„๋กœํ† ์ฝœ์„ ์‹ค์ œ ๋Ÿฐํƒ€์ž„์— ์—ฐ๊ฒฐํ•˜๋Š” ์‹คํ–‰ ์–ด๋Œ‘ํ„ฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • transports-cloudflare-workers: Cloudflare Workers ๋Ÿฐํƒ€์ž„์—์„œ Croco ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์–ด๋Œ‘ํ„ฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

4. Integrations (ํ†ตํ•ฉ ๊ณ„์ธต)

์™ธ๋ถ€ ์‹œ์Šคํ…œ๊ณผ์˜ ์—ฐ๋™์„ ์ถ”์ƒํ™”ํ•ฉ๋‹ˆ๋‹ค.

  • integrations-posthog: PostHog์™€ ํ†ตํ•ฉ๋˜์–ด ์ œํ’ˆ ๋ถ„์„ ์ด๋ฒคํŠธ ์ˆ˜์ง‘์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

5. Presentation (ํ‘œํ˜„ ๊ณ„์ธต)

๋ฐฑ์—”๋“œ์™€ ํ”„๋ก ํŠธ์—”๋“œ/SSR ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ‘œ๋ฉด์„ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

  • frontend-react / frontend-vite / frontend-cloudflare / meta-vite: React, Vite, Cloudflare SSR, server actions, RSC ์ŠคํŠธ๋ฆฌ๋ฐ ๋“ฑ Presentation ๊ณ„์ธต ํ†ตํ•ฉ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๐Ÿš€ Quick Start

์‹คํ–‰ ๊ฐ€๋Šฅํ•œ SaaS REST API ๊ณจ๋“  ํŒจ์Šค๋ฅผ ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•˜์„ธ์š”.

์ฒซ ๋ฒˆ์งธ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ:

npx create-croco-app@latest my-saas-api --goal saas-api --scope @myorg --no-install --no-git
cd my-saas-api && pnpm install && pnpm demo:smoke

demo:smoke validates the generated REST contracts, in-memory SaaS flow, and operational smoke without external credentials.

Route A (Scaffold): Getting Started Guide์—์„œ scaffold๋ถ€ํ„ฐ Auth, Metering, Lambda ๋ฐฐํฌ๊นŒ์ง€ ๋‹จ๊ณ„๋ณ„๋กœ SaaS API๋ฅผ ๊ตฌ์ถ•ํ•˜์„ธ์š”.

Route B (Example): Quick Start Example์—์„œ Auth์™€ Metering์ด ํฌํ•จ๋œ ์™„์„ฑ๋œ Lambda API๋ฅผ pnpm dev๋กœ ๋ฐ”๋กœ ์‹คํ–‰ํ•˜์„ธ์š”.

ํŒจํ‚ค์ง€ ์„ฑ์ˆ™๋„ ์•ˆ๋‚ด

Croco์˜ package count, group, maturity metadata๋Š” ์•„๋ž˜ ํŒจํ‚ค์ง€ ์นดํƒˆ๋กœ๊ทธ ์„น์…˜์—์„œ ์ž๋™ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์ „ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

  • ๐ŸŸข production-ready โ€” ์•ˆ์ •ํ™”, ์ ๊ทน ์‚ฌ์šฉ ๊ถŒ์žฅ
  • ๐ŸŸก beta โ€” ๊ธฐ๋Šฅ ์™„์„ฑ, ์‹ค์‚ฌ์šฉ ๊ฒ€์ฆ ์ค‘
  • ๐Ÿ”ด alpha/WIP โ€” ๊ฐœ๋ฐœ ์ค‘, ์‚ฌ์šฉ ์‹œ ์ฃผ์˜ ํ•„์š”
  • โš ๏ธ deprecated โ€” ๋Œ€์ฒด ํŒจํ‚ค์ง€ ์กด์žฌ, ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ถŒ์žฅ

๐Ÿ“‚ Package Grouping

Croco package grouping์€ docs/package-catalog.json์˜ group metadata์™€ packages/*/package.json์—์„œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. README์˜ ์นดํƒˆ๋กœ๊ทธ๊ฐ€ drift๋˜๋ฉด pnpm docs:catalog:check๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์—ฌ์ž๋ฅผ ์œ„ํ•œ ์ฝ๊ธฐ ์ˆœ์„œ

  1. framework-context โ€” DI ์ปจํ…Œ์ด๋„ˆ, ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ๊ธฐ๋ฐ˜
  2. problems-core โ€” ์—๋Ÿฌ ์ฒ˜๋ฆฌ ํŒจํ„ด
  3. protocols-* โ†’ transports-* โ€” API ์ •์˜ ๋ฐ ์‹คํ–‰
  4. ๋„๋ฉ”์ธ ํŒจํ‚ค์ง€ (*-core) โ€” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง
  5. Provider ํŒจํ‚ค์ง€ (*-polar, *-clerk ๋“ฑ) โ€” ์™ธ๋ถ€ ์—ฐ๋™

๐Ÿ“Š ๋ฒค์น˜๋งˆํฌ ๋ฐ ์„ฑ๋Šฅ ์ธก์ •

Croco๋Š” Lambda ์ฝœ๋“œ์Šคํƒ€ํŠธ ๋ฐ ์‹คํ–‰ ์„ฑ๋Šฅ์„ ์ง€์†์ ์œผ๋กœ ์ธก์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฒค์น˜๋งˆํฌ๋Š” benchmarks/ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๊ด€๋ฆฌ๋˜๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค:

  • ์ธก์ • ๋ฐฉ๋ฒ•๋ก  ๋ฐ ์‹œ๋‚˜๋ฆฌ์˜ค ์„ค๋ช…
  • ์ตœ์‹  ๊ธฐ์ค€์„ (baseline) ๋ฐ ์ž„๊ณ„๊ฐ’(threshold) ๋ฐ์ดํ„ฐ
  • ์ „์šฉ benchmark workflow์—์„œ ์ตœ์‹  5ํšŒ green evidence ๊ธฐ๋ฐ˜ blocking gate๋กœ ๋™์ž‘

์ž์„ธํ•œ ๋‚ด์šฉ์€ benchmark-gate-transition.md๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.


โšก ์ฃผ์š” ๊ธฐ๋Šฅ

๋„๋ฉ”์ธ ์ด๋ฒคํŠธ (DDD)

Aggregate Root์—์„œ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•˜๊ณ , ํƒ€์ž… ์•ˆ์ „ํ•œ ํ•ธ๋“ค๋Ÿฌ์—์„œ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

import { DomainEvent, RegisterEventHandler, type EventHandler } from "@croco/events-core";

class OrderPlacedEvent extends DomainEvent {
  static readonly eventName = "order.placed";

  constructor(public readonly orderId: string) {
    super();
  }
}

@RegisterEventHandler(OrderPlacedEvent)
class OrderPlacedHandler implements EventHandler<OrderPlacedEvent> {
  async handle(event: OrderPlacedEvent): Promise<void> {
    // ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌ
    console.log(`Order placed: ${event.orderId}`);
  }
}

ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ (Unit of Work)

๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํ•˜๋‚˜๋กœ ํŠธ๋žœ์žญ์…˜ ๊ฒฝ๊ณ„๋ฅผ ์„ค์ •ํ•˜๊ณ , AsyncLocalStorage๋ฅผ ํ†ตํ•ด ์ปจํ…์ŠคํŠธ๋ฅผ ์ „ํŒŒํ•ฉ๋‹ˆ๋‹ค.

import { Component } from "@croco/framework-context";
import { Transactional } from "@croco/tx-core";

type CreateOrderDto = {
  orderId: string;
};

@Component()
class OrderService {
  @Transactional()
  async placeOrder(dto: CreateOrderDto): Promise<CreateOrderDto> {
    // ์—ฌ๋Ÿฌ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ๋™์ผํ•œ ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
    return dto;
  }
}

๋ฌธ์ œ ์ƒ์„ธํ™” (Problem Details)

RFC 7807 ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋Š” ์ผ๊ด€๋œ ์—๋Ÿฌ ์‘๋‹ต ํ˜•์‹์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

import { ProblemFactory } from "@croco/problems-core";

throw ProblemFactory.notFound("user/not-found", "์‚ฌ์šฉ์ž๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");

์‹คํŒจ ์ฒ˜๋ฆฌ ๊ธฐ์ค€์€ Failure Semantics๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ProblemCategory๋Š” ๋ณต๊ตฌ ๊ฐ€๋Šฅ์„ฑ, code๋Š” ํŒจํ‚ค์ง€๋ณ„ ์•ˆ์ • ์‹๋ณ„์ž๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, retry-core๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ InternalServerError์™€ TooManyRequests๋งŒ ์žฌ์‹œ๋„ ๊ฐ€๋Šฅํ•œ ์‹คํŒจ๋กœ ์†Œ๋น„ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿš€ ์‹œ์ž‘ํ•˜๊ธฐ

์„ค์น˜

# ๋ชจ๋…ธ๋ ˆํฌ ํด๋ก 
git clone https://github.com/croco-dev/framework.git
cd framework

# ์˜์กด์„ฑ ์„ค์น˜
pnpm install

# ๋นŒ๋“œ
pnpm build

๋น ๋ฅธ ์‹œ์ž‘ - HTTP API ์„œ๋ฒ„

import { Component } from "@croco/framework-context";
import { Body, Controller, Get, Post } from "@croco/protocols-rest";
import { createApp } from "@croco/transports-http";

@Component()
@Controller("/users")
class UserController {
  @Get("/")
  async list() {
    return [{ id: 1, name: "John" }];
  }

  @Post("/")
  async create(@Body() body: { name: string }) {
    return { id: 2, name: body.name };
  }
}

const app = createApp({
  controllers: [UserController],
});

export const handler = app.lambdaHandler(); // AWS Lambda
// app.listen(3000); // Node.js ์„œ๋ฒ„

ํ•ต์‹ฌ ํŒจํ‚ค์ง€ ์‚ฌ์šฉ๋ฒ•

1. ์˜์กด์„ฑ ์ฃผ์ž… (@croco/framework-context)

import { Component, Container } from "@croco/framework-context";

@Component()
class UserService {
  async getUser(id: string): Promise<{ id: string; name: string }> {
    return { id, name: "John" };
  }
}

// ์ž๋™ singleton ๋“ฑ๋ก, ์ƒ์„ฑ์ž ์ฃผ์ž… ์ง€์›
const service = Container.get(UserService);
void service;

2. ์—๋Ÿฌ ์ฒ˜๋ฆฌ (@croco/problems-core)

import { ProblemFactory } from "@croco/problems-core";

// RFC 7807 Problem ๊ธฐ๋ฐ˜ ์—๋Ÿฌ
throw ProblemFactory.notFound("user/not-found", "์‚ฌ์šฉ์ž๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");

// ์ž๋™์œผ๋กœ 404 + application/problem+json ์‘๋‹ต

3. ์žฌ์‹œ๋„ & ์„œํ‚ท๋ธŒ๋ ˆ์ด์ปค (@croco/retry-core)

import { Retryable, Recover } from "@croco/retry-core";

type Data = { status: number } | { cached: true };

class ExternalApiService {
  @Retryable({ maxAttempts: 3, backoff: { delay: 100, multiplier: 2 } })
  async fetchData(): Promise<Data> {
    return { status: (await fetch("https://api.example.com/data")).status };
  }

  @Recover()
  async recoverFromFailure(error: Error): Promise<Data> {
    console.warn("All retries failed", error);
    return { cached: true };
  }
}

4. ๋ถ„์‚ฐ ์ถ”์  (@croco/telemetry-api)

import { Trace } from "@croco/telemetry-api";

type CreateOrderDto = {
  orderId: string;
};

class OrderService {
  @Trace({ name: "order.create" })
  async createOrder(dto: CreateOrderDto): Promise<CreateOrderDto> {
    // ์ž๋™์œผ๋กœ OpenTelemetry Span ์ƒ์„ฑ
    return dto;
  }
}

๐Ÿ—บ๏ธ ๋กœ๋“œ๋งต โ€” 1.0 readiness status

Croco 1.0 readiness๋Š” ๋‚ ์งœ๋งŒ ์žˆ๋Š” phase ๋ชฉ๋ก์ด ์•„๋‹ˆ๋ผ checked source์™€ gate๋กœ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.

Current 1.0 spine status: 18 spine packages; 10 production-ready, 8 beta, 0 alpha/WIP, 0 deprecated; 8 beta promotion records.

Track Current status Checked source / gate
1.0 spine package scope docs/package-catalog.json์˜ spine.packages๊ฐ€ release-critical compatibility scope๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. pnpm docs:catalog:check, pnpm spine-promotion:check
First-success path Quick-start Lambda์™€ SaaS billing golden path๊ฐ€ public first-success commands๋กœ ๊ณ ์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. pnpm first-success:verify, pnpm quick-start-lambda:smoke, pnpm saas-billing-golden-path:smoke
Release evidence Alpha/release smoke, provenance, spine evidence๋Š” release docs์™€ CI gate์—์„œ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. pnpm release-docs:check, pnpm release:spine-evidence
Package maturity production-ready, beta, alpha/WIP, deprecated ์ƒํƒœ๋Š” catalog metadata์—์„œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. pnpm docs:catalog:check, pnpm production-ready:check

Follow-up work is tracked in GitHub Issues and in Croco 1.0 Spine, with status rendered from checked repository metadata.


๐Ÿ“ฆ ํŒจํ‚ค์ง€ ์นดํƒˆ๋กœ๊ทธ

์ด ์„น์…˜์€ pnpm docs:catalog:write๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€ ์ด๋ฆ„๊ณผ ๊ฒฝ๋กœ๋Š” packages/*/package.json์—์„œ ์ฝ๊ณ , ๊ทธ๋ฃน/์„ฑ์ˆ™๋„๋Š” docs/package-catalog.json์—์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ์นดํƒˆ๋กœ๊ทธ๋Š” 115๊ฐœ public package๋ฅผ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค. Private package 2๊ฐœ๋Š” publish ์นดํƒˆ๋กœ๊ทธ์—์„œ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค. ๋ฌธ์„œ ์ปค๋ฒ„๋ฆฌ์ง€ ์ƒ์„ธ๋Š” docs/package-docs-report.md๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

Croco 1.0 Spine

Croco 1.0 spine์€ 18๊ฐœ package๋ฅผ release-critical compatibility scope๋กœ ๊ณ ์ •ํ•ฉ๋‹ˆ๋‹ค. Source of truth๋Š” docs/package-catalog.json์˜ spine.packages์ด๋ฉฐ, ์šด์˜ ๊ฐ€์ด๋“œ์™€ ํ›„์† release-gate issue ๋ชฉ๋ก์€ Croco 1.0 Spine์— ์žˆ์Šต๋‹ˆ๋‹ค.

Spine membership is not a maturity claim: production-ready packages already have the strongest evidence gates, beta spine packages are allowed while their 1.0 gates harden, and non-spine beta/alpha packages do not block 1.0 unless they are pulled into a golden path or certified adapter path.

Current 1.0 spine status: 18 spine packages; 10 production-ready, 8 beta, 0 alpha/WIP, 0 deprecated; 8 beta promotion records.

Generated status Count Source
Spine packages 18 docs/package-catalog.json spine.packages
Production-ready spine packages 10 maturity.production.packages
Beta spine packages 8 maturity.beta.packages
Alpha/WIP spine packages 0 maturity.alpha.packages
Deprecated spine packages 0 maturity.deprecated.packages
Beta promotion records 8 spine.promotion.packages
Package Group Maturity Directory
@croco/framework-context Core ๐ŸŸข production-ready packages/framework-context
@croco/problems-core Core ๐ŸŸข production-ready packages/problems-core
@croco/protocols-core Protocol ๐ŸŸก beta packages/protocols-core
@croco/protocols-rest Protocol ๐ŸŸข production-ready packages/protocols-rest
@croco/openapi-spec Protocol ๐ŸŸก beta packages/openapi-spec
@croco/rpc-codegen Protocol ๐ŸŸก beta packages/rpc-codegen
@croco/transports-http Transport ๐ŸŸข production-ready packages/transports-http
@croco/telemetry-api Integration ๐ŸŸข production-ready packages/telemetry-api
@croco/telemetry-sdk-node Integration ๐ŸŸข production-ready packages/telemetry-sdk-node
@croco/tx-core Core ๐ŸŸข production-ready packages/tx-core
@croco/tx-drizzle Core ๐ŸŸข production-ready packages/tx-drizzle
@croco/events-core Core ๐ŸŸข production-ready packages/events-core
@croco/events-tx Core ๐ŸŸก beta packages/events-tx
@croco/retry-core Core ๐ŸŸข production-ready packages/retry-core
@croco/idempotency-core Core ๐ŸŸก beta packages/idempotency-core
@croco/testing Tooling ๐ŸŸก beta packages/testing
create-croco-app Tooling ๐ŸŸก beta packages/create-croco-app
@croco/cli Tooling ๐ŸŸก beta packages/cli

Package Groups

๊ทธ๋ฃน ์—ญํ•  ํŒจํ‚ค์ง€ ์ˆ˜
Core Framework primitives, context, reliability, transactions, and cross-cutting core utilities 24
Domain Business-domain APIs and package-level abstractions 30
Provider Concrete datastore, SaaS provider, and external service adapters 27
Integration Analytics, feature-flag, and observability integrations 5
Protocol API protocol definitions and code generation 8
Transport Runtime adapters that execute protocol routes 3
Presentation Frontend, SSR, and presentation-layer adapters 8
Tooling CLIs, scaffolds, presets, migration tools, and build-time helpers 10

Maturity Guide

Adapter ๊ฒฝ๊ณ„์™€ ๊ณต์‹ ์šฐ์„ ์ˆœ์œ„, compatibility certification checklist๋Š” Adapter Ecosystem์— ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„ฑ์ˆ™๋„ ์Šน๊ธ‰ ๊ธฐ์ค€์€ Provider Maturity Gates์™€ Presentation Runtime Support์— ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ, package test ์กด์žฌ ์—ฌ๋ถ€๋งŒ์œผ๋กœ production-ready๋‚˜ certified compatibility๋ฅผ ์˜๋ฏธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 1.0 spine์€ release scope์ด๊ณ , production-ready๋Š” package evidence state์ด๋ฉฐ, certified adapter๋Š” adapter/runtime/contract๋ณ„ evidence state์ž…๋‹ˆ๋‹ค.

์ƒํƒœ ์˜๋ฏธ ์ „์ฒด public ํŒจํ‚ค์ง€ ์ˆ˜
๐ŸŸข production-ready ์•ˆ์ •ํ™”, ์ ๊ทน ์‚ฌ์šฉ ๊ถŒ์žฅ 24
๐ŸŸก beta ๊ธฐ๋Šฅ ์™„์„ฑ, ์‹ค์‚ฌ์šฉ ๊ฒ€์ฆ ์ค‘ 76
๐Ÿ”ด alpha/WIP ๊ฐœ๋ฐœ ์ค‘, ์‚ฌ์šฉ ์‹œ ์ฃผ์˜ ํ•„์š” 15
โš ๏ธ deprecated ๋Œ€์ฒด ํŒจํ‚ค์ง€ ์กด์žฌ, ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ถŒ์žฅ 0

Extension & Adapter Matrix

์ด ์„น์…˜์€ docs/package-catalog.json์˜ extensionMatrix metadata์—์„œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์„ฑ์ˆ™๋„์™€ package test ์กด์žฌ ์—ฌ๋ถ€๋Š” ๋ณ„๋„ ์—ด๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

Adapter category definitions, official priorities, package naming rules, minimum compatibility criteria, and the certification checklist live in Adapter Ecosystem. Certification state is rendered from docs/package-catalog.json certification.records and is scoped to package, contract, runtime, package version, and evidence status.

Certification policy: extension packages in Provider, Integration, Transport, Presentation require a certified record when maturity is production or when public docs make a Croco compatibility claim; candidate records require present liveSmoke evidence, and extension packages without those triggers render as not-applicable until candidate evidence is recorded.

Runtime columns: Node๋Š” ์žฅ๊ธฐ ์‹คํ–‰ ์„œ๋ฒ„/CLI, Lambda๋Š” ์„œ๋ฒ„๋ฆฌ์Šค ํ•จ์ˆ˜, Workers๋Š” Cloudflare Workers, Frontend๋Š” browser/SSR frontend integration์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

Provider

Package Domain Adapter Node Lambda Workers Frontend Required env/config Peer deps Features Maturity Package tests Certification
@croco/access-drizzle Access control Drizzle repository yes yes - - database connection supplied by app drizzle-orm permission checks
policy storage
๐ŸŸก beta has package tests not-applicable
not required until production-ready or compatibility claim
@croco/audit-drizzle Audit Drizzle repository yes yes - - database connection supplied by app - audit event persistence
tenant audit lookup
๐ŸŸก beta has package tests not-applicable
not required until production-ready or compatibility claim
@croco/auth-better-auth Auth Better Auth + Drizzle provider yes yes - - BETTER_AUTH_URL
BETTER_AUTH_SECRET
BETTER_AUTH_WEBHOOK_SECRET optional
- session auth
webhooks
Drizzle schema
shared auth conformance
readiness diagnostics
optional live smoke
๐Ÿ”ด alpha/WIP has package tests not-applicable
not required until production-ready or compatibility claim
@croco/auth-clerk Auth Clerk Backend provider yes yes - - CLERK_SECRET_KEY
CLERK_PUBLISHABLE_KEY optional
CLERK_WEBHOOK_SECRET optional
- token auth
session management
organizations
webhooks
shared auth conformance
readiness diagnostics
optional live smoke
๐Ÿ”ด alpha/WIP has package tests uncertified (0.0.4)
@croco/auth-core/AuthProvider
node
lambda
missing: liveSmoke
@croco/auth-drizzle Auth Drizzle store yes yes - - database connection supplied by app drizzle-orm API key store
role registry
๐ŸŸก beta has package tests not-applicable
not required until production-ready or compatibility claim
@croco/batch-qstash Batch QStash chunk executor yes yes - - QSTASH_TOKEN
public webhook URL
- chunk scheduling
checkpoint resume
idempotent publish
shared conformance
redacted upstream Problems
๐Ÿ”ด alpha/WIP has package tests not-applicable
not required until production-ready or compatibility claim
@croco/billing-polar Billing Polar billing gateway yes yes - - POLAR_ACCESS_TOKEN
POLAR_WEBHOOK_SECRET
POLAR_ORGANIZATION_ID optional
- checkout
webhooks
subscription lifecycle
customer portal
explicit licensed-quantity unsupported diagnostic
๐ŸŸก beta has package tests uncertified (0.0.4)
@croco/billing-core/BillingGateway
node
lambda
missing: liveSmoke
@croco/credits-drizzle Credits Transactional Drizzle credit ledger yes yes - - PostgreSQL connection supplied by app drizzle-orm atomic credit ledger persistence
concurrent overdraft prevention
durable idempotency
bounded grant expiry
deterministic ledger history
๐Ÿ”ด alpha/WIP has package tests not-applicable
not required until production-ready or compatibility claim
@croco/customer-health-drizzle Customer health Drizzle repository yes yes - - database connection supplied by app drizzle-orm health score persistence
customer health lookup
๐ŸŸก beta has package tests not-applicable
not required until production-ready or compatibility claim
@croco/entitlements-drizzle Entitlements Drizzle repository yes yes - - database connection supplied by app drizzle-orm entitlement persistence
billing entitlement lookup
๐ŸŸก beta has package tests not-applicable
not required until production-ready or compatibility claim
@croco/execution-drizzle Execution Drizzle execution store yes yes - - database connection supplied by app drizzle-orm execution state persistence
retryable failure records
๐ŸŸก beta has package tests not-applicable
not required until production-ready or compatibility claim
@croco/invitation-drizzle Invitation Drizzle repository yes yes - - database connection supplied by app - invitation persistence
transaction-aware repository
๐ŸŸก beta has package tests not-applicable
not required until production-ready or compatibility claim
@croco/llm-openai LLM OpenAI Responses provider yes yes - - OPENAI_API_KEY @croco/llm-core
@croco/problems-core
@croco/telemetry-api
Responses text generation
SSE streaming
JSON Schema structured output
function tool calls
single and batch embeddings
usage and telemetry mapping
Problem normalization
๐ŸŸก beta has package tests not-applicable
not required until production-ready or compatibility claim
@croco/membership-drizzle Membership Drizzle repository yes yes - - database connection supplied by app - membership persistence
transaction-aware repository
๐ŸŸก beta has package tests not-applicable
not required until production-ready or compatibility claim
@croco/metering-drizzle Metering Drizzle usage store yes yes - - database connection supplied by app - usage persistence
quota lookup
migration scripts
๐ŸŸก beta has package tests not-applicable
not required until production-ready or compatibility claim
@croco/metering-upstash Metering Upstash Redis client adapter yes yes - - UPSTASH_REDIS_REST_URL
UPSTASH_REDIS_REST_TOKEN
- Redis command adapter
serverless usage storage
shared conformance
redacted upstream Problems
๐Ÿ”ด alpha/WIP has package tests not-applicable
not required until production-ready or compatibility claim
@croco/metrics-billing Metrics Billing metrics bridge yes yes yes - none - billing event metrics
usage aggregation bridge
tenant propagation
event identity idempotency
dropped metric Problems
๐ŸŸก beta has package tests not-applicable
not required until production-ready or compatibility claim
@croco/notifications-resend Notifications Resend email provider yes yes - - RESEND_API_KEY
default from address
- email send
rendered template send
retry
idempotency key
safe diagnostics
redacted upstream Problems
optional live smoke
๐Ÿ”ด alpha/WIP has package tests not-applicable
not required until production-ready or compatibility claim
@croco/onboarding-drizzle Onboarding Drizzle repository yes yes - - database connection supplied by app - onboarding state persistence
step completion storage
๐ŸŸก beta has package tests not-applicable
not required until production-ready or compatibility claim
@croco/ratelimit-upstash Rate limiting Upstash Redis rate-limit store yes yes - - UPSTASH_REDIS_REST_URL
UPSTASH_REDIS_REST_TOKEN
@upstash/redis sliding window
token bucket
fixed window
Lua atomicity
shared conformance
redacted upstream Problems
๐Ÿ”ด alpha/WIP has package tests not-applicable
not required until production-ready or compatibility claim
@croco/search-drizzle Search Drizzle search index yes yes - - database connection supplied by app drizzle-orm search document persistence
tenant-aware lookup
๐ŸŸก beta has package tests not-applicable
not required until production-ready or compatibility claim
@croco/search-meilisearch Search Meilisearch engine yes yes - - MEILISEARCH_HOST
MEILISEARCH_API_KEY
- indexing
search
tenant tokens
search conformance
safe diagnostics
env-gated live smoke
๐ŸŸก beta has package tests uncertified (0.0.4)
@croco/search-core/SearchEngine
node
lambda
missing: liveSmoke
@croco/storage-cloudflare Storage Cloudflare Images provider yes yes - - CLOUDFLARE_ACCOUNT_ID
CLOUDFLARE_API_TOKEN
CLOUDFLARE_ACCOUNT_HASH
- image upload
transform URLs
upload intents
signed URLs
storage conformance
diagnostics
optional live smoke
๐Ÿ”ด alpha/WIP has package tests not-applicable
not required until production-ready or compatibility claim
@croco/storage-cloudinary Storage Cloudinary provider yes yes - - CLOUDINARY_CLOUD_NAME
CLOUDINARY_API_KEY
CLOUDINARY_API_SECRET
- file upload
transform URLs
upload intents
retry
storage conformance
diagnostics
optional live smoke
๐ŸŸก beta has package tests not-applicable
not required until production-ready or compatibility claim
@croco/storage-r2 Storage Cloudflare R2 S3-compatible provider yes yes - - R2_ACCOUNT_ID
R2_ACCESS_KEY_ID
R2_SECRET_ACCESS_KEY
R2_BUCKET
- put/get/delete
signed URLs
stream reads
retry
safe diagnostics
env-gated live smoke
๐ŸŸก beta has package tests uncertified (0.0.4)
@croco/storage-core/StorageProvider
node
lambda
missing: liveSmoke
@croco/tasks-qstash Tasks QStash task runner yes yes - - UPSTASH_QSTASH_TOKEN
UPSTASH_QSTASH_DESTINATION_URL
- task publish
delay override
custom headers
deduplication id
shared conformance
redacted upstream Problems
๐Ÿ”ด alpha/WIP has package tests uncertified (0.0.4)
@croco/tasks-core/TaskRunner
node
lambda
missing: liveSmoke
@croco/triggers-qstash Triggers QStash scheduler and webhook handler yes yes - - QSTASH_TOKEN
public webhook URL
- schedule publish
webhook verification
trigger dispatch
shared conformance
redacted schedule diagnostics
diagnostic-coded webhook failures
๐Ÿ”ด alpha/WIP has package tests not-applicable
not required until production-ready or compatibility claim

Integration

Package Domain Adapter Node Lambda Workers Frontend Required env/config Peer deps Features Maturity Package tests Certification
@croco/analytics-posthog Analytics PostHog analytics provider yes yes - - POSTHOG_API_KEY
POSTHOG_HOST optional
- event capture
user/group analytics
flush lifecycle
disabled-mode skip evidence
safe readiness diagnostics
๐ŸŸก beta has package tests not-applicable
not required until production-ready or compatibility claim
@croco/features-posthog Feature flags PostHog feature provider yes yes - - POSTHOG_API_KEY
POSTHOG_HOST optional
- feature flag lookup
PostHog client reuse
๐ŸŸก beta has package tests not-applicable
not required until production-ready or compatibility claim
@croco/integrations-posthog PostHog Shared PostHog client yes yes - - POSTHOG_API_KEY
POSTHOG_HOST optional
- client lifecycle
capture flush
diagnostics
๐ŸŸก beta has package tests not-applicable
not required until production-ready or compatibility claim
@croco/telemetry-api Telemetry OpenTelemetry application API yes yes yes yes none - Trace decorator
withSpan
recordError
trace context lookup
browser RPC correlation bridge
๐ŸŸข production-ready has package tests certified (0.1.0)
@croco/telemetry-api/Trace
node
lambda
cloudflare-workers
browser
evidence complete
@croco/telemetry-sdk-node Telemetry OpenTelemetry Node SDK runtime yes yes - - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT or OTEL_EXPORTER_OTLP_ENDPOINT
TELEMETRY_ENABLED optional
- SDK init
Lambda preset
OTLP export
forceFlush
๐ŸŸข production-ready has package tests certified (0.0.4)
@croco/telemetry-sdk-node/TelemetryRuntime
node
lambda
evidence complete

Transport

Package Domain Adapter Node Lambda Workers Frontend Required env/config Peer deps Features Maturity Package tests Certification
@croco/transports-graphql GraphQL transport GraphQL Yoga transport yes yes - - none - GraphQL server
resolver execution
Problem mapping
๐ŸŸก beta has package tests not-applicable
not required until production-ready or compatibility claim
@croco/transports-cloudflare-workers HTTP transport Cloudflare Workers adapter - - yes - Cloudflare Worker env object supplied by platform - Worker fetch adapter
request context bridge
๐ŸŸก beta has package tests not-applicable
not required until production-ready or compatibility claim
@croco/transports-http HTTP transport Hono HTTP/Lambda transport yes yes - - CROCO_DIAGNOSTICS_TOKEN optional
CROCO_HTTP_DI_VALIDATION optional
CROCO_HTTP_SECURITY_VALIDATION optional
- REST route execution
Lambda adapter
operational endpoints
diagnostics
๐ŸŸข production-ready has package tests certified (0.0.4)
@croco/transports-http/HttpTransport
node
lambda
evidence complete

Presentation

Package Domain Adapter Node Lambda Workers Frontend Required env/config Peer deps Features Maturity Package tests Certification
@croco/admin-react Admin React Tenant and cross-domain business workspace primitives yes - - yes none react
react-dom
billing panel contract
contract-aware DataTable
entitlement status primitives
pagination and search adapters
usage quota meters
provider failure state
tenant switcher
impersonation banner
permission inspector
append-only credit operations
ledger allocation and reservation evidence
audited grant, refund, release, and adjustment controls
Tenant 360 source workspace
partial-source state and refresh
permission-aware action launcher
structural extension slots
Problem-preserving console failures
๐Ÿ”ด alpha/WIP has package tests not-applicable
not required until production-ready or compatibility claim
@croco/ui-astryx Astryx UI Croco-aware Astryx React presentation adapter yes - - yes none react
react-dom
Astryx neutral theme provider
application shell
Problem recovery display
auth and session states
prebuilt StyleX CSS consumer path
generated Vite SPA smoke
๐ŸŸก beta has package tests not-applicable
not required until production-ready or compatibility claim
@croco/frontend-problems Frontend Problems Problem-aware client runtime - - yes yes none - Problem Details parsing
Problem-aware fetch results
declared Problem unions
form Problem mapping
๐Ÿ”ด alpha/WIP has package tests not-applicable
not required until production-ready or compatibility claim
@croco/frontend-react Frontend React React integration helpers yes - - yes none @croco/meta-vite
react
react-dom
React bindings
meta-vite integration
browser hydration smoke
page data hydration flow
generated meta-vite fullstack smoke
auth gate primitives
tenant and entitlement bridge
๐ŸŸก beta has package tests not-applicable
not required until production-ready or compatibility claim
@croco/meta-vite Frontend routing Meta Vite runtime yes yes yes yes optional Redis-compatible ISR adapter config
Worker-safe IsrCacheStore required for durable Workers ISR
ioredis
react
react-dom
vite
zod
route registry
server actions
SSR/RSC streaming
ISR v1 exact-key TTL
Node/Lambda durable ISR smoke
Workers ISR boundary smoke
generated page/API/action/ISR smoke
๐ŸŸก beta has package tests not-applicable
not required until production-ready or compatibility claim
@croco/frontend-cloudflare Frontend SSR Cloudflare SSR handler - - yes - API_WORKER binding optional
ASSETS binding optional
- Worker SSR request handling
service binding API routing
ASSETS fallback
streaming Response preservation
RuntimeContext env propagation
generated Worker smoke
๐ŸŸก beta has package tests not-applicable
not required until production-ready or compatibility claim
@croco/frontend-vite Frontend Vite Vite integration helpers yes - yes yes none @cloudflare/vite-plugin
vite
Vite config helpers
Cloudflare Vite compatibility
optional Cloudflare peer diagnostics
SPA browser build smoke
meta-vite generated build smoke
๐ŸŸก beta has package tests not-applicable
not required until production-ready or compatibility claim
@croco/presentation-preset Presentation preset Backend/frontend preset composition yes yes yes yes none - preset composition
contract wiring
generated app support
output contract validation
๐ŸŸก beta has package tests not-applicable
not required until production-ready or compatibility claim

๐ŸŸข production-ready

ํŒจํ‚ค์ง€ ๊ทธ๋ฃน ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ฌธ์„œ
@croco/dataloader-core Core packages/dataloader-core README, API, tests
@croco/events-core Core packages/events-core README, API, tests
@croco/framework-context Core packages/framework-context README, API, tests
@croco/problems-core Core packages/problems-core README, API, tests
@croco/repository-core Core packages/repository-core README, API, tests
@croco/retry-core Core packages/retry-core README, API, tests
@croco/tx-core Core packages/tx-core README, API, tests
@croco/tx-drizzle Core packages/tx-drizzle README, API, tests
@croco/audit-core Domain packages/audit-core README, API, tests
@croco/auth-core Domain packages/auth-core README, API, tests
@croco/billing-core Domain packages/billing-core README, API, tests
@croco/invitation-core Domain packages/invitation-core README, API, tests
@croco/llm-core Domain packages/llm-core README, API, tests
@croco/llm-metering Domain packages/llm-metering README, API, tests
@croco/membership-core Domain packages/membership-core README, API, tests
@croco/metering-core Domain packages/metering-core README, API, tests
@croco/metrics-core Domain packages/metrics-core README, API, tests
@croco/ratelimit-core Domain packages/ratelimit-core README, API, tests
@croco/search-core Domain packages/search-core README, API, tests
@croco/telemetry-api Integration packages/telemetry-api README, API, tests
@croco/telemetry-sdk-node Integration packages/telemetry-sdk-node README, API, tests
@croco/protocols-rest Protocol packages/protocols-rest README, API, tests
@croco/migration-runner Tooling packages/migration-runner README, API, tests
@croco/transports-http Transport packages/transports-http README, API, tests

๐ŸŸก beta

ํŒจํ‚ค์ง€ ๊ทธ๋ฃน ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ฌธ์„œ
@croco/cache-core Core packages/cache-core README, API, tests
@croco/diagnostics-core Core packages/diagnostics-core README, API, tests
@croco/events-inmemory Core packages/events-inmemory README, API, tests
@croco/events-tx Core packages/events-tx README, API, tests
@croco/framework-config Core packages/framework-config README, API, tests
@croco/framework-logger Core packages/framework-logger README, API, tests
@croco/framework-module Core packages/framework-module README, API, tests
@croco/framework-preset Core packages/framework-preset README, API, tests
@croco/framework-routes Core packages/framework-routes README, API, tests
@croco/gid-core Core packages/gid-core README, API, tests
@croco/health-core Core packages/health-core README, API, tests
@croco/idempotency-core Core packages/idempotency-core README, API, tests
@croco/outbox-core Core packages/outbox-core README, API, tests
@croco/pagination-core Core packages/pagination-core README, API, tests
@croco/tenant-core Core packages/tenant-core README, API, tests
@croco/webhooks-core Core packages/webhooks-core README, API, tests
@croco/access-core Domain packages/access-core README, API, tests
@croco/admin-core Domain packages/admin-core README, API, tests
@croco/admin-ops Domain packages/admin-ops README, API, tests
@croco/analytics-core Domain packages/analytics-core README, API, tests
@croco/batch-core Domain packages/batch-core README, API, tests
@croco/customer-health-core Domain packages/customer-health-core README, API, tests
@croco/entitlements-core Domain packages/entitlements-core README, API, tests
@croco/execution-core Domain packages/execution-core README, API, tests
@croco/features-core Domain packages/features-core README, API, tests
@croco/governance-core Domain packages/governance-core README, API, tests
@croco/impersonation-core Domain packages/impersonation-core README, API, tests
@croco/lifecycle-core Domain packages/lifecycle-core README, API, tests
@croco/notifications-core Domain packages/notifications-core README, API, tests
@croco/onboarding-core Domain packages/onboarding-core README, API, tests
@croco/storage-core Domain packages/storage-core README, API, tests
@croco/tasks-core Domain packages/tasks-core README, API, tests
@croco/triggers-core Domain packages/triggers-core README, API, tests
@croco/workflow-core Domain packages/workflow-core README, API, tests
@croco/analytics-posthog Integration packages/analytics-posthog README, API, tests
@croco/features-posthog Integration packages/features-posthog README, API, tests
@croco/integrations-posthog Integration packages/integrations-posthog README, API, tests
@croco/frontend-cloudflare Presentation packages/frontend-cloudflare README, API, tests
@croco/frontend-react Presentation packages/frontend-react README, API, tests
@croco/frontend-vite Presentation packages/frontend-vite README, API, tests
@croco/meta-vite Presentation packages/meta-vite README, API, tests
@croco/presentation-preset Presentation packages/presentation-preset README, API, tests
@croco/ui-astryx Presentation packages/ui-astryx README, API, tests
@croco/openapi-spec Protocol packages/openapi-spec README, API, tests
@croco/protocols-core Protocol packages/protocols-core README, API, tests
@croco/protocols-graphql Protocol packages/protocols-graphql README, API, tests
@croco/protocols-trpc Protocol packages/protocols-trpc README, API, tests
@croco/rpc-codegen Protocol packages/rpc-codegen README, API, tests
@croco/access-drizzle Provider packages/access-drizzle README, API, tests
@croco/audit-drizzle Provider packages/audit-drizzle README, API, tests
@croco/auth-drizzle Provider packages/auth-drizzle README, API, tests
@croco/billing-polar Provider packages/billing-polar README, API, tests
@croco/customer-health-drizzle Provider packages/customer-health-drizzle README, API, tests
@croco/entitlements-drizzle Provider packages/entitlements-drizzle README, API, tests
@croco/execution-drizzle Provider packages/execution-drizzle README, API, tests
@croco/invitation-drizzle Provider packages/invitation-drizzle README, API, tests
@croco/llm-openai Provider packages/llm-openai README, API, tests
@croco/membership-drizzle Provider packages/membership-drizzle README, API, tests
@croco/metering-drizzle Provider packages/metering-drizzle README, API, tests
@croco/metrics-billing Provider packages/metrics-billing README, API, tests
@croco/onboarding-drizzle Provider packages/onboarding-drizzle README, API, tests
@croco/search-drizzle Provider packages/search-drizzle README, API, tests
@croco/search-meilisearch Provider packages/search-meilisearch README, API, tests
@croco/storage-cloudinary Provider packages/storage-cloudinary README, API, tests
@croco/storage-r2 Provider packages/storage-r2 README, API, tests
@croco/architecture-policy Tooling packages/architecture-policy README, API, tests
@croco/cli Tooling packages/cli README, API, tests
create-croco-app Tooling packages/create-croco-app README, API, tests
@croco/esbuild-plugin Tooling packages/esbuild-plugin README, API, tests
@croco/preset-cloudflare Tooling packages/preset-cloudflare README, API, tests
@croco/preset-lambda Tooling packages/preset-lambda README, API, tests
@croco/preset-node Tooling packages/preset-node README, API, tests
@croco/testing Tooling packages/testing README, API, tests
@croco/testing-resources Tooling packages/testing-resources README, API, tests
@croco/transports-cloudflare-workers Transport packages/transports-cloudflare-workers README, API, tests
@croco/transports-graphql Transport packages/transports-graphql README, API, tests

๐Ÿ”ด alpha/WIP

ํŒจํ‚ค์ง€ ๊ทธ๋ฃน ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ฌธ์„œ
@croco/credits-core Domain packages/credits-core README, API, tests
@croco/admin-react Presentation packages/admin-react README, API, tests
@croco/frontend-problems Presentation packages/frontend-problems README, API, tests
@croco/admin-generated Protocol packages/admin-generated README, API, tests
@croco/protocols-desktop Protocol packages/protocols-desktop README, API, tests
@croco/auth-better-auth Provider packages/auth-better-auth README, API, tests
@croco/auth-clerk Provider packages/auth-clerk README, API, tests
@croco/batch-qstash Provider packages/batch-qstash README, API, tests
@croco/credits-drizzle Provider packages/credits-drizzle README, API, tests
@croco/metering-upstash Provider packages/metering-upstash README, API, tests
@croco/notifications-resend Provider packages/notifications-resend README, API, tests
@croco/ratelimit-upstash Provider packages/ratelimit-upstash README, API, tests
@croco/storage-cloudflare Provider packages/storage-cloudflare README, API, tests
@croco/tasks-qstash Provider packages/tasks-qstash README, API, tests
@croco/triggers-qstash Provider packages/triggers-qstash README, API, tests

Documentation Gate

  • pnpm docs:catalog:check๋Š” README ์นดํƒˆ๋กœ๊ทธ, extension matrix reference ๋ฌธ์„œ, ๋ฌธ์„œ ์ปค๋ฒ„๋ฆฌ์ง€ ๋ฆฌํฌํŠธ drift๋ฅผ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
  • ์‹ ๊ทœ public package๋Š” docs/package-catalog.json์— ๊ทธ๋ฃน/์„ฑ์ˆ™๋„ metadata๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์‹ ๊ทœ public package์˜ README, API docs, tests ๋ˆ„๋ฝ์€ docs/package-docs-baseline.json์— ์—†๋Š” ํ•œ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.
  • production-ready package์˜ API docs ๋ˆ„๋ฝ์€ legacy baseline์œผ๋กœ ์ˆจ๊ธธ ์ˆ˜ ์—†๊ณ , ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์งง์€ ์‚ฌ์œ ๊ฐ€ ์žˆ๋Š” temporaryProductionApiDocExceptions์—๋งŒ ์ž„์‹œ๋กœ ๋‘˜ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ›  ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

์ฝ”๋“œ ํ’ˆ์งˆ ๋„๊ตฌ

  • Oxlint / Oxfmt: root quality gate์™€ pre-commit hook์—์„œ lint์™€ format์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • TypeScript: ์—„๊ฒฉ ๋ชจ๋“œ + ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ์ง€์›
  • Vitest / Turbo: package test์™€ repo-wide task orchestration์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
  • Catalog / release drift gates: README package catalog, first-success docs, release docs, package manifests, public API, static misuse๋ฅผ checked scripts๋กœ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๋ช…๋ น์–ด

pnpm install          # ์˜์กด์„ฑ ์„ค์น˜
pnpm build            # turbo build
pnpm lint             # turbo lint
pnpm format           # oxfmt write
pnpm check            # repository policy, docs/catalog/release drift, lint, format, static gates
pnpm docs:catalog:check      # README package catalog and package docs drift
pnpm first-success:verify    # README, getting-started, examples, and first-success command drift
pnpm release-docs:check      # release guide and Changesets config drift
pnpm release:spine-evidence  # consolidated release spine evidence gate
pnpm test             # ํ…Œ์ŠคํŠธ ์‹คํ–‰
pnpm typecheck        # TypeScript ํƒ€์ž… ๊ฒ€์‚ฌ

Git Hooks (Lefthook)

  • Pre-commit: oxlint/oxfmt ์ž๋™ ์ˆ˜์ •
  • Pre-push: auto-changeset, ํ…Œ์ŠคํŠธ, ํƒ€์ž… ๊ฒ€์‚ฌ

๐Ÿšข ๋ฐฐํฌ ์ „๋žต

Croco๋Š” AWS Lambda๋ฅผ ์ตœ์šฐ์„ ์œผ๋กœ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค.

  • Fast Startup: ๋ถˆํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ๋ฐฐ์ œํ•˜๊ณ  ํŠธ๋ฆฌ์‰์ดํ‚น์— ์ตœ์ ํ™”๋œ ๋นŒ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • API Gateway v2 Support: ๊ณ ์„ฑ๋Šฅ HTTP API๋ฅผ ์œ„ํ•œ ์–ด๋Œ‘ํ„ฐ๋ฅผ ๊ธฐ๋ณธ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • pnpm + Turbo: ๊ณ ์„ฑ๋Šฅ ๋นŒ๋“œ ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด ๋ฐฐํฌ ์†๋„๋ฅผ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค.
pnpm run deploy -- --otp <otp>

๐Ÿค ๊ธฐ์—ฌํ•˜๊ธฐ

๊ธฐ์—ฌ ๋ฐฉ๋ฒ•, ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •, ์ฝ”๋“œ ์Šคํƒ€์ผ, Git ์›Œํฌํ”Œ๋กœ์šฐ๋Š” CONTRIBUTING.md๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.


๐Ÿ“„ ๋ผ์ด์„ ์Šค

MIT License. Copyright (c) 2026 Croco Team.

About

๐ŸŠ Move fast, build robustly. โ€” AWS Lambda 1๋“ฑ ์‹œ๋ฏผ, SaaS-first TypeScript ํ”„๋ ˆ์ž„์›Œํฌ

Topics

Resources

Contributing

Security policy

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages