Can I declare my configuration within the HTML?

It is recommended that you declare your configuration options for Select2 when initializing Select2. You can also define your configuration options by using the HTML5 data-* attributes, which will override any options set when initializing Select2 and any defaults.

How should camelCase options be written?

This means that if you declare your <select> tag as...

<select data-tags="true" data-placeholder="Select an option" data-allow-clear="true"></select>

Will be interpreted the same as initializing Select2 as...

$("select").select2({
  tags: "true",
  placeholder: "Select an option",
  allowClear: true
});

Are options with nested configurations supported?

You can also define nested configurations, which are typically needed for options such as AJAX. Each level of nesting should be separated by two dashes (--) instead of one. Due to a jQuery bug, nested options using data-* attributes do not work in jQuery 1.x.

<select data-ajax--url="http://example.org/api/test" data-ajax--cache="true"></select>

Which will be interpreted the same as initializing Select2 with...

$("select").select2({
  ajax: {
    url: "http://example.org/api/test",
    cache: "true"
  }
});

The value of the option is subject to jQuery's parsing rules for HTML5 data attributes.