--- /dev/null
+#ifndef ADDON_H
+#define ADDON_H
+
+#include "workshop.h"
+#include "workshop_types.h"
+#define ADDON_MOUNTED_MAX 128
+#define ADDON_FOLDERNAME_MAX 64
+
+typedef struct addon_reg addon_reg;
+struct {
+ struct addon_reg{
+ PublishedFileId_t workshop_id;
+
+ enum workshop_file_type type;
+ u8 metadata[512]; /* vg_msg buffer */
+ u32 metadata_len;
+
+ char foldername[ ADDON_FOLDERNAME_MAX ];
+ u32 foldername_hash;
+ void *userdata;
+
+ enum addon_state{
+ k_addon_state_none,
+ k_addon_state_indexed,
+ k_addon_state_indexed_absent /* gone but not forgotten */
+ }
+ state;
+ }
+ *registry;
+ u32 registry_count;
+
+ /* deffered: updates in main thread */
+ u32 registry_type_counts[k_workshop_file_type_max];
+}
+static addon_system;
+
+static void addon_system_init( void );
+static u32 addon_count( enum workshop_file_type type );
+static addon_reg *get_addon_from_index(enum workshop_file_type type, u32 index);
+static u32 get_index_from_addon( enum workshop_file_type type, addon_reg *a );
+
+/* scanning routines */
+VG_STATIC void addon_mount_local_folder( enum workshop_file_type type,
+ const char *base_folder,
+ const char *content_ext );
+VG_STATIC void addon_mount_workshop_items(void);
+VG_STATIC void async_addon_reg_update( void *data, u32 size );
+
+#endif /* ADDON_H */