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๋ 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
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
ํ๋ ์์ํฌ์ ๋ฟ๋ฆฌ๊ฐ ๋๋ ๊ณ์ธต์ ๋๋ค.
- framework-context: ๊ณตํต Context ์ธํฐํ์ด์ค, DI ์ปจํ ์ด๋, ๋ฐ์ฝ๋ ์ดํฐ ๋ฉํ๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ํฌํจํฉ๋๋ค.
๋น์ฆ๋์ค ๋ก์ง์ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํฉ๋๋ค.
- protocols-rest:
@Controller,@Get๋ฑ REST API ์ ์๋ฅผ ์ํ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. - protocols-graphql: Yoga ๋ฐํ์์ ํ์ฉํ Code-first GraphQL ์ ์๋ฅผ ์ง์ํฉ๋๋ค.
- protocols-trpc: tRPC ์คํ์ผ RPC ๊ณ์ฝ์ ์ ์ํ๊ณ ํ์ ์์ ํ API ํ๋ฉด์ ๊ตฌ์ฑํ ์ ์๊ฒ ํฉ๋๋ค.
์ ์๋ ํ๋กํ ์ฝ์ ์ค์ ๋ก ์คํํ๋ ์ด๋ํฐ์ ๋๋ค.
- transports-http: Hono ๊ธฐ๋ฐ์ ๊ณ ์ฑ๋ฅ ์คํ ์์ง์ ๋๋ค. AWS Lambda (API Gateway v2) ํธ๋ค๋ฌ ์์ฑ๊ธฐ๋ฅผ ๋ด์ฅํ๊ณ ์์ต๋๋ค.
- transports-graphql: GraphQL ํ๋กํ ์ฝ์ ์ค์ ๋ฐํ์์ ์ฐ๊ฒฐํ๋ ์คํ ์ด๋ํฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- transports-cloudflare-workers: Cloudflare Workers ๋ฐํ์์์ Croco ํธ๋ค๋ฌ๋ฅผ ์คํํ๋ ์ด๋ํฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ธ๋ถ ์์คํ ๊ณผ์ ์ฐ๋์ ์ถ์ํํฉ๋๋ค.
- integrations-posthog: PostHog์ ํตํฉ๋์ด ์ ํ ๋ถ์ ์ด๋ฒคํธ ์์ง์ ์ง์ํฉ๋๋ค.
๋ฐฑ์๋์ ํ๋ก ํธ์๋/SSR ์ ํ๋ฆฌ์ผ์ด์ ํ๋ฉด์ ์ฐ๊ฒฐํฉ๋๋ค.
- frontend-react / frontend-vite / frontend-cloudflare / meta-vite: React, Vite, Cloudflare SSR, server actions, RSC ์คํธ๋ฆฌ๋ฐ ๋ฑ Presentation ๊ณ์ธต ํตํฉ์ ์ ๊ณตํฉ๋๋ค.
์คํ ๊ฐ๋ฅํ 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:smokevalidates 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 โ ๋์ฒด ํจํค์ง ์กด์ฌ, ๋ง์ด๊ทธ๋ ์ด์ ๊ถ์ฅ
Croco package grouping์ docs/package-catalog.json์ group metadata์ packages/*/package.json์์ ์์ฑ๋ฉ๋๋ค. README์ ์นดํ๋ก๊ทธ๊ฐ drift๋๋ฉด pnpm docs:catalog:check๊ฐ ์คํจํฉ๋๋ค.
framework-contextโ DI ์ปจํ ์ด๋, ๋ฐ์ฝ๋ ์ดํฐ ๊ธฐ๋ฐproblems-coreโ ์๋ฌ ์ฒ๋ฆฌ ํจํดprotocols-*โtransports-*โ API ์ ์ ๋ฐ ์คํ- ๋๋ฉ์ธ ํจํค์ง (
*-core) โ ๋น์ฆ๋์ค ๋ก์ง - Provider ํจํค์ง (
*-polar,*-clerk๋ฑ) โ ์ธ๋ถ ์ฐ๋
Croco๋ Lambda ์ฝ๋์คํํธ ๋ฐ ์คํ ์ฑ๋ฅ์ ์ง์์ ์ผ๋ก ์ธก์ ํ๊ณ ์์ต๋๋ค.
๋ฒค์น๋งํฌ๋ benchmarks/ ๋๋ ํ ๋ฆฌ์์ ๊ด๋ฆฌ๋๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ ํฌํจํฉ๋๋ค:
- ์ธก์ ๋ฐฉ๋ฒ๋ก ๋ฐ ์๋๋ฆฌ์ค ์ค๋ช
- ์ต์ ๊ธฐ์ค์ (baseline) ๋ฐ ์๊ณ๊ฐ(threshold) ๋ฐ์ดํฐ
- ์ ์ฉ benchmark workflow์์ ์ต์ 5ํ green evidence ๊ธฐ๋ฐ blocking gate๋ก ๋์
์์ธํ ๋ด์ฉ์ benchmark-gate-transition.md๋ฅผ ์ฐธ์กฐํ์ธ์.
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}`);
}
}๋ฐ์ฝ๋ ์ดํฐ ํ๋๋ก ํธ๋์ญ์
๊ฒฝ๊ณ๋ฅผ ์ค์ ํ๊ณ , 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;
}
}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 buildimport { 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 ์๋ฒ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;import { ProblemFactory } from "@croco/problems-core";
// RFC 7807 Problem ๊ธฐ๋ฐ ์๋ฌ
throw ProblemFactory.notFound("user/not-found", "์ฌ์ฉ์๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.");
// ์๋์ผ๋ก 404 + application/problem+json ์๋ต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 };
}
}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;
}
}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์ 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 |
| ๊ทธ๋ฃน | ์ญํ | ํจํค์ง ์ |
|---|---|---|
| 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 |
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 |
| ๋์ฒด ํจํค์ง ์กด์ฌ, ๋ง์ด๊ทธ๋ ์ด์ ๊ถ์ฅ | 0 |
์ด ์น์ ์
docs/package-catalog.json์extensionMatrixmetadata์์ ์์ฑ๋ฉ๋๋ค. ์ฑ์๋์ 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์ ์๋ฏธํฉ๋๋ค.
| 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 |
| 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 |
| 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 |
| 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 |
| ํจํค์ง | ๊ทธ๋ฃน | ๋๋ ํฐ๋ฆฌ | ๋ฌธ์ |
|---|---|---|---|
@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 |
| ํจํค์ง | ๊ทธ๋ฃน | ๋๋ ํฐ๋ฆฌ | ๋ฌธ์ |
|---|---|---|---|
@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 |
| ํจํค์ง | ๊ทธ๋ฃน | ๋๋ ํฐ๋ฆฌ | ๋ฌธ์ |
|---|---|---|---|
@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 |
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 ํ์
๊ฒ์ฌ- 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.