Deprecated function: Creation of dynamic property Drupal\spaceds\StreamWrapper\SpaceStreamWrapper::$config is deprecated in Drupal\spaceds\StreamWrapper\SpaceStreamWrapper->__construct() (line 34 of modules/contrib/spaceds/src/StreamWrapper/SpaceStreamWrapper.php).
Drupal\spaceds\StreamWrapper\SpaceStreamWrapper->__construct(Object) (Line: 261)
Drupal\Component\DependencyInjection\Container->createService(Array, 'stream_wrapper.space') (Line: 179)
Drupal\Component\DependencyInjection\Container->get('stream_wrapper.space', 1) (Line: 462)
Drupal\Component\DependencyInjection\Container->Drupal\Component\DependencyInjection\{closure}(Object) (Line: 62)
Symfony\Component\DependencyInjection\ServiceLocator->doGet('stream_wrapper.space') (Line: 43)
Symfony\Component\DependencyInjection\ServiceLocator->get('stream_wrapper.space') (Line: 139)
Drupal\Core\StreamWrapper\StreamWrapperManager->getWrapper('space-assets', 'space-assets://images/space-logo-ai-event.svg') (Line: 112)
Drupal\Core\StreamWrapper\StreamWrapperManager->getViaUri('space-assets://images/space-logo-ai-event.svg') (Line: 101)
Drupal\Core\File\FileUrlGenerator->doGenerateString('space-assets://images/space-logo-ai-event.svg', 1) (Line: 59)
Drupal\Core\File\FileUrlGenerator->generateString('space-assets://images/space-logo-ai-event.svg') (Line: 290)
Drupal\Core\Template\TwigExtension->getFileUrl('space-assets://images/space-logo-ai-event.svg') (Line: 75)
__TwigTemplate_3aee87e8eeb0bb7f1799cb9b31f52c74->block_logo_block(Array, Array) (Line: 430)
Twig\Template->yieldBlock('logo_block', Array, Array) (Line: 44)
__TwigTemplate_3aee87e8eeb0bb7f1799cb9b31f52c74->doDisplay(Array, Array) (Line: 360)
Twig\Template->yield(Array) (Line: 89)
__TwigTemplate_3f44d5add3437f0a159f705bfd6204ff->block_site_header(Array, Array) (Line: 430)
Twig\Template->yieldBlock('site_header', Array, Array) (Line: 68)
__TwigTemplate_3f44d5add3437f0a159f705bfd6204ff->doDisplay(Array, Array) (Line: 360)
Twig\Template->yield(Array) (Line: 105)
__TwigTemplate_3b1b7980918ac89cd408037b7602b4c0->block_header_block(Array, Array) (Line: 430)
Twig\Template->yieldBlock('header_block', Array, Array) (Line: 47)
__TwigTemplate_3b1b7980918ac89cd408037b7602b4c0->doDisplay(Array, Array) (Line: 360)
Twig\Template->yield(Array, Array) (Line: 178)
__TwigTemplate_95c2e1f22d30dd27b118f219601fec10___669213426->doDisplay(Array, Array) (Line: 360)
Twig\Template->yield(Array) (Line: 56)
__TwigTemplate_95c2e1f22d30dd27b118f219601fec10->doDisplay(Array, Array) (Line: 360)
Twig\Template->yield(Array) (Line: 335)
Twig\Template->render(Array) (Line: 38)
Twig\TemplateWrapper->render(Array) (Line: 33)
twig_render_template('themes/custom/drupalaievent/apps/drupal/templates/layout/page.html.twig', Array) (Line: 348)
Drupal\Core\Theme\ThemeManager->render('page', Array) (Line: 491)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 248)
Drupal\Core\Render\Renderer->render(Array) (Line: 475)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 113)
__TwigTemplate_258093bd08c6f23ac9aaedaed107f026->doDisplay(Array, Array) (Line: 360)
Twig\Template->yield(Array) (Line: 335)
Twig\Template->render(Array) (Line: 38)
Twig\TemplateWrapper->render(Array) (Line: 33)
twig_render_template('themes/custom/drupalaievent/apps/drupal/templates/layout/html.html.twig', Array) (Line: 348)
Drupal\Core\Theme\ThemeManager->render('html', Array) (Line: 491)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 248)
Drupal\Core\Render\Renderer->render(Array) (Line: 158)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 638)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 153)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 111)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 186)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 76)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 53)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 28)
Drupal\Core\StackMiddleware\ContentLength->handle(Object, 1, 1) (Line: 32)
Drupal\big_pipe\StackMiddleware\ContentLength->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 50)
Drupal\ban\BanMiddleware->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 36)
Drupal\Core\StackMiddleware\AjaxPageState->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object, 1, 1) (Line: 741)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
Deprecated function: Creation of dynamic property Drupal\spaceds\StreamWrapper\SpaceStreamWrapper::$request is deprecated in Drupal\spaceds\StreamWrapper\SpaceStreamWrapper->getRequest() (line 122 of modules/contrib/spaceds/src/StreamWrapper/SpaceStreamWrapper.php).
Drupal\spaceds\StreamWrapper\SpaceStreamWrapper->getRequest() (Line: 111)
Drupal\spaceds\StreamWrapper\SpaceStreamWrapper->getExternalUrl() (Line: 103)
Drupal\Core\File\FileUrlGenerator->doGenerateString('space-assets://images/space-logo-ai-event.svg', 1) (Line: 59)
Drupal\Core\File\FileUrlGenerator->generateString('space-assets://images/space-logo-ai-event.svg') (Line: 290)
Drupal\Core\Template\TwigExtension->getFileUrl('space-assets://images/space-logo-ai-event.svg') (Line: 75)
__TwigTemplate_3aee87e8eeb0bb7f1799cb9b31f52c74->block_logo_block(Array, Array) (Line: 430)
Twig\Template->yieldBlock('logo_block', Array, Array) (Line: 44)
__TwigTemplate_3aee87e8eeb0bb7f1799cb9b31f52c74->doDisplay(Array, Array) (Line: 360)
Twig\Template->yield(Array) (Line: 89)
__TwigTemplate_3f44d5add3437f0a159f705bfd6204ff->block_site_header(Array, Array) (Line: 430)
Twig\Template->yieldBlock('site_header', Array, Array) (Line: 68)
__TwigTemplate_3f44d5add3437f0a159f705bfd6204ff->doDisplay(Array, Array) (Line: 360)
Twig\Template->yield(Array) (Line: 105)
__TwigTemplate_3b1b7980918ac89cd408037b7602b4c0->block_header_block(Array, Array) (Line: 430)
Twig\Template->yieldBlock('header_block', Array, Array) (Line: 47)
__TwigTemplate_3b1b7980918ac89cd408037b7602b4c0->doDisplay(Array, Array) (Line: 360)
Twig\Template->yield(Array, Array) (Line: 178)
__TwigTemplate_95c2e1f22d30dd27b118f219601fec10___669213426->doDisplay(Array, Array) (Line: 360)
Twig\Template->yield(Array) (Line: 56)
__TwigTemplate_95c2e1f22d30dd27b118f219601fec10->doDisplay(Array, Array) (Line: 360)
Twig\Template->yield(Array) (Line: 335)
Twig\Template->render(Array) (Line: 38)
Twig\TemplateWrapper->render(Array) (Line: 33)
twig_render_template('themes/custom/drupalaievent/apps/drupal/templates/layout/page.html.twig', Array) (Line: 348)
Drupal\Core\Theme\ThemeManager->render('page', Array) (Line: 491)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 248)
Drupal\Core\Render\Renderer->render(Array) (Line: 475)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 113)
__TwigTemplate_258093bd08c6f23ac9aaedaed107f026->doDisplay(Array, Array) (Line: 360)
Twig\Template->yield(Array) (Line: 335)
Twig\Template->render(Array) (Line: 38)
Twig\TemplateWrapper->render(Array) (Line: 33)
twig_render_template('themes/custom/drupalaievent/apps/drupal/templates/layout/html.html.twig', Array) (Line: 348)
Drupal\Core\Theme\ThemeManager->render('html', Array) (Line: 491)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 248)
Drupal\Core\Render\Renderer->render(Array) (Line: 158)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 638)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 153)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
call_user_func(Array, Object, 'kernel.view', Object) (Line: 111)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 186)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 76)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 53)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 28)
Drupal\Core\StackMiddleware\ContentLength->handle(Object, 1, 1) (Line: 32)
Drupal\big_pipe\StackMiddleware\ContentLength->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 50)
Drupal\ban\BanMiddleware->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 36)
Drupal\Core\StackMiddleware\AjaxPageState->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object, 1, 1) (Line: 741)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)

Building bridges between Drupal AI and open collaboration

November 29, 2025 • 10:45 AM - 11:30 AM 

JAMES ABRAHAMS

Director, FreelyGive Ltd

About the Speaker

Drupal developer and product builder with over a decade of experience in data-rich Drupal applications. Active in the Drupal AI space, working on ways to bring structured data, automation, and AI into open-source workflows.

Session Overview

James will be taking the stage at Oaisys to discuss AI’s role in shaping Drupal’s next chapter. His session will explore how Drupal can evolve into the most AI-driven open-source CMS yet, moving from strategy to real-world implementation.

As part of the Drupal AI Innovation track, James will lead efforts to advance Drupal’s AI capabilities. This includes developing enhanced visual tools for building Drupal AI Agents, enabling hybrid deterministic and agentic workflows, and extending Canvas AI to support not only layout generation but also theme and design migration.

At Oaisys 2025, this initiative will bring together leading Drupal AI contributors for an intensive sprint to accelerate creation and collaboration within the community. The effort, led by James Abraham and Marcus Johansson, will push the boundaries of what Drupal and AI can achieve together.