{"id":15014497,"url":"https://github.com/bitbagcommerce/syliusvuestorefrontplugin","last_synced_at":"2025-05-09T03:38:05.634Z","repository":{"id":53010708,"uuid":"171306105","full_name":"BitBagCommerce/SyliusVueStorefrontPlugin","owner":"BitBagCommerce","description":"Sylius plugin integrating Sylius with Vue Storefront","archived":false,"fork":false,"pushed_at":"2023-07-10T12:32:44.000Z","size":1777,"stargazers_count":45,"open_issues_count":0,"forks_count":23,"subscribers_count":17,"default_branch":"master","last_synced_at":"2025-04-26T20:05:31.392Z","etag":null,"topics":["action-domain-responder","phpspec","phpunit","sylius-plugin","symfony","vue-storefront"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BitBagCommerce.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2019-02-18T15:13:35.000Z","updated_at":"2023-05-21T18:57:35.000Z","dependencies_parsed_at":"2024-01-13T02:03:33.728Z","dependency_job_id":null,"html_url":"https://github.com/BitBagCommerce/SyliusVueStorefrontPlugin","commit_stats":{"total_commits":333,"total_committers":20,"mean_commits":16.65,"dds":0.5705705705705706,"last_synced_commit":"fd4920ac5f9e71695947a6da1471bf2c4e41e542"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BitBagCommerce%2FSyliusVueStorefrontPlugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BitBagCommerce%2FSyliusVueStorefrontPlugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BitBagCommerce%2FSyliusVueStorefrontPlugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BitBagCommerce%2FSyliusVueStorefrontPlugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BitBagCommerce","download_url":"https://codeload.github.com/BitBagCommerce/SyliusVueStorefrontPlugin/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253185615,"owners_count":21867894,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["action-domain-responder","phpspec","phpunit","sylius-plugin","symfony","vue-storefront"],"created_at":"2024-09-24T19:45:42.053Z","updated_at":"2025-05-09T03:38:05.609Z","avatar_url":"https://github.com/BitBagCommerce.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003e :warning: **BEWARE!**\n\u003e The current solution is deprecated as it was created for Vue Storefront v1. For Vue Storefront 2 integration check out our GraphQL-based integration, which could be found here:\n\u003e \n\u003e https://github.com/BitBagCommerce/SyliusGraphQLPlugin\n\u003e \n\u003e https://github.com/vuestorefront-community/sylius\n\u003e \n\u003e If you want to know more about the new integration, read our blog -\u003e https://bitbag.io/blog/introduction-to-vue-storefront-2sylius-integration-technical-aspects\n\n# [![](https://bitbag.io/wp-content/uploads/2020/10/vsf.png)](https://bitbag.io/contact-us/?utm_source=github\u0026utm_medium=referral\u0026utm_campaign=plugins_vsf)\n\n# BitBag SyliusVueStorefrontPlugin\n\n[![](https://img.shields.io/packagist/l/bitbag/vuestorefront-plugin.svg) ](https://packagist.org/packages/bitbag/vuestorefront-plugin \"License\") [ ![](https://img.shields.io/packagist/v/bitbag/vuestorefront-plugin.svg) ](https://packagist.org/packages/bitbag/vuestorefront-plugin \"Version\") [ ![](https://img.shields.io/scrutinizer/g/BitBagCommerce/SyliusVueStorefrontPlugin.svg) ](https://scrutinizer-ci.com/g/BitBagCommerce/SyliusVueStorefrontPlugin/ \"Scrutinizer\") [![](https://poser.pugx.org/bitbag/vuestorefront-plugin/downloads)](https://packagist.org/packages/bitbag/vuestorefront-plugin \"Total Downloads\") [![Slack](https://img.shields.io/badge/community%20chat-slack-FF1493.svg)](http://sylius-devs.slack.com) [![Support](https://img.shields.io/badge/support-contact%20author-blue])](https://bitbag.io/contact-us/?utm_source=github\u0026utm_medium=referral\u0026utm_campaign=plugins_vsf)\n\nAt BitBag we do believe in open source. However, we are able to do it just because of our awesome clients, who are kind enough to share some parts of our work with the community. Therefore, if you feel like there is a possibility for us working together, feel free to reach us out. You will find out more about our professional services, technologies and contact details at [https://bitbag.io/](https://bitbag.io/?utm_source=github\u0026utm_medium=referral\u0026utm_campaign=plugins_vsf).\n\n## Table of Content\n\n* [Overview](#overview)\n* [Support](#we-are-here-to-help)\n* [Installation](#installation)\n  * [Supported versions](#supported-versions)\n  * [Requirements](#requirements)\n  * [Architecture](#architecture)\n* [Using the plugin within Sylius Standard app, with VSF](#using-the-plugin-within-sylius-standard-app-with-VSF)\n* [Known issues](#known-issues)\n* [Extending the plugin](#extending-the-plugin)\n* [About us](#about-us)\n  * [Community](#community)\n* [Demo Sylius shop](#demo-sylius-shop)\n* [Additional Sylius resources for developers](#additional-resources-for-developers)\n* [License](#license)\n* [Contact](#contact)\n\n# Overview\n\nThis document assumes that you are already familiar with Vue Storefront and its technology stack.  \nIf that's not the case please check [VSF Documentation](https://docs.vuestorefront.io/guide/) and [GitHub repository](https://github.com/DivanteLtd/vue-storefront).\n\nPlease also check [Sylius Documentation](https://docs.sylius.com/en/latest/) and [Sylius-Standard](https://github.com/Sylius/Sylius-Standard) if you are new to Sylius.\n\nDepending on your preferences, the plugin can also fully replace [VSF API](https://github.com/DivanteLtd/vue-storefront-api/) - you will only need VSF front app if you choose so.  \nSylius ShopBundle is also no longer needed as Vue Storefront will be your new ... Storefront. :)\n\n## We are here to help\nThis **open-source plugin was developed to help the Sylius community**. If you have any additional questions, would like help with installing or configuring the plugin or need any assistance with your Sylius project - let us know!\n\n[![](https://bitbag.io/wp-content/uploads/2020/10/button-contact.png)](https://bitbag.io/contact-us/?utm_source=github\u0026utm_medium=referral\u0026utm_campaign=plugins_vsf)\n\n\n\n## Installation\n\n### Supported versions\n\n| Plugin version       | Sylius version | Supported VSF version |\n|:--------------------:|:--------------:|:---------------------:|\n| v2.1.1               | 1.8            | 1.12.2                |\n| v1.0.0-beta.1        | 1.6            | 1.11.4                |\n\n### Requirements\n\nWe work on stable, supported and up-to-date versions of packages. We recommend you to do the same.  \nPlease also check [Vue Storefront requirements](https://docs.vuestorefront.io/guide/installation/linux-mac.html#requirements).\n\n| Package       | Version        |\n|:-------------:|:--------------:|\n| PHP           |  7.4 (\u003e= 7.3)  |\n| MySQL         |  8.0.x (\u003e= 5.7)|\n| Elasticsearch |  6.8.x         |\n| Vue Storefront|  1.12          |\n\n**Important note**  \nPlease inspect files stored in `tests/Application` directory (especially `config` subdirectory)   \nto make sure that you fully understand installation steps written below.\n\nWe recommend you to disable Sylius ShopBundle as you will no longer need it.   \nPlease refer to [Sylius Documentation - How to disable Sylius shop?](https://docs.sylius.com/en/1.6/cookbook/configuration/disabling-shop-admin-api.html#how-to-disable-sylius-shop) for details.\n\n---\n\nFirst, add this plugin as dependency to your Sylius project. \n \n ```\n $ composer require bitbag/vuestorefront-plugin:v2.1.1\n ```\n\nAdd the plugin to `config/bundles.php` (if it's not there already):\n\n```\nreturn [\n    ...\n    FOS\\ElasticaBundle\\FOSElasticaBundle::class =\u003e ['all' =\u003e true],\n    BitBag\\SyliusVueStorefrontPlugin\\SyliusVueStorefrontPlugin::class =\u003e ['all' =\u003e true],\n    Lexik\\Bundle\\JWTAuthenticationBundle\\LexikJWTAuthenticationBundle::class =\u003e ['all' =\u003e true],\n    Gesdinet\\JWTRefreshTokenBundle\\GesdinetJWTRefreshTokenBundle::class =\u003e ['all' =\u003e true],\n\n    // Optional, for handling CORS (Cross-Origin Resource Sharing) requests \n    Nelmio\\CorsBundle\\NelmioCorsBundle::class =\u003e ['all' =\u003e true],\n];\n```\n\n---\n\nAdd few variables to your .env file:\n\n```text\nAPP_CHANNEL_CODE=\"\u003ccode of Sylius channel you want to use\u003e\"\n\nJWT_SECRET_KEY=%kernel.project_dir%/config/jwt/private.pem \nJWT_PUBLIC_KEY=%kernel.project_dir%/config/jwt/public.pem\nJWT_PASSPHRASE=bitbag\n\nELASTICSEARCH_HOST=localhost\nELASTICSEARCH_PORT=9200\nELASTICSEARCH_INDEX=vue_storefront_catalog\n\n// Set transport value to \"https\" and ssl to \"true\" when using an ssl connection\nELASTICSEARCH_TRANSPORT=http\nELASTICSEARCH_SSL=false\n// Leave blank if authentication is not required\nELASTICSEARCH_USERNAME=\nELASTICSEARCH_PASSWORD=\n\n// Optionally, when using Nelmio CORS Bundle\nCORS_ALLOW_ORIGIN=^https?://(localhost|127\\.0\\.0\\.1)(:[0-9]+)?$\n```\n\nTo generate JWT public and secret keys please run commands below in Sylius' project directory:\n\n```\n$ mkdir -p config/jwt\n$ openssl genpkey -out config/jwt/private.pem -aes256 -algorithm rsa -pkeyopt rsa_keygen_bits:4096\n$ openssl pkey -in config/jwt/private.pem -out config/jwt/public.pem -pubout\n```\n\nThen set value of `JWT_PASSPHRASE` environment variable with passphrase that you've entered during running commands above.\n\n---\n\nNext step is to add a following line to the end of the `imports` section in your `config/packages/_sylius.yaml`:\n                \n```\n- { resource: \"@SyliusVueStorefrontPlugin/Resources/config/config.yaml\" }\n```\n\nIt's needed to load some plugin configuration.\n\n---\n\nNow it is needed to edit `config/packages/security.yaml` file.\n\nAdd a line below to `parameters` key at the top of the file:  \n\n```\nbitbag.vue_storefront.security.regex: \"^/vsbridge\"\n```\n\nAdd a code below to the top of `security -\u003e firewalls` key (an order is really important there):\n\n```\n        vs_bridge_user_login:\n            pattern: \"%bitbag.vue_storefront.security.regex%/user/login\"\n            stateless: true\n            anonymous: true\n            provider: sylius_shop_user_provider\n            json_login:\n                provider: sylius_shop_user_provider\n                check_path: /vsbridge/user/login\n                password_path: password\n                success_handler: bitbag_sylius_vue_storefront_plugin.lexik_jwt_authentication.handler.authentication_success\n                failure_handler: bitbag_sylius_vue_storefront_plugin.lexik_jwt_authentication.handler.authentication_failure\n                require_previous_session: false\n\n        vs_bridge:\n            pattern: \"%bitbag.vue_storefront.security.regex%\"\n            stateless: true\n            anonymous: true\n            provider: sylius_shop_user_provider\n            guard:\n                provider: sylius_shop_user_provider\n                authenticators:\n                    - lexik_jwt_authentication.jwt_token_authenticator\n```\n\nSo it should look like this:\n\n```\n    firewalls:\n        vs_bridge_user_login:\n            pattern: \"%bitbag.vue_storefront.security.regex%/user/login\"\n            stateless: true\n            anonymous: true\n            provider: sylius_shop_user_provider\n            json_login:\n                provider: sylius_shop_user_provider\n                check_path: /vsbridge/user/login\n                password_path: password\n                success_handler: bitbag_sylius_vue_storefront_plugin.lexik_jwt_authentication.handler.authentication_success\n                failure_handler: bitbag_sylius_vue_storefront_plugin.lexik_jwt_authentication.handler.authentication_failure\n                require_previous_session: false\n\n        vs_bridge:\n            pattern: \"%bitbag.vue_storefront.security.regex%\"\n            stateless: true\n            anonymous: true\n            provider: sylius_shop_user_provider\n            guard:\n                provider: sylius_shop_user_provider\n                authenticators:\n                    - lexik_jwt_authentication.jwt_token_authenticator\n```\n\nAfterwards add a line below to `security -\u003e access_control` part:  \n```\n- { path: \"%bitbag.vue_storefront.security.regex%/user/login\", role: IS_AUTHENTICATED_ANONYMOUSLY }\n```\n\n---\n\nNow go to `config/routes.yaml` file in your Sylius app and paste there:\n\n```\nsylius_vue_storefront_plugin:\n    resource: \"@SyliusVueStorefrontPlugin/Resources/config/routing.yaml\"\n```\n\nto load configuration of all routes for API endpoints.\n\n---\n\nCreate new file `gesdinet_jwt_refresh_token.yaml` (or name it however you like) inside `config/packages` directory and paste inside it:\n\n```\ngesdinet_jwt_refresh_token:\n    firewall: vs_bridge\n    token_parameter_name: refreshToken\n    user_provider: sylius_shop_user_provider\n```\n---\n\nReplace content of your `config/packages/lexik_jwt_authentication.yaml` file with the following configuration:\n\n```\nlexik_jwt_authentication:\n    secret_key: '%env(resolve:JWT_SECRET_KEY)%'\n    public_key: '%env(resolve:JWT_PUBLIC_KEY)%'\n    pass_phrase: '%env(JWT_PASSPHRASE)%'\n\n    token_extractors:\n        query_parameter:\n            enabled: true\n            name: token\n```\n\n---\n\nAfterwards add:\n\n```\ntranslator: { fallbacks: [\"%locale%\"] }\n```\n\nunder your `framework` key in `config/packages/framework.yaml` so it should look like this afterwards:\n\n```\nframework:\n    translator: { fallbacks: [\"%locale%\"] }\n    secret: '%env(APP_SECRET)%'\n    form: true\n    csrf_protection: true\n    templating: { engines: [\"twig\"] }\n    session:\n        handler_id: ~\n```\n---\n\nSet content of your `config/fos_elastica.yaml` to the following:\n\n```\nimports:\n    - { resource: \"@SyliusVueStorefrontPlugin/Resources/config/indexes/attribute.yaml\" }\n    - { resource: \"@SyliusVueStorefrontPlugin/Resources/config/indexes/category.yaml\" }\n    - { resource: \"@SyliusVueStorefrontPlugin/Resources/config/indexes/product.yaml\" }\n\nfos_elastica:\n    clients:\n        default: { host: '%env(ELASTICSEARCH_HOST)%', port: '%env(ELASTICSEARCH_PORT)%' }\n```\n\n---\n\nAdd a following rule to `fos_rest.format_listener.rules` in your `config/packages/fos_rest.yaml`\n\n```\n- { path: '^/vsbridge/.*', priorities: ['json', 'xml'], fallback_format: json, prefer_extension: true }\n```\n\nFor example the file should look like this afterwards:\n\n```\nfos_rest:\n    exception: true\n    view:\n        formats:\n            json: true\n            xml:  true\n        empty_content: 204\n    format_listener:\n        rules:\n            - { path: '^/api/.*', priorities: ['json', 'xml'], fallback_format: json, prefer_extension: true }\n            - { path: '^/vsbridge/.*', priorities: ['json', 'xml'], fallback_format: json, prefer_extension: true }\n            - { path: '^/', stop: true }\n```\n\n---\nGo to your `src/Entity/Order/OrderItem.php` file and make it to extend the `OrderItem` entity from our plugin.\n\nChange:\n```\nuse Sylius\\Component\\Core\\Model\\OrderItem as BaseOrderItem;\n```\nto:\n```\nuse BitBag\\SyliusVueStorefrontPlugin\\Sylius\\Entity\\Order\\OrderItem as BaseOrderItem;\n```\n\n---\n\nCopy `etc/vsf-config/local.json` file from this repository to `config/local.json` of Vue Storefront project directory.  \nIn that file you only need to replace every occurence of `\u003cinsert-your-hostname\u003e` with URL of your store.  \nYou don't have to change anything else as sensible defaults are provided by us, that are proven to work in Vue Storefront v1.12.   \nIf your configuration settings differ from defaults provided with the plugin and you run into problems don't hesitate to create issue on GitHub or contact us directly at hello@bitbag.io.\n\n## Architecture\n\nVueStorefront fetches data in two ways - **statically** and **dynamically**.  \nLess frequently updated data is stored in **Elasticsearch**: \n1. Products\n2. Categories (Sylius taxons)\n3. Attributes (Sylius product options)  \n \nEverything else is fetched dynamically using provided API, including: \n* customers' accounts (Sylius Customer, ShopUser)\n* carts, orders (Sylius Order)\n* shipping methods\n* payment methods\n* and more ...\n\n### Elasticsearch\n\nEverything related to Elasticsearch is contained within `Elastisearch` \nwith the exception of FOS Elastica Bundle configuration which can be found in `src/Resources/config/indexes` directory.  \nTo have the data from Sylius mapped in ES, we have created `Transformer`s providing object translations to ES indexes.  \nSchema of indexes is described in files stored in `Document` directory. \n\nIt's important to note once again that **only Elasticsearch 6 is fully supported currently**.  \nSupport for ES 7 is on the way - once [ruflin/elastica](https://github.com/ruflin/Elastica) and [FOSElasticaBundle](https://github.com/FriendsOfSymfony/FOSElasticaBundle) start supporting it, we will as well.\n\n## Using the plugin within Sylius Standard app, with VSF\n\nIt is no surprise that you must have products, taxons etc. within your Sylius instance to benefit from VSF.  \nTherefore we assume that you have a shop already running.  \nIf it's not the case you might want to run commands below on freshly cloned [Sylius Standard](https://github.com/Sylius/Sylius-Standard) repository:\n\n```\n$ composer install \n$ yarn install\n$ yarn build\n$ php bin/console doctrine:database:create\n$ php bin/console doctrine:schema:update --force\n$ php bin/console sylius:fixtures:load\n```\n\n.. to add all needed entities from fixtures to database.\n\nOnly then you can run\n\n```text\n$ php bin/console fos:elastica:populate\n```\n\nto populate Elasticsearch indexes and let refresher contained within the plugin to automatically update the data in ES in real time.\n\n### Known issues\n\n#### Translatable trait error during loading fixtures\n\n\u003cimg src=\"doc/fixtures_error.png\"\u003e\u003c/img\u003e\n\nIn case of this error - to be able to load the fixtures, go to the `vendor/bitbag/vuestorefront-plugin/src/Resources/config/indexes/product.yaml` file and comment last line in there (the `defer:true` one).\n\nThen clear the cache, load fixtures and uncomment this line afterwards.\n\n#### Getting 500 error related to taxa (`taxons`)\n\nIf you see something like this for example in your admin panel:\n```\n{\n    \"result\": \"Variable \\\"taxons\\\" does not exist.\",\n    \"code\": 500\n}\n```\nit means you are using invalid version of `doctrine/inflector` package.\n\nTo fix it add a following block into your `composer.json` file:\n```          \n\"conflict\": {\n    \"doctrine/inflector\": \"^1.4\"\n},\n```\nMake sure that\n```\n\"bitbag/vuestorefront-plugin\": \"v2.1.1\"\n```\nis present in `require` section in your `composer.json` file and then run:\n```\n$ composer update\n```\n\n## Extending the plugin\n\n### Extending requests, commands/queries\n\nThe easiest way to extend the existing request classes and add new properties is to inherit from them.  \nBecause of the way we denormalize incoming requests, you don't need constructor in that class.\nYou must only:\n * add public properties to the class\n * override `getCommand()` or `getQuery()` method\n \nOptionally you may want to add constraint to your properties that would validate incoming data.  \nWe use separate .xml files for that as you can see in `src/Resources/config/validation` directory.\n \nFor example let's add locale to the coupon:\n\n```\nuse BitBag\\SyliusVueStorefrontPlugin\\Request\\Cart\\ApplyCouponRequest;\n\nfinal class ApplyLocalizedCouponRequest extends ApplyCouponRequest\n{\n    /** @var string */\n    pubic $locale;\n\n    public function getCommand(): CommandInterface\n    {\n        return new ApplyCoupon($this-\u003etoken, $this-\u003ecartId, $this-\u003ecoupon, $this-\u003elocale);\n    }\n}\n```\n\nIn the same manner the command would need to be created extending the ApplyCoupon class.  \nThen you only need to change one parameter in the configuration file:\n\n```\nbitbag_sylius_vue_storefront_plugin:\n    request_classes:\n        apply_coupon: \\AddLocalizedCouponRequest\n```\n\n### Extending handlers\n\nThe main way to extend a handler is to decorate it. This makes adding functionality before and after the handler easy.  \nPlease check example of extending view below and/or follow [Symfony Documentation - How to Decorate Services](https://symfony.com/doc/4.4/service_container/service_decoration.html) guide.\n\nHowever, if you want to change the logic in the handler, you need to overwrite it.    \nThis can be done by registering the new handler with the same service id.  \nDo not just add it with a new service id otherwise, it will execute both handlers.\n\n### Extending views\n\nWhen extending the views, two places need to be modified - view class and view factory.\n\nViewFactories should be decorated just like Handlers mentioned above. You can also completely override them if you prefer to do so.\n\n```\nuse BitBag\\SyliusVueStorefrontPlugin\\Factory\\Cart\\Totals\\TotalsViewFactoryInterface;\n\nclass NiceTotalViewFactory implements TotalViewFactoryInterface\n{\n    private $innerTotalViewFactory;\n\n    public function __construct(TotalsViewFactoryInterface $innerTotalViewFactory)\n    {\n        $this-\u003einnerTotalViewFactory = $innerTotalViewFactory;\n    }\n\n    public function create(OrderInterface $order): NiceTotalView\n    {\n        /** @var NiceTotalView $totalView */\n        $totalView = $this-\u003einnerTotalViewFactory-\u003ecreateNew();\n\n        $totalView-\u003enicePersonDiscount = $orderInterface-\u003egetNiceDiscount();\n\n        return $totalView;\n    }\n}\n```\n\nYou need to define this service in xml (or yaml) file:\n\n```\n\u003cservice class=\"NiceTotalView\" id=\"app.factory.nice_total_view_factory\"\n         decorates=\"bitbag_sylius_vue_storefront_plugin.factory.cart.totals.totals_view_factory\"\u003e\n       \u003cargument type=\"service\" id=\"app.factory.nice_total_view_factory.inner\" /\u003e\n\u003c/service\u003e\n```\n\nand change the view class in configuration file:\n\n```\nbitbag_sylius_vue_storefront_plugin:\n    view_classes:\n        totals: \\NiceTotalView\n```\n\n\n# About us\n\nBitBag is an agency that provides high-quality **eCommerce and Digital Experience software**. Our main area of expertise includes eCommerce consulting and development for B2C, B2B, and Multi-vendor Marketplaces.\nThe scope of our services related to Sylius includes:\n- **Consulting** in the field of strategy development\n- Personalized **headless software development**\n- **System maintenance and long-term support**\n- **Outsourcing**\n- **Plugin development**\n- **Data migration**\n\nSome numbers regarding Sylius:\n* **20+ experts** including consultants, UI/UX designers, Sylius trained front-end and back-end developers,\n* **100+ projects** delivered on top of Sylius,\n* Clients from  **20+ countries**\n* **3+ years** in the Sylius ecosystem.\n\n---\n\nIf you need some help with Sylius development, don't be hesitate to contact us directly. You can fill the form on [this site](https://bitbag.io/contact-us/?utm_source=github\u0026utm_medium=referral\u0026utm_campaign=plugins_vsf) or send us an e-mail to hello@bitbag.io!\n\n---\n\n[![](https://bitbag.io/wp-content/uploads/2020/10/badges-sylius.png)](https://bitbag.io/contact-us/?utm_source=github\u0026utm_medium=referral\u0026utm_campaign=plugins_vsf)\n\n## Community\n\nFor online communication, we invite you to chat with us \u0026 other users on [Sylius Slack](https://sylius-devs.slack.com/).\n\n# Vue Storefront + Sylius Demo\n\nWe've created a demo app that showcases usage of this plugin. Visit [vsf.bitbag.shop](https://vsf.bitbag.shop) to check it out!  \nThe Sylius admin panel is accessible at [syliusvsf.bitbag.shop/admin](https://syliusvsf.bitbag.shop/admin). Admin credentials: `sylius : sylius`.\n**If you need an overview of this plugin, schedule a consultation with our expert.**\n\n[![](https://bitbag.io/wp-content/uploads/2020/10/button_free_consulatation-1.png)](https://bitbag.io/contact-us/?utm_source=github\u0026utm_medium=referral\u0026utm_campaign=plugins_vsf)\n\n## Additional resources for developers\n\nTo be able to contribute to the plugin make sure that you familiarize yourself with:\n\n* [Vue Storefront Integration SDK](https://github.com/DivanteLtd/vue-storefront-integration-sdk/)\n* [Vue Storefront](Shttps://github.com/DivanteLtd/vue-storefront)\n* [Vue Storefront API](Shttps://github.com/DivanteLtd/vue-storefront-api)\n* [Sylius Shop API Plugin](https://github.com/Sylius/ShopApiPlugin/)\n* [Sylius Contribution Guide](https://docs.sylius.com/en/latest/contributing/)\n\nAdditionally you might want to get to know VSF better:\n* [Vue Storefront Documentation](https://docs.vuestorefront.io/guide/) - to learn how to customize VSF frontend part\n* [Vue Storefront Journal](https://medium.com/the-vue-storefront-journal) - blog where new ideas are shared and what lies ahead is announced\n\n## License\n\nThis plugin's source code is completely free and released under the terms of the MIT license.\n\n[//]: # (These are reference links used in the body of this note and get stripped out when the markdown processor does its job. There is no need to format nicely because it shouldn't be seen.)\n\n## Contact\n\nIf you want to contact us, the best way is to fill the form on [our website](https://bitbag.io/contact-us/?utm_source=github\u0026utm_medium=referral\u0026utm_campaign=plugins_vsf) or send us an e-mail to hello@bitbag.io with your question(s). We guarantee that we answer as soon as we can!\n\n[![](https://bitbag.io/wp-content/uploads/2020/10/footer.png)](https://bitbag.io/contact-us/?utm_source=github\u0026utm_medium=referral\u0026utm_campaign=plugins_vsf)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbitbagcommerce%2Fsyliusvuestorefrontplugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbitbagcommerce%2Fsyliusvuestorefrontplugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbitbagcommerce%2Fsyliusvuestorefrontplugin/lists"}