Properly handling menu items in a custom module In my module I need to install custom menu items (add to existing main-menu) on the front-end side. So basically it's a simple one-time operation, yet it rises some questions about the proper way to deal with programatic menu items in general.


hook_install + menu_link_save sounds good for installing the items, hook_uninstall + menu_link_delete - for uninstalling, but how am I supposed to find out the $mlid parameter of the menu link - required by the menu_link_delete function?
Would hook_enable and hook_disable be more suitable?
How do I protect my module's menu items from deleting on the admin UI side?
You can programatically add/remove menu items on install/uninstall and/or enable/disable events. But that's not how we do usually. 

Implement hook_menu and you will be fine to go with almost any menu item implementation. 

A few points. 
Set menu router item's 'type' =&gt; MENU_NORMAL_ITEM and it will now be in a menu. Unless you set 'menu_name', it will be placed in the "navigation" menu. 
See the huge (and very helpful) text on the page. Also, have a look at examples module for high-quality hook_menu examples. 

Good luck!