@contractspec/bundle.library 3.4.3 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +494 -488
- package/CHANGELOG.md +36 -0
- package/dist/application/index.js +8 -8
- package/dist/application/mcp/cliMcp.js +8 -8
- package/dist/application/mcp/contractsMcp.js +8 -8
- package/dist/application/mcp/docsMcp.js +8 -8
- package/dist/application/mcp/index.js +8 -8
- package/dist/application/mcp/internalMcp.js +8 -8
- package/dist/application/mcp/providerRankingMcp.js +8 -8
- package/dist/bundles/LibraryBundle.d.ts +126 -0
- package/dist/bundles/LibraryBundle.js +139 -0
- package/dist/bundles/index.d.ts +1 -0
- package/dist/bundles/index.js +139 -0
- package/dist/components/docs/DocsIndexPage.js +91 -91
- package/dist/components/docs/advanced/AdvancedMCPPage.js +125 -125
- package/dist/components/docs/advanced/AdvancedOverlayEditorPage.js +49 -49
- package/dist/components/docs/advanced/AdvancedRenderersPage.js +51 -51
- package/dist/components/docs/advanced/AdvancedSpecExperimentsPage.js +35 -35
- package/dist/components/docs/advanced/AdvancedTelemetryPage.js +177 -177
- package/dist/components/docs/advanced/AdvancedWorkflowMonitoringPage.js +45 -45
- package/dist/components/docs/advanced/index.js +482 -482
- package/dist/components/docs/architecture/ArchitectureAppConfigPage.js +107 -107
- package/dist/components/docs/architecture/ArchitectureControlPlanePage.js +73 -73
- package/dist/components/docs/architecture/ArchitectureIntegrationBindingPage.js +117 -117
- package/dist/components/docs/architecture/ArchitectureKnowledgeBindingPage.js +175 -175
- package/dist/components/docs/architecture/ArchitectureMultiTenancyPage.js +71 -71
- package/dist/components/docs/architecture/ArchitectureOverviewPage.js +205 -205
- package/dist/components/docs/architecture/index.js +748 -748
- package/dist/components/docs/comparison/ComparisonAutomationPlatformsPage.js +117 -117
- package/dist/components/docs/comparison/ComparisonEnterprisePlatformsPage.js +111 -111
- package/dist/components/docs/comparison/ComparisonInternalToolBuildersPage.js +117 -117
- package/dist/components/docs/comparison/ComparisonOverviewPage.js +97 -97
- package/dist/components/docs/comparison/ComparisonWindmillPage.js +125 -125
- package/dist/components/docs/comparison/ComparisonWorkflowEnginesPage.js +171 -171
- package/dist/components/docs/comparison/index.js +738 -738
- package/dist/components/docs/ecosystem/IntegrationsPage.js +45 -45
- package/dist/components/docs/ecosystem/PluginsPage.js +73 -73
- package/dist/components/docs/ecosystem/RegistryPage.js +37 -37
- package/dist/components/docs/ecosystem/TemplatesPage.js +56 -56
- package/dist/components/docs/ecosystem/index.js +211 -211
- package/dist/components/docs/examples/DocsExamplesPage.js +21 -21
- package/dist/components/docs/examples/index.js +21 -21
- package/dist/components/docs/getting-started/CLIPage.js +95 -95
- package/dist/components/docs/getting-started/CompatibilityPage.js +81 -81
- package/dist/components/docs/getting-started/DataViewTutorialPage.js +57 -57
- package/dist/components/docs/getting-started/DeveloperToolsPage.js +61 -61
- package/dist/components/docs/getting-started/HelloWorldPage.js +77 -77
- package/dist/components/docs/getting-started/InstallationPage.js +65 -65
- package/dist/components/docs/getting-started/StartHerePage.js +51 -51
- package/dist/components/docs/getting-started/TroubleshootingPage.js +73 -73
- package/dist/components/docs/getting-started/VSCodeExtensionPage.js +171 -171
- package/dist/components/docs/getting-started/index.js +731 -731
- package/dist/components/docs/guides/GuideCIDiffGatingPage.js +80 -80
- package/dist/components/docs/guides/GuideContractTypesPage.js +232 -232
- package/dist/components/docs/guides/GuideDocsPipelinePage.js +82 -82
- package/dist/components/docs/guides/GuideGenerateDocsClientsSchemasPage.js +84 -84
- package/dist/components/docs/guides/GuideImportExistingCodebasesPage.js +324 -324
- package/dist/components/docs/guides/GuideNextjsOneEndpointPage.js +106 -106
- package/dist/components/docs/guides/GuideSpecValidationTypingPage.js +78 -78
- package/dist/components/docs/guides/GuidesIndexPage.js +43 -43
- package/dist/components/docs/guides/index.js +975 -975
- package/dist/components/docs/index.js +10791 -10791
- package/dist/components/docs/integrations/IntegrationsCircuitBreakersPage.js +17 -17
- package/dist/components/docs/integrations/IntegrationsElevenLabsPage.js +47 -47
- package/dist/components/docs/integrations/IntegrationsGithubPage.js +61 -61
- package/dist/components/docs/integrations/IntegrationsGmailPage.js +49 -49
- package/dist/components/docs/integrations/IntegrationsGoogleCalendarPage.js +33 -33
- package/dist/components/docs/integrations/IntegrationsHealthRoutingPage.js +65 -65
- package/dist/components/docs/integrations/IntegrationsMistralPage.js +69 -69
- package/dist/components/docs/integrations/IntegrationsOpenAIPage.js +65 -65
- package/dist/components/docs/integrations/IntegrationsOverviewPage.js +313 -313
- package/dist/components/docs/integrations/IntegrationsPostmarkPage.js +101 -101
- package/dist/components/docs/integrations/IntegrationsPowensPage.js +121 -121
- package/dist/components/docs/integrations/IntegrationsQdrantPage.js +49 -49
- package/dist/components/docs/integrations/IntegrationsResendPage.js +45 -45
- package/dist/components/docs/integrations/IntegrationsS3Page.js +57 -57
- package/dist/components/docs/integrations/IntegrationsSlackPage.js +63 -63
- package/dist/components/docs/integrations/IntegrationsSpecModelPage.js +139 -139
- package/dist/components/docs/integrations/IntegrationsStripePage.js +159 -159
- package/dist/components/docs/integrations/IntegrationsTwilioPage.js +61 -61
- package/dist/components/docs/integrations/IntegrationsWhatsappMetaPage.js +63 -63
- package/dist/components/docs/integrations/IntegrationsWhatsappTwilioPage.js +65 -65
- package/dist/components/docs/integrations/index.js +1642 -1642
- package/dist/components/docs/intent/ContractFirstApiPage.js +51 -51
- package/dist/components/docs/intent/DeterministicCodegenPage.js +59 -59
- package/dist/components/docs/intent/GenerateClientFromSchemaPage.js +85 -85
- package/dist/components/docs/intent/OpenapiAlternativePage.js +91 -91
- package/dist/components/docs/intent/SchemaValidationTypescriptPage.js +59 -59
- package/dist/components/docs/intent/SpecDrivenDevelopmentPage.js +51 -51
- package/dist/components/docs/intent/index.js +396 -396
- package/dist/components/docs/knowledge/KnowledgeCategoriesPage.js +371 -371
- package/dist/components/docs/knowledge/KnowledgeExamplesPage.js +79 -79
- package/dist/components/docs/knowledge/KnowledgeOverviewPage.js +185 -185
- package/dist/components/docs/knowledge/KnowledgeSourcesPage.js +187 -187
- package/dist/components/docs/knowledge/KnowledgeSpacesPage.js +141 -141
- package/dist/components/docs/knowledge/index.js +963 -963
- package/dist/components/docs/libraries/LibrariesAccessibilityPage.js +85 -85
- package/dist/components/docs/libraries/LibrariesAiAgentPage.js +63 -63
- package/dist/components/docs/libraries/LibrariesAnalyticsPage.js +33 -33
- package/dist/components/docs/libraries/LibrariesContentGenPage.js +43 -43
- package/dist/components/docs/libraries/LibrariesContractsPage.js +125 -125
- package/dist/components/docs/libraries/LibrariesCostTrackingPage.js +45 -45
- package/dist/components/docs/libraries/LibrariesDataBackendPage.js +69 -69
- package/dist/components/docs/libraries/LibrariesDataViewsPage.js +79 -79
- package/dist/components/docs/libraries/LibrariesDesignSystemPage.js +129 -129
- package/dist/components/docs/libraries/LibrariesEvolutionPage.js +49 -49
- package/dist/components/docs/libraries/LibrariesGraphQLPage.js +73 -73
- package/dist/components/docs/libraries/LibrariesGrowthPage.js +35 -35
- package/dist/components/docs/libraries/LibrariesMultiTenancyPage.js +43 -43
- package/dist/components/docs/libraries/LibrariesObservabilityPage.js +53 -53
- package/dist/components/docs/libraries/LibrariesOverlayEnginePage.js +45 -45
- package/dist/components/docs/libraries/LibrariesOverviewPage.js +191 -191
- package/dist/components/docs/libraries/LibrariesPersonalizationPage.js +47 -47
- package/dist/components/docs/libraries/LibrariesProgressiveDeliveryPage.js +53 -53
- package/dist/components/docs/libraries/LibrariesResiliencePage.js +49 -49
- package/dist/components/docs/libraries/LibrariesRuntimePage.js +87 -87
- package/dist/components/docs/libraries/LibrariesSLOPage.js +47 -47
- package/dist/components/docs/libraries/LibrariesSchemaPage.js +139 -139
- package/dist/components/docs/libraries/LibrariesSupportBotPage.js +57 -57
- package/dist/components/docs/libraries/LibrariesTestingPage.js +49 -49
- package/dist/components/docs/libraries/LibrariesUIKitPage.js +107 -107
- package/dist/components/docs/libraries/LibrariesWorkflowComposerPage.js +35 -35
- package/dist/components/docs/libraries/LibrariesWorkflowsPage.js +89 -89
- package/dist/components/docs/libraries/index.js +1919 -1919
- package/dist/components/docs/manifesto/ManifestoPage.js +79 -79
- package/dist/components/docs/ops/AutoEvolutionOpsPage.js +59 -59
- package/dist/components/docs/ops/DistributedTracingOpsPage.js +33 -33
- package/dist/components/docs/ops/index.js +92 -92
- package/dist/components/docs/reference/DocsMarkdownContent.js +27 -27
- package/dist/components/docs/reference/DocsReferenceContent.js +34 -34
- package/dist/components/docs/reference/DocsReferenceIndexClient.js +23 -23
- package/dist/components/docs/reference/DocsReferenceIndexPage.js +26 -26
- package/dist/components/docs/reference/DocsReferencePage.js +37 -37
- package/dist/components/docs/reference/index.js +63 -63
- package/dist/components/docs/safety/SafetyAuditingPage.js +161 -161
- package/dist/components/docs/safety/SafetyMigrationsPage.js +169 -169
- package/dist/components/docs/safety/SafetyOverviewPage.js +99 -99
- package/dist/components/docs/safety/SafetyPDPPage.js +137 -137
- package/dist/components/docs/safety/SafetySecurityTrustPage.js +95 -95
- package/dist/components/docs/safety/SafetySigningPage.js +39 -39
- package/dist/components/docs/safety/SafetyTenantIsolationPage.js +33 -33
- package/dist/components/docs/safety/index.js +733 -733
- package/dist/components/docs/shared/StudioPrompt.js +9 -9
- package/dist/components/docs/specs/SpecsCapabilitiesPage.js +61 -61
- package/dist/components/docs/specs/SpecsDataViewsPage.js +119 -119
- package/dist/components/docs/specs/SpecsOverlaysPage.js +171 -171
- package/dist/components/docs/specs/SpecsOverviewPage.js +167 -167
- package/dist/components/docs/specs/SpecsPolicyPage.js +179 -179
- package/dist/components/docs/specs/SpecsWorkflowsPage.js +141 -141
- package/dist/components/docs/specs/index.js +838 -838
- package/dist/components/docs/studio/StudioBYOKPage.js +9 -9
- package/dist/components/docs/studio/StudioDeploymentsPage.js +9 -9
- package/dist/components/docs/studio/StudioGettingStartedPage.js +9 -9
- package/dist/components/docs/studio/StudioIntegrationsPage.js +9 -9
- package/dist/components/docs/studio/StudioOverviewPage.js +33 -33
- package/dist/components/docs/studio/StudioVisualBuilderPage.js +9 -9
- package/dist/components/docs/studio/index.js +78 -78
- package/dist/components/integrations/index.js +209 -209
- package/dist/components/integrations/molecules/IntegrationCard.js +33 -33
- package/dist/components/integrations/organisms/IntegrationMarketplace.js +71 -71
- package/dist/components/integrations/organisms/IntegrationSettings.js +98 -98
- package/dist/components/integrations/organisms/KnowledgeSourceList.js +40 -40
- package/dist/components/legal/PrivacyTemplate.js +477 -477
- package/dist/components/legal/TermsTemplate.js +421 -421
- package/dist/components/legal/index.js +898 -898
- package/dist/components/shared/FeatureGateNotice.js +13 -13
- package/dist/components/shared/index.js +13 -13
- package/dist/components/shell/WorkspaceHeader.js +37 -37
- package/dist/components/shell/WorkspaceProjectShellLayout.js +77 -77
- package/dist/components/shell/WorkspaceShellRenderer.d.ts +17 -0
- package/dist/components/shell/WorkspaceShellRenderer.js +229 -0
- package/dist/components/shell/WorkspaceSidebar.js +27 -27
- package/dist/components/shell/index.d.ts +1 -0
- package/dist/components/shell/index.js +140 -77
- package/dist/components/templates/index.js +272 -272
- package/dist/components/templates/messaging/ConversationList.js +27 -27
- package/dist/components/templates/messaging/MessageComposer.js +27 -27
- package/dist/components/templates/messaging/MessageThread.js +18 -18
- package/dist/components/templates/messaging/MessagingWorkspace.js +65 -65
- package/dist/components/templates/messaging/index.js +65 -65
- package/dist/components/templates/recipes/LanguageSwitcher.js +5 -5
- package/dist/components/templates/recipes/RecipeCard.js +26 -26
- package/dist/components/templates/recipes/RecipeDetail.js +33 -33
- package/dist/components/templates/recipes/RecipeList.js +80 -80
- package/dist/components/templates/recipes/index.js +80 -80
- package/dist/components/templates/todos/FilterBar.js +39 -39
- package/dist/components/templates/todos/TaskForm.js +43 -43
- package/dist/components/templates/todos/TaskItem.js +30 -30
- package/dist/components/templates/todos/TaskList.js +127 -127
- package/dist/components/templates/todos/index.js +127 -127
- package/dist/index.js +12323 -12260
- package/dist/infrastructure/elysia/index.js +8 -8
- package/dist/infrastructure/elysia/logger.js +8 -8
- package/dist/infrastructure/index.js +8 -8
- package/dist/libs/posthog/client.js +2 -2
- package/dist/node/application/index.js +8 -8
- package/dist/node/application/mcp/cliMcp.js +8 -8
- package/dist/node/application/mcp/contractsMcp.js +8 -8
- package/dist/node/application/mcp/docsMcp.js +8 -8
- package/dist/node/application/mcp/index.js +8 -8
- package/dist/node/application/mcp/internalMcp.js +8 -8
- package/dist/node/application/mcp/providerRankingMcp.js +8 -8
- package/dist/node/bundles/LibraryBundle.js +138 -0
- package/dist/node/bundles/index.js +138 -0
- package/dist/node/components/docs/DocsIndexPage.js +91 -91
- package/dist/node/components/docs/advanced/AdvancedMCPPage.js +125 -125
- package/dist/node/components/docs/advanced/AdvancedOverlayEditorPage.js +49 -49
- package/dist/node/components/docs/advanced/AdvancedRenderersPage.js +51 -51
- package/dist/node/components/docs/advanced/AdvancedSpecExperimentsPage.js +35 -35
- package/dist/node/components/docs/advanced/AdvancedTelemetryPage.js +177 -177
- package/dist/node/components/docs/advanced/AdvancedWorkflowMonitoringPage.js +45 -45
- package/dist/node/components/docs/advanced/index.js +482 -482
- package/dist/node/components/docs/architecture/ArchitectureAppConfigPage.js +107 -107
- package/dist/node/components/docs/architecture/ArchitectureControlPlanePage.js +73 -73
- package/dist/node/components/docs/architecture/ArchitectureIntegrationBindingPage.js +117 -117
- package/dist/node/components/docs/architecture/ArchitectureKnowledgeBindingPage.js +175 -175
- package/dist/node/components/docs/architecture/ArchitectureMultiTenancyPage.js +71 -71
- package/dist/node/components/docs/architecture/ArchitectureOverviewPage.js +205 -205
- package/dist/node/components/docs/architecture/index.js +748 -748
- package/dist/node/components/docs/comparison/ComparisonAutomationPlatformsPage.js +117 -117
- package/dist/node/components/docs/comparison/ComparisonEnterprisePlatformsPage.js +111 -111
- package/dist/node/components/docs/comparison/ComparisonInternalToolBuildersPage.js +117 -117
- package/dist/node/components/docs/comparison/ComparisonOverviewPage.js +97 -97
- package/dist/node/components/docs/comparison/ComparisonWindmillPage.js +125 -125
- package/dist/node/components/docs/comparison/ComparisonWorkflowEnginesPage.js +171 -171
- package/dist/node/components/docs/comparison/index.js +738 -738
- package/dist/node/components/docs/ecosystem/IntegrationsPage.js +45 -45
- package/dist/node/components/docs/ecosystem/PluginsPage.js +73 -73
- package/dist/node/components/docs/ecosystem/RegistryPage.js +37 -37
- package/dist/node/components/docs/ecosystem/TemplatesPage.js +56 -56
- package/dist/node/components/docs/ecosystem/index.js +211 -211
- package/dist/node/components/docs/examples/DocsExamplesPage.js +21 -21
- package/dist/node/components/docs/examples/index.js +21 -21
- package/dist/node/components/docs/getting-started/CLIPage.js +95 -95
- package/dist/node/components/docs/getting-started/CompatibilityPage.js +81 -81
- package/dist/node/components/docs/getting-started/DataViewTutorialPage.js +57 -57
- package/dist/node/components/docs/getting-started/DeveloperToolsPage.js +61 -61
- package/dist/node/components/docs/getting-started/HelloWorldPage.js +77 -77
- package/dist/node/components/docs/getting-started/InstallationPage.js +65 -65
- package/dist/node/components/docs/getting-started/StartHerePage.js +51 -51
- package/dist/node/components/docs/getting-started/TroubleshootingPage.js +73 -73
- package/dist/node/components/docs/getting-started/VSCodeExtensionPage.js +171 -171
- package/dist/node/components/docs/getting-started/index.js +731 -731
- package/dist/node/components/docs/guides/GuideCIDiffGatingPage.js +80 -80
- package/dist/node/components/docs/guides/GuideContractTypesPage.js +232 -232
- package/dist/node/components/docs/guides/GuideDocsPipelinePage.js +82 -82
- package/dist/node/components/docs/guides/GuideGenerateDocsClientsSchemasPage.js +84 -84
- package/dist/node/components/docs/guides/GuideImportExistingCodebasesPage.js +324 -324
- package/dist/node/components/docs/guides/GuideNextjsOneEndpointPage.js +106 -106
- package/dist/node/components/docs/guides/GuideSpecValidationTypingPage.js +78 -78
- package/dist/node/components/docs/guides/GuidesIndexPage.js +43 -43
- package/dist/node/components/docs/guides/index.js +975 -975
- package/dist/node/components/docs/index.js +10791 -10791
- package/dist/node/components/docs/integrations/IntegrationsCircuitBreakersPage.js +17 -17
- package/dist/node/components/docs/integrations/IntegrationsElevenLabsPage.js +47 -47
- package/dist/node/components/docs/integrations/IntegrationsGithubPage.js +61 -61
- package/dist/node/components/docs/integrations/IntegrationsGmailPage.js +49 -49
- package/dist/node/components/docs/integrations/IntegrationsGoogleCalendarPage.js +33 -33
- package/dist/node/components/docs/integrations/IntegrationsHealthRoutingPage.js +65 -65
- package/dist/node/components/docs/integrations/IntegrationsMistralPage.js +69 -69
- package/dist/node/components/docs/integrations/IntegrationsOpenAIPage.js +65 -65
- package/dist/node/components/docs/integrations/IntegrationsOverviewPage.js +313 -313
- package/dist/node/components/docs/integrations/IntegrationsPostmarkPage.js +101 -101
- package/dist/node/components/docs/integrations/IntegrationsPowensPage.js +121 -121
- package/dist/node/components/docs/integrations/IntegrationsQdrantPage.js +49 -49
- package/dist/node/components/docs/integrations/IntegrationsResendPage.js +45 -45
- package/dist/node/components/docs/integrations/IntegrationsS3Page.js +57 -57
- package/dist/node/components/docs/integrations/IntegrationsSlackPage.js +63 -63
- package/dist/node/components/docs/integrations/IntegrationsSpecModelPage.js +139 -139
- package/dist/node/components/docs/integrations/IntegrationsStripePage.js +159 -159
- package/dist/node/components/docs/integrations/IntegrationsTwilioPage.js +61 -61
- package/dist/node/components/docs/integrations/IntegrationsWhatsappMetaPage.js +63 -63
- package/dist/node/components/docs/integrations/IntegrationsWhatsappTwilioPage.js +65 -65
- package/dist/node/components/docs/integrations/index.js +1642 -1642
- package/dist/node/components/docs/intent/ContractFirstApiPage.js +51 -51
- package/dist/node/components/docs/intent/DeterministicCodegenPage.js +59 -59
- package/dist/node/components/docs/intent/GenerateClientFromSchemaPage.js +85 -85
- package/dist/node/components/docs/intent/OpenapiAlternativePage.js +91 -91
- package/dist/node/components/docs/intent/SchemaValidationTypescriptPage.js +59 -59
- package/dist/node/components/docs/intent/SpecDrivenDevelopmentPage.js +51 -51
- package/dist/node/components/docs/intent/index.js +396 -396
- package/dist/node/components/docs/knowledge/KnowledgeCategoriesPage.js +371 -371
- package/dist/node/components/docs/knowledge/KnowledgeExamplesPage.js +79 -79
- package/dist/node/components/docs/knowledge/KnowledgeOverviewPage.js +185 -185
- package/dist/node/components/docs/knowledge/KnowledgeSourcesPage.js +187 -187
- package/dist/node/components/docs/knowledge/KnowledgeSpacesPage.js +141 -141
- package/dist/node/components/docs/knowledge/index.js +963 -963
- package/dist/node/components/docs/libraries/LibrariesAccessibilityPage.js +85 -85
- package/dist/node/components/docs/libraries/LibrariesAiAgentPage.js +63 -63
- package/dist/node/components/docs/libraries/LibrariesAnalyticsPage.js +33 -33
- package/dist/node/components/docs/libraries/LibrariesContentGenPage.js +43 -43
- package/dist/node/components/docs/libraries/LibrariesContractsPage.js +125 -125
- package/dist/node/components/docs/libraries/LibrariesCostTrackingPage.js +45 -45
- package/dist/node/components/docs/libraries/LibrariesDataBackendPage.js +69 -69
- package/dist/node/components/docs/libraries/LibrariesDataViewsPage.js +79 -79
- package/dist/node/components/docs/libraries/LibrariesDesignSystemPage.js +129 -129
- package/dist/node/components/docs/libraries/LibrariesEvolutionPage.js +49 -49
- package/dist/node/components/docs/libraries/LibrariesGraphQLPage.js +73 -73
- package/dist/node/components/docs/libraries/LibrariesGrowthPage.js +35 -35
- package/dist/node/components/docs/libraries/LibrariesMultiTenancyPage.js +43 -43
- package/dist/node/components/docs/libraries/LibrariesObservabilityPage.js +53 -53
- package/dist/node/components/docs/libraries/LibrariesOverlayEnginePage.js +45 -45
- package/dist/node/components/docs/libraries/LibrariesOverviewPage.js +191 -191
- package/dist/node/components/docs/libraries/LibrariesPersonalizationPage.js +47 -47
- package/dist/node/components/docs/libraries/LibrariesProgressiveDeliveryPage.js +53 -53
- package/dist/node/components/docs/libraries/LibrariesResiliencePage.js +49 -49
- package/dist/node/components/docs/libraries/LibrariesRuntimePage.js +87 -87
- package/dist/node/components/docs/libraries/LibrariesSLOPage.js +47 -47
- package/dist/node/components/docs/libraries/LibrariesSchemaPage.js +139 -139
- package/dist/node/components/docs/libraries/LibrariesSupportBotPage.js +57 -57
- package/dist/node/components/docs/libraries/LibrariesTestingPage.js +49 -49
- package/dist/node/components/docs/libraries/LibrariesUIKitPage.js +107 -107
- package/dist/node/components/docs/libraries/LibrariesWorkflowComposerPage.js +35 -35
- package/dist/node/components/docs/libraries/LibrariesWorkflowsPage.js +89 -89
- package/dist/node/components/docs/libraries/index.js +1919 -1919
- package/dist/node/components/docs/manifesto/ManifestoPage.js +79 -79
- package/dist/node/components/docs/ops/AutoEvolutionOpsPage.js +59 -59
- package/dist/node/components/docs/ops/DistributedTracingOpsPage.js +33 -33
- package/dist/node/components/docs/ops/index.js +92 -92
- package/dist/node/components/docs/reference/DocsMarkdownContent.js +27 -27
- package/dist/node/components/docs/reference/DocsReferenceContent.js +34 -34
- package/dist/node/components/docs/reference/DocsReferenceIndexClient.js +23 -23
- package/dist/node/components/docs/reference/DocsReferenceIndexPage.js +26 -26
- package/dist/node/components/docs/reference/DocsReferencePage.js +37 -37
- package/dist/node/components/docs/reference/index.js +63 -63
- package/dist/node/components/docs/safety/SafetyAuditingPage.js +161 -161
- package/dist/node/components/docs/safety/SafetyMigrationsPage.js +169 -169
- package/dist/node/components/docs/safety/SafetyOverviewPage.js +99 -99
- package/dist/node/components/docs/safety/SafetyPDPPage.js +137 -137
- package/dist/node/components/docs/safety/SafetySecurityTrustPage.js +95 -95
- package/dist/node/components/docs/safety/SafetySigningPage.js +39 -39
- package/dist/node/components/docs/safety/SafetyTenantIsolationPage.js +33 -33
- package/dist/node/components/docs/safety/index.js +733 -733
- package/dist/node/components/docs/shared/StudioPrompt.js +9 -9
- package/dist/node/components/docs/specs/SpecsCapabilitiesPage.js +61 -61
- package/dist/node/components/docs/specs/SpecsDataViewsPage.js +119 -119
- package/dist/node/components/docs/specs/SpecsOverlaysPage.js +171 -171
- package/dist/node/components/docs/specs/SpecsOverviewPage.js +167 -167
- package/dist/node/components/docs/specs/SpecsPolicyPage.js +179 -179
- package/dist/node/components/docs/specs/SpecsWorkflowsPage.js +141 -141
- package/dist/node/components/docs/specs/index.js +838 -838
- package/dist/node/components/docs/studio/StudioBYOKPage.js +9 -9
- package/dist/node/components/docs/studio/StudioDeploymentsPage.js +9 -9
- package/dist/node/components/docs/studio/StudioGettingStartedPage.js +9 -9
- package/dist/node/components/docs/studio/StudioIntegrationsPage.js +9 -9
- package/dist/node/components/docs/studio/StudioOverviewPage.js +33 -33
- package/dist/node/components/docs/studio/StudioVisualBuilderPage.js +9 -9
- package/dist/node/components/docs/studio/index.js +78 -78
- package/dist/node/components/integrations/index.js +209 -209
- package/dist/node/components/integrations/molecules/IntegrationCard.js +33 -33
- package/dist/node/components/integrations/organisms/IntegrationMarketplace.js +71 -71
- package/dist/node/components/integrations/organisms/IntegrationSettings.js +98 -98
- package/dist/node/components/integrations/organisms/KnowledgeSourceList.js +40 -40
- package/dist/node/components/legal/PrivacyTemplate.js +477 -477
- package/dist/node/components/legal/TermsTemplate.js +421 -421
- package/dist/node/components/legal/index.js +898 -898
- package/dist/node/components/shared/FeatureGateNotice.js +13 -13
- package/dist/node/components/shared/index.js +13 -13
- package/dist/node/components/shell/WorkspaceHeader.js +37 -37
- package/dist/node/components/shell/WorkspaceProjectShellLayout.js +77 -77
- package/dist/node/components/shell/WorkspaceShellRenderer.js +228 -0
- package/dist/node/components/shell/WorkspaceSidebar.js +27 -27
- package/dist/node/components/shell/index.js +140 -77
- package/dist/node/components/templates/index.js +272 -272
- package/dist/node/components/templates/messaging/ConversationList.js +27 -27
- package/dist/node/components/templates/messaging/MessageComposer.js +27 -27
- package/dist/node/components/templates/messaging/MessageThread.js +18 -18
- package/dist/node/components/templates/messaging/MessagingWorkspace.js +65 -65
- package/dist/node/components/templates/messaging/index.js +65 -65
- package/dist/node/components/templates/recipes/LanguageSwitcher.js +5 -5
- package/dist/node/components/templates/recipes/RecipeCard.js +26 -26
- package/dist/node/components/templates/recipes/RecipeDetail.js +33 -33
- package/dist/node/components/templates/recipes/RecipeList.js +80 -80
- package/dist/node/components/templates/recipes/index.js +80 -80
- package/dist/node/components/templates/todos/FilterBar.js +39 -39
- package/dist/node/components/templates/todos/TaskForm.js +43 -43
- package/dist/node/components/templates/todos/TaskItem.js +30 -30
- package/dist/node/components/templates/todos/TaskList.js +127 -127
- package/dist/node/components/templates/todos/index.js +127 -127
- package/dist/node/index.js +12323 -12260
- package/dist/node/infrastructure/elysia/index.js +8 -8
- package/dist/node/infrastructure/elysia/logger.js +8 -8
- package/dist/node/infrastructure/index.js +8 -8
- package/dist/node/libs/posthog/client.js +2 -2
- package/dist/node/presentation/features/atoms/FeatureIcon/FeatureIcon.js +3 -3
- package/dist/node/presentation/features/atoms/FeatureIcon/index.js +3 -3
- package/dist/node/presentation/features/atoms/index.js +3 -3
- package/dist/node/presentation/features/index.js +915 -915
- package/dist/node/presentation/features/molecules/FeatureCard/FeatureCard.js +101 -101
- package/dist/node/presentation/features/molecules/FeatureCard/index.js +101 -101
- package/dist/node/presentation/features/molecules/FeatureCategoryHeader/FeatureCategoryHeader.js +15 -15
- package/dist/node/presentation/features/molecules/FeatureCategoryHeader/index.js +15 -15
- package/dist/node/presentation/features/molecules/FeatureFilters/FeatureFilters.js +23 -23
- package/dist/node/presentation/features/molecules/FeatureFilters/index.js +23 -23
- package/dist/node/presentation/features/molecules/FeatureHoverPreview/FeatureHoverPreview.js +67 -67
- package/dist/node/presentation/features/molecules/FeatureHoverPreview/index.js +67 -67
- package/dist/node/presentation/features/molecules/index.js +139 -139
- package/dist/node/presentation/features/organisms/FeatureDataViewsList.js +7 -7
- package/dist/node/presentation/features/organisms/FeatureDetail/FeatureDetail.js +57 -57
- package/dist/node/presentation/features/organisms/FeatureDetail/index.js +57 -57
- package/dist/node/presentation/features/organisms/FeatureDiscovery/FeatureDiscovery.js +183 -183
- package/dist/node/presentation/features/organisms/FeatureDiscovery/index.js +183 -183
- package/dist/node/presentation/features/organisms/FeatureEventsList.js +7 -7
- package/dist/node/presentation/features/organisms/FeatureFormsList.js +7 -7
- package/dist/node/presentation/features/organisms/FeatureOperationsList.js +7 -7
- package/dist/node/presentation/features/organisms/FeaturePresentationsList.js +7 -7
- package/dist/node/presentation/features/organisms/index.js +275 -275
- package/dist/node/presentation/features/templates/FeatureDataViewDetailTemplate/FeatureDataViewDetailTemplate.js +126 -126
- package/dist/node/presentation/features/templates/FeatureDataViewDetailTemplate/index.js +126 -126
- package/dist/node/presentation/features/templates/FeatureDataViewsTemplate/FeatureDataViewsTemplate.js +16 -16
- package/dist/node/presentation/features/templates/FeatureDataViewsTemplate/index.js +16 -16
- package/dist/node/presentation/features/templates/FeatureEventDetailTemplate/FeatureEventDetailTemplate.js +112 -112
- package/dist/node/presentation/features/templates/FeatureEventDetailTemplate/index.js +112 -112
- package/dist/node/presentation/features/templates/FeatureEventsTemplate/FeatureEventsTemplate.js +16 -16
- package/dist/node/presentation/features/templates/FeatureEventsTemplate/index.js +16 -16
- package/dist/node/presentation/features/templates/FeatureFormDetailTemplate/FeatureFormDetailTemplate.js +126 -126
- package/dist/node/presentation/features/templates/FeatureFormDetailTemplate/index.js +126 -126
- package/dist/node/presentation/features/templates/FeatureFormsTemplate/FeatureFormsTemplate.js +16 -16
- package/dist/node/presentation/features/templates/FeatureFormsTemplate/index.js +16 -16
- package/dist/node/presentation/features/templates/FeatureOperationDetailTemplate/FeatureOperationDetailTemplate.js +110 -110
- package/dist/node/presentation/features/templates/FeatureOperationDetailTemplate/index.js +110 -110
- package/dist/node/presentation/features/templates/FeatureOperationsTemplate/FeatureOperationsTemplate.js +16 -16
- package/dist/node/presentation/features/templates/FeatureOperationsTemplate/index.js +16 -16
- package/dist/node/presentation/features/templates/FeatureOverviewTemplate/FeatureOverviewTemplate.js +66 -66
- package/dist/node/presentation/features/templates/FeatureOverviewTemplate/index.js +66 -66
- package/dist/node/presentation/features/templates/FeaturePresentationDetailTemplate/FeaturePresentationDetailTemplate.js +112 -112
- package/dist/node/presentation/features/templates/FeaturePresentationDetailTemplate/index.js +112 -112
- package/dist/node/presentation/features/templates/FeaturePresentationsTemplate/FeaturePresentationsTemplate.js +16 -16
- package/dist/node/presentation/features/templates/FeaturePresentationsTemplate/index.js +16 -16
- package/dist/presentation/features/atoms/FeatureIcon/FeatureIcon.js +3 -3
- package/dist/presentation/features/atoms/FeatureIcon/index.js +3 -3
- package/dist/presentation/features/atoms/index.js +3 -3
- package/dist/presentation/features/index.js +915 -915
- package/dist/presentation/features/molecules/FeatureCard/FeatureCard.js +101 -101
- package/dist/presentation/features/molecules/FeatureCard/index.js +101 -101
- package/dist/presentation/features/molecules/FeatureCategoryHeader/FeatureCategoryHeader.js +15 -15
- package/dist/presentation/features/molecules/FeatureCategoryHeader/index.js +15 -15
- package/dist/presentation/features/molecules/FeatureFilters/FeatureFilters.js +23 -23
- package/dist/presentation/features/molecules/FeatureFilters/index.js +23 -23
- package/dist/presentation/features/molecules/FeatureHoverPreview/FeatureHoverPreview.js +67 -67
- package/dist/presentation/features/molecules/FeatureHoverPreview/index.js +67 -67
- package/dist/presentation/features/molecules/index.js +139 -139
- package/dist/presentation/features/organisms/FeatureDataViewsList.js +7 -7
- package/dist/presentation/features/organisms/FeatureDetail/FeatureDetail.js +57 -57
- package/dist/presentation/features/organisms/FeatureDetail/index.js +57 -57
- package/dist/presentation/features/organisms/FeatureDiscovery/FeatureDiscovery.js +183 -183
- package/dist/presentation/features/organisms/FeatureDiscovery/index.js +183 -183
- package/dist/presentation/features/organisms/FeatureEventsList.js +7 -7
- package/dist/presentation/features/organisms/FeatureFormsList.js +7 -7
- package/dist/presentation/features/organisms/FeatureOperationsList.js +7 -7
- package/dist/presentation/features/organisms/FeaturePresentationsList.js +7 -7
- package/dist/presentation/features/organisms/index.js +275 -275
- package/dist/presentation/features/templates/FeatureDataViewDetailTemplate/FeatureDataViewDetailTemplate.js +126 -126
- package/dist/presentation/features/templates/FeatureDataViewDetailTemplate/index.js +126 -126
- package/dist/presentation/features/templates/FeatureDataViewsTemplate/FeatureDataViewsTemplate.js +16 -16
- package/dist/presentation/features/templates/FeatureDataViewsTemplate/index.js +16 -16
- package/dist/presentation/features/templates/FeatureEventDetailTemplate/FeatureEventDetailTemplate.js +112 -112
- package/dist/presentation/features/templates/FeatureEventDetailTemplate/index.js +112 -112
- package/dist/presentation/features/templates/FeatureEventsTemplate/FeatureEventsTemplate.js +16 -16
- package/dist/presentation/features/templates/FeatureEventsTemplate/index.js +16 -16
- package/dist/presentation/features/templates/FeatureFormDetailTemplate/FeatureFormDetailTemplate.js +126 -126
- package/dist/presentation/features/templates/FeatureFormDetailTemplate/index.js +126 -126
- package/dist/presentation/features/templates/FeatureFormsTemplate/FeatureFormsTemplate.js +16 -16
- package/dist/presentation/features/templates/FeatureFormsTemplate/index.js +16 -16
- package/dist/presentation/features/templates/FeatureOperationDetailTemplate/FeatureOperationDetailTemplate.js +110 -110
- package/dist/presentation/features/templates/FeatureOperationDetailTemplate/index.js +110 -110
- package/dist/presentation/features/templates/FeatureOperationsTemplate/FeatureOperationsTemplate.js +16 -16
- package/dist/presentation/features/templates/FeatureOperationsTemplate/index.js +16 -16
- package/dist/presentation/features/templates/FeatureOverviewTemplate/FeatureOverviewTemplate.js +66 -66
- package/dist/presentation/features/templates/FeatureOverviewTemplate/index.js +66 -66
- package/dist/presentation/features/templates/FeaturePresentationDetailTemplate/FeaturePresentationDetailTemplate.js +112 -112
- package/dist/presentation/features/templates/FeaturePresentationDetailTemplate/index.js +112 -112
- package/dist/presentation/features/templates/FeaturePresentationsTemplate/FeaturePresentationsTemplate.js +16 -16
- package/dist/presentation/features/templates/FeaturePresentationsTemplate/index.js +16 -16
- package/package.json +71 -22
- package/src/bundles/LibraryBundle.ts +152 -0
- package/src/bundles/index.ts +1 -0
- package/src/components/shell/WorkspaceShellRenderer.tsx +90 -0
- package/src/components/shell/index.ts +1 -0
|
@@ -1,1504 +1,1504 @@
|
|
|
1
1
|
// src/components/docs/comparison/ComparisonAutomationPlatformsPage.tsx
|
|
2
|
-
import {
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
function ComparisonAutomationPlatformsPage() {
|
|
4
|
-
return /* @__PURE__ */
|
|
4
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
5
5
|
className: "space-y-8",
|
|
6
6
|
children: [
|
|
7
|
-
/* @__PURE__ */
|
|
7
|
+
/* @__PURE__ */ jsxs("div", {
|
|
8
8
|
className: "space-y-4",
|
|
9
9
|
children: [
|
|
10
|
-
/* @__PURE__ */
|
|
10
|
+
/* @__PURE__ */ jsx("h1", {
|
|
11
11
|
className: "text-4xl font-bold",
|
|
12
12
|
children: "Automation platforms"
|
|
13
|
-
}
|
|
14
|
-
/* @__PURE__ */
|
|
13
|
+
}),
|
|
14
|
+
/* @__PURE__ */ jsx("p", {
|
|
15
15
|
className: "text-muted-foreground",
|
|
16
16
|
children: "Automation platforms connect apps and automate tasks through triggers and actions. They serve operations and non-technical users well but stop short of generating full applications or enforcing fine-grained policies."
|
|
17
|
-
}
|
|
17
|
+
})
|
|
18
18
|
]
|
|
19
|
-
}
|
|
20
|
-
/* @__PURE__ */
|
|
19
|
+
}),
|
|
20
|
+
/* @__PURE__ */ jsxs("div", {
|
|
21
21
|
className: "space-y-4",
|
|
22
22
|
children: [
|
|
23
|
-
/* @__PURE__ */
|
|
23
|
+
/* @__PURE__ */ jsx("h2", {
|
|
24
24
|
className: "text-2xl font-bold",
|
|
25
25
|
children: "Feature comparison"
|
|
26
|
-
}
|
|
27
|
-
/* @__PURE__ */
|
|
26
|
+
}),
|
|
27
|
+
/* @__PURE__ */ jsx("div", {
|
|
28
28
|
className: "border-border/50 overflow-x-auto rounded-lg border",
|
|
29
|
-
children: /* @__PURE__ */
|
|
29
|
+
children: /* @__PURE__ */ jsxs("table", {
|
|
30
30
|
className: "w-full text-left text-sm",
|
|
31
31
|
children: [
|
|
32
|
-
/* @__PURE__ */
|
|
32
|
+
/* @__PURE__ */ jsx("thead", {
|
|
33
33
|
className: "bg-card/50",
|
|
34
|
-
children: /* @__PURE__ */
|
|
34
|
+
children: /* @__PURE__ */ jsxs("tr", {
|
|
35
35
|
className: "border-border/50 border-b",
|
|
36
36
|
children: [
|
|
37
|
-
/* @__PURE__ */
|
|
37
|
+
/* @__PURE__ */ jsx("th", {
|
|
38
38
|
className: "px-4 py-3 font-semibold",
|
|
39
39
|
children: "Feature"
|
|
40
|
-
}
|
|
41
|
-
/* @__PURE__ */
|
|
40
|
+
}),
|
|
41
|
+
/* @__PURE__ */ jsx("th", {
|
|
42
42
|
className: "px-4 py-3 font-semibold",
|
|
43
43
|
children: "Zapier"
|
|
44
|
-
}
|
|
45
|
-
/* @__PURE__ */
|
|
44
|
+
}),
|
|
45
|
+
/* @__PURE__ */ jsx("th", {
|
|
46
46
|
className: "px-4 py-3 font-semibold",
|
|
47
47
|
children: "Make (Integromat)"
|
|
48
|
-
}
|
|
49
|
-
/* @__PURE__ */
|
|
48
|
+
}),
|
|
49
|
+
/* @__PURE__ */ jsx("th", {
|
|
50
50
|
className: "px-4 py-3 font-semibold",
|
|
51
51
|
children: "n8n"
|
|
52
|
-
}
|
|
53
|
-
/* @__PURE__ */
|
|
52
|
+
}),
|
|
53
|
+
/* @__PURE__ */ jsx("th", {
|
|
54
54
|
className: "px-4 py-3 font-semibold",
|
|
55
55
|
children: "Pipedream"
|
|
56
|
-
}
|
|
56
|
+
})
|
|
57
57
|
]
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
/* @__PURE__ */
|
|
58
|
+
})
|
|
59
|
+
}),
|
|
60
|
+
/* @__PURE__ */ jsxs("tbody", {
|
|
61
61
|
className: "divide-border/50 divide-y",
|
|
62
62
|
children: [
|
|
63
|
-
/* @__PURE__ */
|
|
63
|
+
/* @__PURE__ */ jsxs("tr", {
|
|
64
64
|
children: [
|
|
65
|
-
/* @__PURE__ */
|
|
65
|
+
/* @__PURE__ */ jsx("td", {
|
|
66
66
|
className: "px-4 py-3 align-top font-semibold",
|
|
67
67
|
children: "Workflow model"
|
|
68
|
-
}
|
|
69
|
-
/* @__PURE__ */
|
|
68
|
+
}),
|
|
69
|
+
/* @__PURE__ */ jsx("td", {
|
|
70
70
|
className: "px-4 py-3 align-top",
|
|
71
71
|
children: "Zaps: trigger + one or more actions"
|
|
72
|
-
}
|
|
73
|
-
/* @__PURE__ */
|
|
72
|
+
}),
|
|
73
|
+
/* @__PURE__ */ jsx("td", {
|
|
74
74
|
className: "px-4 py-3 align-top",
|
|
75
75
|
children: "Real-time visual orchestration for AI agents and automations"
|
|
76
|
-
}
|
|
77
|
-
/* @__PURE__ */
|
|
76
|
+
}),
|
|
77
|
+
/* @__PURE__ */ jsx("td", {
|
|
78
78
|
className: "px-4 py-3 align-top",
|
|
79
79
|
children: "Node-based workflow builder with drag-and-drop and code; build multi-step AI agents"
|
|
80
|
-
}
|
|
81
|
-
/* @__PURE__ */
|
|
80
|
+
}),
|
|
81
|
+
/* @__PURE__ */ jsx("td", {
|
|
82
82
|
className: "px-4 py-3 align-top",
|
|
83
83
|
children: "Workflows connect any API; Pipedream Connect SDK adds integrations quickly"
|
|
84
|
-
}
|
|
84
|
+
})
|
|
85
85
|
]
|
|
86
|
-
}
|
|
87
|
-
/* @__PURE__ */
|
|
86
|
+
}),
|
|
87
|
+
/* @__PURE__ */ jsxs("tr", {
|
|
88
88
|
children: [
|
|
89
|
-
/* @__PURE__ */
|
|
89
|
+
/* @__PURE__ */ jsx("td", {
|
|
90
90
|
className: "px-4 py-3 align-top font-semibold",
|
|
91
91
|
children: "Visual builder?"
|
|
92
|
-
}
|
|
93
|
-
/* @__PURE__ */
|
|
92
|
+
}),
|
|
93
|
+
/* @__PURE__ */ jsx("td", {
|
|
94
94
|
className: "px-4 py-3 align-top",
|
|
95
95
|
children: "Yes (simple; web-based)."
|
|
96
|
-
}
|
|
97
|
-
/* @__PURE__ */
|
|
96
|
+
}),
|
|
97
|
+
/* @__PURE__ */ jsx("td", {
|
|
98
98
|
className: "px-4 py-3 align-top",
|
|
99
99
|
children: "Yes; AI-assisted editor"
|
|
100
|
-
}
|
|
101
|
-
/* @__PURE__ */
|
|
100
|
+
}),
|
|
101
|
+
/* @__PURE__ */ jsx("td", {
|
|
102
102
|
className: "px-4 py-3 align-top",
|
|
103
103
|
children: "Yes; visual canvas."
|
|
104
|
-
}
|
|
105
|
-
/* @__PURE__ */
|
|
104
|
+
}),
|
|
105
|
+
/* @__PURE__ */ jsx("td", {
|
|
106
106
|
className: "px-4 py-3 align-top",
|
|
107
107
|
children: "Code-centric editor; no visual UI builder"
|
|
108
|
-
}
|
|
108
|
+
})
|
|
109
109
|
]
|
|
110
|
-
}
|
|
111
|
-
/* @__PURE__ */
|
|
110
|
+
}),
|
|
111
|
+
/* @__PURE__ */ jsxs("tr", {
|
|
112
112
|
children: [
|
|
113
|
-
/* @__PURE__ */
|
|
113
|
+
/* @__PURE__ */ jsx("td", {
|
|
114
114
|
className: "px-4 py-3 align-top font-semibold",
|
|
115
115
|
children: "Self-host?"
|
|
116
|
-
}
|
|
117
|
-
/* @__PURE__ */
|
|
116
|
+
}),
|
|
117
|
+
/* @__PURE__ */ jsx("td", {
|
|
118
118
|
className: "px-4 py-3 align-top",
|
|
119
119
|
children: "No (cloud only)."
|
|
120
|
-
}
|
|
121
|
-
/* @__PURE__ */
|
|
120
|
+
}),
|
|
121
|
+
/* @__PURE__ */ jsx("td", {
|
|
122
122
|
className: "px-4 py-3 align-top",
|
|
123
123
|
children: "Cloud only."
|
|
124
|
-
}
|
|
125
|
-
/* @__PURE__ */
|
|
124
|
+
}),
|
|
125
|
+
/* @__PURE__ */ jsx("td", {
|
|
126
126
|
className: "px-4 py-3 align-top",
|
|
127
127
|
children: "Yes (Docker, self-host)"
|
|
128
|
-
}
|
|
129
|
-
/* @__PURE__ */
|
|
128
|
+
}),
|
|
129
|
+
/* @__PURE__ */ jsx("td", {
|
|
130
130
|
className: "px-4 py-3 align-top",
|
|
131
131
|
children: "Cloud only (hosted)."
|
|
132
|
-
}
|
|
132
|
+
})
|
|
133
133
|
]
|
|
134
|
-
}
|
|
135
|
-
/* @__PURE__ */
|
|
134
|
+
}),
|
|
135
|
+
/* @__PURE__ */ jsxs("tr", {
|
|
136
136
|
children: [
|
|
137
|
-
/* @__PURE__ */
|
|
137
|
+
/* @__PURE__ */ jsx("td", {
|
|
138
138
|
className: "px-4 py-3 align-top font-semibold",
|
|
139
139
|
children: "Integrations & AI"
|
|
140
|
-
}
|
|
141
|
-
/* @__PURE__ */
|
|
140
|
+
}),
|
|
141
|
+
/* @__PURE__ */ jsx("td", {
|
|
142
142
|
className: "px-4 py-3 align-top",
|
|
143
143
|
children: "Connects almost 8 000 apps; limited AI features."
|
|
144
|
-
}
|
|
145
|
-
/* @__PURE__ */
|
|
144
|
+
}),
|
|
145
|
+
/* @__PURE__ */ jsx("td", {
|
|
146
146
|
className: "px-4 py-3 align-top",
|
|
147
147
|
children: "3 000+ pre-built apps; supports GenAI tools; GDPR/SOC2 and SSO"
|
|
148
|
-
}
|
|
149
|
-
/* @__PURE__ */
|
|
148
|
+
}),
|
|
149
|
+
/* @__PURE__ */ jsx("td", {
|
|
150
150
|
className: "px-4 py-3 align-top",
|
|
151
151
|
children: "Integrates LLMs; allows JS or Python code and library imports; chatbots with Slack/Teams"
|
|
152
|
-
}
|
|
153
|
-
/* @__PURE__ */
|
|
152
|
+
}),
|
|
153
|
+
/* @__PURE__ */ jsx("td", {
|
|
154
154
|
className: "px-4 py-3 align-top",
|
|
155
155
|
children: "MCP servers add 3 000+ APIs and 10 000+ tools to agents; AI agent builder prompts and deploys agents; SOC 2/ HIPAA/GDPR compliant"
|
|
156
|
-
}
|
|
156
|
+
})
|
|
157
157
|
]
|
|
158
|
-
}
|
|
159
|
-
/* @__PURE__ */
|
|
158
|
+
}),
|
|
159
|
+
/* @__PURE__ */ jsxs("tr", {
|
|
160
160
|
children: [
|
|
161
|
-
/* @__PURE__ */
|
|
161
|
+
/* @__PURE__ */ jsx("td", {
|
|
162
162
|
className: "px-4 py-3 align-top font-semibold",
|
|
163
163
|
children: "Policy & UI generation"
|
|
164
|
-
}
|
|
165
|
-
/* @__PURE__ */
|
|
164
|
+
}),
|
|
165
|
+
/* @__PURE__ */ jsx("td", {
|
|
166
166
|
className: "px-4 py-3 align-top",
|
|
167
167
|
children: "No policy engine; does not generate user interfaces."
|
|
168
|
-
}
|
|
169
|
-
/* @__PURE__ */
|
|
168
|
+
}),
|
|
169
|
+
/* @__PURE__ */ jsx("td", {
|
|
170
170
|
className: "px-4 py-3 align-top",
|
|
171
171
|
children: "No policy engine; does not generate UIs beyond a workflow dashboard."
|
|
172
|
-
}
|
|
173
|
-
/* @__PURE__ */
|
|
172
|
+
}),
|
|
173
|
+
/* @__PURE__ */ jsx("td", {
|
|
174
174
|
className: "px-4 py-3 align-top",
|
|
175
175
|
children: "No policy engine; no UI builder"
|
|
176
|
-
}
|
|
177
|
-
/* @__PURE__ */
|
|
176
|
+
}),
|
|
177
|
+
/* @__PURE__ */ jsx("td", {
|
|
178
178
|
className: "px-4 py-3 align-top",
|
|
179
179
|
children: "No policy engine; does not generate UI."
|
|
180
|
-
}
|
|
180
|
+
})
|
|
181
181
|
]
|
|
182
|
-
}
|
|
182
|
+
})
|
|
183
183
|
]
|
|
184
|
-
}
|
|
184
|
+
})
|
|
185
185
|
]
|
|
186
|
-
}
|
|
187
|
-
}
|
|
186
|
+
})
|
|
187
|
+
})
|
|
188
188
|
]
|
|
189
|
-
}
|
|
190
|
-
/* @__PURE__ */
|
|
189
|
+
}),
|
|
190
|
+
/* @__PURE__ */ jsxs("div", {
|
|
191
191
|
className: "space-y-3",
|
|
192
192
|
children: [
|
|
193
|
-
/* @__PURE__ */
|
|
193
|
+
/* @__PURE__ */ jsx("h2", {
|
|
194
194
|
className: "text-2xl font-bold",
|
|
195
195
|
children: "Why ContractSpec differs"
|
|
196
|
-
}
|
|
197
|
-
/* @__PURE__ */
|
|
196
|
+
}),
|
|
197
|
+
/* @__PURE__ */ jsxs("ul", {
|
|
198
198
|
className: "text-muted-foreground space-y-2",
|
|
199
199
|
children: [
|
|
200
|
-
/* @__PURE__ */
|
|
200
|
+
/* @__PURE__ */ jsxs("li", {
|
|
201
201
|
children: [
|
|
202
|
-
/* @__PURE__ */
|
|
202
|
+
/* @__PURE__ */ jsx("strong", {
|
|
203
203
|
children: "Full application generation"
|
|
204
|
-
}
|
|
204
|
+
}),
|
|
205
205
|
" – ContractSpec compiles specs into back-end, events and user interfaces for both web and mobile."
|
|
206
206
|
]
|
|
207
|
-
}
|
|
208
|
-
/* @__PURE__ */
|
|
207
|
+
}),
|
|
208
|
+
/* @__PURE__ */ jsxs("li", {
|
|
209
209
|
children: [
|
|
210
|
-
/* @__PURE__ */
|
|
210
|
+
/* @__PURE__ */ jsx("strong", {
|
|
211
211
|
children: "Policy enforcement"
|
|
212
|
-
}
|
|
212
|
+
}),
|
|
213
213
|
" – A built-in policy engine governs PII access and mutations across the UI."
|
|
214
214
|
]
|
|
215
|
-
}
|
|
216
|
-
/* @__PURE__ */
|
|
215
|
+
}),
|
|
216
|
+
/* @__PURE__ */ jsxs("li", {
|
|
217
217
|
children: [
|
|
218
|
-
/* @__PURE__ */
|
|
218
|
+
/* @__PURE__ */ jsx("strong", {
|
|
219
219
|
children: "Customisation via overlays"
|
|
220
|
-
}
|
|
220
|
+
}),
|
|
221
221
|
" – Non-technical users can safely personalise layouts while respecting policies."
|
|
222
222
|
]
|
|
223
|
-
}
|
|
224
|
-
/* @__PURE__ */
|
|
223
|
+
}),
|
|
224
|
+
/* @__PURE__ */ jsxs("li", {
|
|
225
225
|
children: [
|
|
226
|
-
/* @__PURE__ */
|
|
226
|
+
/* @__PURE__ */ jsx("strong", {
|
|
227
227
|
children: "Extensible capabilities"
|
|
228
|
-
}
|
|
228
|
+
}),
|
|
229
229
|
" – Connect to external APIs and services via capability providers while maintaining type safety."
|
|
230
230
|
]
|
|
231
|
-
}
|
|
231
|
+
})
|
|
232
232
|
]
|
|
233
|
-
}
|
|
234
|
-
/* @__PURE__ */
|
|
233
|
+
}),
|
|
234
|
+
/* @__PURE__ */ jsx("p", {
|
|
235
235
|
className: "text-muted-foreground",
|
|
236
236
|
children: "Automation tools simplify integrations and tasks; ContractSpec goes further by generating a complete, policy-safe application around your data and processes."
|
|
237
|
-
}
|
|
237
|
+
})
|
|
238
238
|
]
|
|
239
|
-
}
|
|
239
|
+
})
|
|
240
240
|
]
|
|
241
|
-
}
|
|
241
|
+
});
|
|
242
242
|
}
|
|
243
243
|
|
|
244
244
|
// src/components/docs/comparison/ComparisonEnterprisePlatformsPage.tsx
|
|
245
245
|
import Link from "@contractspec/lib.ui-link";
|
|
246
|
-
import {
|
|
246
|
+
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
247
247
|
function ComparisonEnterprisePlatformsPage() {
|
|
248
|
-
return /* @__PURE__ */
|
|
248
|
+
return /* @__PURE__ */ jsxs2("div", {
|
|
249
249
|
className: "space-y-8",
|
|
250
250
|
children: [
|
|
251
|
-
/* @__PURE__ */
|
|
251
|
+
/* @__PURE__ */ jsxs2("div", {
|
|
252
252
|
className: "space-y-4",
|
|
253
253
|
children: [
|
|
254
|
-
/* @__PURE__ */
|
|
254
|
+
/* @__PURE__ */ jsx2("h1", {
|
|
255
255
|
className: "text-4xl font-bold",
|
|
256
256
|
children: "Enterprise orchestration platforms"
|
|
257
|
-
}
|
|
258
|
-
/* @__PURE__ */
|
|
257
|
+
}),
|
|
258
|
+
/* @__PURE__ */ jsx2("p", {
|
|
259
259
|
className: "text-muted-foreground",
|
|
260
260
|
children: "Enterprise orchestration platforms manage mission-critical workloads and integrate deeply with ERP systems. They prioritise governance, reliability and compliance, but they do not provide spec-driven app generation or per-user customisation."
|
|
261
|
-
}
|
|
261
|
+
})
|
|
262
262
|
]
|
|
263
|
-
}
|
|
264
|
-
/* @__PURE__ */
|
|
263
|
+
}),
|
|
264
|
+
/* @__PURE__ */ jsxs2("div", {
|
|
265
265
|
className: "space-y-4",
|
|
266
266
|
children: [
|
|
267
|
-
/* @__PURE__ */
|
|
267
|
+
/* @__PURE__ */ jsx2("h2", {
|
|
268
268
|
className: "text-2xl font-bold",
|
|
269
269
|
children: "Redwood RunMyJobs"
|
|
270
|
-
}
|
|
271
|
-
/* @__PURE__ */
|
|
270
|
+
}),
|
|
271
|
+
/* @__PURE__ */ jsxs2("p", {
|
|
272
272
|
className: "text-muted-foreground",
|
|
273
273
|
children: [
|
|
274
|
-
/* @__PURE__ */
|
|
274
|
+
/* @__PURE__ */ jsx2(Link, {
|
|
275
275
|
href: "https://www.redwood.com/workload-automation/",
|
|
276
276
|
className: "hover:text-foreground underline decoration-dotted underline-offset-4",
|
|
277
277
|
target: "_blank",
|
|
278
278
|
rel: "noreferrer",
|
|
279
279
|
children: "RunMyJobs by Redwood"
|
|
280
|
-
}
|
|
280
|
+
}),
|
|
281
281
|
" ",
|
|
282
282
|
"is a cloud-native service orchestration and automation platform. Key attributes include:"
|
|
283
283
|
]
|
|
284
|
-
}
|
|
285
|
-
/* @__PURE__ */
|
|
284
|
+
}),
|
|
285
|
+
/* @__PURE__ */ jsxs2("ul", {
|
|
286
286
|
className: "text-muted-foreground space-y-2",
|
|
287
287
|
children: [
|
|
288
|
-
/* @__PURE__ */
|
|
288
|
+
/* @__PURE__ */ jsxs2("li", {
|
|
289
289
|
children: [
|
|
290
|
-
/* @__PURE__ */
|
|
290
|
+
/* @__PURE__ */ jsx2("strong", {
|
|
291
291
|
children: "Self-service portal."
|
|
292
|
-
}
|
|
292
|
+
}),
|
|
293
293
|
" Business users can run and customise workloads while IT ensures governance and compliance"
|
|
294
294
|
]
|
|
295
|
-
}
|
|
296
|
-
/* @__PURE__ */
|
|
295
|
+
}),
|
|
296
|
+
/* @__PURE__ */ jsxs2("li", {
|
|
297
297
|
children: [
|
|
298
|
-
/* @__PURE__ */
|
|
298
|
+
/* @__PURE__ */ jsx2("strong", {
|
|
299
299
|
children: "Full-stack orchestration."
|
|
300
|
-
}
|
|
300
|
+
}),
|
|
301
301
|
" Integrates with both SAP and non-SAP systems; Redwood is recognised as a Leader in Gartner’s Magic Quadrant for service orchestration"
|
|
302
302
|
]
|
|
303
|
-
}
|
|
304
|
-
/* @__PURE__ */
|
|
303
|
+
}),
|
|
304
|
+
/* @__PURE__ */ jsxs2("li", {
|
|
305
305
|
children: [
|
|
306
|
-
/* @__PURE__ */
|
|
306
|
+
/* @__PURE__ */ jsx2("strong", {
|
|
307
307
|
children: "Observability and AI insights."
|
|
308
|
-
}
|
|
308
|
+
}),
|
|
309
309
|
" Dashboards and AI-enhanced analytics identify bottlenecks and forecast issues"
|
|
310
310
|
]
|
|
311
|
-
}
|
|
312
|
-
/* @__PURE__ */
|
|
311
|
+
}),
|
|
312
|
+
/* @__PURE__ */ jsxs2("li", {
|
|
313
313
|
children: [
|
|
314
|
-
/* @__PURE__ */
|
|
314
|
+
/* @__PURE__ */ jsx2("strong", {
|
|
315
315
|
children: "Deep SAP integration."
|
|
316
|
-
}
|
|
316
|
+
}),
|
|
317
317
|
" Supports SAP’s latest technologies and orchestrates mission-critical business processes"
|
|
318
318
|
]
|
|
319
|
-
}
|
|
320
|
-
/* @__PURE__ */
|
|
319
|
+
}),
|
|
320
|
+
/* @__PURE__ */ jsxs2("li", {
|
|
321
321
|
children: [
|
|
322
|
-
/* @__PURE__ */
|
|
322
|
+
/* @__PURE__ */ jsx2("strong", {
|
|
323
323
|
children: "Connectors & wizard."
|
|
324
|
-
}
|
|
324
|
+
}),
|
|
325
325
|
" Provides pre-built connectors and a wizard to link on-prem and cloud systems"
|
|
326
326
|
]
|
|
327
|
-
}
|
|
327
|
+
})
|
|
328
328
|
]
|
|
329
|
-
}
|
|
329
|
+
})
|
|
330
330
|
]
|
|
331
|
-
}
|
|
332
|
-
/* @__PURE__ */
|
|
331
|
+
}),
|
|
332
|
+
/* @__PURE__ */ jsxs2("div", {
|
|
333
333
|
className: "space-y-4",
|
|
334
334
|
children: [
|
|
335
|
-
/* @__PURE__ */
|
|
335
|
+
/* @__PURE__ */ jsx2("h3", {
|
|
336
336
|
className: "text-xl font-semibold",
|
|
337
337
|
children: "Comparison with ContractSpec"
|
|
338
|
-
}
|
|
339
|
-
/* @__PURE__ */
|
|
338
|
+
}),
|
|
339
|
+
/* @__PURE__ */ jsx2("div", {
|
|
340
340
|
className: "border-border/50 overflow-x-auto rounded-lg border",
|
|
341
|
-
children: /* @__PURE__ */
|
|
341
|
+
children: /* @__PURE__ */ jsxs2("table", {
|
|
342
342
|
className: "w-full text-left text-sm",
|
|
343
343
|
children: [
|
|
344
|
-
/* @__PURE__ */
|
|
344
|
+
/* @__PURE__ */ jsx2("thead", {
|
|
345
345
|
className: "bg-card/50",
|
|
346
|
-
children: /* @__PURE__ */
|
|
346
|
+
children: /* @__PURE__ */ jsxs2("tr", {
|
|
347
347
|
className: "border-border/50 border-b",
|
|
348
348
|
children: [
|
|
349
|
-
/* @__PURE__ */
|
|
349
|
+
/* @__PURE__ */ jsx2("th", {
|
|
350
350
|
className: "px-4 py-3 font-semibold",
|
|
351
351
|
children: "Aspect"
|
|
352
|
-
}
|
|
353
|
-
/* @__PURE__ */
|
|
352
|
+
}),
|
|
353
|
+
/* @__PURE__ */ jsx2("th", {
|
|
354
354
|
className: "px-4 py-3 font-semibold",
|
|
355
355
|
children: "RunMyJobs"
|
|
356
|
-
}
|
|
357
|
-
/* @__PURE__ */
|
|
356
|
+
}),
|
|
357
|
+
/* @__PURE__ */ jsx2("th", {
|
|
358
358
|
className: "px-4 py-3 font-semibold",
|
|
359
359
|
children: "ContractSpec"
|
|
360
|
-
}
|
|
360
|
+
})
|
|
361
361
|
]
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
/* @__PURE__ */
|
|
362
|
+
})
|
|
363
|
+
}),
|
|
364
|
+
/* @__PURE__ */ jsxs2("tbody", {
|
|
365
365
|
className: "divide-border/50 divide-y",
|
|
366
366
|
children: [
|
|
367
|
-
/* @__PURE__ */
|
|
367
|
+
/* @__PURE__ */ jsxs2("tr", {
|
|
368
368
|
children: [
|
|
369
|
-
/* @__PURE__ */
|
|
369
|
+
/* @__PURE__ */ jsx2("td", {
|
|
370
370
|
className: "px-4 py-3 align-top",
|
|
371
|
-
children: /* @__PURE__ */
|
|
371
|
+
children: /* @__PURE__ */ jsx2("strong", {
|
|
372
372
|
children: "Target user"
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
/* @__PURE__ */
|
|
373
|
+
})
|
|
374
|
+
}),
|
|
375
|
+
/* @__PURE__ */ jsx2("td", {
|
|
376
376
|
className: "px-4 py-3 align-top",
|
|
377
377
|
children: "Enterprise IT and operations teams automating SAP and mission-critical workflows."
|
|
378
|
-
}
|
|
379
|
-
/* @__PURE__ */
|
|
378
|
+
}),
|
|
379
|
+
/* @__PURE__ */ jsx2("td", {
|
|
380
380
|
className: "px-4 py-3 align-top",
|
|
381
381
|
children: "Developers, product teams and SMBs wanting to generate policy-safe apps with customisable UIs."
|
|
382
|
-
}
|
|
382
|
+
})
|
|
383
383
|
]
|
|
384
|
-
}
|
|
385
|
-
/* @__PURE__ */
|
|
384
|
+
}),
|
|
385
|
+
/* @__PURE__ */ jsxs2("tr", {
|
|
386
386
|
children: [
|
|
387
|
-
/* @__PURE__ */
|
|
387
|
+
/* @__PURE__ */ jsx2("td", {
|
|
388
388
|
className: "px-4 py-3 align-top",
|
|
389
|
-
children: /* @__PURE__ */
|
|
389
|
+
children: /* @__PURE__ */ jsx2("strong", {
|
|
390
390
|
children: "Workload focus"
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
/* @__PURE__ */
|
|
391
|
+
})
|
|
392
|
+
}),
|
|
393
|
+
/* @__PURE__ */ jsx2("td", {
|
|
394
394
|
className: "px-4 py-3 align-top",
|
|
395
395
|
children: "Service orchestration and job scheduling across ERP/legacy systems"
|
|
396
|
-
}
|
|
397
|
-
/* @__PURE__ */
|
|
396
|
+
}),
|
|
397
|
+
/* @__PURE__ */ jsx2("td", {
|
|
398
398
|
className: "px-4 py-3 align-top",
|
|
399
399
|
children: "End-to-end application generation with back-end, UI and policies."
|
|
400
|
-
}
|
|
400
|
+
})
|
|
401
401
|
]
|
|
402
|
-
}
|
|
403
|
-
/* @__PURE__ */
|
|
402
|
+
}),
|
|
403
|
+
/* @__PURE__ */ jsxs2("tr", {
|
|
404
404
|
children: [
|
|
405
|
-
/* @__PURE__ */
|
|
405
|
+
/* @__PURE__ */ jsx2("td", {
|
|
406
406
|
className: "px-4 py-3 align-top",
|
|
407
|
-
children: /* @__PURE__ */
|
|
407
|
+
children: /* @__PURE__ */ jsx2("strong", {
|
|
408
408
|
children: "User interface"
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
/* @__PURE__ */
|
|
409
|
+
})
|
|
410
|
+
}),
|
|
411
|
+
/* @__PURE__ */ jsx2("td", {
|
|
412
412
|
className: "px-4 py-3 align-top",
|
|
413
413
|
children: "Self-service portal to run/monitor jobs; no custom UI generation for new apps."
|
|
414
|
-
}
|
|
415
|
-
/* @__PURE__ */
|
|
414
|
+
}),
|
|
415
|
+
/* @__PURE__ */ jsx2("td", {
|
|
416
416
|
className: "px-4 py-3 align-top",
|
|
417
417
|
children: "Generates React/React-Native UIs from specs; users can personalise layout via overlays."
|
|
418
|
-
}
|
|
418
|
+
})
|
|
419
419
|
]
|
|
420
|
-
}
|
|
421
|
-
/* @__PURE__ */
|
|
420
|
+
}),
|
|
421
|
+
/* @__PURE__ */ jsxs2("tr", {
|
|
422
422
|
children: [
|
|
423
|
-
/* @__PURE__ */
|
|
423
|
+
/* @__PURE__ */ jsx2("td", {
|
|
424
424
|
className: "px-4 py-3 align-top",
|
|
425
|
-
children: /* @__PURE__ */
|
|
425
|
+
children: /* @__PURE__ */ jsx2("strong", {
|
|
426
426
|
children: "Open source"
|
|
427
|
-
}
|
|
428
|
-
}
|
|
429
|
-
/* @__PURE__ */
|
|
427
|
+
})
|
|
428
|
+
}),
|
|
429
|
+
/* @__PURE__ */ jsx2("td", {
|
|
430
430
|
className: "px-4 py-3 align-top",
|
|
431
431
|
children: "Proprietary SaaS; enterprise agreements."
|
|
432
|
-
}
|
|
433
|
-
/* @__PURE__ */
|
|
432
|
+
}),
|
|
433
|
+
/* @__PURE__ */ jsx2("td", {
|
|
434
434
|
className: "px-4 py-3 align-top",
|
|
435
435
|
children: "Core compiler is proprietary; SDK and certain modules may be open-source; offers hosted and on-prem options."
|
|
436
|
-
}
|
|
436
|
+
})
|
|
437
437
|
]
|
|
438
|
-
}
|
|
439
|
-
/* @__PURE__ */
|
|
438
|
+
}),
|
|
439
|
+
/* @__PURE__ */ jsxs2("tr", {
|
|
440
440
|
children: [
|
|
441
|
-
/* @__PURE__ */
|
|
441
|
+
/* @__PURE__ */ jsx2("td", {
|
|
442
442
|
className: "px-4 py-3 align-top",
|
|
443
|
-
children: /* @__PURE__ */
|
|
443
|
+
children: /* @__PURE__ */ jsx2("strong", {
|
|
444
444
|
children: "Policy & personalisation"
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
/* @__PURE__ */
|
|
445
|
+
})
|
|
446
|
+
}),
|
|
447
|
+
/* @__PURE__ */ jsx2("td", {
|
|
448
448
|
className: "px-4 py-3 align-top",
|
|
449
449
|
children: "IT controls governance; no per-user overlay concept."
|
|
450
|
-
}
|
|
451
|
-
/* @__PURE__ */
|
|
450
|
+
}),
|
|
451
|
+
/* @__PURE__ */ jsx2("td", {
|
|
452
452
|
className: "px-4 py-3 align-top",
|
|
453
453
|
children: "Built-in policy engine and per-user overlays for safe personalisation."
|
|
454
|
-
}
|
|
454
|
+
})
|
|
455
455
|
]
|
|
456
|
-
}
|
|
456
|
+
})
|
|
457
457
|
]
|
|
458
|
-
}
|
|
458
|
+
})
|
|
459
459
|
]
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
/* @__PURE__ */
|
|
460
|
+
})
|
|
461
|
+
}),
|
|
462
|
+
/* @__PURE__ */ jsx2("p", {
|
|
463
463
|
className: "text-muted-foreground",
|
|
464
464
|
children: "Redwood RunMyJobs is designed for orchestrating enterprise workloads and SAP processes. ContractSpec targets a different problem: generating complete applications from typed specs and letting end users adapt them safely."
|
|
465
|
-
}
|
|
465
|
+
})
|
|
466
466
|
]
|
|
467
|
-
}
|
|
467
|
+
})
|
|
468
468
|
]
|
|
469
|
-
}
|
|
469
|
+
});
|
|
470
470
|
}
|
|
471
471
|
|
|
472
472
|
// src/components/docs/comparison/ComparisonInternalToolBuildersPage.tsx
|
|
473
|
-
import {
|
|
473
|
+
import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
474
474
|
function ComparisonInternalToolBuildersPage() {
|
|
475
|
-
return /* @__PURE__ */
|
|
475
|
+
return /* @__PURE__ */ jsxs3("div", {
|
|
476
476
|
className: "space-y-8",
|
|
477
477
|
children: [
|
|
478
|
-
/* @__PURE__ */
|
|
478
|
+
/* @__PURE__ */ jsxs3("div", {
|
|
479
479
|
className: "space-y-4",
|
|
480
480
|
children: [
|
|
481
|
-
/* @__PURE__ */
|
|
481
|
+
/* @__PURE__ */ jsx3("h1", {
|
|
482
482
|
className: "text-4xl font-bold",
|
|
483
483
|
children: "Internal-tool builders"
|
|
484
|
-
}
|
|
485
|
-
/* @__PURE__ */
|
|
484
|
+
}),
|
|
485
|
+
/* @__PURE__ */ jsx3("p", {
|
|
486
486
|
className: "text-muted-foreground",
|
|
487
487
|
children: "Internal-tool builders let teams quickly assemble dashboards and admin panels. These platforms often provide drag-and-drop UIs and connectors to databases and APIs, but they rely on developers to write custom code for business logic and seldom enforce policies across surfaces."
|
|
488
|
-
}
|
|
488
|
+
})
|
|
489
489
|
]
|
|
490
|
-
}
|
|
491
|
-
/* @__PURE__ */
|
|
490
|
+
}),
|
|
491
|
+
/* @__PURE__ */ jsxs3("div", {
|
|
492
492
|
className: "space-y-4",
|
|
493
493
|
children: [
|
|
494
|
-
/* @__PURE__ */
|
|
494
|
+
/* @__PURE__ */ jsx3("h2", {
|
|
495
495
|
className: "text-2xl font-bold",
|
|
496
496
|
children: "Feature comparison"
|
|
497
|
-
}
|
|
498
|
-
/* @__PURE__ */
|
|
497
|
+
}),
|
|
498
|
+
/* @__PURE__ */ jsx3("div", {
|
|
499
499
|
className: "border-border/50 overflow-x-auto rounded-lg border",
|
|
500
|
-
children: /* @__PURE__ */
|
|
500
|
+
children: /* @__PURE__ */ jsxs3("table", {
|
|
501
501
|
className: "w-full text-left text-sm",
|
|
502
502
|
children: [
|
|
503
|
-
/* @__PURE__ */
|
|
503
|
+
/* @__PURE__ */ jsx3("thead", {
|
|
504
504
|
className: "bg-card/50",
|
|
505
|
-
children: /* @__PURE__ */
|
|
505
|
+
children: /* @__PURE__ */ jsxs3("tr", {
|
|
506
506
|
className: "border-border/50 border-b",
|
|
507
507
|
children: [
|
|
508
|
-
/* @__PURE__ */
|
|
508
|
+
/* @__PURE__ */ jsx3("th", {
|
|
509
509
|
className: "px-4 py-3 font-semibold",
|
|
510
510
|
children: "Feature"
|
|
511
|
-
}
|
|
512
|
-
/* @__PURE__ */
|
|
511
|
+
}),
|
|
512
|
+
/* @__PURE__ */ jsx3("th", {
|
|
513
513
|
className: "px-4 py-3 font-semibold",
|
|
514
514
|
children: "Retool"
|
|
515
|
-
}
|
|
516
|
-
/* @__PURE__ */
|
|
515
|
+
}),
|
|
516
|
+
/* @__PURE__ */ jsx3("th", {
|
|
517
517
|
className: "px-4 py-3 font-semibold",
|
|
518
518
|
children: "Appsmith"
|
|
519
|
-
}
|
|
520
|
-
/* @__PURE__ */
|
|
519
|
+
}),
|
|
520
|
+
/* @__PURE__ */ jsx3("th", {
|
|
521
521
|
className: "px-4 py-3 font-semibold",
|
|
522
522
|
children: "ToolJet"
|
|
523
|
-
}
|
|
524
|
-
/* @__PURE__ */
|
|
523
|
+
}),
|
|
524
|
+
/* @__PURE__ */ jsx3("th", {
|
|
525
525
|
className: "px-4 py-3 font-semibold",
|
|
526
526
|
children: "Budibase"
|
|
527
|
-
}
|
|
527
|
+
})
|
|
528
528
|
]
|
|
529
|
-
}
|
|
530
|
-
}
|
|
531
|
-
/* @__PURE__ */
|
|
529
|
+
})
|
|
530
|
+
}),
|
|
531
|
+
/* @__PURE__ */ jsxs3("tbody", {
|
|
532
532
|
className: "divide-border/50 divide-y",
|
|
533
533
|
children: [
|
|
534
|
-
/* @__PURE__ */
|
|
534
|
+
/* @__PURE__ */ jsxs3("tr", {
|
|
535
535
|
children: [
|
|
536
|
-
/* @__PURE__ */
|
|
536
|
+
/* @__PURE__ */ jsx3("td", {
|
|
537
537
|
className: "px-4 py-3 align-top font-semibold",
|
|
538
538
|
children: "UI builder"
|
|
539
|
-
}
|
|
540
|
-
/* @__PURE__ */
|
|
539
|
+
}),
|
|
540
|
+
/* @__PURE__ */ jsx3("td", {
|
|
541
541
|
className: "px-4 py-3 align-top",
|
|
542
542
|
children: "Drag-and-drop canvas; shape UI components easily"
|
|
543
|
-
}
|
|
544
|
-
/* @__PURE__ */
|
|
543
|
+
}),
|
|
544
|
+
/* @__PURE__ */ jsx3("td", {
|
|
545
545
|
className: "px-4 py-3 align-top",
|
|
546
546
|
children: "Visual builder with drag-and-drop widgets"
|
|
547
|
-
}
|
|
548
|
-
/* @__PURE__ */
|
|
547
|
+
}),
|
|
548
|
+
/* @__PURE__ */ jsx3("td", {
|
|
549
549
|
className: "px-4 py-3 align-top",
|
|
550
550
|
children: "Drag-and-drop UI widgets (tables, charts, forms)"
|
|
551
|
-
}
|
|
552
|
-
/* @__PURE__ */
|
|
551
|
+
}),
|
|
552
|
+
/* @__PURE__ */ jsx3("td", {
|
|
553
553
|
className: "px-4 py-3 align-top",
|
|
554
554
|
children: "Pre-built components and templates for mobile/desktop"
|
|
555
|
-
}
|
|
555
|
+
})
|
|
556
556
|
]
|
|
557
|
-
}
|
|
558
|
-
/* @__PURE__ */
|
|
557
|
+
}),
|
|
558
|
+
/* @__PURE__ */ jsxs3("tr", {
|
|
559
559
|
children: [
|
|
560
|
-
/* @__PURE__ */
|
|
560
|
+
/* @__PURE__ */ jsx3("td", {
|
|
561
561
|
className: "px-4 py-3 align-top font-semibold",
|
|
562
562
|
children: "Custom code & logic"
|
|
563
|
-
}
|
|
564
|
-
/* @__PURE__ */
|
|
563
|
+
}),
|
|
564
|
+
/* @__PURE__ */ jsx3("td", {
|
|
565
565
|
className: "px-4 py-3 align-top",
|
|
566
566
|
children: "Full code insertion anywhere via IDE"
|
|
567
|
-
}
|
|
568
|
-
/* @__PURE__ */
|
|
567
|
+
}),
|
|
568
|
+
/* @__PURE__ */ jsx3("td", {
|
|
569
569
|
className: "px-4 py-3 align-top",
|
|
570
570
|
children: "Logic via JavaScript or natural-language prompts in a central IDE"
|
|
571
|
-
}
|
|
572
|
-
/* @__PURE__ */
|
|
571
|
+
}),
|
|
572
|
+
/* @__PURE__ */ jsx3("td", {
|
|
573
573
|
className: "px-4 py-3 align-top",
|
|
574
574
|
children: "Supports business logic in JavaScript or Python queries"
|
|
575
|
-
}
|
|
576
|
-
/* @__PURE__ */
|
|
575
|
+
}),
|
|
576
|
+
/* @__PURE__ */ jsx3("td", {
|
|
577
577
|
className: "px-4 py-3 align-top",
|
|
578
578
|
children: "Custom logic via JavaScript; plugins and external embeds"
|
|
579
|
-
}
|
|
579
|
+
})
|
|
580
580
|
]
|
|
581
|
-
}
|
|
582
|
-
/* @__PURE__ */
|
|
581
|
+
}),
|
|
582
|
+
/* @__PURE__ */ jsxs3("tr", {
|
|
583
583
|
children: [
|
|
584
|
-
/* @__PURE__ */
|
|
584
|
+
/* @__PURE__ */ jsx3("td", {
|
|
585
585
|
className: "px-4 py-3 align-top font-semibold",
|
|
586
586
|
children: "Data connectors"
|
|
587
|
-
}
|
|
588
|
-
/* @__PURE__ */
|
|
587
|
+
}),
|
|
588
|
+
/* @__PURE__ */ jsx3("td", {
|
|
589
589
|
className: "px-4 py-3 align-top",
|
|
590
590
|
children: "Wide support for databases and APIs (PostgreSQL, MongoDB, GraphQL, etc.)."
|
|
591
|
-
}
|
|
592
|
-
/* @__PURE__ */
|
|
591
|
+
}),
|
|
592
|
+
/* @__PURE__ */ jsx3("td", {
|
|
593
593
|
className: "px-4 py-3 align-top",
|
|
594
594
|
children: "Connects to LLMs and databases"
|
|
595
|
-
}
|
|
596
|
-
/* @__PURE__ */
|
|
595
|
+
}),
|
|
596
|
+
/* @__PURE__ */ jsx3("td", {
|
|
597
597
|
className: "px-4 py-3 align-top",
|
|
598
598
|
children: "Built-in database; connects to PostgreSQL, MongoDB, APIs, GraphQL, SaaS"
|
|
599
|
-
}
|
|
600
|
-
/* @__PURE__ */
|
|
599
|
+
}),
|
|
600
|
+
/* @__PURE__ */ jsx3("td", {
|
|
601
601
|
className: "px-4 py-3 align-top",
|
|
602
602
|
children: "Connects to external databases, REST, CSV or built-in DB"
|
|
603
|
-
}
|
|
603
|
+
})
|
|
604
604
|
]
|
|
605
|
-
}
|
|
606
|
-
/* @__PURE__ */
|
|
605
|
+
}),
|
|
606
|
+
/* @__PURE__ */ jsxs3("tr", {
|
|
607
607
|
children: [
|
|
608
|
-
/* @__PURE__ */
|
|
608
|
+
/* @__PURE__ */ jsx3("td", {
|
|
609
609
|
className: "px-4 py-3 align-top font-semibold",
|
|
610
610
|
children: "Open source & self-host"
|
|
611
|
-
}
|
|
612
|
-
/* @__PURE__ */
|
|
611
|
+
}),
|
|
612
|
+
/* @__PURE__ */ jsx3("td", {
|
|
613
613
|
className: "px-4 py-3 align-top",
|
|
614
614
|
children: "Proprietary; cloud or on-prem subscription."
|
|
615
|
-
}
|
|
616
|
-
/* @__PURE__ */
|
|
615
|
+
}),
|
|
616
|
+
/* @__PURE__ */ jsx3("td", {
|
|
617
617
|
className: "px-4 py-3 align-top",
|
|
618
618
|
children: "Open source (Apache-2.0); self-host or cloud."
|
|
619
|
-
}
|
|
620
|
-
/* @__PURE__ */
|
|
619
|
+
}),
|
|
620
|
+
/* @__PURE__ */ jsx3("td", {
|
|
621
621
|
className: "px-4 py-3 align-top",
|
|
622
622
|
children: "Open source; self-host via Docker or cloud."
|
|
623
|
-
}
|
|
624
|
-
/* @__PURE__ */
|
|
623
|
+
}),
|
|
624
|
+
/* @__PURE__ */ jsx3("td", {
|
|
625
625
|
className: "px-4 py-3 align-top",
|
|
626
626
|
children: "Open source; self-host via Docker/Kubernetes"
|
|
627
|
-
}
|
|
627
|
+
})
|
|
628
628
|
]
|
|
629
|
-
}
|
|
630
|
-
/* @__PURE__ */
|
|
629
|
+
}),
|
|
630
|
+
/* @__PURE__ */ jsxs3("tr", {
|
|
631
631
|
children: [
|
|
632
|
-
/* @__PURE__ */
|
|
632
|
+
/* @__PURE__ */ jsx3("td", {
|
|
633
633
|
className: "px-4 py-3 align-top font-semibold",
|
|
634
634
|
children: "Policy & personalisation"
|
|
635
|
-
}
|
|
636
|
-
/* @__PURE__ */
|
|
635
|
+
}),
|
|
636
|
+
/* @__PURE__ */ jsx3("td", {
|
|
637
637
|
className: "px-4 py-3 align-top",
|
|
638
638
|
children: "No built-in policy engine; personalisation limited to user roles."
|
|
639
|
-
}
|
|
640
|
-
/* @__PURE__ */
|
|
639
|
+
}),
|
|
640
|
+
/* @__PURE__ */ jsx3("td", {
|
|
641
641
|
className: "px-4 py-3 align-top",
|
|
642
642
|
children: "No typed policy engine; customisation depends on user roles."
|
|
643
|
-
}
|
|
644
|
-
/* @__PURE__ */
|
|
643
|
+
}),
|
|
644
|
+
/* @__PURE__ */ jsx3("td", {
|
|
645
645
|
className: "px-4 py-3 align-top",
|
|
646
646
|
children: "No policy engine; personalisation via user roles."
|
|
647
|
-
}
|
|
648
|
-
/* @__PURE__ */
|
|
647
|
+
}),
|
|
648
|
+
/* @__PURE__ */ jsx3("td", {
|
|
649
649
|
className: "px-4 py-3 align-top",
|
|
650
650
|
children: "No policy engine; personalisation via RBAC & SSO"
|
|
651
|
-
}
|
|
651
|
+
})
|
|
652
652
|
]
|
|
653
|
-
}
|
|
653
|
+
})
|
|
654
654
|
]
|
|
655
|
-
}
|
|
655
|
+
})
|
|
656
656
|
]
|
|
657
|
-
}
|
|
658
|
-
}
|
|
657
|
+
})
|
|
658
|
+
})
|
|
659
659
|
]
|
|
660
|
-
}
|
|
661
|
-
/* @__PURE__ */
|
|
660
|
+
}),
|
|
661
|
+
/* @__PURE__ */ jsxs3("div", {
|
|
662
662
|
className: "space-y-3",
|
|
663
663
|
children: [
|
|
664
|
-
/* @__PURE__ */
|
|
664
|
+
/* @__PURE__ */ jsx3("h2", {
|
|
665
665
|
className: "text-2xl font-bold",
|
|
666
666
|
children: "ContractSpec’s differences"
|
|
667
|
-
}
|
|
668
|
-
/* @__PURE__ */
|
|
667
|
+
}),
|
|
668
|
+
/* @__PURE__ */ jsxs3("ul", {
|
|
669
669
|
className: "text-muted-foreground space-y-2",
|
|
670
670
|
children: [
|
|
671
|
-
/* @__PURE__ */
|
|
671
|
+
/* @__PURE__ */ jsxs3("li", {
|
|
672
672
|
children: [
|
|
673
|
-
/* @__PURE__ */
|
|
673
|
+
/* @__PURE__ */ jsx3("strong", {
|
|
674
674
|
children: "Typed specifications"
|
|
675
|
-
}
|
|
675
|
+
}),
|
|
676
676
|
" produce both the API and UI. You define capabilities, data views and workflows, and the compiler generates code, forms and screens—no manual widget wiring."
|
|
677
677
|
]
|
|
678
|
-
}
|
|
679
|
-
/* @__PURE__ */
|
|
678
|
+
}),
|
|
679
|
+
/* @__PURE__ */ jsxs3("li", {
|
|
680
680
|
children: [
|
|
681
|
-
/* @__PURE__ */
|
|
681
|
+
/* @__PURE__ */ jsx3("strong", {
|
|
682
682
|
children: "Policy enforcement"
|
|
683
|
-
}
|
|
683
|
+
}),
|
|
684
684
|
" at run time ensures PII and ABAC rules across the entire app."
|
|
685
685
|
]
|
|
686
|
-
}
|
|
687
|
-
/* @__PURE__ */
|
|
686
|
+
}),
|
|
687
|
+
/* @__PURE__ */ jsxs3("li", {
|
|
688
688
|
children: [
|
|
689
|
-
/* @__PURE__ */
|
|
689
|
+
/* @__PURE__ */ jsx3("strong", {
|
|
690
690
|
children: "Overlay personalisation"
|
|
691
|
-
}
|
|
691
|
+
}),
|
|
692
692
|
" allows tenants and users to change layouts safely without code."
|
|
693
693
|
]
|
|
694
|
-
}
|
|
695
|
-
/* @__PURE__ */
|
|
694
|
+
}),
|
|
695
|
+
/* @__PURE__ */ jsxs3("li", {
|
|
696
696
|
children: [
|
|
697
|
-
/* @__PURE__ */
|
|
697
|
+
/* @__PURE__ */ jsx3("strong", {
|
|
698
698
|
children: "Unified mobile/web runtime"
|
|
699
|
-
}
|
|
699
|
+
}),
|
|
700
700
|
" means you don’t need separate builders for React Native vs web."
|
|
701
701
|
]
|
|
702
|
-
}
|
|
702
|
+
})
|
|
703
703
|
]
|
|
704
|
-
}
|
|
705
|
-
/* @__PURE__ */
|
|
704
|
+
}),
|
|
705
|
+
/* @__PURE__ */ jsx3("p", {
|
|
706
706
|
className: "text-muted-foreground",
|
|
707
707
|
children: "Internal-tool builders are useful for quick dashboards. ContractSpec extends this by generating the whole stack from specs and enforcing policies throughout."
|
|
708
|
-
}
|
|
708
|
+
})
|
|
709
709
|
]
|
|
710
|
-
}
|
|
710
|
+
})
|
|
711
711
|
]
|
|
712
|
-
}
|
|
712
|
+
});
|
|
713
713
|
}
|
|
714
714
|
|
|
715
715
|
// src/components/docs/comparison/ComparisonOverviewPage.tsx
|
|
716
|
-
import {
|
|
716
|
+
import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
717
717
|
function ComparisonOverviewPage() {
|
|
718
|
-
return /* @__PURE__ */
|
|
718
|
+
return /* @__PURE__ */ jsxs4("div", {
|
|
719
719
|
className: "space-y-8",
|
|
720
720
|
children: [
|
|
721
|
-
/* @__PURE__ */
|
|
721
|
+
/* @__PURE__ */ jsxs4("div", {
|
|
722
722
|
className: "space-y-4",
|
|
723
723
|
children: [
|
|
724
|
-
/* @__PURE__ */
|
|
724
|
+
/* @__PURE__ */ jsx4("h1", {
|
|
725
725
|
className: "text-4xl font-bold",
|
|
726
726
|
children: "Comparison overview"
|
|
727
|
-
}
|
|
728
|
-
/* @__PURE__ */
|
|
727
|
+
}),
|
|
728
|
+
/* @__PURE__ */ jsx4("p", {
|
|
729
729
|
className: "text-muted-foreground",
|
|
730
730
|
children: "ContractSpec sits at the intersection of several tool categories. To appreciate its unique offering—typed specifications for back-end, front-end, workflows and policies with a unified web/mobile runtime—this section compares it to related products."
|
|
731
|
-
}
|
|
732
|
-
/* @__PURE__ */
|
|
731
|
+
}),
|
|
732
|
+
/* @__PURE__ */ jsxs4("p", {
|
|
733
733
|
className: "text-muted-foreground",
|
|
734
734
|
children: [
|
|
735
735
|
"ContractSpec uses ",
|
|
736
|
-
/* @__PURE__ */
|
|
736
|
+
/* @__PURE__ */ jsx4("strong", {
|
|
737
737
|
children: "runtime adapters"
|
|
738
|
-
}
|
|
738
|
+
}),
|
|
739
739
|
" to serve typed",
|
|
740
740
|
" ",
|
|
741
|
-
/* @__PURE__ */
|
|
741
|
+
/* @__PURE__ */ jsx4("strong", {
|
|
742
742
|
children: "Operations"
|
|
743
|
-
}
|
|
743
|
+
}),
|
|
744
744
|
" (Commands/Queries),",
|
|
745
745
|
" ",
|
|
746
|
-
/* @__PURE__ */
|
|
746
|
+
/* @__PURE__ */ jsx4("strong", {
|
|
747
747
|
children: "DataViews"
|
|
748
|
-
}
|
|
748
|
+
}),
|
|
749
749
|
", ",
|
|
750
|
-
/* @__PURE__ */
|
|
750
|
+
/* @__PURE__ */ jsx4("strong", {
|
|
751
751
|
children: "Workflows"
|
|
752
|
-
}
|
|
752
|
+
}),
|
|
753
753
|
", and",
|
|
754
754
|
" ",
|
|
755
|
-
/* @__PURE__ */
|
|
755
|
+
/* @__PURE__ */ jsx4("strong", {
|
|
756
756
|
children: "Policies"
|
|
757
|
-
}
|
|
757
|
+
}),
|
|
758
758
|
" as REST/GraphQL/MCP endpoints. A",
|
|
759
759
|
" ",
|
|
760
|
-
/* @__PURE__ */
|
|
760
|
+
/* @__PURE__ */ jsx4("strong", {
|
|
761
761
|
children: "policy decision point"
|
|
762
|
-
}
|
|
762
|
+
}),
|
|
763
763
|
" governs every operation, and",
|
|
764
764
|
" ",
|
|
765
|
-
/* @__PURE__ */
|
|
765
|
+
/* @__PURE__ */ jsx4("strong", {
|
|
766
766
|
children: "OverlaySpecs"
|
|
767
|
-
}
|
|
767
|
+
}),
|
|
768
768
|
" allow non-technical users to personalise screens safely. Few competitors offer this combination of runtime type safety, policy enforcement, and end-user customisation."
|
|
769
769
|
]
|
|
770
|
-
}
|
|
770
|
+
})
|
|
771
771
|
]
|
|
772
|
-
}
|
|
773
|
-
/* @__PURE__ */
|
|
772
|
+
}),
|
|
773
|
+
/* @__PURE__ */ jsxs4("div", {
|
|
774
774
|
className: "space-y-4",
|
|
775
775
|
children: [
|
|
776
|
-
/* @__PURE__ */
|
|
776
|
+
/* @__PURE__ */ jsx4("h2", {
|
|
777
777
|
className: "text-2xl font-bold",
|
|
778
778
|
children: "Tool categories"
|
|
779
|
-
}
|
|
780
|
-
/* @__PURE__ */
|
|
779
|
+
}),
|
|
780
|
+
/* @__PURE__ */ jsx4("div", {
|
|
781
781
|
className: "border-border/50 overflow-x-auto rounded-lg border",
|
|
782
|
-
children: /* @__PURE__ */
|
|
782
|
+
children: /* @__PURE__ */ jsxs4("table", {
|
|
783
783
|
className: "w-full text-left text-sm",
|
|
784
784
|
children: [
|
|
785
|
-
/* @__PURE__ */
|
|
785
|
+
/* @__PURE__ */ jsx4("thead", {
|
|
786
786
|
className: "bg-card/50",
|
|
787
|
-
children: /* @__PURE__ */
|
|
787
|
+
children: /* @__PURE__ */ jsxs4("tr", {
|
|
788
788
|
className: "border-border/50 border-b",
|
|
789
789
|
children: [
|
|
790
|
-
/* @__PURE__ */
|
|
790
|
+
/* @__PURE__ */ jsx4("th", {
|
|
791
791
|
className: "px-4 py-3 font-semibold",
|
|
792
792
|
children: "Category"
|
|
793
|
-
}
|
|
794
|
-
/* @__PURE__ */
|
|
793
|
+
}),
|
|
794
|
+
/* @__PURE__ */ jsx4("th", {
|
|
795
795
|
className: "px-4 py-3 font-semibold",
|
|
796
796
|
children: "Examples"
|
|
797
|
-
}
|
|
798
|
-
/* @__PURE__ */
|
|
797
|
+
}),
|
|
798
|
+
/* @__PURE__ */ jsx4("th", {
|
|
799
799
|
className: "px-4 py-3 font-semibold",
|
|
800
800
|
children: "What they do"
|
|
801
|
-
}
|
|
802
|
-
/* @__PURE__ */
|
|
801
|
+
}),
|
|
802
|
+
/* @__PURE__ */ jsx4("th", {
|
|
803
803
|
className: "px-4 py-3 font-semibold",
|
|
804
804
|
children: "Limitations"
|
|
805
|
-
}
|
|
805
|
+
})
|
|
806
806
|
]
|
|
807
|
-
}
|
|
808
|
-
}
|
|
809
|
-
/* @__PURE__ */
|
|
807
|
+
})
|
|
808
|
+
}),
|
|
809
|
+
/* @__PURE__ */ jsxs4("tbody", {
|
|
810
810
|
className: "divide-border/50 divide-y",
|
|
811
811
|
children: [
|
|
812
|
-
/* @__PURE__ */
|
|
812
|
+
/* @__PURE__ */ jsxs4("tr", {
|
|
813
813
|
children: [
|
|
814
|
-
/* @__PURE__ */
|
|
814
|
+
/* @__PURE__ */ jsx4("td", {
|
|
815
815
|
className: "px-4 py-3 align-top",
|
|
816
|
-
children: /* @__PURE__ */
|
|
816
|
+
children: /* @__PURE__ */ jsx4("strong", {
|
|
817
817
|
children: "Workflow engines"
|
|
818
|
-
}
|
|
819
|
-
}
|
|
820
|
-
/* @__PURE__ */
|
|
818
|
+
})
|
|
819
|
+
}),
|
|
820
|
+
/* @__PURE__ */ jsx4("td", {
|
|
821
821
|
className: "px-4 py-3 align-top",
|
|
822
822
|
children: "Prefect, Kestra, Temporal, Airflow, Dagster, Hatchet, Windmill"
|
|
823
|
-
}
|
|
824
|
-
/* @__PURE__ */
|
|
823
|
+
}),
|
|
824
|
+
/* @__PURE__ */ jsx4("td", {
|
|
825
825
|
className: "px-4 py-3 align-top",
|
|
826
826
|
children: "Orchestrate code or data pipelines; handle retries, scheduling and observability"
|
|
827
|
-
}
|
|
828
|
-
/* @__PURE__ */
|
|
827
|
+
}),
|
|
828
|
+
/* @__PURE__ */ jsx4("td", {
|
|
829
829
|
className: "px-4 py-3 align-top",
|
|
830
830
|
children: "Require writing code; no automatic UI generation or policy enforcement."
|
|
831
|
-
}
|
|
831
|
+
})
|
|
832
832
|
]
|
|
833
|
-
}
|
|
834
|
-
/* @__PURE__ */
|
|
833
|
+
}),
|
|
834
|
+
/* @__PURE__ */ jsxs4("tr", {
|
|
835
835
|
children: [
|
|
836
|
-
/* @__PURE__ */
|
|
836
|
+
/* @__PURE__ */ jsx4("td", {
|
|
837
837
|
className: "px-4 py-3 align-top",
|
|
838
|
-
children: /* @__PURE__ */
|
|
838
|
+
children: /* @__PURE__ */ jsx4("strong", {
|
|
839
839
|
children: "Internal-tool builders"
|
|
840
|
-
}
|
|
841
|
-
}
|
|
842
|
-
/* @__PURE__ */
|
|
840
|
+
})
|
|
841
|
+
}),
|
|
842
|
+
/* @__PURE__ */ jsx4("td", {
|
|
843
843
|
className: "px-4 py-3 align-top",
|
|
844
844
|
children: "Retool, Appsmith, ToolJet, Budibase"
|
|
845
|
-
}
|
|
846
|
-
/* @__PURE__ */
|
|
845
|
+
}),
|
|
846
|
+
/* @__PURE__ */ jsx4("td", {
|
|
847
847
|
className: "px-4 py-3 align-top",
|
|
848
848
|
children: "Drag-and-drop dashboards and admin panels; connect to databases/APIs"
|
|
849
|
-
}
|
|
850
|
-
/* @__PURE__ */
|
|
849
|
+
}),
|
|
850
|
+
/* @__PURE__ */ jsx4("td", {
|
|
851
851
|
className: "px-4 py-3 align-top",
|
|
852
852
|
children: "No typed back-end spec; limited enforcement of policies; custom code glues logic."
|
|
853
|
-
}
|
|
853
|
+
})
|
|
854
854
|
]
|
|
855
|
-
}
|
|
856
|
-
/* @__PURE__ */
|
|
855
|
+
}),
|
|
856
|
+
/* @__PURE__ */ jsxs4("tr", {
|
|
857
857
|
children: [
|
|
858
|
-
/* @__PURE__ */
|
|
858
|
+
/* @__PURE__ */ jsx4("td", {
|
|
859
859
|
className: "px-4 py-3 align-top",
|
|
860
|
-
children: /* @__PURE__ */
|
|
860
|
+
children: /* @__PURE__ */ jsx4("strong", {
|
|
861
861
|
children: "Automation platforms"
|
|
862
|
-
}
|
|
863
|
-
}
|
|
864
|
-
/* @__PURE__ */
|
|
862
|
+
})
|
|
863
|
+
}),
|
|
864
|
+
/* @__PURE__ */ jsx4("td", {
|
|
865
865
|
className: "px-4 py-3 align-top",
|
|
866
866
|
children: "Zapier, Make, n8n, Pipedream"
|
|
867
|
-
}
|
|
868
|
-
/* @__PURE__ */
|
|
867
|
+
}),
|
|
868
|
+
/* @__PURE__ */ jsx4("td", {
|
|
869
869
|
className: "px-4 py-3 align-top",
|
|
870
870
|
children: "Connect apps via triggers and actions; visual or low-code interfaces"
|
|
871
|
-
}
|
|
872
|
-
/* @__PURE__ */
|
|
871
|
+
}),
|
|
872
|
+
/* @__PURE__ */ jsx4("td", {
|
|
873
873
|
className: "px-4 py-3 align-top",
|
|
874
874
|
children: "Automate tasks but do not generate full apps or enforce per-field policies."
|
|
875
|
-
}
|
|
875
|
+
})
|
|
876
876
|
]
|
|
877
|
-
}
|
|
878
|
-
/* @__PURE__ */
|
|
877
|
+
}),
|
|
878
|
+
/* @__PURE__ */ jsxs4("tr", {
|
|
879
879
|
children: [
|
|
880
|
-
/* @__PURE__ */
|
|
880
|
+
/* @__PURE__ */ jsx4("td", {
|
|
881
881
|
className: "px-4 py-3 align-top",
|
|
882
|
-
children: /* @__PURE__ */
|
|
882
|
+
children: /* @__PURE__ */ jsx4("strong", {
|
|
883
883
|
children: "Enterprise orchestrators"
|
|
884
|
-
}
|
|
885
|
-
}
|
|
886
|
-
/* @__PURE__ */
|
|
884
|
+
})
|
|
885
|
+
}),
|
|
886
|
+
/* @__PURE__ */ jsx4("td", {
|
|
887
887
|
className: "px-4 py-3 align-top",
|
|
888
888
|
children: "Redwood RunMyJobs"
|
|
889
|
-
}
|
|
890
|
-
/* @__PURE__ */
|
|
889
|
+
}),
|
|
890
|
+
/* @__PURE__ */ jsx4("td", {
|
|
891
891
|
className: "px-4 py-3 align-top",
|
|
892
892
|
children: "Automate mission-critical workloads with self-service portals and SAP integrations"
|
|
893
|
-
}
|
|
894
|
-
/* @__PURE__ */
|
|
893
|
+
}),
|
|
894
|
+
/* @__PURE__ */ jsx4("td", {
|
|
895
895
|
className: "px-4 py-3 align-top",
|
|
896
896
|
children: "Focus on IT workloads; not built for custom app creation or per-user customisation."
|
|
897
|
-
}
|
|
897
|
+
})
|
|
898
898
|
]
|
|
899
|
-
}
|
|
899
|
+
})
|
|
900
900
|
]
|
|
901
|
-
}
|
|
901
|
+
})
|
|
902
902
|
]
|
|
903
|
-
}
|
|
904
|
-
}
|
|
905
|
-
/* @__PURE__ */
|
|
903
|
+
})
|
|
904
|
+
}),
|
|
905
|
+
/* @__PURE__ */ jsx4("p", {
|
|
906
906
|
className: "text-muted-foreground",
|
|
907
907
|
children: "Use the pages below to explore each group in detail and see how ContractSpec compares."
|
|
908
|
-
}
|
|
908
|
+
})
|
|
909
909
|
]
|
|
910
|
-
}
|
|
910
|
+
})
|
|
911
911
|
]
|
|
912
|
-
}
|
|
912
|
+
});
|
|
913
913
|
}
|
|
914
914
|
|
|
915
915
|
// src/components/docs/comparison/ComparisonWindmillPage.tsx
|
|
916
|
-
import {
|
|
916
|
+
import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
917
917
|
function ComparisonWindmillPage() {
|
|
918
|
-
return /* @__PURE__ */
|
|
918
|
+
return /* @__PURE__ */ jsxs5("div", {
|
|
919
919
|
className: "space-y-8",
|
|
920
920
|
children: [
|
|
921
|
-
/* @__PURE__ */
|
|
921
|
+
/* @__PURE__ */ jsxs5("div", {
|
|
922
922
|
className: "space-y-4",
|
|
923
923
|
children: [
|
|
924
|
-
/* @__PURE__ */
|
|
924
|
+
/* @__PURE__ */ jsx5("h1", {
|
|
925
925
|
className: "text-4xl font-bold",
|
|
926
926
|
children: "Windmill"
|
|
927
|
-
}
|
|
928
|
-
/* @__PURE__ */
|
|
927
|
+
}),
|
|
928
|
+
/* @__PURE__ */ jsxs5("p", {
|
|
929
929
|
className: "text-muted-foreground",
|
|
930
930
|
children: [
|
|
931
931
|
"Windmill is an open-source platform that turns",
|
|
932
932
|
" ",
|
|
933
|
-
/* @__PURE__ */
|
|
933
|
+
/* @__PURE__ */ jsx5("strong", {
|
|
934
934
|
children: "scripts"
|
|
935
|
-
}
|
|
935
|
+
}),
|
|
936
936
|
" into endpoints, workflows and UIs. It seeks to remove boilerplate by generating interfaces and workflows around existing code"
|
|
937
937
|
]
|
|
938
|
-
}
|
|
938
|
+
})
|
|
939
939
|
]
|
|
940
|
-
}
|
|
941
|
-
/* @__PURE__ */
|
|
940
|
+
}),
|
|
941
|
+
/* @__PURE__ */ jsxs5("div", {
|
|
942
942
|
className: "space-y-4",
|
|
943
943
|
children: [
|
|
944
|
-
/* @__PURE__ */
|
|
944
|
+
/* @__PURE__ */ jsx5("h2", {
|
|
945
945
|
className: "text-2xl font-bold",
|
|
946
946
|
children: "Platform features"
|
|
947
|
-
}
|
|
948
|
-
/* @__PURE__ */
|
|
947
|
+
}),
|
|
948
|
+
/* @__PURE__ */ jsxs5("ul", {
|
|
949
949
|
className: "text-muted-foreground space-y-3",
|
|
950
950
|
children: [
|
|
951
|
-
/* @__PURE__ */
|
|
951
|
+
/* @__PURE__ */ jsxs5("li", {
|
|
952
952
|
children: [
|
|
953
|
-
/* @__PURE__ */
|
|
953
|
+
/* @__PURE__ */ jsx5("strong", {
|
|
954
954
|
children: "Script-driven model."
|
|
955
|
-
}
|
|
955
|
+
}),
|
|
956
956
|
" Write scripts in TypeScript, Python, Go, PHP, Bash, C#, SQL or Rust; Windmill infers dependencies, creates lockfiles and JSON schemas, then serves minimal UIs automatically"
|
|
957
957
|
]
|
|
958
|
-
}
|
|
959
|
-
/* @__PURE__ */
|
|
958
|
+
}),
|
|
959
|
+
/* @__PURE__ */ jsxs5("li", {
|
|
960
960
|
children: [
|
|
961
|
-
/* @__PURE__ */
|
|
961
|
+
/* @__PURE__ */ jsx5("strong", {
|
|
962
962
|
children: "Visual flow editor."
|
|
963
|
-
}
|
|
963
|
+
}),
|
|
964
964
|
" Compose scripts into workflows with retries, error handling, loops, branching, suspending flows and approval steps"
|
|
965
965
|
]
|
|
966
|
-
}
|
|
967
|
-
/* @__PURE__ */
|
|
966
|
+
}),
|
|
967
|
+
/* @__PURE__ */ jsxs5("li", {
|
|
968
968
|
children: [
|
|
969
|
-
/* @__PURE__ */
|
|
969
|
+
/* @__PURE__ */ jsx5("strong", {
|
|
970
970
|
children: "Low-code UI builder."
|
|
971
|
-
}
|
|
971
|
+
}),
|
|
972
972
|
" Build dashboards and admin panels using inline scripts and trigger flows from the UI"
|
|
973
973
|
]
|
|
974
|
-
}
|
|
975
|
-
/* @__PURE__ */
|
|
974
|
+
}),
|
|
975
|
+
/* @__PURE__ */ jsxs5("li", {
|
|
976
976
|
children: [
|
|
977
|
-
/* @__PURE__ */
|
|
977
|
+
/* @__PURE__ */ jsx5("strong", {
|
|
978
978
|
children: "Enterprise readiness."
|
|
979
|
-
}
|
|
979
|
+
}),
|
|
980
980
|
" Features include RBAC permissions, secret management, OAuth handling, CLI/git sync, scheduling and webhooks"
|
|
981
981
|
]
|
|
982
|
-
}
|
|
983
|
-
/* @__PURE__ */
|
|
982
|
+
}),
|
|
983
|
+
/* @__PURE__ */ jsxs5("li", {
|
|
984
984
|
children: [
|
|
985
|
-
/* @__PURE__ */
|
|
985
|
+
/* @__PURE__ */ jsx5("strong", {
|
|
986
986
|
children: "Use cases."
|
|
987
|
-
}
|
|
987
|
+
}),
|
|
988
988
|
" Deploy scripts as webhooks or cron jobs; create “applicative workflows” combining external APIs; build ETLs and interactive dashboards"
|
|
989
989
|
]
|
|
990
|
-
}
|
|
991
|
-
/* @__PURE__ */
|
|
990
|
+
}),
|
|
991
|
+
/* @__PURE__ */ jsxs5("li", {
|
|
992
992
|
children: [
|
|
993
|
-
/* @__PURE__ */
|
|
993
|
+
/* @__PURE__ */ jsx5("strong", {
|
|
994
994
|
children: "Open source & self-hosting."
|
|
995
|
-
}
|
|
995
|
+
}),
|
|
996
996
|
" Windmill emphasises an open-source codebase and self-hosting options"
|
|
997
997
|
]
|
|
998
|
-
}
|
|
998
|
+
})
|
|
999
999
|
]
|
|
1000
|
-
}
|
|
1000
|
+
})
|
|
1001
1001
|
]
|
|
1002
|
-
}
|
|
1003
|
-
/* @__PURE__ */
|
|
1002
|
+
}),
|
|
1003
|
+
/* @__PURE__ */ jsxs5("div", {
|
|
1004
1004
|
className: "space-y-4",
|
|
1005
1005
|
children: [
|
|
1006
|
-
/* @__PURE__ */
|
|
1006
|
+
/* @__PURE__ */ jsx5("h2", {
|
|
1007
1007
|
className: "text-2xl font-bold",
|
|
1008
1008
|
children: "Comparison with ContractSpec"
|
|
1009
|
-
}
|
|
1010
|
-
/* @__PURE__ */
|
|
1009
|
+
}),
|
|
1010
|
+
/* @__PURE__ */ jsx5("div", {
|
|
1011
1011
|
className: "border-border/50 overflow-x-auto rounded-lg border",
|
|
1012
|
-
children: /* @__PURE__ */
|
|
1012
|
+
children: /* @__PURE__ */ jsxs5("table", {
|
|
1013
1013
|
className: "w-full text-left text-sm",
|
|
1014
1014
|
children: [
|
|
1015
|
-
/* @__PURE__ */
|
|
1015
|
+
/* @__PURE__ */ jsx5("thead", {
|
|
1016
1016
|
className: "bg-card/50",
|
|
1017
|
-
children: /* @__PURE__ */
|
|
1017
|
+
children: /* @__PURE__ */ jsxs5("tr", {
|
|
1018
1018
|
className: "border-border/50 border-b",
|
|
1019
1019
|
children: [
|
|
1020
|
-
/* @__PURE__ */
|
|
1020
|
+
/* @__PURE__ */ jsx5("th", {
|
|
1021
1021
|
className: "px-4 py-3 font-semibold",
|
|
1022
1022
|
children: "Feature"
|
|
1023
|
-
}
|
|
1024
|
-
/* @__PURE__ */
|
|
1023
|
+
}),
|
|
1024
|
+
/* @__PURE__ */ jsx5("th", {
|
|
1025
1025
|
className: "px-4 py-3 font-semibold",
|
|
1026
1026
|
children: "Windmill"
|
|
1027
|
-
}
|
|
1028
|
-
/* @__PURE__ */
|
|
1027
|
+
}),
|
|
1028
|
+
/* @__PURE__ */ jsx5("th", {
|
|
1029
1029
|
className: "px-4 py-3 font-semibold",
|
|
1030
1030
|
children: "ContractSpec"
|
|
1031
|
-
}
|
|
1031
|
+
})
|
|
1032
1032
|
]
|
|
1033
|
-
}
|
|
1034
|
-
}
|
|
1035
|
-
/* @__PURE__ */
|
|
1033
|
+
})
|
|
1034
|
+
}),
|
|
1035
|
+
/* @__PURE__ */ jsxs5("tbody", {
|
|
1036
1036
|
className: "divide-border/50 divide-y",
|
|
1037
1037
|
children: [
|
|
1038
|
-
/* @__PURE__ */
|
|
1038
|
+
/* @__PURE__ */ jsxs5("tr", {
|
|
1039
1039
|
children: [
|
|
1040
|
-
/* @__PURE__ */
|
|
1040
|
+
/* @__PURE__ */ jsx5("td", {
|
|
1041
1041
|
className: "px-4 py-3 align-top",
|
|
1042
|
-
children: /* @__PURE__ */
|
|
1042
|
+
children: /* @__PURE__ */ jsx5("strong", {
|
|
1043
1043
|
children: "Entry model"
|
|
1044
|
-
}
|
|
1045
|
-
}
|
|
1046
|
-
/* @__PURE__ */
|
|
1044
|
+
})
|
|
1045
|
+
}),
|
|
1046
|
+
/* @__PURE__ */ jsx5("td", {
|
|
1047
1047
|
className: "px-4 py-3 align-top",
|
|
1048
1048
|
children: "Write scripts; platform auto-generates UI and workflows"
|
|
1049
|
-
}
|
|
1050
|
-
/* @__PURE__ */
|
|
1049
|
+
}),
|
|
1050
|
+
/* @__PURE__ */ jsx5("td", {
|
|
1051
1051
|
className: "px-4 py-3 align-top",
|
|
1052
1052
|
children: "Define typed specs (Capabilities, DataViews, Workflows, Policies); compiler outputs back-end, front-end and forms."
|
|
1053
|
-
}
|
|
1053
|
+
})
|
|
1054
1054
|
]
|
|
1055
|
-
}
|
|
1056
|
-
/* @__PURE__ */
|
|
1055
|
+
}),
|
|
1056
|
+
/* @__PURE__ */ jsxs5("tr", {
|
|
1057
1057
|
children: [
|
|
1058
|
-
/* @__PURE__ */
|
|
1058
|
+
/* @__PURE__ */ jsx5("td", {
|
|
1059
1059
|
className: "px-4 py-3 align-top",
|
|
1060
|
-
children: /* @__PURE__ */
|
|
1060
|
+
children: /* @__PURE__ */ jsx5("strong", {
|
|
1061
1061
|
children: "Language support"
|
|
1062
|
-
}
|
|
1063
|
-
}
|
|
1064
|
-
/* @__PURE__ */
|
|
1062
|
+
})
|
|
1063
|
+
}),
|
|
1064
|
+
/* @__PURE__ */ jsx5("td", {
|
|
1065
1065
|
className: "px-4 py-3 align-top",
|
|
1066
1066
|
children: "20+ languages via embedded runtimes"
|
|
1067
|
-
}
|
|
1068
|
-
/* @__PURE__ */
|
|
1067
|
+
}),
|
|
1068
|
+
/* @__PURE__ */ jsx5("td", {
|
|
1069
1069
|
className: "px-4 py-3 align-top",
|
|
1070
1070
|
children: "Uses TypeScript/JavaScript for providers; supports other back-ends through capability providers."
|
|
1071
|
-
}
|
|
1071
|
+
})
|
|
1072
1072
|
]
|
|
1073
|
-
}
|
|
1074
|
-
/* @__PURE__ */
|
|
1073
|
+
}),
|
|
1074
|
+
/* @__PURE__ */ jsxs5("tr", {
|
|
1075
1075
|
children: [
|
|
1076
|
-
/* @__PURE__ */
|
|
1076
|
+
/* @__PURE__ */ jsx5("td", {
|
|
1077
1077
|
className: "px-4 py-3 align-top",
|
|
1078
|
-
children: /* @__PURE__ */
|
|
1078
|
+
children: /* @__PURE__ */ jsx5("strong", {
|
|
1079
1079
|
children: "UI generation"
|
|
1080
|
-
}
|
|
1081
|
-
}
|
|
1082
|
-
/* @__PURE__ */
|
|
1080
|
+
})
|
|
1081
|
+
}),
|
|
1082
|
+
/* @__PURE__ */ jsx5("td", {
|
|
1083
1083
|
className: "px-4 py-3 align-top",
|
|
1084
1084
|
children: "Minimal UI forms from script parameters; low-code app builder"
|
|
1085
|
-
}
|
|
1086
|
-
/* @__PURE__ */
|
|
1085
|
+
}),
|
|
1086
|
+
/* @__PURE__ */ jsx5("td", {
|
|
1087
1087
|
className: "px-4 py-3 align-top",
|
|
1088
1088
|
children: "Generates full web and mobile UIs from specs; user layouts can be customised via signed overlays."
|
|
1089
|
-
}
|
|
1089
|
+
})
|
|
1090
1090
|
]
|
|
1091
|
-
}
|
|
1092
|
-
/* @__PURE__ */
|
|
1091
|
+
}),
|
|
1092
|
+
/* @__PURE__ */ jsxs5("tr", {
|
|
1093
1093
|
children: [
|
|
1094
|
-
/* @__PURE__ */
|
|
1094
|
+
/* @__PURE__ */ jsx5("td", {
|
|
1095
1095
|
className: "px-4 py-3 align-top",
|
|
1096
|
-
children: /* @__PURE__ */
|
|
1096
|
+
children: /* @__PURE__ */ jsx5("strong", {
|
|
1097
1097
|
children: "Policy & personalization"
|
|
1098
|
-
}
|
|
1099
|
-
}
|
|
1100
|
-
/* @__PURE__ */
|
|
1098
|
+
})
|
|
1099
|
+
}),
|
|
1100
|
+
/* @__PURE__ */ jsx5("td", {
|
|
1101
1101
|
className: "px-4 py-3 align-top",
|
|
1102
1102
|
children: "RBAC and secret management; no per-user overlay concept"
|
|
1103
|
-
}
|
|
1104
|
-
/* @__PURE__ */
|
|
1103
|
+
}),
|
|
1104
|
+
/* @__PURE__ */ jsx5("td", {
|
|
1105
1105
|
className: "px-4 py-3 align-top",
|
|
1106
1106
|
children: "Built-in policy engine enforcing ABAC/PII on every render/mutate; overlays allow safe per-user customisation."
|
|
1107
|
-
}
|
|
1107
|
+
})
|
|
1108
1108
|
]
|
|
1109
|
-
}
|
|
1110
|
-
/* @__PURE__ */
|
|
1109
|
+
}),
|
|
1110
|
+
/* @__PURE__ */ jsxs5("tr", {
|
|
1111
1111
|
children: [
|
|
1112
|
-
/* @__PURE__ */
|
|
1112
|
+
/* @__PURE__ */ jsx5("td", {
|
|
1113
1113
|
className: "px-4 py-3 align-top",
|
|
1114
|
-
children: /* @__PURE__ */
|
|
1114
|
+
children: /* @__PURE__ */ jsx5("strong", {
|
|
1115
1115
|
children: "Open source"
|
|
1116
|
-
}
|
|
1117
|
-
}
|
|
1118
|
-
/* @__PURE__ */
|
|
1116
|
+
})
|
|
1117
|
+
}),
|
|
1118
|
+
/* @__PURE__ */ jsx5("td", {
|
|
1119
1119
|
className: "px-4 py-3 align-top",
|
|
1120
1120
|
children: "Fully open source and self-hostable"
|
|
1121
|
-
}
|
|
1122
|
-
/* @__PURE__ */
|
|
1121
|
+
}),
|
|
1122
|
+
/* @__PURE__ */ jsx5("td", {
|
|
1123
1123
|
className: "px-4 py-3 align-top",
|
|
1124
1124
|
children: "Closed-source core (SDK is open); offers hosted and on-prem modes."
|
|
1125
|
-
}
|
|
1125
|
+
})
|
|
1126
1126
|
]
|
|
1127
|
-
}
|
|
1128
|
-
/* @__PURE__ */
|
|
1127
|
+
}),
|
|
1128
|
+
/* @__PURE__ */ jsxs5("tr", {
|
|
1129
1129
|
children: [
|
|
1130
|
-
/* @__PURE__ */
|
|
1130
|
+
/* @__PURE__ */ jsx5("td", {
|
|
1131
1131
|
className: "px-4 py-3 align-top",
|
|
1132
|
-
children: /* @__PURE__ */
|
|
1132
|
+
children: /* @__PURE__ */ jsx5("strong", {
|
|
1133
1133
|
children: "Ideal for"
|
|
1134
|
-
}
|
|
1135
|
-
}
|
|
1136
|
-
/* @__PURE__ */
|
|
1134
|
+
})
|
|
1135
|
+
}),
|
|
1136
|
+
/* @__PURE__ */ jsx5("td", {
|
|
1137
1137
|
className: "px-4 py-3 align-top",
|
|
1138
1138
|
children: "Teams wanting to expose scripts as APIs, workflows or dashboards without heavy infrastructure."
|
|
1139
|
-
}
|
|
1140
|
-
/* @__PURE__ */
|
|
1139
|
+
}),
|
|
1140
|
+
/* @__PURE__ */ jsx5("td", {
|
|
1141
1141
|
className: "px-4 py-3 align-top",
|
|
1142
1142
|
children: "Teams needing a spec-driven platform that generates code and UI, enforces policies and lets non-technical users tailor the experience."
|
|
1143
|
-
}
|
|
1143
|
+
})
|
|
1144
1144
|
]
|
|
1145
|
-
}
|
|
1145
|
+
})
|
|
1146
1146
|
]
|
|
1147
|
-
}
|
|
1147
|
+
})
|
|
1148
1148
|
]
|
|
1149
|
-
}
|
|
1150
|
-
}
|
|
1151
|
-
/* @__PURE__ */
|
|
1149
|
+
})
|
|
1150
|
+
}),
|
|
1151
|
+
/* @__PURE__ */ jsxs5("p", {
|
|
1152
1152
|
className: "text-muted-foreground",
|
|
1153
1153
|
children: [
|
|
1154
1154
|
"Windmill excels at converting scripts into workflows and admin panels. ContractSpec takes a ",
|
|
1155
|
-
/* @__PURE__ */
|
|
1155
|
+
/* @__PURE__ */ jsx5("strong", {
|
|
1156
1156
|
children: "spec-first"
|
|
1157
|
-
}
|
|
1157
|
+
}),
|
|
1158
1158
|
" approach, generating the entire stack and enforcing policies, making it suitable for long-lived applications that must evolve safely."
|
|
1159
1159
|
]
|
|
1160
|
-
}
|
|
1160
|
+
})
|
|
1161
1161
|
]
|
|
1162
|
-
}
|
|
1162
|
+
})
|
|
1163
1163
|
]
|
|
1164
|
-
}
|
|
1164
|
+
});
|
|
1165
1165
|
}
|
|
1166
1166
|
|
|
1167
1167
|
// src/components/docs/comparison/ComparisonWorkflowEnginesPage.tsx
|
|
1168
|
-
import {
|
|
1168
|
+
import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
1169
1169
|
function ComparisonWorkflowEnginesPage() {
|
|
1170
|
-
return /* @__PURE__ */
|
|
1170
|
+
return /* @__PURE__ */ jsxs6("div", {
|
|
1171
1171
|
className: "space-y-8",
|
|
1172
1172
|
children: [
|
|
1173
|
-
/* @__PURE__ */
|
|
1173
|
+
/* @__PURE__ */ jsxs6("div", {
|
|
1174
1174
|
className: "space-y-4",
|
|
1175
1175
|
children: [
|
|
1176
|
-
/* @__PURE__ */
|
|
1176
|
+
/* @__PURE__ */ jsx6("h1", {
|
|
1177
1177
|
className: "text-4xl font-bold",
|
|
1178
1178
|
children: "Workflow engines"
|
|
1179
|
-
}
|
|
1180
|
-
/* @__PURE__ */
|
|
1179
|
+
}),
|
|
1180
|
+
/* @__PURE__ */ jsx6("p", {
|
|
1181
1181
|
className: "text-muted-foreground",
|
|
1182
1182
|
children: "Workflow engines orchestrate long-running tasks and data pipelines. They provide retries, scheduling and visibility, but most expect developers to write code and do not generate user interfaces. Here’s how the major engines compare to ContractSpec."
|
|
1183
|
-
}
|
|
1183
|
+
})
|
|
1184
1184
|
]
|
|
1185
|
-
}
|
|
1186
|
-
/* @__PURE__ */
|
|
1185
|
+
}),
|
|
1186
|
+
/* @__PURE__ */ jsxs6("div", {
|
|
1187
1187
|
className: "space-y-4",
|
|
1188
1188
|
children: [
|
|
1189
|
-
/* @__PURE__ */
|
|
1189
|
+
/* @__PURE__ */ jsx6("h2", {
|
|
1190
1190
|
className: "text-2xl font-bold",
|
|
1191
1191
|
children: "Key differences summary"
|
|
1192
|
-
}
|
|
1193
|
-
/* @__PURE__ */
|
|
1192
|
+
}),
|
|
1193
|
+
/* @__PURE__ */ jsx6("div", {
|
|
1194
1194
|
className: "border-border/50 overflow-x-auto rounded-lg border",
|
|
1195
|
-
children: /* @__PURE__ */
|
|
1195
|
+
children: /* @__PURE__ */ jsxs6("table", {
|
|
1196
1196
|
className: "w-full text-left text-sm",
|
|
1197
1197
|
children: [
|
|
1198
|
-
/* @__PURE__ */
|
|
1198
|
+
/* @__PURE__ */ jsx6("thead", {
|
|
1199
1199
|
className: "bg-card/50",
|
|
1200
|
-
children: /* @__PURE__ */
|
|
1200
|
+
children: /* @__PURE__ */ jsxs6("tr", {
|
|
1201
1201
|
className: "border-border/50 border-b",
|
|
1202
1202
|
children: [
|
|
1203
|
-
/* @__PURE__ */
|
|
1203
|
+
/* @__PURE__ */ jsx6("th", {
|
|
1204
1204
|
className: "px-4 py-3 font-semibold",
|
|
1205
1205
|
children: "Engine"
|
|
1206
|
-
}
|
|
1207
|
-
/* @__PURE__ */
|
|
1206
|
+
}),
|
|
1207
|
+
/* @__PURE__ */ jsx6("th", {
|
|
1208
1208
|
className: "px-4 py-3 font-semibold",
|
|
1209
1209
|
children: "Core strengths"
|
|
1210
|
-
}
|
|
1211
|
-
/* @__PURE__ */
|
|
1210
|
+
}),
|
|
1211
|
+
/* @__PURE__ */ jsx6("th", {
|
|
1212
1212
|
className: "px-4 py-3 font-semibold",
|
|
1213
1213
|
children: "UI generation?"
|
|
1214
|
-
}
|
|
1215
|
-
/* @__PURE__ */
|
|
1214
|
+
}),
|
|
1215
|
+
/* @__PURE__ */ jsx6("th", {
|
|
1216
1216
|
className: "px-4 py-3 font-semibold",
|
|
1217
1217
|
children: "Policy/PII enforcement?"
|
|
1218
|
-
}
|
|
1219
|
-
/* @__PURE__ */
|
|
1218
|
+
}),
|
|
1219
|
+
/* @__PURE__ */ jsx6("th", {
|
|
1220
1220
|
className: "px-4 py-3 font-semibold",
|
|
1221
1221
|
children: "Self-host?"
|
|
1222
|
-
}
|
|
1223
|
-
/* @__PURE__ */
|
|
1222
|
+
}),
|
|
1223
|
+
/* @__PURE__ */ jsx6("th", {
|
|
1224
1224
|
className: "px-4 py-3 font-semibold",
|
|
1225
1225
|
children: "Primary use"
|
|
1226
|
-
}
|
|
1226
|
+
})
|
|
1227
1227
|
]
|
|
1228
|
-
}
|
|
1229
|
-
}
|
|
1230
|
-
/* @__PURE__ */
|
|
1228
|
+
})
|
|
1229
|
+
}),
|
|
1230
|
+
/* @__PURE__ */ jsxs6("tbody", {
|
|
1231
1231
|
className: "divide-border/50 divide-y",
|
|
1232
1232
|
children: [
|
|
1233
|
-
/* @__PURE__ */
|
|
1233
|
+
/* @__PURE__ */ jsxs6("tr", {
|
|
1234
1234
|
children: [
|
|
1235
|
-
/* @__PURE__ */
|
|
1235
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1236
1236
|
className: "px-4 py-3 align-top",
|
|
1237
|
-
children: /* @__PURE__ */
|
|
1237
|
+
children: /* @__PURE__ */ jsx6("strong", {
|
|
1238
1238
|
children: "Prefect"
|
|
1239
|
-
}
|
|
1240
|
-
}
|
|
1241
|
-
/* @__PURE__ */
|
|
1239
|
+
})
|
|
1240
|
+
}),
|
|
1241
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1242
1242
|
className: "px-4 py-3 align-top",
|
|
1243
1243
|
children: "Python-native; dynamic DAGs adapt to change; annotate code without rewriting; strong observability and audit logs"
|
|
1244
|
-
}
|
|
1245
|
-
/* @__PURE__ */
|
|
1244
|
+
}),
|
|
1245
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1246
1246
|
className: "px-4 py-3 align-top",
|
|
1247
1247
|
children: "No"
|
|
1248
|
-
}
|
|
1249
|
-
/* @__PURE__ */
|
|
1248
|
+
}),
|
|
1249
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1250
1250
|
className: "px-4 py-3 align-top",
|
|
1251
1251
|
children: "No"
|
|
1252
|
-
}
|
|
1253
|
-
/* @__PURE__ */
|
|
1252
|
+
}),
|
|
1253
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1254
1254
|
className: "px-4 py-3 align-top",
|
|
1255
1255
|
children: "Yes"
|
|
1256
|
-
}
|
|
1257
|
-
/* @__PURE__ */
|
|
1256
|
+
}),
|
|
1257
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1258
1258
|
className: "px-4 py-3 align-top",
|
|
1259
1259
|
children: "Data pipelines and dynamic workflows."
|
|
1260
|
-
}
|
|
1260
|
+
})
|
|
1261
1261
|
]
|
|
1262
|
-
}
|
|
1263
|
-
/* @__PURE__ */
|
|
1262
|
+
}),
|
|
1263
|
+
/* @__PURE__ */ jsxs6("tr", {
|
|
1264
1264
|
children: [
|
|
1265
|
-
/* @__PURE__ */
|
|
1265
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1266
1266
|
className: "px-4 py-3 align-top",
|
|
1267
|
-
children: /* @__PURE__ */
|
|
1267
|
+
children: /* @__PURE__ */ jsx6("strong", {
|
|
1268
1268
|
children: "Kestra"
|
|
1269
|
-
}
|
|
1270
|
-
}
|
|
1271
|
-
/* @__PURE__ */
|
|
1269
|
+
})
|
|
1270
|
+
}),
|
|
1271
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1272
1272
|
className: "px-4 py-3 align-top",
|
|
1273
1273
|
children: "Declarative YAML; event-driven triggers; mix of code and no-code; write logic in Python/R/Java/Julia/Ruby; deploy anywhere"
|
|
1274
|
-
}
|
|
1275
|
-
/* @__PURE__ */
|
|
1274
|
+
}),
|
|
1275
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1276
1276
|
className: "px-4 py-3 align-top",
|
|
1277
1277
|
children: "No"
|
|
1278
|
-
}
|
|
1279
|
-
/* @__PURE__ */
|
|
1278
|
+
}),
|
|
1279
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1280
1280
|
className: "px-4 py-3 align-top",
|
|
1281
1281
|
children: "No"
|
|
1282
|
-
}
|
|
1283
|
-
/* @__PURE__ */
|
|
1282
|
+
}),
|
|
1283
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1284
1284
|
className: "px-4 py-3 align-top",
|
|
1285
1285
|
children: "Yes"
|
|
1286
|
-
}
|
|
1287
|
-
/* @__PURE__ */
|
|
1286
|
+
}),
|
|
1287
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1288
1288
|
className: "px-4 py-3 align-top",
|
|
1289
1289
|
children: "Data pipelines and hybrid orchestration."
|
|
1290
|
-
}
|
|
1290
|
+
})
|
|
1291
1291
|
]
|
|
1292
|
-
}
|
|
1293
|
-
/* @__PURE__ */
|
|
1292
|
+
}),
|
|
1293
|
+
/* @__PURE__ */ jsxs6("tr", {
|
|
1294
1294
|
children: [
|
|
1295
|
-
/* @__PURE__ */
|
|
1295
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1296
1296
|
className: "px-4 py-3 align-top",
|
|
1297
|
-
children: /* @__PURE__ */
|
|
1297
|
+
children: /* @__PURE__ */ jsx6("strong", {
|
|
1298
1298
|
children: "Temporal"
|
|
1299
|
-
}
|
|
1300
|
-
}
|
|
1301
|
-
/* @__PURE__ */
|
|
1299
|
+
})
|
|
1300
|
+
}),
|
|
1301
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1302
1302
|
className: "px-4 py-3 align-top",
|
|
1303
1303
|
children: "Durable execution; workflows never lose state; multi-language SDKs; automatic retries"
|
|
1304
|
-
}
|
|
1305
|
-
/* @__PURE__ */
|
|
1304
|
+
}),
|
|
1305
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1306
1306
|
className: "px-4 py-3 align-top",
|
|
1307
1307
|
children: "No"
|
|
1308
|
-
}
|
|
1309
|
-
/* @__PURE__ */
|
|
1308
|
+
}),
|
|
1309
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1310
1310
|
className: "px-4 py-3 align-top",
|
|
1311
1311
|
children: "No"
|
|
1312
|
-
}
|
|
1313
|
-
/* @__PURE__ */
|
|
1312
|
+
}),
|
|
1313
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1314
1314
|
className: "px-4 py-3 align-top",
|
|
1315
1315
|
children: "Yes"
|
|
1316
|
-
}
|
|
1317
|
-
/* @__PURE__ */
|
|
1316
|
+
}),
|
|
1317
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1318
1318
|
className: "px-4 py-3 align-top",
|
|
1319
1319
|
children: "Durable microservice and business workflows."
|
|
1320
|
-
}
|
|
1320
|
+
})
|
|
1321
1321
|
]
|
|
1322
|
-
}
|
|
1323
|
-
/* @__PURE__ */
|
|
1322
|
+
}),
|
|
1323
|
+
/* @__PURE__ */ jsxs6("tr", {
|
|
1324
1324
|
children: [
|
|
1325
|
-
/* @__PURE__ */
|
|
1325
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1326
1326
|
className: "px-4 py-3 align-top",
|
|
1327
|
-
children: /* @__PURE__ */
|
|
1327
|
+
children: /* @__PURE__ */ jsx6("strong", {
|
|
1328
1328
|
children: "Airflow"
|
|
1329
|
-
}
|
|
1330
|
-
}
|
|
1331
|
-
/* @__PURE__ */
|
|
1329
|
+
})
|
|
1330
|
+
}),
|
|
1331
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1332
1332
|
className: "px-4 py-3 align-top",
|
|
1333
1333
|
children: "Open-source; define workflows as Python code; schedule and monitor via UI; extensible via custom operators"
|
|
1334
|
-
}
|
|
1335
|
-
/* @__PURE__ */
|
|
1334
|
+
}),
|
|
1335
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1336
1336
|
className: "px-4 py-3 align-top",
|
|
1337
1337
|
children: "No"
|
|
1338
|
-
}
|
|
1339
|
-
/* @__PURE__ */
|
|
1338
|
+
}),
|
|
1339
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1340
1340
|
className: "px-4 py-3 align-top",
|
|
1341
1341
|
children: "No"
|
|
1342
|
-
}
|
|
1343
|
-
/* @__PURE__ */
|
|
1342
|
+
}),
|
|
1343
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1344
1344
|
className: "px-4 py-3 align-top",
|
|
1345
1345
|
children: "Yes"
|
|
1346
|
-
}
|
|
1347
|
-
/* @__PURE__ */
|
|
1346
|
+
}),
|
|
1347
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1348
1348
|
className: "px-4 py-3 align-top",
|
|
1349
1349
|
children: "Data ETL pipelines."
|
|
1350
|
-
}
|
|
1350
|
+
})
|
|
1351
1351
|
]
|
|
1352
|
-
}
|
|
1353
|
-
/* @__PURE__ */
|
|
1352
|
+
}),
|
|
1353
|
+
/* @__PURE__ */ jsxs6("tr", {
|
|
1354
1354
|
children: [
|
|
1355
|
-
/* @__PURE__ */
|
|
1355
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1356
1356
|
className: "px-4 py-3 align-top",
|
|
1357
|
-
children: /* @__PURE__ */
|
|
1357
|
+
children: /* @__PURE__ */ jsx6("strong", {
|
|
1358
1358
|
children: "Dagster"
|
|
1359
|
-
}
|
|
1360
|
-
}
|
|
1361
|
-
/* @__PURE__ */
|
|
1359
|
+
})
|
|
1360
|
+
}),
|
|
1361
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1362
1362
|
className: "px-4 py-3 align-top",
|
|
1363
1363
|
children: "Data-asset model; local testing and reusable components; built-in data quality and catalog; orchestrates AI/data pipelines across multiple tools"
|
|
1364
|
-
}
|
|
1365
|
-
/* @__PURE__ */
|
|
1364
|
+
}),
|
|
1365
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1366
1366
|
className: "px-4 py-3 align-top",
|
|
1367
1367
|
children: "No"
|
|
1368
|
-
}
|
|
1369
|
-
/* @__PURE__ */
|
|
1368
|
+
}),
|
|
1369
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1370
1370
|
className: "px-4 py-3 align-top",
|
|
1371
1371
|
children: "No"
|
|
1372
|
-
}
|
|
1373
|
-
/* @__PURE__ */
|
|
1372
|
+
}),
|
|
1373
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1374
1374
|
className: "px-4 py-3 align-top",
|
|
1375
1375
|
children: "Yes"
|
|
1376
|
-
}
|
|
1377
|
-
/* @__PURE__ */
|
|
1376
|
+
}),
|
|
1377
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1378
1378
|
className: "px-4 py-3 align-top",
|
|
1379
1379
|
children: "Data/AI pipelines with strong observability."
|
|
1380
|
-
}
|
|
1380
|
+
})
|
|
1381
1381
|
]
|
|
1382
|
-
}
|
|
1383
|
-
/* @__PURE__ */
|
|
1382
|
+
}),
|
|
1383
|
+
/* @__PURE__ */ jsxs6("tr", {
|
|
1384
1384
|
children: [
|
|
1385
|
-
/* @__PURE__ */
|
|
1385
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1386
1386
|
className: "px-4 py-3 align-top",
|
|
1387
|
-
children: /* @__PURE__ */
|
|
1387
|
+
children: /* @__PURE__ */ jsx6("strong", {
|
|
1388
1388
|
children: "Hatchet"
|
|
1389
|
-
}
|
|
1390
|
-
}
|
|
1391
|
-
/* @__PURE__ */
|
|
1389
|
+
})
|
|
1390
|
+
}),
|
|
1391
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1392
1392
|
className: "px-4 py-3 align-top",
|
|
1393
1393
|
children: "Modern engine focused on performance and durability; tasks and workflows as code; durable functions with guardrails and retries"
|
|
1394
|
-
}
|
|
1395
|
-
/* @__PURE__ */
|
|
1394
|
+
}),
|
|
1395
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1396
1396
|
className: "px-4 py-3 align-top",
|
|
1397
1397
|
children: "No"
|
|
1398
|
-
}
|
|
1399
|
-
/* @__PURE__ */
|
|
1398
|
+
}),
|
|
1399
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1400
1400
|
className: "px-4 py-3 align-top",
|
|
1401
1401
|
children: "No"
|
|
1402
|
-
}
|
|
1403
|
-
/* @__PURE__ */
|
|
1402
|
+
}),
|
|
1403
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1404
1404
|
className: "px-4 py-3 align-top",
|
|
1405
1405
|
children: "Yes"
|
|
1406
|
-
}
|
|
1407
|
-
/* @__PURE__ */
|
|
1406
|
+
}),
|
|
1407
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1408
1408
|
className: "px-4 py-3 align-top",
|
|
1409
1409
|
children: "High-throughput background jobs and microservices."
|
|
1410
|
-
}
|
|
1410
|
+
})
|
|
1411
1411
|
]
|
|
1412
|
-
}
|
|
1413
|
-
/* @__PURE__ */
|
|
1412
|
+
}),
|
|
1413
|
+
/* @__PURE__ */ jsxs6("tr", {
|
|
1414
1414
|
children: [
|
|
1415
|
-
/* @__PURE__ */
|
|
1415
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1416
1416
|
className: "px-4 py-3 align-top",
|
|
1417
|
-
children: /* @__PURE__ */
|
|
1417
|
+
children: /* @__PURE__ */ jsx6("strong", {
|
|
1418
1418
|
children: "Windmill"
|
|
1419
|
-
}
|
|
1420
|
-
}
|
|
1421
|
-
/* @__PURE__ */
|
|
1419
|
+
})
|
|
1420
|
+
}),
|
|
1421
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1422
1422
|
className: "px-4 py-3 align-top",
|
|
1423
1423
|
children: "Multi-language scripts; auto-generates UI; integrated flow editor"
|
|
1424
|
-
}
|
|
1425
|
-
/* @__PURE__ */
|
|
1424
|
+
}),
|
|
1425
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1426
1426
|
className: "px-4 py-3 align-top",
|
|
1427
1427
|
children: "Yes (basic)"
|
|
1428
|
-
}
|
|
1429
|
-
/* @__PURE__ */
|
|
1428
|
+
}),
|
|
1429
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1430
1430
|
className: "px-4 py-3 align-top",
|
|
1431
1431
|
children: "RBAC & secrets only"
|
|
1432
|
-
}
|
|
1433
|
-
/* @__PURE__ */
|
|
1432
|
+
}),
|
|
1433
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1434
1434
|
className: "px-4 py-3 align-top",
|
|
1435
1435
|
children: "Yes"
|
|
1436
|
-
}
|
|
1437
|
-
/* @__PURE__ */
|
|
1436
|
+
}),
|
|
1437
|
+
/* @__PURE__ */ jsx6("td", {
|
|
1438
1438
|
className: "px-4 py-3 align-top",
|
|
1439
1439
|
children: "Scripts into workflows and dashboards."
|
|
1440
|
-
}
|
|
1440
|
+
})
|
|
1441
1441
|
]
|
|
1442
|
-
}
|
|
1442
|
+
})
|
|
1443
1443
|
]
|
|
1444
|
-
}
|
|
1444
|
+
})
|
|
1445
1445
|
]
|
|
1446
|
-
}
|
|
1447
|
-
}
|
|
1446
|
+
})
|
|
1447
|
+
})
|
|
1448
1448
|
]
|
|
1449
|
-
}
|
|
1450
|
-
/* @__PURE__ */
|
|
1449
|
+
}),
|
|
1450
|
+
/* @__PURE__ */ jsxs6("div", {
|
|
1451
1451
|
className: "space-y-3",
|
|
1452
1452
|
children: [
|
|
1453
|
-
/* @__PURE__ */
|
|
1453
|
+
/* @__PURE__ */ jsx6("h2", {
|
|
1454
1454
|
className: "text-2xl font-bold",
|
|
1455
1455
|
children: "Why ContractSpec differs"
|
|
1456
|
-
}
|
|
1457
|
-
/* @__PURE__ */
|
|
1456
|
+
}),
|
|
1457
|
+
/* @__PURE__ */ jsxs6("ul", {
|
|
1458
1458
|
className: "text-muted-foreground space-y-2",
|
|
1459
1459
|
children: [
|
|
1460
|
-
/* @__PURE__ */
|
|
1460
|
+
/* @__PURE__ */ jsxs6("li", {
|
|
1461
1461
|
children: [
|
|
1462
|
-
/* @__PURE__ */
|
|
1462
|
+
/* @__PURE__ */ jsx6("strong", {
|
|
1463
1463
|
children: "Spec-first generation"
|
|
1464
|
-
}
|
|
1464
|
+
}),
|
|
1465
1465
|
" – Instead of writing code, you define typed specs for capabilities, data views and workflows; the compiler outputs both back-end and front-end."
|
|
1466
1466
|
]
|
|
1467
|
-
}
|
|
1468
|
-
/* @__PURE__ */
|
|
1467
|
+
}),
|
|
1468
|
+
/* @__PURE__ */ jsxs6("li", {
|
|
1469
1469
|
children: [
|
|
1470
|
-
/* @__PURE__ */
|
|
1470
|
+
/* @__PURE__ */ jsx6("strong", {
|
|
1471
1471
|
children: "Policy engine"
|
|
1472
|
-
}
|
|
1472
|
+
}),
|
|
1473
1473
|
" – Every render and mutate passes through an ABAC/PII policy decision point."
|
|
1474
1474
|
]
|
|
1475
|
-
}
|
|
1476
|
-
/* @__PURE__ */
|
|
1475
|
+
}),
|
|
1476
|
+
/* @__PURE__ */ jsxs6("li", {
|
|
1477
1477
|
children: [
|
|
1478
|
-
/* @__PURE__ */
|
|
1478
|
+
/* @__PURE__ */ jsx6("strong", {
|
|
1479
1479
|
children: "Personalisation"
|
|
1480
|
-
}
|
|
1480
|
+
}),
|
|
1481
1481
|
" – Signed OverlaySpecs allow tenant/user-specific UI changes without touching code."
|
|
1482
1482
|
]
|
|
1483
|
-
}
|
|
1484
|
-
/* @__PURE__ */
|
|
1483
|
+
}),
|
|
1484
|
+
/* @__PURE__ */ jsxs6("li", {
|
|
1485
1485
|
children: [
|
|
1486
|
-
/* @__PURE__ */
|
|
1486
|
+
/* @__PURE__ */ jsx6("strong", {
|
|
1487
1487
|
children: "Unified runtime"
|
|
1488
|
-
}
|
|
1488
|
+
}),
|
|
1489
1489
|
" – React/React-Native rendering ensures consistent experiences across web and mobile."
|
|
1490
1490
|
]
|
|
1491
|
-
}
|
|
1491
|
+
})
|
|
1492
1492
|
]
|
|
1493
|
-
}
|
|
1494
|
-
/* @__PURE__ */
|
|
1493
|
+
}),
|
|
1494
|
+
/* @__PURE__ */ jsx6("p", {
|
|
1495
1495
|
className: "text-muted-foreground",
|
|
1496
1496
|
children: "Workflow engines are excellent for orchestrating back-end tasks. ContractSpec builds on this by serving complete applications with runtime policy enforcement and user personalisation via TypeScript specs."
|
|
1497
|
-
}
|
|
1497
|
+
})
|
|
1498
1498
|
]
|
|
1499
|
-
}
|
|
1499
|
+
})
|
|
1500
1500
|
]
|
|
1501
|
-
}
|
|
1501
|
+
});
|
|
1502
1502
|
}
|
|
1503
1503
|
export {
|
|
1504
1504
|
ComparisonWorkflowEnginesPage,
|