How to add custom app to the sidebar dropdown?

Hello,how to add custom app to sidebar dropdown? i dont know what it called, but why my custom app is not listed on user default app?
image

Hello @whytrno, it is called app screen

Add the code below before # Includes in <head> in hooks file


app_home = "/app/workspace of that custom app"
add_to_apps_screen = [
	{
		"name": "app_name", 
		"logo": "/assets/custom_app/logo_name.png",
		"title": "app title",
		"route": "/app/workspace of that custom app",
	}
]
1 Like

I already uncomment this code on my custom app (apps/hr_management/hr_management/hooks.py)

but still not added on sidebar dropdown, am i doing wrong?
i already doing cache clear and migrate too

Did you do restart bench

Yep i restarted bench, clear cache and migrating buat still not showing on sidebar dropdown
image

But when i try to access host/apps i got this

when i click hr management, got 404
image

Try to uncommit app_home and also add the app_logo_url above app_home

app_home is the same as route in add_to_apps_screen

app_logo_url = '/assets/hr_managment/logo.png'

Like this?


Still not working, am i doing wrong? :frowning:

This is a recent addition, and is currently missing from the documentation. Hopefully the documentation will be updated as the new frappe v16 gets released.

This should work, try to build frappe and your app also

Still doesnt work, i dont know why

this is full code on apps/hr_management/hr_management/hooks.py

app_name = "hr_management"
app_title = "Hr Management"
app_publisher = "Wahyu Triono"
app_description = "HR Management"
app_email = "whytrno@gmail.com"
app_license = "mit"

# Apps
# ------------------

# required_apps = []

# Each item in the list will be shown as an app in the apps page
app_home = "/app/hr_management"
app_logo_url = "/assets/hr_management/logo.png"
add_to_apps_screen = [
	{
		"name": "hr_management",
		"logo": "/assets/hr_management/logo.png",
		"title": "Hr Management",
		"route": "/app/hr_management",
		# "has_permission": "hr_management.api.permission.has_app_permission"
	}
]

# Includes in <head>
# ------------------

# include js, css files in header of desk.html
# app_include_css = "/assets/hr_management/css/hr_management.css"
# app_include_js = "/assets/hr_management/js/hr_management.js"

# include js, css files in header of web template
# web_include_css = "/assets/hr_management/css/hr_management.css"
# web_include_js = "/assets/hr_management/js/hr_management.js"

# include custom scss in every website theme (without file extension ".scss")
# website_theme_scss = "hr_management/public/scss/website"

# include js, css files in header of web form
# webform_include_js = {"doctype": "public/js/doctype.js"}
# webform_include_css = {"doctype": "public/css/doctype.css"}

# include js in page
# page_js = {"page" : "public/js/file.js"}

# include js in doctype views
# doctype_js = {"doctype" : "public/js/doctype.js"}
# doctype_list_js = {"doctype" : "public/js/doctype_list.js"}
# doctype_tree_js = {"doctype" : "public/js/doctype_tree.js"}
# doctype_calendar_js = {"doctype" : "public/js/doctype_calendar.js"}

# Svg Icons
# ------------------
# include app icons in desk
# app_include_icons = "hr_management/public/icons.svg"

# Home Pages
# ----------

# application home page (will override Website Settings)
# home_page = "login"

# website user home page (by Role)
# role_home_page = {
# 	"Role": "home_page"
# }

# Generators
# ----------

# automatically create page for each record of this doctype
# website_generators = ["Web Page"]

# Jinja
# ----------

# add methods and filters to jinja environment
# jinja = {
# 	"methods": "hr_management.utils.jinja_methods",
# 	"filters": "hr_management.utils.jinja_filters"
# }

# Installation
# ------------

# before_install = "hr_management.install.before_install"
# after_install = "hr_management.install.after_install"

# Uninstallation
# ------------

# before_uninstall = "hr_management.uninstall.before_uninstall"
# after_uninstall = "hr_management.uninstall.after_uninstall"

