Choose the right Frappe customization surface before suggesting code.
Check these surfaces first when relevant:
Custom FieldProperty SetterClient ScriptServer ScriptWorkspaceWeb PagePagePrint FormatReportDashboardDashboard ChartNumber CardWeb FormWorkflowRoleNotificationAssignment RuleWebhookAuto RepeatEmail TemplateLetter HeadPrint Style
Preferred decision ladder:
- built-in configuration
- metadata/admin DocType customization
- page/workspace/report/dashboard/print/web surfaces
- hooks and custom app code
- changes inside a custom-derived app only when necessary
Explicitly call out when a request should use Custom Field rather than editing a DocType JSON file directly.
When creating or redesigning a DocType, also apply frappe-doctype-design so fields, tabs, sections, columns, and required flags are chosen for a clean human workflow instead of a flat field dump.