feature: add plugin support