Vue.js Development Services for 1C-Bitrix

Our company is engaged in the development, support and maintenance of Bitrix and Bitrix24 solutions of any complexity. From simple one-page sites to complex online stores, CRM systems with 1C and telephony integration. The experience of developers is confirmed by certificates from the vendor.
Showing 30 of 37 servicesAll 1626 services
FAQ
Our competencies:
Development stages
Latest works
  • image_website-b2b-advance_0.png
    B2B ADVANCE company website development
    1167
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Website development for FIXPER company
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Development based on Bitrix, Bitrix24, 1C for the company Development of an Online Appointment Booking Widget for a Medical Center
    563
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Development based on 1C Enterprise for MIRSANBEL
    743
  • image_crm_dolbimby_434_0.webp
    Website development on CRM Bitrix24 for DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Development based on Bitrix24 for the company TECHNOTORGKOMPLEKS
    976

Vue.js Development for 1C-Bitrix

Why CIBlockElement::GetList Kills UX — and What Vue Has to Do with It

The standard bitrix:catalog.section component reloads the entire page on every filter click. The full cycle: PHP parses the infoblock, gathers properties from b_iblock_element_property, renders HTML, sends it to the client. On a catalog with 50,000 SKUs, that's 800–1200 ms. The buyer clicks three filters — three reloads, 3 seconds of waiting. They leave.

Vue.js solves exactly this problem: the frontend fetches data via REST API, renders on the client, filtering is instant. Bitrix remains the backend: content, catalog, orders, 1C data exchange.

When Vue Is Justified

Not every site needs a frontend framework. It's justified when standard Bitrix components can't keep up:

  • Catalogs with heavy filteringcatalog.smart.filter with AJAX works, but on complex SKU property combinations it lags. Vue + API = instant response
  • Personal accounts — full-fledged SPAs with dashboards, charts, reactive forms. sale.personal.section looks like it's from 2012
  • Configurators and calculators — visual editors, product configurators with real-time price recalculation
  • Real-time — chats, notifications, stock updates via WebSocket
  • PWA — offline mode, push notifications, home screen installation

Three Architectural Approaches

1. Island — Vue Widgets on Bitrix Pages

Individual Vue components mount into div#app-filter, div#app-cart on standard Bitrix pages. Routing and server-side rendering still handled by Bitrix. Minimal disruption to the existing site.

When to use: incremental modernization, adding interactivity without a rewrite. A typical example — a reactive filter replacing catalog.smart.filter.

2. SPA on Vue + Bitrix REST API

The frontend is a full Vue application with Vue Router. Bitrix serves data via REST API: the built-in rest module or custom D7 controllers. The Bitrix admin panel is for content management — editors won't notice a difference.

When to use: personal accounts, B2B portals, internal applications. Anything where SEO isn't critical.

3. Nuxt.js + Bitrix as Headless CMS

Nuxt provides SSR/SSG for indexing. Bitrix is headless: serves data via API, manages content. For stores and content-heavy sites where SEO is a priority.

Bitrix REST API — A Deeper Look

This is where 70% of the time goes when integrating Vue + Bitrix:

Built-in REST module:

  • Infoblocks, catalog, cart (sale.basket.*), orders (sale.order.*), users — out of the box
  • Limitation: built-in methods don't always cover custom logic. The catalog.product.list method doesn't return computed properties — you need a custom endpoint

Custom D7 controllers:

The Bitrix\Main\Engine\Controller class is the proper way to build APIs for Vue. Automatic parameter validation, built-in CSRF protection, typed responses. Not ajax.php with $_POST — that's the path to injection attacks.

namespace App\Controller;
use Bitrix\Main\Engine\Controller;

class CatalogController extends Controller
{
    public function getProductsAction(array $filter, int $page = 1): array
    {
        // ORM query to the infoblock, not CIBlockElement::GetList
    }
}

Authorization: OAuth 2.0 for SPAs or session tokens. Rate limiting — via Bitrix\Main\Engine\Controller or nginx.

Caching: API responses are cached at the D7 level with tag-based invalidation. A product changed in the infoblock — cache invalidated by the iblock_id_X tag. Without this, at 100 RPS the server goes down.

Vue Application Structure

  • Vue Router — lazy loading routes via defineAsyncComponent. The catalog doesn't pull in personal account code
  • Pinia — state management: catalog, cart, user, filters. Modular store architecture. Vuex is legacy — new projects use Pinia
  • Axios with interceptors: automatic CSRF token refresh, retry on 503, authorization error handling
  • Vue Query (TanStack Query) — API request caching, automatic revalidation, optimistic updates. The user added a product to the cart — the UI updated instantly, the API request went out in the background

Vue Catalog — The Most Common Use Case

The UX difference is felt immediately. Specifics:

  • Filter — checkboxes, range sliders, select with search. State synced with URL via vue-router query params — a link with filters can be shared with a colleague
  • Product page — gallery with zoom (vue-cool-lightbox), SKU switching (color/size), price recalculated via the catalog.product.offer.list API, stock by warehouse from catalog.store.product.list
  • Virtual scrollingvue-virtual-scroller renders only visible elements. A catalog of 10,000 products runs without lag
  • Smart search — debounced requests to search.title.search or ElasticSearch, autocomplete via dropdown
  • Comparison — dynamic specification table with difference highlighting. Stored in Pinia + localStorage for persistence

Nuxt.js for SEO

A pure Vue SPA serves the search engine an empty HTML page with <div id="app"></div>. Google can render JS, but with a delay of days. Yandex — entirely unpredictable.

Nuxt.js solves this:

  • SSR — the server delivers complete HTML, after hydration it works as an SPA
  • SSG — pages are generated during nuxt generate, served from CDN. Maximum speed
  • Hybrid mode — catalog statically, cart and personal account — SSR
  • useHead() — dynamic title, description, Open Graph, Schema.org for each page
  • Sitemap@nuxtjs/sitemap, routes from Bitrix API

Performance

  • Code splitting — Vite automatically splits the bundle by routes. Catalog page: 80–120 KB gzip, not 500
  • Tree shaking — unused code from UI libraries is stripped during build
  • Lazy loading — heavy components (Chart.js, maps, WYSIWYG) loaded on demand via defineAsyncComponent
  • API call batching — one batch request instead of 5 separate REST API calls to Bitrix
  • Brotli/Gzip — asset compression at the nginx level, WebP/AVIF for images via <picture> with srcset

Timelines

Approach Timeline Deliverable
Vue widgets (2–5 components) 1–3 weeks Reactive elements on the existing site
SPA for personal account 4–8 weeks Vue application + API on D7 controllers
Vue catalog + Bitrix API 4–10 weeks Filtering, cart, comparison without reloads
Nuxt.js + Bitrix headless 6–12 weeks SSR/SSG, full functionality, SEO

Full cycle: API design, D7 controller development, Vue application, Vite configuration, testing, deployment. Code is reviewed, covered with tests, documented — not "built and forgotten."