components: use the same structure from plugins