https://sonarly.com/issue/17827?type=bug Frontend is completely broken on v1.19.1 because the FieldMetadataType GraphQL enum no longer accepts the RICH_TEXT_V2 value still stored in the database, causing all metadata queries to fail. Fix: ## Fix: Restore RICH_TEXT_V2 as the enum value for FieldMetadataType.RICH_TEXT The core issue is that commit `d9eb317bb5` changed `RICH_TEXT = 'RICH_TEXT_V2'` to `RICH_TEXT = 'RICH_TEXT'`, despite claiming to "keep the DB value." This caused the GraphQL enum (built via `registerEnumType`) to only accept `RICH_TEXT`, while the database still stores `RICH_TEXT_V2`. ### Changes: 1. **`packages/twenty-shared/src/types/FieldMetadataType.ts`** — Restored the enum value from `'RICH_TEXT'` to `'RICH_TEXT_V2'`. This is the single-line fix that resolves the GraphQL serialization error. The GraphQL schema will now correctly accept `RICH_TEXT_V2` values from the database. 2. **`packages/twenty-server/src/database/commands/upgrade-version-command/1-20/1-20-migrate-rich-text-to-text.command.ts`** — Removed the `RICH_TEXT_V2 → RICH_TEXT` rename SQL since the DB value should remain `RICH_TEXT_V2`. The command now only handles migrating deprecated V1 `RICH_TEXT` fields to `TEXT`. 3. **`packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/is-text-column-type.util.ts`** — Replaced `(type as string) === 'RICH_TEXT_V2'` with `type === FieldMetadataType.RICH_TEXT` since the enum value now correctly matches the DB value. The raw string fallback for `'RICH_TEXT'` (V1) is kept for pre-upgrade compatibility. ### Follow-up required: - Run `npx nx run twenty-front:graphql:generate` and `npx nx run twenty-front:graphql:generate --configuration=metadata` to regenerate GraphQL types - After codegen, update `CompositeFieldType.ts` and `assertFieldMetadata.ts` to use `'RICH_TEXT_V2'` string literals (they currently use `'RICH_TEXT'` to match the generated enum) - Rebuild `twenty-shared` before other packages
The #1 Open-Source CRM
🌐 Website · 📚 Documentation · Roadmap ·
Discord ·
Figma
Installation
See: 🚀 Self-hosting 🖥️ Local Setup
Why Twenty
We built Twenty for three reasons:
CRMs are too expensive, and users are trapped. Companies use locked-in customer data to hike prices. It shouldn't be that way.
A fresh start is required to build a better experience. We can learn from past mistakes and craft a cohesive experience inspired by new UX patterns from tools like Notion, Airtable or Linear.
We believe in open-source and community. Hundreds of developers are already building Twenty together. Once we have plugin capabilities, a whole ecosystem will grow around it.
What You Can Do With Twenty
Please feel free to flag any specific needs you have by creating an issue.
Below are a few features we have implemented to date:
- Personalize layouts with filters, sort, group by, kanban and table views
- Customize your objects and fields
- Create and manage permissions with custom roles
- Automate workflow with triggers and actions
- Emails, calendar events, files, and more
Personalize layouts with filters, sort, group by, kanban and table views
Customize your objects and fields
Create and manage permissions with custom roles
Automate workflow with triggers and actions
Emails, calendar events, files, and more
Stack
- TypeScript
- Nx
- NestJS, with BullMQ, PostgreSQL, Redis
- React, with Jotai, Linaria and Lingui
Thanks
Thanks to these amazing services that we use and recommend for UI testing (Chromatic), code review (Greptile), catching bugs (Sentry) and translating (Crowdin).
Join the Community
- Star the repo
- Subscribe to releases (watch -> custom -> releases)
- Follow us on Twitter or LinkedIn
- Join our Discord
- Improve translations on Crowdin
- Contributions are, of course, most welcome!




