to select ↑↓ to navigate
Frappe Framework

Frappe Framework

Open in ChatGPT
Ask ChatGPT about this page
Open in Claude
Ask Claude about this page

Customization

Customization

Frappe is built to be customised without forking core. Almost everything can be changed from the desk by an administrator.

Custom Field

Add fields to any DocType without code. Customize Form → DocType → add field. The field is stored in tabCustom Field and survives upgrades. Most Prilk apps ship custom fields this way.

Customize Form

Reorder fields, change labels, hide fields per role, set required-on-condition. Same dialog as Custom Field. Changes apply globally to that DocType.

Property Setter

Override a single property of a field — its default value, mandatory flag, or read-only state — without touching the DocType definition. Created automatically when you Customize Form.

Client Script

JavaScript that runs on a DocType's form in the browser. Triggers like refresh, validate, on field change. Use for: dynamic field visibility, computed values, custom buttons.

Server Script

Python that runs on a DocType's lifecycle events server-side (before_save, on_submit, scheduled). Use for: validation, integrations, automated workflows. Sandboxed for safety.

Custom DocType

Build your own data model from the desk. Define fields, permissions, naming rules. The DocType becomes a queryable table with auto-generated form and list view. No code required.

When to write an app instead

If your customization grows beyond a few Custom Fields and Server Scripts — or you need it across multiple sites — package it as a Frappe app. See Developers.

Last updated 3 days ago
Was this helpful?
Thanks!