martmull and GitHub
40eef5c464
Improve application ast ( #17016 )
...
# Summary
- Introduces a new, flexible folder structure for Twenty SDK
applications using file suffix-based entity detection
- Adds defineApp, defineFunction, defineObject, and defineRole helper
functions with built-in validation
- Refactors manifest loading to use jiti runtime evaluation for
TypeScript config files
- Separates validation logic into dedicated module with comprehensive
error reporting
# New Application Folder Structure
Applications now use a convention-over-configuration approach where
entities are detected by their file suffix, allowing flexible
organization within the src/app/ folder.
# Required Structure
my-app/
├── package.json
├── yarn.lock
└── src/
├── app/
│ └── application.config.ts # Required - main application configuration
└── utils/ # Optional - handler implementations & utilities
# Entity Detection by File Suffix
- *.object.ts - Custom object definitions
- *.function.ts - Serverless function definitions
- *.role.ts - Role definitions
# Supported Folder Organizations
## Traditional (by type):
src/app/
├── application.config.ts
├── objects/
│ └── postCard.object.ts
├── functions/
│ └── createPostCard.function.ts
└── roles/
└── admin.role.ts
## Feature-based:
src/app/
├── application.config.ts
└── post-card/
├── postCard.object.ts
├── createPostCard.function.ts
└── postCardAdmin.role.ts
## Flat:
src/app/
├── application.config.ts
├── postCard.object.ts
├── createPostCard.function.ts
└── admin.role.ts
# New Helper Functions
## defineApp(config)
import { defineApp } from 'twenty-sdk';
export default defineApp({
universalIdentifier: '4ec0391d-...',
displayName: 'My App',
description: 'App description',
icon: 'IconWorld',
});
## defineObject(config)
import { defineObject, FieldType } from 'twenty-sdk';
export default defineObject({
universalIdentifier: '54b589ca-...',
nameSingular: 'postCard',
namePlural: 'postCards',
labelSingular: 'Post Card',
labelPlural: 'Post Cards',
icon: 'IconMail',
fields: [
{
universalIdentifier: '58a0a314-...',
type: FieldType.TEXT,
name: 'content',
label: 'Content',
},
],
});
## defineFunction(config)
import { defineFunction } from 'twenty-sdk';
import { myHandler } from '../utils/my-handler';
export default defineFunction({
universalIdentifier: 'e56d363b-...',
name: 'My Function',
handler: myHandler,
triggers: [
{
universalIdentifier: 'c9f84c8d-...',
type: 'route',
path: '/my-route',
httpMethod: 'POST',
},
],
});
## defineRole(config)
import { defineRole, PermissionFlag } from 'twenty-sdk';
export default defineRole({
universalIdentifier: 'b648f87b-...',
label: 'App User',
objectPermissions: [
{
objectNameSingular: 'postCard',
canReadObjectRecords: true,
},
],
permissionFlags: [PermissionFlag.UPLOAD_FILE],
});
# Test plan
- Verify npx twenty app sync works with new folder structure
- Verify npx twenty app dev works with new folder structure
- Verify validation errors display correctly for invalid configs
- Verify all three folder organization styles work (traditional,
feature-based, flat)
- Run existing E2E tests to ensure backward compatibility
2026-01-09 13:06:30 +00:00
defc988d7f
i18n - translations ( #17037 )
...
Created by Github action
Co-authored-by: github-actions <github-actions@twenty.com >
2026-01-09 11:50:09 +01:00
Abdullah. and GitHub
2bb3b41e62
feat: improve the design of the fields widget ( #17003 )
...
Closes [2005](https://github.com/twentyhq/core-team-issues/issues/2005 ).
This is how it looks like and I have a feeling that it matches the Figma
design. I am not sure if we need to remove more padding as mentioned in
the issue since removing it takes it away from the Figma design. Please
review and let me know.
<img width="329" height="807" alt="image"
src="https://github.com/user-attachments/assets/1d9051e4-81fc-4c43-9aa8-54857bbd8f8f "
/>
<br />
<br />
Figma design itself:
<img width="912" height="1052" alt="image"
src="https://github.com/user-attachments/assets/4174a4a3-22af-4afc-8632-a0838ec5af08 "
/>
In terms of data that we receive, I believe it would be handled by
Fields Configuration coming from the Backend, so General and Other are
decided at that layer, unless I am missing something.
2026-01-09 10:27:10 +00:00
Baptiste Devessier and GitHub
8fc0bb3ed7
Use canvas layout for all advanced RPL widgets ( #17028 )
...
## Before
<img width="3456" height="2160" alt="CleanShot 2026-01-08 at 18 46
32@2x"
src="https://github.com/user-attachments/assets/50e5f82f-b8e4-40d9-b5d9-4faf193cc2fd "
/>
## After
<img width="3456" height="2160" alt="CleanShot 2026-01-08 at 18 46
59@2x"
src="https://github.com/user-attachments/assets/badf46ff-b4c1-471c-a815-24673759fcac "
/>
2026-01-09 08:42:52 +00:00
020ab1f63a
i18n - docs translations ( #17029 )
...
Created by Github action
---------
Co-authored-by: github-actions <github-actions@twenty.com >
2026-01-09 09:25:07 +01:00
nitin and GitHub
aa574bacea
[Dashboards] use select option colors when grouping by SELECT/MULTI_SELECT fields ( #16973 )
...
closes https://github.com/twentyhq/core-team-issues/issues/2031
https://github.com/user-attachments/assets/16fbfefd-107c-45a3-979c-1f9adbb9d912
2026-01-08 17:36:56 +00:00
neo773 and GitHub
a5eae50c66
Migrate MicrosoftAPIRefreshAccessTokenService to @azure/msal-node ( #16954 )
2026-01-08 17:18:35 +00:00
ac85e1d726
i18n - docs translations ( #17026 )
...
Created by Github action
Co-authored-by: github-actions <github-actions@twenty.com >
2026-01-08 17:55:36 +01:00
85a7f6548e
i18n - translations ( #17025 )
...
Created by Github action
---------
Co-authored-by: github-actions <github-actions@twenty.com >
2026-01-08 17:27:35 +01:00
cd856cf791
i18n - translations ( #17024 )
...
Created by Github action
Co-authored-by: github-actions <github-actions@twenty.com >
2026-01-08 17:02:16 +01:00
Paul Rastoin and GitHub
942d2fef83
Remove sync-metadata and IS_WORKSPACE_CREATION_V2_ENABLED feature flag ( #16997 )
...
# Introduction
Followup of
https://github.com/twentyhq/twenty/pull/17001#pullrequestreview-3638508738
close https://github.com/twentyhq/core-team-issues/issues/1910
We've completely decom the `sync-metadata` in production. We're now then
removing its implementation in favor of the v2.
## TODO:
- [x] Remove sync-metadata implem and commands
- [x] Remove workspace decorators
- [x] Type each deprecated field to deprecated on their workspaceEntity
- [x] Remove the `workspace-sync-metadata` folder entirely
- [x] remove workspace migration
- [x] workspace migration removal migration
- [x] remove the `v2` references from workspace manager file names
- [x] remove the `v2` references from workspace manager modules
- [ ] Double check impact on translation file path updates
## Note
- Removed the gate logic
- Remains some service v2 naming, serverless needs to be migrated on v2
fully
- Removed workspaceMigration service app health consumption, making it
always returning up ( no more down ) cc @FelixMalfait ( quite obsolete
health check now, will require complete refactor once we introduce inter
app dependency etc )
2026-01-08 15:45:12 +00:00
f1aee7fd18
Add a CARD layout to the Field widget ( #16995 )
...
Closes https://github.com/twentyhq/core-team-issues/issues/1943
## Demo
https://github.com/user-attachments/assets/ea86e1e6-6495-42b8-8dd3-e2bf7d295bab
---------
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
2026-01-08 15:43:34 +00:00
Paul Rastoin and GitHub
28e79de7b0
Fix workspace application fk command re-run ( #17018 )
...
# Introduction
The command is not idempotent, try to create an already existing FK
fails
- Always dropping the FK before recreating it in order to prevent this
- Removed the `remoteTable` and `remoteServer` from the command
We still have the `hasRunOnce` static var that will avoid re running it
if a workspace successfully passed the migration
Note: This is shared between both the upgrade command and the typeorm
migration
## Test
locally
```ts
atedBy field, skipping
[Nest] 17395 - 01/08/2026, 3:04:18 PM LOG [BackfillUpdatedByFieldCommand] Object person (20202020-e674-48e5-a542-72570eee7213) already has updatedBy field, skipping
[Nest] 17395 - 01/08/2026, 3:04:18 PM LOG [BackfillUpdatedByFieldCommand] Object pet (custom) already has updatedBy field, skipping
[Nest] 17395 - 01/08/2026, 3:04:18 PM LOG [BackfillUpdatedByFieldCommand] Object surveyResult (custom) already has updatedBy field, skipping
[Nest] 17395 - 01/08/2026, 3:04:18 PM LOG [BackfillUpdatedByFieldCommand] Object rocket (custom) already has updatedBy field, skipping
[Nest] 17395 - 01/08/2026, 3:04:18 PM LOG [BackfillUpdatedByFieldCommand] All objects already have updatedBy field for workspace 20202020-1c25-4d02-bf25-6aeccf7ea419
[Nest] 17395 - 01/08/2026, 3:04:18 PM LOG [AddWorkspaceForeignKeysMigrationCommand] Successfully run AddWorkspaceForeignKeysMigrationCommand
[Nest] 17395 - 01/08/2026, 3:04:18 PM LOG [UpgradeCommand] Upgrade for workspace 20202020-1c25-4d02-bf25-6aeccf7ea419 completed.
[Nest] 17395 - 01/08/2026, 3:04:18 PM LOG [UpgradeCommand] Running command on workspace 3b8e6458-5fc1-4e63-8563-008ccddaa6db 2/2
[Nest] 17395 - 01/08/2026, 3:04:18 PM LOG [UpgradeCommand] Upgrading workspace 3b8e6458-5fc1-4e63-8563-008ccddaa6db from=1.14.0 to=1.15.0 2/2
[Nest] 17395 - 01/08/2026, 3:04:18 PM LOG [MigratePageLayoutWidgetConfigurationCommand] Starting migration of page layout widget configurations for workspace 3b8e6458-5fc1-4e63-8563-008ccddaa6db
[Nest] 17395 - 01/08/2026, 3:04:18 PM LOG [MigratePageLayoutWidgetConfigurationCommand] Found 0 widget(s) needing migration out of 16 total
query: SELECT COUNT(1) AS "cnt" FROM "workspace_3ixj3i1a5avy16ptijtb3lae3"."note" "note" WHERE ( (("note"."position" = $1)) ) AND ( "note"."deletedAt" IS NULL ) -- PARAMETERS: ["NaN"]
[Nest] 17395 - 01/08/2026, 3:04:18 PM LOG [FixNanPositionValuesInNotesCommand] Found 0 note(s) with NaN position values in workspace 3b8e6458-5fc1-4e63-8563-008ccddaa6db
[Nest] 17395 - 01/08/2026, 3:04:18 PM LOG [FixNanPositionValuesInNotesCommand] No NaN position values to fix
[Nest] 17395 - 01/08/2026, 3:04:18 PM LOG [BackfillUpdatedByFieldCommand] Starting backfill of updatedBy field for workspace 3b8e6458-5fc1-4e63-8563-008ccddaa6db
[Nest] 17395 - 01/08/2026, 3:04:18 PM LOG [BackfillUpdatedByFieldCommand] Object note (20202020-0b00-45cd-b6f6-6cd806fc6804) already has updatedBy field, skipping
[Nest] 17395 - 01/08/2026, 3:04:18 PM LOG [BackfillUpdatedByFieldCommand] Object task (20202020-1ba1-48ba-bc83-ef7e5990ed10) already has updatedBy field, skipping
[Nest] 17395 - 01/08/2026, 3:04:18 PM LOG [BackfillUpdatedByFieldCommand] Object dashboard (20202020-3840-4b6d-9425-0c5188b05ca8) already has updatedBy field, skipping
[Nest] 17395 - 01/08/2026, 3:04:18 PM LOG [BackfillUpdatedByFieldCommand] Object workflowRun (20202020-4e28-4e95-a9d7-6c00874f843c) already has updatedBy field, skipping
[Nest] 17395 - 01/08/2026, 3:04:18 PM LOG [BackfillUpdatedByFieldCommand] Object workflow (20202020-62be-406c-b9ca-8caa50d51392) already has updatedBy field, skipping
[Nest] 17395 - 01/08/2026, 3:04:18 PM LOG [BackfillUpdatedByFieldCommand] Object opportunity (20202020-9549-49dd-b2b2-883999db8938) already has updatedBy field, skipping
[Nest] 17395 - 01/08/2026, 3:04:18 PM LOG [BackfillUpdatedByFieldCommand] Object company (20202020-b374-4779-a561-80086cb2e17f) already has updatedBy field, skipping
[Nest] 17395 - 01/08/2026, 3:04:18 PM LOG [BackfillUpdatedByFieldCommand] Object attachment (20202020-bd3d-4c60-8dca-571c71d4447a) already has updatedBy field, skipping
[Nest] 17395 - 01/08/2026, 3:04:18 PM LOG [BackfillUpdatedByFieldCommand] Object person (20202020-e674-48e5-a542-72570eee7213) already has updatedBy field, skipping
[Nest] 17395 - 01/08/2026, 3:04:18 PM LOG [BackfillUpdatedByFieldCommand] Object surveyResult (custom) already has updatedBy field, skipping
[Nest] 17395 - 01/08/2026, 3:04:18 PM LOG [BackfillUpdatedByFieldCommand] All objects already have updatedBy field for workspace 3b8e6458-5fc1-4e63-8563-008ccddaa6db
[Nest] 17395 - 01/08/2026, 3:04:18 PM LOG [AddWorkspaceForeignKeysMigrationCommand] Skipping has already been run once AddWorkspaceForeignKeysMigrationCommand
[Nest] 17395 - 01/08/2026, 3:04:18 PM LOG [UpgradeCommand] Upgrade for workspace 3b8e6458-5fc1-4e63-8563-008ccddaa6db completed.
[Nest] 17395 - 01/08/2026, 3:04:18 PM LOG [UpgradeCommand] Command completed!
```
2026-01-08 14:12:57 +00:00
0623bbbf9a
i18n - docs translations ( #17020 )
...
Created by Github action
Co-authored-by: github-actions <github-actions@twenty.com >
2026-01-08 15:18:07 +01:00
Marie and GitHub
f414f4799b
Enable switching field to group records by on existing kanban view ( #17015 )
...
Fixes https://github.com/twentyhq/twenty/issues/16982 and
https://github.com/twentyhq/private-issues/issues/403
Re-introducing the feature to allow to switch field to group records by
on a kanban view
https://github.com/user-attachments/assets/a552d3f2-7900-4771-b512-98cb99cdd8de
2026-01-08 13:08:06 +00:00
Raphaël Bosi and GitHub
c207214f0b
Fix chart sorting ( #16996 )
...
I introduced a bug in the chart sorting in this PR:
https://github.com/twentyhq/twenty/pull/16794
This PR fixes this.
The sorting on the first axis is already done by the group by for
FIELD_ASC and FIELD_DESC. It is sorted also for the second axis but in
each group.
For instance, if I create a graph that displays the amount of sales on
each day of the week grouped by vendor
I can have for:
Monday: Vendor B, Vendor C
Tuesday: Vendor A, Vendor B
Wednesday: Vendor A, Vendor C
...
Inside each day the order of the vendor is correct, but by looking at
only one day, I can't know the order of all the vendors.
That is why we always need to sort the second axis.
2026-01-08 12:46:56 +00:00
Don Kendall and GitHub
8630efc3d7
feat: helm chart ( #16808 )
...
# Add Helm Chart
- Introduces a Twenty Helm chart with sensible defaults: internal
Postgres/Redis, auto DB creation/user, migrations, TLS via cert-manager,
and quickstart docs.
## Feedback requested
- Handling replicas > 1 with local storage (warn/force S3?).
- Defaults/guards for ephemeral pods + S3.
2026-01-08 12:45:46 +00:00
Raphaël Bosi and GitHub
22573ccf03
[DASHBOARDS] Select title input upon tab or widget creation ( #17010 )
...
Video QA:
https://github.com/user-attachments/assets/334bbac8-03a5-4eb2-98b7-78bab7abfccf
2026-01-08 12:37:36 +00:00
nitin and GitHub
7fff8c8234
[Dashboards] Fix chart axis label behavior ( #17011 )
...
- Axis labels now respect `axisNameDisplay` config when chart has no
data (previously always showed both) - fixed for bar and line charts
- Horizontal bar charts now correctly map axis settings to visual
positions:
- "X axis" setting → bottom axis (value)
- "Y axis" setting → left axis (category)
video QA
https://github.com/user-attachments/assets/5bf32294-9a5e-4aa6-b3fd-0d4e33608d14
2026-01-08 12:34:39 +00:00
7a8f795dce
i18n - docs translations ( #17014 )
...
Created by Github action
Co-authored-by: github-actions <github-actions@twenty.com >
2026-01-08 13:32:14 +01:00
b27f2ca146
fix(graph): fix toggle click and multiple dropdown issues ( #16874 )
...
Fixes #16843
## Summary
This PR fixes two bugs in graph settings:
1. **Multiple dropdowns opening simultaneously**
2. **Toggle switches not clickable**
---
## Fix 1: Multiple dropdowns
**File:**
[ChartSettingItem.tsx](https://github.com/twentyhq/twenty/blob/main/packages/twenty-front/src/modules/command-menu/pages/page-layout/components/chart-settings/ChartSettingItem.tsx )
Added `closeAnyOpenDropdown()` before opening a new dropdown. This
follows the existing pattern used in:
-
[useCommandMenu.ts](https://github.com/twentyhq/twenty/blob/main/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenu.ts )
-
[RecordBoardDragSelect.tsx](https://github.com/twentyhq/twenty/blob/main/packages/twenty-front/src/modules/object-record/record-board/components/RecordBoardDragSelect.tsx )
-
[useRecordGroupReorderConfirmationModal.ts](https://github.com/twentyhq/twenty/blob/main/packages/twenty-front/src/modules/object-record/record-group/hooks/useRecordGroupReorderConfirmationModal.ts )
---
## Fix 2: Toggle switches not clickable
**File:**
[MenuItemToggle.tsx](https://github.com/twentyhq/twenty/blob/main/packages/twenty-ui/src/navigation/menu/menu-item/components/MenuItemToggle.tsx )
(twenty-ui)
### Investigation
I traced the toggle click flow and compared working vs non-working
usages:
- ✅
[SettingsRolesList.tsx](https://github.com/twentyhq/twenty/blob/main/packages/twenty-front/src/modules/settings/roles/components/SettingsRolesList.tsx )
- toggles work (MenuItemToggle directly in Dropdown)
- ✅
[ObjectOptionsDropdownRecordGroupsContent.tsx](https://github.com/twentyhq/twenty/blob/main/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownRecordGroupsContent.tsx )
- toggles work (MenuItemToggle in SelectableListItem)
- ❌
[ChartSettingItem.tsx](https://github.com/twentyhq/twenty/blob/main/packages/twenty-front/src/modules/command-menu/pages/page-layout/components/chart-settings/ChartSettingItem.tsx )
- toggles don't work (CommandMenuItemToggle in SelectableListItem)
The component structure and props were identical, so I examined the HTML
output.
### Root Cause
Found **nested `<label>` elements**:
```html
<!-- Before (problematic) -->
<label htmlFor="id123"> <!-- MenuItemToggle's outer label -->
<div>...content...</div>
<label> <!-- Toggle's internal label -->
<input id="id123" type="checkbox">
</label>
</label>
```
While `htmlFor` theoretically links to the checkbox, nested labels are
**invalid HTML** and can cause click propagation issues in certain
browser contexts (particularly when combined with React event handling
and `SelectableList` keyboard navigation).
### Solution
Changed `StyledToggleContainer` from `label` to `div`:
```diff
- const StyledToggleContainer = styled.label`
+ const StyledToggleContainer = styled.div`
```
The
[Toggle](https://github.com/twentyhq/twenty/blob/main/packages/twenty-ui/src/input/components/Toggle.tsx )
component already handles clicks via its internal label wrapper, so the
outer label was redundant.
Also removed unused `useId`, `htmlFor`, and `id` props that were only
needed for the label association.
## Testing
- ✅ TypeScript checks pass on `twenty-ui`
- ✅ TypeScript checks pass on `twenty-front`
- No breaking changes to
[MenuItemToggle](https://github.com/twentyhq/twenty/blob/main/packages/twenty-ui/src/navigation/menu/menu-item/components/MenuItemToggle.tsx )
API
- All existing usages of
[MenuItemToggle](https://github.com/twentyhq/twenty/blob/main/packages/twenty-ui/src/navigation/menu/menu-item/components/MenuItemToggle.tsx )
should continue working (and potentially work better)
---------
Co-authored-by: Charles Bochet <charles@twenty.com >
2026-01-08 12:05:32 +00:00
Aman Raj and GitHub
7ce76277d2
Fix the crash of the app page when object view is configured to open only on record page. ( #16977 )
...
### Problem:
If the command menu page is kept opened while navigating to record show
page then the app crashes.
### Root cause
When navigatiing to a record show page while the command menu page is
kept opened, it tries to open the record show page with command menu
open, as its state were set to true , before navigating to a new page
along with the instance id of previous context which are used in the
current context while rendering the page. Hence, leading to an error
page.
### Changes
while navigation to a record show page the command menu open state is
set to false. This is to handle the navigation gracefully
Fixes : #16577
2026-01-08 11:51:07 +00:00
5864c69e45
i18n - translations ( #17012 )
...
Created by Github action
Co-authored-by: github-actions <github-actions@twenty.com >
2026-01-08 12:20:58 +01:00
e9b7ad21d2
Fix view picker small bugs ( #16987 )
...
This PR solves small bugs around the view picker.
- Couldn’t obtain optimistic update after a re-order of a view by drag
and drop, we needed to refresh the page
- Picking a new icon wouldn’t trigger optimistic update (same problem)
- Picking a new icon would change the view (difficult to understand
behavior)
- Picking a new icon would trigger left drawer collapse (z-index
problem)
Since core views are not being handled by object metadata items anymore,
and that all view logic is plugged on coreViewsState, this PR
implemented optimistic effect by upserting into this state.
Fixes https://github.com/twentyhq/twenty/issues/15422
Fixes https://github.com/twentyhq/twenty/issues/16986
# Before
https://github.com/user-attachments/assets/64099c21-df9f-4772-ab0d-9ea449aed761
# After
https://github.com/user-attachments/assets/f4e844b3-6530-4178-abdb-b7a10d2327b8
---------
Co-authored-by: Charles Bochet <charles@twenty.com >
2026-01-08 12:05:45 +01:00
Thomas Trompette and GitHub
71fd05315c
[IF/ELSE] Capitalize branch titles + remove ending separator ( #17009 )
...
Before : if - else if not capitalized, ending separator)
<img width="496" height="451" alt="Capture d’écran 2026-01-08 à 11 17
29"
src="https://github.com/user-attachments/assets/621e92f3-02ed-4e71-9893-576543922871 "
/>
After
<img width="496" height="431" alt="Capture d’écran 2026-01-08 à 11 17
14"
src="https://github.com/user-attachments/assets/549c146c-00b0-4162-b395-ceb05baf34b1 "
/>
2026-01-08 10:28:15 +00:00
0d9245b684
i18n - docs translations ( #17008 )
...
Created by Github action
Co-authored-by: github-actions <github-actions@twenty.com >
2026-01-08 11:26:54 +01:00
3e08f295d5
i18n - translations ( #17007 )
...
Created by Github action
---------
Co-authored-by: github-actions <github-actions@twenty.com >
2026-01-08 10:50:39 +01:00
c82ac19657
i18n - translations ( #17005 )
...
Created by Github action
Co-authored-by: github-actions <github-actions@twenty.com >
2026-01-08 10:39:04 +01:00
Weiko and GitHub
66b2882ac4
BREAKING CHANGE: Removing remote integration feature ( #17001 )
...
## Context
The feature has not been maintained for more than a year and was never
officially launched.
This PR removes its code due to the upcoming refactoring of the
sync-metadata that will break its logic if not handled properly and it
would be too costly for the time being.
TODO:
- remove isRemote from object/field metadata
2026-01-08 09:14:51 +00:00
Raphaël Bosi and GitHub
2e0eeda52e
[DASHBOARDS] Fix dashboard duplication createdBy ( #16999 )
...
Fixes https://github.com/twentyhq/core-team-issues/issues/2032
## Before
https://github.com/user-attachments/assets/5804d3e7-1c03-4eb9-9203-64656438f5d1
## After
https://github.com/user-attachments/assets/9f96458c-d2a5-481a-b6b2-4d88f0daa98a
2026-01-08 09:13:43 +00:00
nitin and GitHub
d653b0a168
Change bar chart tooltips interaction from bar to slice ( #16938 )
...
https://github.com/user-attachments/assets/90baca7e-2c32-448d-a458-e95ced00fdf4
https://github.com/user-attachments/assets/53dd5f8b-1c22-4600-b582-46ba594b966a
https://github.com/user-attachments/assets/0b0b15c1-3ff8-4059-bc10-969d49852545
2026-01-08 09:06:44 +00:00
e0107f67fd
i18n - docs translations ( #17004 )
...
Created by Github action
Co-authored-by: github-actions <github-actions@twenty.com >
2026-01-08 09:57:58 +01:00
bb9f243fd0
i18n - docs translations ( #17002 )
...
Created by Github action
---------
Co-authored-by: github-actions <github-actions@twenty.com >
2026-01-08 09:03:50 +01:00
0e49b67b7d
i18n - docs translations ( #17000 )
...
Created by Github action
Co-authored-by: github-actions <github-actions@twenty.com >
2026-01-07 19:22:56 +01:00
Etienne and GitHub
615ef1abdc
Fix kanban view when grouping select field has null value ( #16998 )
2026-01-07 17:55:54 +00:00
1f0fac195c
i18n - docs translations ( #16993 )
...
Created by Github action
Co-authored-by: github-actions <github-actions@twenty.com >
2026-01-07 18:54:45 +01:00
Raphaël Bosi and GitHub
7af98a9c15
Update updatedat field on dashboards after edition ( #16964 )
...
Closes https://github.com/twentyhq/core-team-issues/issues/1896
2026-01-07 17:14:24 +00:00
nitin and GitHub
a19ed92429
fix: composite field matching in relation field orderBy with groupBy ( #16992 )
...
- Fix groupBy field matching for composite fields nested within relation
fields
- Add `nestedSubFieldName` comparison when the nested field is a
composite type (CURRENCY, FULL_NAME, ADDRESS, etc.)
2026-01-07 16:13:08 +00:00
e83e616fde
fix: qs's arrayLimit bypass in its bracket notation allows DoS via memory exhaustion ( #16886 )
...
Resolves [Dependabot Alert
354](https://github.com/twentyhq/twenty/security/dependabot/354 ) and
[Dependabot Alert
355](https://github.com/twentyhq/twenty/security/dependabot/355 ).
Upgraded express by one minor version. Removed redundant type definition
in root `package.json` since we already have it in twenty-server's
`package.json`.
Upgraded body-parser patch version in serverless package.json.
Co-authored-by: Félix Malfait <felix.malfait@gmail.com >
2026-01-07 15:58:12 +00:00
Thomas Trompette and GitHub
6410157c5c
Provide executed step output instead of result ( #16991 )
...
For huge workflows, after 20 steps, we stop the job and re-trigger a new
one.
But some of those workflows actually never stop.
See https://github.com/twentyhq/private-issues/issues/401
Here is a first issue. We resuming the workflow, we were providing the
result instead of the output
2026-01-07 15:50:14 +00:00
Charles Bochet and GitHub
9acf6ce1ad
Add otel collector to reserved subdomains ( #16988 )
...
Ordered the RESERVED_SUBDOMAINS list by alphabetical order and added
'otel-collector'
2026-01-07 15:11:34 +00:00
370609a2e2
i18n - translations ( #16989 )
...
Created by Github action
---------
Co-authored-by: github-actions <github-actions@twenty.com >
2026-01-07 16:21:49 +01:00
Raphaël Bosi and GitHub
4faed25624
[PAGE LAYOUTS] Add widgets validation ( #16635 )
...
- Add widget validation
- Remove 'None' option for primary axis group by
- Fix error message parsing by passing the operation type in
`useMetadataErrorHandler`
2026-01-07 15:00:13 +00:00
701a713042
Updated the user guide with new article + updated old content ( #16955 )
...
- more details on rate at which messages are imported from Gmail
- Settings -> Release deprecated to Settings -> Updates => this leads to
updating the file title, file name and the navigation files
- Support & Documentation accessible via Settings and no longer the nav
bar
- updated features out of the lab
- no more integration page
- added a new article with step by step on how to notify a teammate of a
note to review
docs.json is updated only for the English part
---------
Co-authored-by: github-actions <github-actions@twenty.com >
2026-01-07 14:17:13 +00:00
Etienne and GitHub
81afc8b9ca
Fix memory crash when creating record in table view ( #16984 )
...
**Bug Fixed**
Creating a new record in the People table view caused a browser memory
crash ("Paused before potential out of memory crash").
**Root Cause**
In useResetVirtualizationBecauseDataChanged.ts, when creating a record,
a loop iterated from 0 to totalNumberOfRecordsToVirtualize (the total
database count).
**Fix Applied**
Changed the loop to only iterate through indices from actually loaded
pages
Fixes https://github.com/twentyhq/twenty/issues/16980
2026-01-07 14:06:32 +00:00
Rajdeep Das and GitHub
a4daead678
Fix view field updates not persisting ( #16672 )
...
Fixes an issue where column width changes and other view field
modifications were not persisted, and a toast error was shown.
**Root Causes:**
1. Frontend was using client-generated IDs instead of database IDs for
updates
2. Backend cache was stale, causing `View field to update not found`
error
**Changes:**
- Use the existing database ID when updating view fields
- Exclude client-generated IDs when creating new view fields
- Invalidate flat entity maps cache before/after view field operations
- Refresh both view and view field caches to prevent validation errors
Fixes #16417
Closes #16381
2026-01-07 13:56:43 +00:00
Paul Rastoin and GitHub
4ea4572924
Workspace creation prefill fix ( #16983 )
...
# Introduction
Fixing prefill in v2 workspace creation code flow
2026-01-07 13:51:21 +00:00
Abdul Rahman and GitHub
10de7acef3
If else node tests ( #16916 )
2026-01-07 10:37:37 +00:00
nitin and GitHub
e6b5ae825c
fix purple color palette ( #16972 )
...
before -
<img width="490" height="181" alt="CleanShot 2026-01-06 at 23 20 50"
src="https://github.com/user-attachments/assets/939897c1-3a8d-4a38-a586-98667e69f011 "
/>
now -
<img width="494" height="170" alt="CleanShot 2026-01-06 at 23 20 03"
src="https://github.com/user-attachments/assets/634676c4-ea28-4ead-b3da-49ca75b57bd1 "
/>
2026-01-07 09:30:41 +00:00
e4f8d804d5
fix(16819): Add NoteDeleteOnePostQueryHook for soft removing note targets ( #16826 )
...
Fixes [#16819 ](https://github.com/twentyhq/twenty/issues/16819 )
Added a post-query hook (NoteDeleteOnePostQueryHook) that automatically
soft-deletes all associated noteTarget records when a note is deleted.
## Key changes:
Created `note-delete-one.post-query.hook.ts`
Uses `GlobalWorkspaceOrmManager` to access workspace entities correctly
Executes in the proper workspace context to ensure data isolation
Soft-deletes noteTarget records to maintain referential consistency
## Testing
1. Company notes
Create a Company
Create and attach a Note to the Company
Navigate to Company → Notes page (should display the note)
Delete the Note
Navigate to Company → Notes page (should no longer crash)
Restore the Note (should appear again)
Delete and destroy the Note permanently
Navigate to Company → Notes page (should still work, just empty)
2. Opportunity notes
Create an Opportunity
Create and attach a Note to the Opportunity
Navigate to Opportunity → Notes page (should display the note)
Delete the Note
Navigate to Opportunity → Notes page (should no longer crash)
Restore the Note (should appear again)
Delete and destroy the Note permanently
Navigate to Opportunity → Notes page (should still work, just empty)
### Expected behavior:
Company Notes page remains functional at all stages
No console errors
Deleted notes properly excluded from the view
Other notes on the same Company remain accessible
Additional Notes
This fix ensures data consistency by maintaining the relationship
between notes and their targets throughout the deletion lifecycle.
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
Co-authored-by: Etienne <45695613+etiennejouan@users.noreply.github.com >
2026-01-07 08:30:08 +00:00