# Integration Setup
# ------------------
# To set up dependencies/integrations with other apps
# Name of the app being installed is passed as an argument

# before_app_install = "hr_management.utils.before_app_install"
# after_app_install = "hr_management.utils.after_app_install"

# Integration Cleanup
# -------------------
# To clean up dependencies/integrations with other apps
# Name of the app being uninstalled is passed as an argument

# before_app_uninstall = "hr_management.utils.before_app_uninstall"
# after_app_uninstall = "hr_management.utils.after_app_uninstall"

# Desk Notifications
# ------------------
# See frappe.core.notifications.get_notification_config

# notification_config = "hr_management.notifications.get_notification_config"

# Permissions
# -----------
# Permissions evaluated in scripted ways

# permission_query_conditions = {
# 	"Event": "frappe.desk.doctype.event.event.get_permission_query_conditions",
# }
#
# has_permission = {
# 	"Event": "frappe.desk.doctype.event.event.has_permission",
# }

# DocType Class
# ---------------
# Override standard doctype classes

# override_doctype_class = {
# 	"ToDo": "custom_app.overrides.CustomToDo"
# }

# Document Events
# ---------------
# Hook on document methods and events

# doc_events = {
# 	"*": {
# 		"on_update": "method",
# 		"on_cancel": "method",
# 		"on_trash": "method"
# 	}
# }

# Scheduled Tasks
# ---------------

# scheduler_events = {
# 	"all": [
# 		"hr_management.tasks.all"
# 	],
# 	"daily": [
# 		"hr_management.tasks.daily"
# 	],
# 	"hourly": [
# 		"hr_management.tasks.hourly"
# 	],
# 	"weekly": [
# 		"hr_management.tasks.weekly"
# 	],
# 	"monthly": [
# 		"hr_management.tasks.monthly"
# 	],
# }

# Testing
# -------

# before_tests = "hr_management.install.before_tests"

# Overriding Methods
# ------------------------------
#
# override_whitelisted_methods = {
# 	"frappe.desk.doctype.event.event.get_events": "hr_management.event.get_events"
# }
#
# each overriding function accepts a `data` argument;
# generated from the base implementation of the doctype dashboard,
# along with any modifications made in other Frappe apps
# override_doctype_dashboards = {
# 	"Task": "hr_management.task.get_dashboard_data"
# }

# exempt linked doctypes from being automatically cancelled
#
# auto_cancel_exempted_doctypes = ["Auto Repeat"]

# Ignore links to specified DocTypes when deleting documents
# -----------------------------------------------------------

# ignore_links_on_delete = ["Communication", "ToDo"]

# Request Events
# ----------------
# before_request = ["hr_management.utils.before_request"]
# after_request = ["hr_management.utils.after_request"]

# Job Events
# ----------
# before_job = ["hr_management.utils.before_job"]
# after_job = ["hr_management.utils.after_job"]

# User Data Protection
# --------------------

# user_data_fields = [
# 	{
# 		"doctype": "{doctype_1}",
# 		"filter_by": "{filter_by}",
# 		"redact_fields": ["{field_1}", "{field_2}"],
# 		"partial": 1,
# 	},
# 	{
# 		"doctype": "{doctype_2}",
# 		"filter_by": "{filter_by}",
# 		"partial": 1,
# 	},
# 	{
# 		"doctype": "{doctype_3}",
# 		"strict": False,
# 	},
# 	{
# 		"doctype": "{doctype_4}"
# 	}
# ]

# Authentication and authorization
# --------------------------------

# auth_hooks = [
# 	"hr_management.auth.validate"
# ]

# Automatically update python controller files with type annotations for this app.
# export_python_type_annotations = True

# default_log_clearing_doctypes = {
# 	"Logging DocType Name": 30  # days to retain logs
# }

should i edit another file too?

This is okay, and it should work, what version of frappe are you using, as this is now at develop branch.

im on v15

try bench update

Umm sorry for bother u, but its still not working