diff --git a/bamboo_twig.info.yml b/bamboo_twig.info.yml
index 8d4cc4e..718bd60 100644
--- a/bamboo_twig.info.yml
+++ b/bamboo_twig.info.yml
@@ -2,4 +2,4 @@ name: Bamboo Twig
 description: 'Several Twig extensions with some useful functions and filters that can improve development experience.'
 package: Bamboo Twig
 type: module
-core: 8.x
+core_version_requirement: ^8.8 || ^9
diff --git a/bamboo_twig_config/bamboo_twig_config.info.yml b/bamboo_twig_config/bamboo_twig_config.info.yml
index 369463d..0ad31b0 100644
--- a/bamboo_twig_config/bamboo_twig_config.info.yml
+++ b/bamboo_twig_config/bamboo_twig_config.info.yml
@@ -2,7 +2,7 @@ name: Bamboo Twig - Config
 description: 'Several "Config" Twig extensions.'
 package: Bamboo Twig
 type: module
-core: 8.x
+core_version_requirement: ^8.8 || ^9
 
 dependencies:
  - bamboo_twig:bamboo_twig
diff --git a/bamboo_twig_extensions/bamboo_twig_extensions.info.yml b/bamboo_twig_extensions/bamboo_twig_extensions.info.yml
index ba07310..c86030b 100644
--- a/bamboo_twig_extensions/bamboo_twig_extensions.info.yml
+++ b/bamboo_twig_extensions/bamboo_twig_extensions.info.yml
@@ -2,7 +2,7 @@ name: Bamboo Twig - Extensions
 description: 'Twig extensions (Text, Date & Array) from http://twig-extensions.readthedocs.io/en/latest/index.html.'
 package: Bamboo Twig
 type: module
-core: 8.x
+core_version_requirement: ^8.8 || ^9
 
 dependencies:
  - bamboo_twig:bamboo_twig
diff --git a/bamboo_twig_file/bamboo_twig_file.info.yml b/bamboo_twig_file/bamboo_twig_file.info.yml
index 9c1207c..e6389c1 100644
--- a/bamboo_twig_file/bamboo_twig_file.info.yml
+++ b/bamboo_twig_file/bamboo_twig_file.info.yml
@@ -2,7 +2,7 @@ name: Bamboo Twig - File
 description: 'Several "File" Twig extensions.'
 package: Bamboo Twig
 type: module
-core: 8.x
+core_version_requirement: ^8.8 || ^9
 
 dependencies:
  - bamboo_twig:bamboo_twig
diff --git a/bamboo_twig_i18n/bamboo_twig_i18n.info.yml b/bamboo_twig_i18n/bamboo_twig_i18n.info.yml
index 17987f0..bde3db1 100644
--- a/bamboo_twig_i18n/bamboo_twig_i18n.info.yml
+++ b/bamboo_twig_i18n/bamboo_twig_i18n.info.yml
@@ -2,7 +2,7 @@ name: Bamboo Twig - Internationalization
 description: 'Several "i18n" Twig extensions.'
 package: Bamboo Twig
 type: module
-core: 8.x
+core_version_requirement: ^8.8 || ^9
 
 dependencies:
  - bamboo_twig:bamboo_twig
diff --git a/bamboo_twig_loader/bamboo_twig_loader.info.yml b/bamboo_twig_loader/bamboo_twig_loader.info.yml
index edc3cfd..0771887 100644
--- a/bamboo_twig_loader/bamboo_twig_loader.info.yml
+++ b/bamboo_twig_loader/bamboo_twig_loader.info.yml
@@ -2,7 +2,7 @@ name: Bamboo Twig - Loaders
 description: 'Several "Loaders & Render" Twig extensions.'
 package: Bamboo Twig
 type: module
-core: 8.x
+core_version_requirement: ^8.8 || ^9
 
 dependencies:
  - bamboo_twig:bamboo_twig
