Shopware 6 has undergone a profound architectural shift over its lifecycle, and version 6.7 marks the point where two fundamental extension models—Plugins and Apps—are no longer interchangeable alternatives but distinctly different tools serving different commerce paradigms. If you're planning to build an extension for Shopware in 2024 or beyond, understanding this divergence isn't optional; it dictates your infrastructure, deployment strategy, security model, and long-term compatibility roadmap. Let's dissect exactly what each approach offers, how they differ under the hood, and which one aligns with your project requirements.
What is a Shopware Plugin?
Shopware Plugins have been the ecosystem's traditional backbone since day one. A plugin is a self-contained PHP package that deploys directly onto your Shopware web server. It integrates tightly with the framework via Symfony dependency injection, hooks into kernel events, overrides Twig templates, registers custom routes, and communicates directly with Doctrine entities for database operations.
Plugins excel at deep functionality where low-latency access to Shopware's internal state is critical. Use cases include custom payment providers, complex tax calculation engines, warehouse synchronization modules, admin UI enhancements, and storefront routing overrides. Because they live inside the PHP process, plugins bypass network roundtrips, cache serialization delays, and API rate limits. They also enjoy unrestricted access to Symfony services, allowing you to replace core behavior entirely through dependency injection or event listeners.
However, this tight coupling carries trade-offs. Plugin updates require database migrations, cache clears, and sometimes kernel recompilation. Scaling demands traditional server management, and a poorly isolated plugin can inadvertently affect core functionality during major Shopware releases. That's not a flaw—it's simply the architectural contract of server-hosted extensions.
What is a Shopware App?
Apps represent Shopware's modern, cloud-native extension model. Unlike plugins, Apps run entirely outside the Shopware installation as independent services. They communicate via REST or GraphQL APIs and event-driven webhooks, using cryptographically signed JWT tokens for authentication. Shopware 6.7 significantly matured this ecosystem: it introduced stricter manifest validation, standardized webhook routing, improved CLI scaffolding, and tightened permission scopes to align with zero-trust security principles.
Apps are designed for SaaS delivery, multi-tenant architectures, and headless commerce workflows. They're ideal for third-party analytics platforms, AI recommendation engines, CRM/ERP connectors, subscription management systems, and cross-channel inventory sync tools. Because Apps don't share the Shopware process space, they scale independently, update via their own CI/CD pipelines, and never risk breaking core storefront or admin functionality. When Shopware releases a new minor version, your App remains unaffected unless you explicitly consume a breaking API change.
Key Architectural & Operational Differences
| Dimension | Plugin | App |
|--------------------|---------------------------------------------|----------------------------------------------|
| Execution Environment | Same server as Shopware (PHP/Symfony process) | External service (Node.js, Go, PHP, etc.) |
| Data Access | Direct Doctrine/MySQL queries | API endpoints + webhook push notifications |
| Authentication | Server-side trust (same host) | JWT-based token validation with scoped scopes|
| Lifecycle | bin/console plugin:install, migrations, cache clears | App registration via storefront/admin UI or CLI, manifest-driven installation |
| Scalability | Horizontal server scaling required | Independent microservice scaling |
| Update Strategy| Tied to Shopware release cycles | Autonomous deployment pipelines |
| Best For | Deep integration, custom logic, in-house deployments | SaaS products, cloud services, headless setups |
Why Shopware 6.7 Clarified the Boundary
Prior to 6.7, developers often conflated plugins and apps because early app tooling was experimental. Shopware 6.7 resolved this ambiguity by:
- Enforcing
required-shopwareversion constraints inapp-manifest.xmlto prevent incompatible installations - Introducing a unified App lifecycle CLI (
bin/build-app.sh,shopware:app:*commands) - Standardizing webhook payload schemas and signature verification across all event types
- Separating permission scopes into granular, auditable buckets (e.g.,
read_product,write_order,app_read) - Strengthening API versioning policies to ensure long-term backward compatibility for external services
These changes didn't replace plugins; they gave Apps the maturity needed to compete in enterprise workflows where cloud deployment and independent scaling are non-negotiable.
How to Choose: Decision Framework
Build a Plugin when:
- You need direct database writes with complex transactional logic
- You're modifying checkout flows, admin grids, or storefront routing at the controller level
- Latency matters more than decoupling
- The solution is intended for single-store deployment or private networks
- You require access to deprecated-but-still-available kernel services without API abstraction layers
Build an App when:
- You're delivering a multi-tenant SaaS product with subscription billing
- You want independent release cycles and zero impact on Shopware core updates
- Your service relies on event-driven architecture (webhooks for
product.exported,order.created, etc.) - You plan to support headless storefronts or PWA implementations
- Security compliance requires strict token scoping and audit trails
Code Example: Modern App Setup in 6.7+
Shopware 6.7 enforces stricter manifest validation. Here's a compliant app-manifest.xml:
<?xml version="1.0" encoding="UTF-8"?>
<manifest name="vendor/ai-recommendation-app" required-shopware=">=6.7.0">
<appId>vendor-ai-recommendation</appId>
<version>2.1.0</version>
<label>AI Product Recommendations</label>
<description>Cloud-based recommendation engine with webhook-driven inventory sync.</description>
<permissions>
<permission>read_product</permission>
<permission>read_order</permission>
<permission>webhook_create</permission>
</permissions>
</manifest>
Once installed, your external service receives signed webhooks. Validating them in Shopware 6.7+ follows this pattern:
// External App webhook controller (framework-agnostic example)
public function handleWebhook(Request $request): Response
{
$signature = $request->headers->get('x-shopware-webhook-signature');
$payload = json_decode($request->getContent(), true);
// Shopware 6.7 validates signatures using HMAC-SHA256 + JWT claims
if (!$this->appVerifier->isValid($signature, $payload)) {
throw new AccessDeniedException('Invalid or tampered webhook payload');
}
// Safe to process after cryptographic verification
$eventName = $payload['shopware_event'];
$entity = $payload['data']['entity'];
match ($eventName) {
'product.exported' => $this->syncProduct($entity),
'order.created' => $this->updateInventory($entity),
default => throw new RuntimeException('Unsupported event type'),
};
return new Response('OK', 200);
}
Notice the explicit signature verification and deterministic event routing. Shopware 6.7 removed legacy fallback mechanisms that previously allowed unsigned payloads, making this validation step mandatory for production deployments.
Conclusion
The Plugin vs App question isn't about superiority—it's about architectural alignment. Plugins deliver deep, low-latency integration for server-hosted solutions where control and performance are paramount. Apps enable cloud-native, event-driven ecosystems that scale independently and align with modern SaaS and headless commerce realities. With Shopware 6.7's refinements to the App framework, external extensions have never been more secure, predictable, or developer-friendly.
Evaluate your deployment model, scalability requirements, and monetization strategy before you scaffold your first class. Choose wisely today, and you'll avoid painful refactoring tomorrow while positioning your extension for long-term success in Shopware's evolving ecosystem.