neo773 and GitHub
a0b2aa207f
Fix messaging 404 handling ( #17041 )
...
`MessageImportExceptionHandlerService.handleSyncCursorErrorException()`
was calling `messageChannelSyncStatusService.markAsFailed()`
instead of
`messageChannelSyncStatusService.resetAndMarkAsMessagesListFetchPending()`
Also adds a new command `MessagingTriggerMessageListFetchCommand` for
faster local development speed
2026-01-09 16:35:12 +00:00
Baptiste Devessier and GitHub
dec2b44808
Generate Field widgets for relations ( #17047 )
...
To release version 1, we must ensure feature parity with the current
production version.
In the future, all widgets will be stored in the backend. For now, let's
compute Field widgets for relations at runtime.
https://github.com/user-attachments/assets/acffe2f9-0f9b-4eff-bb89-c41f7caf5441
2026-01-09 16:24:35 +00:00
b1c821b0e3
Implement hide empty groups for grouped table view ( #16494 )
...
Co-authored-by: Félix Malfait <felix.malfait@gmail.com >
Co-authored-by: Félix Malfait <felix@twenty.com >
2026-01-09 17:31:22 +01:00
308973d7ca
i18n - docs translations ( #17036 )
...
Created by Github action
---------
Co-authored-by: github-actions <github-actions@twenty.com >
2026-01-09 17:26:06 +01:00
109c47af68
i18n - translations ( #17050 )
...
Created by Github action
---------
Co-authored-by: github-actions <github-actions@twenty.com >
2026-01-09 16:21:33 +01:00
Félix Malfait and GitHub
67ae17961e
Fix MS Office preview for private/local URLs ( #17044 )
...
## Summary
Fixes #16900 - MS Office documents (doc, docx, ppt, pptx, xls, xlsx,
odt) cannot be previewed when hosted on local/private networks.
## Problem
Microsoft's Office Online viewer (`view.officeapps.live.com`) requires
documents to be publicly accessible from the internet. For self-hosted
Twenty instances or local development, files are not reachable by
Microsoft's servers, causing the viewer to fail with "An error
occurred".
## Solution
Detect private/local URLs upfront and show a helpful message with a
download button instead of letting the viewer fail silently.
**Detected private URLs:**
- `localhost`, `127.0.0.1`, `[::1]`
- Private IP ranges: `10.x.x.x`, `172.16-31.x.x`, `192.168.x.x`
- Local domain patterns: `.local`, `.localhost`, `.internal`
## Alternatives Explored (that don't work)
We investigated more sophisticated detection approaches:
1. **postMessage events** - Microsoft's viewer doesn't send any error
messages we can listen to
2. **Fetching the embed URL** - Blocked by CORS (Microsoft doesn't set
`Access-Control-Allow-Origin`)
3. **Reading iframe content** - Cross-origin restrictions prevent
JavaScript access
The URL-based detection is the most reliable approach for catching the
common cases where preview will definitely fail.
## Testing
1. Upload an Office file (docx, pptx, xlsx) on a local Twenty instance
2. Try to preview it
3. Should see "This file cannot be previewed because it is hosted
locally" with a Download button
2026-01-09 14:58:34 +00:00
martmull and GitHub
3509838a3a
Improve application ast 2 ( #17045 )
...
fix some issues with cli tools
2026-01-09 14:54:13 +00:00
52e859e5a7
i18n - translations ( #17048 )
...
Created by Github action
---------
Co-authored-by: github-actions <github-actions@twenty.com >
2026-01-09 15:38:08 +01:00
d7b7e9def1
Cascade delete Task targets when tasks deleted - logic + migration command ( #17019 )
...
Co-authored-by: prastoin <paul@twenty.com >
2026-01-09 14:10:40 +00:00
Lucas Bordeau and GitHub
2fb099e198
Made the code more resilient to stale value prop in date filter ( #17038 )
...
Fixes : https://github.com/twentyhq/twenty/issues/17035
There was a bad pattern which risked introduce this bug in
`turnRecordFilterIntoRecordGqlOperationFilter` after recent refactor of
date logic and date filters, which didn't create any bug during dev time
because it wasn't tested with value combinations that existed before the
refactor.
Code has been re-organized to make it resilient to any wrong value
combination.
Also fixed a small bug that appeared during QA with `DATE` filter type,
which was blocking the save button from disappearing after a save.
2026-01-09 14:09:57 +00:00
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!
```
v1.15.0
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