+namespace simgrid::instr {
+/* User-variables related functions*/
+/* for host variables */
+XBT_PUBLIC void declare_host_variable(const std::string& variable, const std::string& color = "");
+XBT_PUBLIC void set_host_variable(const std::string& host, const std::string& variable, double value,
+ double time = simgrid_get_clock());
+XBT_PUBLIC void add_host_variable(const std::string& host, const std::string& variable, double value,
+ double time = simgrid_get_clock());
+XBT_PUBLIC void sub_host_variable(const std::string& host, const std::string& variable, double value,
+ double time = simgrid_get_clock());
+XBT_PUBLIC const std::set<std::string, std::less<>>& get_host_variables();
+
+/* for link variables */
+XBT_PUBLIC void declare_link_variable(const std::string& variable, const std::string& color = "");
+XBT_PUBLIC void set_link_variable(const std::string& link, const std::string& variable, double value,
+ double time = simgrid_get_clock());
+XBT_PUBLIC void add_link_variable(const std::string& link, const std::string& variable, double value,
+ double time = simgrid_get_clock());
+XBT_PUBLIC void sub_link_variable(const std::string& link, const std::string& variable, double value,
+ double time = simgrid_get_clock());
+/* for link variables, but with src and dst used for get_route */
+XBT_PUBLIC void set_link_variable(const std::string& src, const std::string& dst, const std::string& variable,
+ double value, double time = simgrid_get_clock());
+XBT_PUBLIC void add_link_variable(const std::string& src, const std::string& dst, const std::string& variable,
+ double value, double time = simgrid_get_clock());
+XBT_PUBLIC void sub_link_variable(const std::string& src, const std::string& dst, const std::string& variable,
+ double value, double time = simgrid_get_clock());
+XBT_PUBLIC const std::set<std::string, std::less<>>& get_link_variables();
+
+/* for VM variables */
+XBT_PUBLIC void declare_vm_variable(const std::string& variable, const std::string& color = "");
+XBT_PUBLIC void set_vm_variable(const std::string& vm, const std::string& variable, double value,
+ double time = simgrid_get_clock());
+XBT_PUBLIC void add_vm_variable(const std::string& vm, const std::string& variable, double value,
+ double time = simgrid_get_clock());
+XBT_PUBLIC void sub_vm_variable(const std::string& vm, const std::string& variable, double value,
+ double time = simgrid_get_clock());
+XBT_PUBLIC const std::set<std::string, std::less<>>& get_vm_variables();