# Changes for extensions in OpenRefine 3.9.0

**URL:** <https://forum.openrefine.org/t/changes-for-extensions-in-openrefine-3-9-0/2087>\
**Category:** Community announcements\
**Created:** [February 17, 2025, 3:38pm UTC](https://forum.openrefine.org/t/changes-for-extensions-in-openrefine-3-9-0/2087 "2025-02-17T15:38:42Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![antonin\_d](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.openrefine.org/antonin_d/32/32_2.png) [@antonin\_d](https://forum.openrefine.org/u/antonin_d)\
**Post date:** [February 17, 2025, 3:38pm UTC](https://forum.openrefine.org/t/changes-for-extensions-in-openrefine-3-9-0/2087/1 "2025-02-17T15:38:42Z")

</div>

As you might have seen [in the release notes](https://github.com/OpenRefine/OpenRefine/releases/tag/3.9-beta1), OpenRefine 3.9 contains quite a few changes related to extension compatibility. None of those should be breaking changes as far as I know, meaning that extensions built for 3.8 should continue to work for 3.9, but still, there are a few things worth knowing about this update.

Pinging @Sunil_Natraj @AtesComp @Sebastian as extension developers active on the forum.

### In short

Just imitate [this PR on the FilesExtension](https://github.com/OpenRefine/FilesExtension/pull/21) to upgrade to 3.9

### Long version

The main change you need to be aware of is that 3.9 splits the Java classes that make up OpenRefine in more granular Maven artifacts. Many classes that used to be contained in the `org.openrefine:main` have been moved to two new artifacts:

- `org.openrefine:core`, which contains the classes that define what OpenRefine's model is (what is a project, changes, operations, expression languages)
- `org.openrefine:grel`, which contains the implementation of GREL

The `org.openrefine:main` contains the implementation of those interfaces (each operation, each command, and so on) and depends on both `core` and `grel`. The motivation behind this modularization is to separate the interfaces from their implementation and avoiding unintentional couplings between various components that used to live in one big artifact (`main`). Those changes were done while keeping all package and class names untouched.

If you use Maven to build your extension, you probably added a dependency to `org.openrefine:main`, so that your extension is able to refer to OpenRefine classes. As you upgrade to 3.9, we encourage you to change this dependency to `org.openrefine:core` instead (and optionally `org.openrefine:grel` if you define new GREL functions or controls). This will pull in less classes in your class path, and will help make sure that you are only relying on classes that are meant to stay stable.

Furthermore, if you also added a dependency to the `test-jar` of `org.openrefine:main` (for instance to be able to reuse some testing utilities like `RefineTest`), then you will need to change that to be `org.openrefine:core` as the reusable test utilities are there.

---

<div class="post-metadata">

**Author:** ![Sunil\_Natraj](https://dub1.discourse-cdn.com/flex017/user_avatar/forum.openrefine.org/sunil_natraj/32/1294_2.png) [@Sunil\_Natraj](https://forum.openrefine.org/u/Sunil_Natraj)\
**Post date:** [February 18, 2025, 9:42am UTC](https://forum.openrefine.org/t/changes-for-extensions-in-openrefine-3-9-0/2087/2 "2025-02-18T09:42:53Z")

</div>

Thanks @antonin_d  
Tested Files & LLM extension, working fine.
