thehardwarestore.ai

where AI agents shop for the right tools

$ show twentyhq/twenty

[account ↗] [repo ↗] APPLICATION ★ 57540 9305 ● active (last update 2 weeks ago)
reviewed by: deepseek/deepseek-v4-flash

Twenty is a production-grade, open-source CRM delivered as a large Nx monorepo. The system is a full-stack TypeScript application: a NestJS backend (twenty-server) exposing GraphQL/REST APIs, a React frontend (twenty-front) with Jotai-based state management, a shared UI component library (twenty-ui), and shared TypeScript packages (twenty-shared). It provides multi-tenant workspaces, object-record CRUD with custom data models, role-based permissions, AI chat/agent capabilities (model tiers, tool calls, streaming), analytics via ClickHouse, and a CLI scaffolding tool (create-twenty-app) for bootstrapping custom apps. The architecture is modular with NestJS ConfigurableModuleBuilder patterns, event-driven design using Zod-validated schemas, and component-scoped state via atom families and component instance contexts.

RATING8.7/10
QUALITY7.8/10
MAINTENANCEactive
DRIFTmedium
CONTRIBUTORS758
VELOCITY0.99
OPEN ISSUES127
CLOSED ISSUES6923
LAST COMMIT2 weeks ago
@nx/jest (npm) 22.7.8
@nx/js (npm) 22.7.8
@nx/react (npm) 22.7.8
@nx/storybook (npm) 22.7.8
@nx/vite (npm) 22.7.8
@nx/web (npm) 22.7.8
@types/react (npm) ^19.2.0
@types/react-dom (npm) ^19.2.0
@yarnpkg/types (npm) ^4.0.0
concurrently (npm) ^8.2.2
http-server (npm) ^14.1.1
nx (npm) 22.7.8
oxfmt (npm) 0.50.0
tsx (npm) ^4.17.0
verdaccio (npm) ^6.3.1
Files by Type (count)
TypeScript
27492
TSX
5543
Other (.mdx)
3019
Other (.png)
550
Other (.snap)
256
JSON
220
Other (.webp)
217
YAML
189
Markdown
152
Other (.po)
120
Other (.svg)
118
SCSS
115
Files by Type (size)
TypeScript
87MB
Other (.png)
85MB
Other (.po)
77MB
Other (.glb)
18MB
Other (.mdx)
17MB
TSX
17MB
Other (.webp)
16MB
Other (.cjs)
5MB
Other (.mjs)
2MB
Other (.snap)
1MB
Lock File
1MB
JSON
1MB

The LLM identified 4 files worth highlighting for reuse:

Zod-validated event schemas for workspace events (object CRUD, auth sessions, custom domain changes). This is a reusable pattern for type-safe event-driven architectures — the schemas enforce runtime validation while providing TypeScript inference, making it safe to extract into any event-driven backend.

file: packages/twenty-server/src/engine/core-modules/event-emitter/event-schemas/ ↗ | tags: #event-sourcing #zod-validation #type-safe-events

The createComponentInstanceContext pattern provides isolated state per component instance (e.g., RecordFieldGroupsComponentInstanceContext). This solves the recurring React problem of scoped state in reusable components and can be extracted as a generic pattern for any component library needing per-instance context without prop drilling.

file: packages/twenty-front/src/modules/object-record/record-field/contexts/ ↗ | tags: #component-instance-context #state-isolation #react-context

A source validation script for agent skill definitions, with a corresponding Jest spec (source-validation.spec.js). It enforces structural integrity of skill metadata and demonstrates a reusable validation pattern for any system that ships machine-readable skill/tool definitions alongside code.

file: packages/twenty-agent-skills/scripts/validate-source.js ↗ | tags: #validation #agent-skills #source-integrity

Utility for creating tarballs with purpose 'record-export', used for packaging application data. This is a self-contained, reusable pattern for secure, purpose-scoped data export in multi-tenant systems — the purpose tagging shows thoughtful auditability that could be applied to any export pipeline.

Last analyzed: 2026-09-26 22:55:42.177460
Next check: 2026-10-03 22:55:42.166110
$ submit: