No description
Find a file
Aarol D'Souza cf69e4bed1
fix(postgres): misc query building fixes + CI (#34831)
* fix(query): check standard field definitions

Signed-off-by: Akhil Narang <me@akhilnarang.dev>

* fix(postgres): fix order_by problem in pg

* fix(postgres): fix order_by in get_all for _test_connection_query

* fix: add check to a proper numeric fallback in _get_ifnull_fallback

* test(postgres): fix pg query used in assertion in test_permission_query

* fix(postgres): fix order_by in get_all for possible_link

* fix(postgres): fix order_by in get_all for set_modules

* fix(postgres): fix pg query count *

* fix(postgres): fix order_by in get_all for ask_pass_update

* fix(postgres): fix order_by statement in search_widget

* fix(postgres): fix order_by in get_list for get_stats

* test(postgres): normalize_sql for pg queries in test_arithmetic_operators_in_fields

* test(postgres): normalize_sql for pg queries in test_field_alias_in_group_by

* test(postgres): normalize_sql for pg queries in test_field_alias_permission_check

* test(postgres): fix order_by statement in get_all for test_db_keywords_as_fields

* test(postgres): fix order_by statement in get_all for test_prepare_select_args

* fix(treeview): use 0 instead of false to check since check field is an integer

* fix(postgres): fix order_by in get_all for sync_communication

* fix(postgres): fix order_by in get_all for get_references_across_doctypes_by_dynamic_link_field

* test(postgres): fix order_by in get_all for test_list_summary

* fix(postgres): fix order_by in get_all for email queries

* test(postgres): use order_by none and update assertion for postgres

* fix(postgres): use ILIKE to support case insensitive search in postgres

* test(test_query): update pg specific query assert to use ILIKE

* test(test_query): update test_nested_filters to use ilike instead for PG

* test(postgres): update pg query in assert to test updated qb query

* fix(search): update query to be db-agnostic

* test(postgres): normalize query for pg in test_build_match_conditions

* fix(postgres): suppress ORDER BY when SELECT DISTINCT in query for postgres specific behavior

* fix(postgres): suppress ORDER BY when GROUP BY is explicitly asked for pg specific behavior

* test(postgres): fix test behavior for pg ORDER BY drop when used with GROUP BY

* refactor: reducing noise in code by formatting code

* fix(query): use Star() to handle SQL wildcard character * correctly

* fix(postgres): display warning for ORDER BY fields that will be dropped

---------

Signed-off-by: Akhil Narang <me@akhilnarang.dev>
Co-authored-by: Akhil Narang <me@akhilnarang.dev>
2025-12-05 10:30:49 +05:30
.github test: always upload cypress recordings (#35032) 2025-12-03 01:15:49 +00:00
cypress test: add wait before jumping field 2025-12-04 17:52:52 +05:30
esbuild feat: configurable esbuild build target (#34398) 2025-10-17 00:55:21 +00:00
frappe fix(postgres): misc query building fixes + CI (#34831) 2025-12-05 10:30:49 +05:30
realtime fix(socketio): allow authorization header without cookies (#34199) 2025-09-30 11:54:23 +05:30
.editorconfig chore: ignore helix folder 2024-08-29 14:28:52 +02:00
.eslintignore fix: Miscellaneous changes (#12343) 2021-02-08 12:05:37 +05:30
.eslintrc feat: emoji picker 2025-11-14 23:05:13 +05:30
.git-blame-ignore-revs chore: update list of revisions for git blame to ignore 2025-09-26 17:23:31 +05:30
.gitignore refactor: remove billing pages and navigate user to Frappe Cloud directly 2024-12-13 13:13:12 +05:30
.mergify.yml chore: disable mergify auto merges (#24825) 2024-02-09 13:59:40 +00:00
.pre-commit-config.yaml chore: enforce conventional commits (#34219) 2025-09-30 19:35:38 +02:00
.releaserc ci: better release notes generation (#19380) 2022-12-21 12:14:35 +05:30
.semgrepignore refactor!: Prefix all custom fieldnames created from Desk (#21355) 2023-06-19 18:22:36 +05:30
attributions.md build!: Drop maxmind IP database (#29213) 2025-01-17 12:03:09 +05:30
babel_extractors.csv feat: extract translatable strings from standard web forms (#34237) 2025-10-02 11:30:14 +02:00
CODE_OF_CONDUCT.md Corrected Grammar in the CODE_OF_CONDUCT.md file (#29889) 2025-01-24 20:20:02 +01:00
codecov.yml ci: update codecov.yml flags 2023-01-10 13:19:12 +05:30
CODEOWNERS chore: simple codeowners 2023-07-25 13:06:49 +05:30
commitlint.config.js chore: add depr to commit types for deprecation decisions 2024-11-13 11:20:10 +01:00
crowdin.yml ci: invert language mapping (#31879) 2025-03-24 15:03:18 +00:00
cypress.config.js fix: add cypress recordings to a path and upload them 2025-12-02 17:17:42 +05:30
generate_bootstrap_theme.js chore: remove eslint-disable* 2023-07-14 15:41:20 +05:30
hooks.md chore!: remove dead hooks app_icon & app_color 2022-05-10 14:41:01 +05:30
LICENSE chore: Update copyright until date to 2021 2021-09-03 12:19:15 +05:30
node_utils.js feat: prepare redis subsystem for unix domain socket connections 2024-03-29 10:12:19 +01:00
package.json feat: emoji picker 2025-11-14 23:05:13 +05:30
pyproject.toml chore(deps): bump werkzeug from 3.1.3 to 3.1.4 (#35010) 2025-12-02 11:01:37 +05:30
README.md chore: add quote 2025-08-11 11:04:31 +05:30
SECURITY.md Update SECURITY.md 2023-01-10 16:49:44 +05:30
sider.yml chore(sider): add sider default config for flake8 + ignore tab errors (W191) (#12587) 2021-03-16 17:07:41 +05:30
socketio.js refactor: Split socketio in multiple logical files 2023-07-01 10:53:34 +05:30
yarn.lock feat: emoji picker 2025-11-14 23:05:13 +05:30

Frappe Framework

Low Code Web Framework For Real World Applications, In Python And JavaScript

Hero Image

Frappe Framework

Full-stack web application framework that uses Python and MariaDB on the server side and a tightly integrated client side library. Built for ERPNext.

Philosophy

The best code is the one that is not written

Started in 2005, Frappe Framework was inspired by the Semantic Web. The "big idea" behind semantic web was of a framework that not only described how information is shown (like headings, body etc), but also what it means, like name, address etc.

By creating a web framework that allowed for easy definition of metadata, it made building complex applications easy. Applications usually designed around how users interact with a system, but not based on semantics of the underlying system. Applications built on semantics end up being much more consistent and extensible.

The first application built on Framework was ERPNext, a beast with more than 700 object types. Framework is not for the light hearted - it is not the first thing you might want to learn if you are beginning to learn web programming, but if you are ready to do real work, then Framework is the right tool for the job.

Key Features

  • Full-Stack Framework: Frappe covers both front-end and back-end development, allowing developers to build complete applications using a single framework.

  • Built-in Admin Interface: Provides a pre-built, customizable admin dashboard for managing application data, reducing development time and effort.

  • Role-Based Permissions: Comprehensive user and role management system to control access and permissions within the application.

  • REST API: Automatically generated RESTful API for all models, enabling easy integration with other systems and services.

  • Customizable Forms and Views: Flexible form and view customization using server-side scripting and client-side JavaScript.

  • Report Builder: Powerful reporting tool that allows users to create custom reports without writing any code.

Screenshots

List View Form View Role Permission Manager

Production Setup

Managed Hosting

You can try Frappe Cloud, a simple, user-friendly and sophisticated open-source platform to host Frappe applications with peace of mind.

It takes care of installation, setup, upgrades, monitoring, maintenance and support of your Frappe deployments. It is a fully featured developer platform with an ability to manage and control multiple Frappe deployments.

Self Hosting

Docker

Prerequisites: docker, docker-compose, git. Refer Docker Documentation for more details on Docker setup.

Run following commands:

git clone https://github.com/frappe/frappe_docker
cd frappe_docker
docker compose -f pwd.yml up -d

After a couple of minutes, site should be accessible on your localhost port: 8080. Use below default login credentials to access the site.

  • Username: Administrator
  • Password: admin

See Frappe Docker for ARM based docker setup.

Development Setup

Manual Install

The Easy Way: our install script for bench will install all dependencies (e.g. MariaDB). See https://github.com/frappe/bench for more details.

New passwords will be created for the Frappe "Administrator" user, the MariaDB root user, and the frappe user (the script displays the passwords and saves them to ~/frappe_passwords.txt).

Local

To setup the repository locally follow the steps mentioned below:

  1. Setup bench by following the Installation Steps and start the server

    bench start
    
  2. In a separate terminal window, run the following commands:

    # Create a new site
    bench new-site frappe.localhost
    
  3. Open the URL http://frappe.localhost:8000/app in your browser, you should see the app running

Learning and community

  1. Frappe School - Learn Frappe Framework and ERPNext from the various courses by the maintainers or from the community.
  2. Official documentation - Extensive documentation for Frappe Framework.
  3. Discussion Forum - Engage with community of Frappe Framework users and service providers.
  4. buildwithhussain.com - Watch Frappe Framework being used in the wild to build world-class web apps.

Contributing

  1. Issue Guidelines
  2. Report Security Vulnerabilities
  3. Pull Request Requirements
  4. Translations