At the moment, the only existing plugins are exporters. For those, the contract offers transfering either DataCite XML, Dataverse JSON or JSON-LD from the core to them. It's up to the plugin to parse this and do something useful with it.
This is a lot of work for plugin authors and needs to be done over and over again, so also maintained over and over again. What I suggest instead: we should have proper, centralized Dataverse Data Transfer Objects (DDTOs), putting a contract not only on the API but also on the data. That way the core provides the data in a centralized, coordinated manner both sides can agree on.
Of course these DDTOs must be filled with data going out or "parsed" when coming into the core code. I was wondering if a tool like MapStruct may help with that? @Sjaak Derksen as one of the former maintainers of that codebase, WDYT?
On a related note, currently plugin authors need to be aware of rules implemented in Dataverse that may be non-obvious.
For example, the Croissant exporter I built was exposing names of variables in restricted files before I pushed a fix. Can whatever framework we offer plugin authors help manage complexity like this?
Can the plugin author pass a "public data only, please" flag, for example, to avoid leaking restricted data?
If we shape the DTOs and API contracts that way, it sure can!
Last updated: Apr 03 2026 at 06:08 UTC