Your code will certainly use get_option()
to retrieve the values for your options. get_option()
accepts a second argument that allows you to specify a default. Use that instead of inserted values into the database unnecessarily.
get_option( $option, $default );
If you are concerned about third party code, there is there is the option_{$option}
filter that you should be able to use to preserve your default even then:
116 /**
117 * Filter the value of an existing option.
118 *
119 * The dynamic portion of the hook name, `$option`, refers to the option name.
120 *
121 * @since 1.5.0 As 'option_' . $setting
122 * @since 3.0.0
123 *
124 * @param mixed $value Value of the option. If stored serialized, it will be
125 * unserialized prior to being returned.
126 */
127 return apply_filters( 'option_' . $option, maybe_unserialize( $value ) );