sig
  type t
  val create :
    ?config_info:Ocsigen_extensions.config_info ->
    ?id:[ `Attach of Ocsigen_server.Site.t * Ocsigen_lib.Url.path
        | `Host of string * int option ] ->
    ?charset:Ocsigen_charset_mime.charset ->
    ?auto_load_extensions:bool -> unit -> Ocsigen_server.Site.t
  module Config :
    sig
      type 'a key
      val key : ?preprocess:('-> 'a) -> unit -> 'a key
      val find : t -> 'a key -> 'a option
      val set : t -> 'a key -> '-> unit
      val unset : t -> 'a key -> unit
      type accessor = { accessor : 'a. 'a key -> 'a option; }
    end
  type extension
  val create_extension :
    (Ocsigen_server.Site.Config.accessor -> Ocsigen_extensions.extension) ->
    Ocsigen_server.Site.extension
  val register :
    Ocsigen_server.Site.t -> Ocsigen_server.Site.extension -> unit
  val create_extension_intrusive :
    (Ocsigen_extensions.virtual_hosts ->
     Ocsigen_extensions.config_info ->
     Ocsigen_lib.Url.path ->
     Ocsigen_server.Site.Config.accessor -> Ocsigen_extensions.extension) ->
    Ocsigen_server.Site.extension
end