> It seems logical to me that a field widget could be a form element, that also happens to map directly to some underlying storage Widgets are form elements; they just have additional capabilities a form element doesn't have. [The documentation about the field widget API][1] describe the widgets using the following words: > Widgets are [Form API][2] elements with additional processing capabilities. Widget hooks are typically called by the Field Attach API during the creation of the field form structure with [field_attach_form()][3]. Every widget is implemented using at least one form element, but a module implementing a widgets needs to implement some hooks that are not required from a form element: - [hook_field_widget_info()][4] - [hook_field_widget_form()][5] - [hook_field_widget_error()][6] While the first can be considered the equivalent of [hook_element_info()][7], the other two are additional hooks necessary for the widgets to work. It's thanks to the information passed to `hook_field_widget_form()` that a widget is rendered. Drupal could have implemented widgets expanding the properties returned from `hook_element_info()`, but the truth is that a widget and a form element are two different things that are used in different cases. Consider a widget a more specialized type of form element. [1]: http://api.drupal.org/api/drupal/modules!field!field.api.php/group/field_widget/7 [2]: http://api.drupal.org/api/drupal/developer--topics--forms_api_reference.html [3]: http://api.drupal.org/api/drupal/modules!field!field.attach.inc/function/field_attach_form/7 [4]: http://api.drupal.org/api/drupal/modules!field!field.api.php/function/hook_field_widget_info/7 [5]: http://api.drupal.org/api/drupal/modules!field!field.api.php/function/hook_field_widget_form/7 [6]: http://api.drupal.org/api/drupal/modules!field!field.api.php/function/hook_field_widget_error/7 [7]: http://api.drupal.org/api/drupal/modules!system!system.api.php/function/hook_element_info/7