An opportunity for extension developers to dive deep into the architecture of their extension. Ideally this session could feature extensions across the entire OpenRefine stack and would serve to highlight areas for improvement in the codebase and/or documentation.
Format
Presentation and group discussion
If you’re interested
Please feel free to comment below with anything in particular you’d like to hear about or a link to your extension if you’d like to present.
extensions typically include client-side and server-side components
extensions are initialized through a server-side JavaScript file (controller.js)
controller.js has access to the server-side Java code
initialization logic can therefore be written in Java and called from JavaScript
Implementation considerations for extensions
Some issues that extension developers have had to address:
checking the Java version to assess compatibility and log additional details when problems occur
creating a namespace for extension-specific preferences
There has also been discussion in the past about moving toward a declarative configuration format to specify the components that an extension registers.
Overlay model
Question raised: What is the Overlay model and why is it useful?
The overlay model presents data to your extension in the way a user has configured it. It's intended to extend project-related metadata. In addition to the RDF-transform extension, the wikibase extension makes use of the overlay model.
Dependency management
Currently, OpenRefine's version of dependencies takes precedent over dependencies brought in by extensions (i.e., if an extension tries to bring their own version of Apache Jena, the extension will still pull in the version declared by OpenRefine core). There are both good and bad tradeoffs to this, notably the size of extension and isolation between the extension and OpenRefine core. There's also the question of security vulnerabilities: it would be nice if we could resolve a vulnerability in one place by upgrading a package in OpenRefine and having that trickle down into extensions, but that comes at the expense of isolation.
Extension upgrade issues encountered in the past
Several OpenRefine updates have required extensions to adapt:
OpenRefine 3.0: migration from org.json to Jackson
OpenRefine 3.3: introduction of CSRF tokens, affecting commands using POST