Copy whole bundle to ./ Add Paulalbertdev\ContentEditableBundle\ContentEditableBundle::class => ['all' => true], to Bundles.php Add something like this to composer.json "autoload": { "psr-4": { "App\\": "src/", "Paulalbertdev\\": "bundles/Paulalbertdev/" } }, Run a "composer dump-autoload" Add to your services.yaml (under services) : Paulalbertdev\: resource: "../bundles/Paulalbertdev/*" exclude: "../bundles/Paulalbertdev/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}" Install bundle composer dependencies Create a package yaml config file (conten_editable.yaml) with something like this inside : content_editable: uploaded_images_directory: "/public/uploads/uploaded_images" uploaded_images_public_relative_path: "/uploads/uploaded_images" Add something like this to security.yaml (before the access_control defined for /) : - { path: ^/content-editable, roles: ROLE_ADMIN, requires_channel: "%env(FORCE_PROTOCOL)%", } Be sure to have a security controller, the corresponding view, and a valid admin user to use in DB (use the available fixture ?) : bin/console doctrine:database:create (optional) bin/console make:migration bin/console doctrine:migration:migrate bin/console doctrine:fixtures:load Login path is not normally /login Add require("../../bundles/Paulalbertdev/ContentEditableBundle/Resources/assets/js/content-editable.js"); and require("../../bundles/Paulalbertdev/ContentEditableBundle/Resources/assets/css/content-editable.scss"); to your js/css building system And add something like this somewhere in your JS code : import PaulalbertContentEditable from "../../bundles/Paulalbertdev/ContentEditableBundle/Resources/assets/js/content-editable.js"; document.addEventListener("DOMContentLoaded", function() { var contentEditable = new PaulalbertContentEditable(); $("body").on("pageLoaded", function() { // if you have some ajax page loading, you'll need this kind of trick contentEditable.refresh(); }); }); Now add this to the end of each view (or in your layout view) : {% include '@ContentEditable/content-edition.html.twig' with {'paulAlbertDevContentEditionEnabled': is_granted('IS_AUTHENTICATED_FULLY') and 'ROLE_ADMIN' in app.user.roles ? true : false } %} Inject the service and pass it to the views ['contentGrabber' => $contentGrabber] ( use Paulalbertdev\ContentEditableBundle\Service\ContentGrabber; ) Then add editable content with : {{ contentGrabber.get("unique-content-slug") | raw }}