sig
  type 'a callback = ('-> unit) -> unit
  val register_value :
    package:Server.Package.package ->
    name:string ->
    descr:Markdown.text ->
    output:'Server.Request.output ->
    get:(unit -> 'a) ->
    ?add_hook:'Server.States.callback -> unit -> Server.Request.signal
  val register_state :
    package:Server.Package.package ->
    name:string ->
    descr:Markdown.text ->
    data:'Server.Data.data ->
    get:(unit -> 'a) ->
    set:('-> unit) ->
    ?add_hook:'Server.States.callback -> unit -> Server.Request.signal
  type 'a model
  val model : unit -> 'Server.States.model
  val column :
    name:string ->
    descr:Markdown.text ->
    data:'Server.Request.output ->
    get:('-> 'b) -> ?default:'-> 'Server.States.model -> unit
  val option :
    name:string ->
    descr:Markdown.text ->
    data:'Server.Request.output ->
    get:('-> 'b option) -> 'Server.States.model -> unit
  type 'a array
  val reload : 'Server.States.array -> unit
  val update : 'Server.States.array -> '-> unit
  val remove : 'Server.States.array -> '-> unit
  val signal : 'Server.States.array -> Server.Request.signal
  val register_array :
    package:Server.Package.package ->
    name:string ->
    descr:Markdown.text ->
    key:('-> string) ->
    ?keyName:string ->
    ?keyType:Server.Package.jtype ->
    iter:'Server.States.callback ->
    ?add_update_hook:'Server.States.callback ->
    ?add_remove_hook:'Server.States.callback ->
    ?add_reload_hook:unit Server.States.callback ->
    'Server.States.model -> 'Server.States.array
end