diff --git a/apps/client/src/features/app-settings/panel/manage-panel/ManageRundownForm.tsx b/apps/client/src/features/app-settings/panel/manage-panel/ManageRundownForm.tsx
index f941a2224..6539353cb 100644
--- a/apps/client/src/features/app-settings/panel/manage-panel/ManageRundownForm.tsx
+++ b/apps/client/src/features/app-settings/panel/manage-panel/ManageRundownForm.tsx
@@ -46,7 +46,7 @@ export function ManageRundownForm({ onClose }: ManageRundownForm) {
diff --git a/apps/client/src/features/app-settings/panel/manage-panel/composite/RundownRenameForm.tsx b/apps/client/src/features/app-settings/panel/manage-panel/composite/RundownRenameForm.tsx
index be37c9a5e..87cb948ad 100644
--- a/apps/client/src/features/app-settings/panel/manage-panel/composite/RundownRenameForm.tsx
+++ b/apps/client/src/features/app-settings/panel/manage-panel/composite/RundownRenameForm.tsx
@@ -59,6 +59,7 @@ export default function RundownRenameForm({ onSubmit, onCancel, initialTitle }:
return true;
},
})}
+ maxLength={64}
fluid
/>
{errors.title && {errors.title.message}}
diff --git a/apps/server/src/api-data/rundown/rundown.validation.ts b/apps/server/src/api-data/rundown/rundown.validation.ts
index a6014f7d3..e1bdade4b 100644
--- a/apps/server/src/api-data/rundown/rundown.validation.ts
+++ b/apps/server/src/api-data/rundown/rundown.validation.ts
@@ -1,14 +1,23 @@
import { body, param } from 'express-validator';
-import type { EntryId, InsertOptions, OntimeGroup, Rundown } from 'ontime-types';
+import { type EntryId, type InsertOptions, type OntimeGroup, type Rundown } from 'ontime-types';
import { requestValidationFunction } from '../validation-utils/validationFunction.js';
// #region operations on project rundowns =========================
-export const rundownPostValidator = [body('title').isString().trim().notEmpty(), requestValidationFunction];
+const rundownTitleValidator = body('title')
+ .isString()
+ .trim()
+ .notEmpty()
+ .withMessage('No title provided')
+ .bail()
+ .isLength({ max: 64 })
+ .withMessage('Title must be 64 characters or fewer');
+
+export const rundownPostValidator = [rundownTitleValidator, requestValidationFunction];
export const rundownPatchValidator = [
param('id').isString().trim().notEmpty(),
- body('title').isString().trim().notEmpty().withMessage('No title provided'),
+ rundownTitleValidator,
requestValidationFunction,
];