diff --git a/bamboo_twig_loader/src/TwigExtension/Render.php b/bamboo_twig_loader/src/TwigExtension/Render.php
index c1627df..66f1d86 100644
--- a/bamboo_twig_loader/src/TwigExtension/Render.php
+++ b/bamboo_twig_loader/src/TwigExtension/Render.php
@@ -175,13 +175,16 @@ public function renderImageStyle($path, $style, $preprocess = FALSE) {
     // When user want to preprocess the derivated instead of waiting first
     // HTTP call.
     if ($preprocess) {
+      /** @var \Drupal\Core\StreamWrapper\StreamWrapperManagerInterface $stream_wrapper_manager */
+      $stream_wrapper_manager = $this->getStreamWrapperManager();
+
       $image_style_uri = $image_style->buildUri($path);
 
       // Assert the image style doesn't already exist.
       $image_style_path = $fso->realpath($image_style_uri);
       if (!is_file($image_style_path)) {
         // createDerivative need an URI so transform none uri.
-        if (file_valid_uri($path)) {
+        if ($stream_wrapper_manager->isValidUri($path)) {
           $image_uri = $path;
         }
         else {
diff --git a/bamboo_twig_path/bamboo_twig_path.info.yml b/bamboo_twig_path/bamboo_twig_path.info.yml
index 484df47..7316d17 100644
--- a/bamboo_twig_path/bamboo_twig_path.info.yml
+++ b/bamboo_twig_path/bamboo_twig_path.info.yml
@@ -2,7 +2,7 @@ name: Bamboo Twig - Path & Url
 description: 'Several "Path & Url" Twig extensions.'
 package: Bamboo Twig
 type: module
-core: 8.x
+core_version_requirement: ^8.8 || ^9
 
 dependencies:
  - bamboo_twig:bamboo_twig
diff --git a/bamboo_twig_security/bamboo_twig_security.info.yml b/bamboo_twig_security/bamboo_twig_security.info.yml
index 26c88b9..f1fcc87 100644
--- a/bamboo_twig_security/bamboo_twig_security.info.yml
+++ b/bamboo_twig_security/bamboo_twig_security.info.yml
@@ -2,7 +2,7 @@ name: Bamboo Twig - Security
 description: 'Several "Security" Twig extensions.'
 package: Bamboo Twig
 type: module
-core: 8.x
+core_version_requirement: ^8.8 || ^9
 
 dependencies:
  - bamboo_twig:bamboo_twig
diff --git a/bamboo_twig_token/bamboo_twig_token.info.yml b/bamboo_twig_token/bamboo_twig_token.info.yml
index da2dd57..8ae2127 100644
--- a/bamboo_twig_token/bamboo_twig_token.info.yml
+++ b/bamboo_twig_token/bamboo_twig_token.info.yml
@@ -2,7 +2,7 @@ name: Bamboo Twig - Token
 description: 'Several "Token" Twig extensions.'
 package: Bamboo Twig
 type: module
-core: 8.x
+core_version_requirement: ^8.8 || ^9
 
 dependencies:
  - bamboo_twig:bamboo_twig
diff --git a/composer.json b/composer.json
index ce39b37..f3deea5 100644
--- a/composer.json
+++ b/composer.json
@@ -24,6 +24,6 @@
   "require-dev": {
       "squizlabs/php_codesniffer": "^3.0.1",
       "drupal/coder": "^8.3.1",
-      "twig/extensions": "^1.4.1"
+      "twig/extensions": "^1.5.4"
   }
 }
diff --git a/composer.lock b/composer.lock
index 81f8be2..e9cff11 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "6cbafb9221e85e8a4e7aa91a86c47fd0",
+    "content-hash": "c8c5f758c8b1369cddee600dcf41c70b",
     "packages": [],
     "packages-dev": [
         {
@@ -12,7 +12,7 @@
             "version": "8.3.2",
             "source": {
                 "type": "git",
-                "url": "https://git.drupal.org/project/coder.git",
+                "url": "https://git.drupalcode.org/project/coder.git",
                 "reference": "44c80c21074df43572652f35bec4f184f9eae5e7"
             },
             "require": {
diff --git a/drupalci.yml b/drupalci.yml
new file mode 100644
index 0000000..d20f473
--- /dev/null
+++ b/drupalci.yml
@@ -0,0 +1,19 @@
+build:
+  assessment:
+    validate_codebase:
+      phplint:
+      container_composer:
+      csslint:
+      eslint:
+      phpcs:
+    testing:
+      run_tests.standard:
+        types: 'Simpletest,PHPUnit-Unit,PHPUnit-Kernel,PHPUnit-Functional'
+        # Test for Drupal 9 compatibility
+        suppress-deprecations: false
+      run_tests.js:
+        concurrency: 1
+        types: 'PHPUnit-FunctionalJavascript'
+        # Test for Drupal 9 compatibility
+        suppress-deprecations: false
+      nightwatchjs:
diff --git a/src/TwigExtension/TwigExtensionBase.php b/src/TwigExtension/TwigExtensionBase.php
index fd9312d..ec49922 100644
--- a/src/TwigExtension/TwigExtensionBase.php
+++ b/src/TwigExtension/TwigExtensionBase.php
@@ -201,7 +201,7 @@ protected function getExtensionGuesser() {
   /**
    * Provides a service to handle various date related functionality.
    *
-   * @var \Drupal\Core\Datetime\DateFormatterInterface
+   * @return \Drupal\Core\Datetime\DateFormatterInterface
    */
   protected function getDateFormatter() {
     return $this->container->get('date.formatter');
@@ -210,7 +210,7 @@ protected function getDateFormatter() {
   /**
    * Returns the language manager service.
    *
-   * @var \Drupal\Core\Language\LanguageManagerInterface
+   * @return \Drupal\Core\Language\LanguageManagerInterface
    */
   protected function getLanguageManager() {
     return $this->container->get('language_manager');
@@ -219,11 +219,21 @@ protected function getLanguageManager() {
   /**
    * Provides helpers to operate on files and stream wrappers.
    *
-   * @var Drupal\Core\File\FileSystemInterface
+   * @return \Drupal\Core\File\FileSystemInterface
    *   Return the File System object.
    */
   protected function getFileSystemObject() {
     return $this->container->get('file_system');
   }
 
+  /**
+   * Provides a StreamWrapper manager.
+   *
+   * @return \Drupal\Core\StreamWrapper\StreamWrapperManagerInterface
+   *   The stream wrapper manager service.
+   */
+  protected function getStreamWrapperManager() {
+    return $this->container->get('stream_wrapper_manager');
+  }
+
 }
diff --git a/tests/modules/bamboo_twig_test/bamboo_twig_test.info.yml b/tests/modules/bamboo_twig_test/bamboo_twig_test.info.yml
index f6b95f1..6d7e3a5 100644
--- a/tests/modules/bamboo_twig_test/bamboo_twig_test.info.yml
+++ b/tests/modules/bamboo_twig_test/bamboo_twig_test.info.yml
@@ -2,7 +2,7 @@ name: Bamboo Twig test
 description: Support module for Bamboo Twig testing.
 package: Testing
 type: module
-core: 8.x
+core_version_requirement: ^8.8 || ^9
 
 dependencies:
   - drupal:bamboo_twig
diff --git a/tests/src/Functional/BambooTwigLoaderTest.php b/tests/src/Functional/BambooTwigLoaderTest.php
index 2c034e8..0416927 100644
--- a/tests/src/Functional/BambooTwigLoaderTest.php
+++ b/tests/src/Functional/BambooTwigLoaderTest.php
@@ -2,7 +2,7 @@
 
 namespace Drupal\Tests\bamboo_twig\Functional;
 
-use Drupal\Tests\taxonomy\Functional\TaxonomyTestTrait;
+use Drupal\Tests\taxonomy\Traits\TaxonomyTestTrait;
 use Drupal\Core\StreamWrapper\PublicStream;
 
 /**
@@ -75,7 +75,7 @@ public function testCurrentUser() {
     $this->drupalGet('/bamboo-twig-loader');
 
     $this->assertElementPresent('.test-loaders div.loader-current-user');
-    $this->assertElementContains('.test-loaders div.loader-current-user', $this->admin_user->getUsername());
+    $this->assertElementContains('.test-loaders div.loader-current-user', $this->admin_user->getAccountName());
   }
 
   /**
@@ -267,14 +267,19 @@ public function testImage() {
    *   File object.
    */
   protected function createFile() {
-    /** @var \Drupal\Component\PhpStorage\FileStorage $fileStorage */
-    $fileStorage = $this->container->get('entity_type.manager')->getStorage('file');
-    file_unmanaged_copy(drupal_get_path('module', 'bamboo_twig_test') . '/files/antistatique.jpg', PublicStream::basePath());
-    $file = $fileStorage->create([
+    /** @var \Drupal\Component\PhpStorage\FileStorage $file_storage */
+    $file_storage = $this->container->get('entity_type.manager')->getStorage('file');
+    /** @var \Drupal\Core\File\FileSystemInterface $file_system */
+    $file_system = $this->container->get('file_system');
+
+    $file_system->copy(drupal_get_path('module', 'bamboo_twig_test') . '/files/antistatique.jpg', PublicStream::basePath());
+
+    $file = $file_storage->create([
       'uri' => 'public://antistatique.jpg',
       'status' => FILE_STATUS_PERMANENT,
     ]);
     $file->save();
+
     return $file;
   }
 
diff --git a/tests/src/Functional/BambooTwigRenderTest.php b/tests/src/Functional/BambooTwigRenderTest.php
index 50dacbb..dfba841 100644
--- a/tests/src/Functional/BambooTwigRenderTest.php
+++ b/tests/src/Functional/BambooTwigRenderTest.php
@@ -2,7 +2,7 @@
 
 namespace Drupal\Tests\bamboo_twig\Functional;
 
-use Drupal\Tests\taxonomy\Functional\TaxonomyTestTrait;
+use Drupal\Tests\taxonomy\Traits\TaxonomyTestTrait;
 use Drupal\Core\StreamWrapper\PublicStream;
 
 /**
@@ -342,14 +342,19 @@ public function testViews() {
    *   File object.
    */
   protected function createFile() {
-    /** @var \Drupal\Component\PhpStorage\FileStorage $fileStorage */
-    $fileStorage = $this->container->get('entity_type.manager')->getStorage('file');
-    file_unmanaged_copy(drupal_get_path('module', 'bamboo_twig_test') . '/files/antistatique.jpg', PublicStream::basePath());
-    $file = $fileStorage->create([
+    /** @var \Drupal\Component\PhpStorage\FileStorage $file_storage */
+    $file_storage = $this->container->get('entity_type.manager')->getStorage('file');
+    /** @var \Drupal\Core\File\FileSystemInterface $file_system */
+    $file_system = $this->container->get('file_system');
+
+    $file_system->copy(drupal_get_path('module', 'bamboo_twig_test') . '/files/antistatique.jpg', PublicStream::basePath());
+
+    $file = $file_storage->create([
       'uri' => 'public://antistatique.jpg',
       'status' => FILE_STATUS_PERMANENT,
     ]);
     $file->save();
+
     return $file;
   }
 
diff --git a/tests/src/Functional/BambooTwigTestBase.php b/tests/src/Functional/BambooTwigTestBase.php
index 34a84ab..e87ca59 100644
--- a/tests/src/Functional/BambooTwigTestBase.php
+++ b/tests/src/Functional/BambooTwigTestBase.php
@@ -88,8 +88,11 @@ protected function setUpArticles() {
       FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED
     );
 
+    /** @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface $entity_display_repository */
+    $entity_display_repository = $this->container->get('entity_display.repository');
+
     // Show on default display and teaser.
-    entity_get_display('node', 'article', 'default')
+    $entity_display_repository->getViewDisplay('node', 'article', 'default')
       ->setComponent('field_tags', [
         'type' => 'entity_reference_label',
       ])
diff --git a/tests/src/Kernel/BambooTwigSecurityTest.php b/tests/src/Kernel/BambooTwigSecurityTest.php
index 423f4a8..8ee89ac 100644
--- a/tests/src/Kernel/BambooTwigSecurityTest.php
+++ b/tests/src/Kernel/BambooTwigSecurityTest.php
@@ -103,15 +103,17 @@ public function testHasNotRoles() {
    * @covers Drupal\bamboo_twig_security\TwigExtension\Security::hasPermissions
    */
   public function testHasPermissionsInvalidConjunction() {
-    $this->setExpectedException(\InvalidArgumentException::class, 'Invalid conjunction type "XOR".');
-    $result = $this->securityExtension->hasPermissions(['bypass node access'], 'XOR', 1);
+    $this->expectException(\InvalidArgumentException::class);
+    $this->expectExceptionMessage('Invalid conjunction type "XOR".');
+    $this->securityExtension->hasPermissions(['bypass node access'], 'XOR', 1);
   }
 
   /**
    * @covers Drupal\bamboo_twig_security\TwigExtension\Security::hasRoles
    */
   public function testHasRolesInvalidConjunction() {
-    $this->setExpectedException(\InvalidArgumentException::class, 'Invalid conjunction type "XOR".');
-    $result = $this->securityExtension->hasRoles(['administrator'], 'XOR', 1);
+    $this->expectException(\InvalidArgumentException::class);
+    $this->expectExceptionMessage('Invalid conjunction type "XOR".');
+    $this->securityExtension->hasRoles(['administrator'], 'XOR', 1);
   }
 }
