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