1338 lines
39 KiB
TypeScript
1338 lines
39 KiB
TypeScript
import type { StarlightUserConfig } from '@astrojs/starlight/types';
|
|
import {
|
|
getTechnologyKBItems,
|
|
getTechnologyAPIItems,
|
|
} from './src/plugins/utils/plugin-mappings';
|
|
import { resolveNxDevUrl } from './src/utils/resolve-nx-dev-url';
|
|
|
|
type SidebarItems = NonNullable<StarlightUserConfig['sidebar']>;
|
|
|
|
/**
|
|
* Tab configuration for the sidebar. Each tab directly owns its sidebar groups,
|
|
* making the tab ↔ content relationship explicit and impossible to drift.
|
|
* A tab may instead be a direct `link` (renders as a nav link, not a panel).
|
|
*/
|
|
export interface SidebarTab {
|
|
id: string;
|
|
label: string;
|
|
icon?: string;
|
|
groups: SidebarItems;
|
|
/** If set, the tab navigates straight to this slug instead of opening a panel. */
|
|
link?: string;
|
|
}
|
|
|
|
const learnGroups: SidebarItems = [
|
|
{
|
|
label: 'Getting started',
|
|
collapsed: false,
|
|
items: [
|
|
{ label: 'Intro to Nx', link: 'getting-started/intro' },
|
|
{ label: 'Installation', link: 'getting-started/installation' },
|
|
{
|
|
label: 'Start a new project',
|
|
link: 'getting-started/start-new-project',
|
|
},
|
|
{
|
|
label: 'Add to existing project',
|
|
link: 'getting-started/start-with-existing-project',
|
|
},
|
|
{ label: 'AI integrations', link: 'getting-started/ai-setup' },
|
|
{ label: 'CI setup', link: 'getting-started/setup-ci' },
|
|
{ label: 'Editor setup', link: 'getting-started/editor-setup' },
|
|
{
|
|
label: 'Tutorials',
|
|
collapsed: false,
|
|
items: [
|
|
{
|
|
label: 'Crafting your workspace',
|
|
link: 'getting-started/tutorials/crafting-your-workspace',
|
|
},
|
|
{
|
|
label: 'Managing dependencies',
|
|
link: 'getting-started/tutorials/managing-dependencies',
|
|
},
|
|
{
|
|
label: 'Configuring tasks',
|
|
link: 'getting-started/tutorials/configuring-tasks',
|
|
},
|
|
{
|
|
label: 'Running tasks',
|
|
link: 'getting-started/tutorials/running-tasks',
|
|
},
|
|
{
|
|
label: 'Caching tasks',
|
|
link: 'getting-started/tutorials/caching',
|
|
},
|
|
{
|
|
label: 'Understanding your workspace',
|
|
link: 'getting-started/tutorials/understanding-your-workspace',
|
|
},
|
|
{
|
|
label: 'Reducing boilerplate',
|
|
link: 'getting-started/tutorials/reducing-configuration-boilerplate',
|
|
},
|
|
{
|
|
label: 'Gradle monorepo',
|
|
link: 'getting-started/tutorials/gradle-tutorial',
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
|
|
{
|
|
label: 'How Nx works',
|
|
collapsed: true,
|
|
items: [
|
|
{ label: 'Mental model', link: 'concepts/mental-model' },
|
|
{ label: 'How caching works', link: 'concepts/how-caching-works' },
|
|
{
|
|
label: 'Task pipeline configuration',
|
|
link: 'concepts/task-pipeline-configuration',
|
|
},
|
|
{
|
|
label: 'Types of configuration',
|
|
link: 'concepts/types-of-configuration',
|
|
},
|
|
{
|
|
label: 'Executors and configurations',
|
|
link: 'concepts/executors-and-configurations',
|
|
},
|
|
{ label: 'Nx plugins', link: 'concepts/nx-plugins' },
|
|
{ label: 'Inferred tasks', link: 'concepts/inferred-tasks' },
|
|
{
|
|
label: 'Building blocks of fast CI',
|
|
link: 'concepts/ci-concepts/building-blocks-fast-ci',
|
|
},
|
|
{
|
|
label: 'Parallelization and distribution',
|
|
link: 'concepts/ci-concepts/parallelization-distribution',
|
|
},
|
|
{ label: 'Nx Daemon', link: 'concepts/nx-daemon' },
|
|
],
|
|
},
|
|
{
|
|
label: 'Platform features',
|
|
collapsed: true,
|
|
items: [
|
|
{ label: 'Run tasks', link: 'features/run-tasks' },
|
|
{
|
|
label: 'Cache task results',
|
|
link: 'features/cache-task-results',
|
|
},
|
|
{ label: 'Enhance your LLM', link: 'features/enhance-ai' },
|
|
{
|
|
label: 'Code organization',
|
|
collapsed: true,
|
|
items: [
|
|
{ label: 'Explore graph', link: 'features/explore-graph' },
|
|
{ label: 'Generate code', link: 'features/generate-code' },
|
|
{ label: 'Sync generators', link: 'concepts/sync-generators' },
|
|
{
|
|
label: 'Enforce module boundaries',
|
|
collapsed: true,
|
|
items: [
|
|
{
|
|
label: 'Overview',
|
|
link: 'features/enforce-module-boundaries',
|
|
},
|
|
{
|
|
label: 'Ban dependencies with tags',
|
|
link: 'guides/enforce-module-boundaries/ban-dependencies-with-tags',
|
|
},
|
|
{
|
|
label: 'Ban external imports',
|
|
link: 'guides/enforce-module-boundaries/ban-external-imports',
|
|
},
|
|
{
|
|
label: 'Tag multiple dimensions',
|
|
link: 'guides/enforce-module-boundaries/tag-multiple-dimensions',
|
|
},
|
|
{
|
|
label: 'Tags allow list',
|
|
link: 'guides/enforce-module-boundaries/tags-allow-list',
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: 'Orchestration & CI',
|
|
collapsed: true,
|
|
items: [
|
|
{
|
|
label: 'Overview',
|
|
link: 'features/ci-features',
|
|
},
|
|
{ label: 'Affected', link: 'features/ci-features/affected' },
|
|
{
|
|
label: 'Remote cache (Nx Replay)',
|
|
link: 'features/ci-features/remote-cache',
|
|
},
|
|
{
|
|
label: 'Self-healing CI',
|
|
link: 'features/ci-features/self-healing-ci',
|
|
},
|
|
{ label: 'Flaky tasks', link: 'features/ci-features/flaky-tasks' },
|
|
{
|
|
label: 'Distribute task execution (Nx Agents)',
|
|
link: 'features/ci-features/distribute-task-execution',
|
|
},
|
|
{
|
|
label: 'Split E2E tasks',
|
|
link: 'features/ci-features/split-e2e-tasks',
|
|
},
|
|
{
|
|
label: 'Dynamically allocate agents',
|
|
link: 'features/ci-features/dynamic-agents',
|
|
},
|
|
{
|
|
label: 'Optimize your TTG',
|
|
link: 'guides/nx-cloud/optimize-your-ttg',
|
|
},
|
|
{
|
|
label: 'Record commands',
|
|
link: 'guides/nx-cloud/record-commands',
|
|
},
|
|
{
|
|
label: 'GitHub integration',
|
|
link: 'features/ci-features/github-integration',
|
|
},
|
|
{
|
|
label: 'CIPE affected project graph',
|
|
link: 'guides/nx-cloud/cipe-affected-project-graph',
|
|
},
|
|
{ label: 'Encryption', link: 'guides/nx-cloud/encryption' },
|
|
{ label: 'Google auth', link: 'guides/nx-cloud/google-auth' },
|
|
{
|
|
label: 'Resource usage',
|
|
link: 'features/ci-features/resource-usage',
|
|
},
|
|
{
|
|
label: 'Dedicated compute cluster',
|
|
link: 'features/ci-features/dedicated-compute-cluster',
|
|
},
|
|
{
|
|
label: 'Sandboxing',
|
|
link: 'features/ci-features/sandboxing',
|
|
},
|
|
{
|
|
label: 'Docker layer caching',
|
|
link: 'features/ci-features/docker-layer-caching',
|
|
},
|
|
{
|
|
label: 'Docker read-through cache',
|
|
link: 'features/ci-features/docker-read-through-cache',
|
|
},
|
|
{
|
|
label: 'npm read-through cache',
|
|
link: 'features/ci-features/npm-read-through-cache',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: 'Release & publishing',
|
|
collapsed: true,
|
|
items: [
|
|
{ label: 'Nx Release overview', link: 'features/manage-releases' },
|
|
{
|
|
label: 'Publish in CI/CD',
|
|
link: 'guides/nx-release/publish-in-ci-cd',
|
|
},
|
|
{
|
|
label: 'Automatic versioning with conventional commits',
|
|
link: 'guides/nx-release/automatically-version-with-conventional-commits',
|
|
},
|
|
{
|
|
label: 'Customize conventional commit types',
|
|
link: 'guides/nx-release/customize-conventional-commit-types',
|
|
},
|
|
{
|
|
label: 'Configure changelog format',
|
|
link: 'guides/nx-release/configure-changelog-format',
|
|
},
|
|
{
|
|
label: 'Configure custom registries',
|
|
link: 'guides/nx-release/configure-custom-registries',
|
|
},
|
|
{
|
|
label: 'Configure version prefix',
|
|
link: 'guides/nx-release/configuration-version-prefix',
|
|
},
|
|
{
|
|
label: 'File-based versioning (version plans)',
|
|
link: 'guides/nx-release/file-based-versioning-version-plans',
|
|
},
|
|
{
|
|
label: 'Release groups',
|
|
link: 'guides/nx-release/release-groups',
|
|
},
|
|
{
|
|
label: 'Release projects independently',
|
|
link: 'guides/nx-release/release-projects-independently',
|
|
},
|
|
{
|
|
label: 'Build before versioning',
|
|
link: 'guides/nx-release/build-before-versioning',
|
|
},
|
|
{
|
|
label: 'Update dependents',
|
|
link: 'guides/nx-release/update-dependents',
|
|
},
|
|
{
|
|
label: 'Updating version references',
|
|
link: 'guides/nx-release/updating-version-references',
|
|
},
|
|
{
|
|
label: 'Update local registry setup',
|
|
link: 'guides/nx-release/update-local-registry-setup',
|
|
},
|
|
{
|
|
label: 'Programmatic API',
|
|
link: 'guides/nx-release/programmatic-api',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: 'Maintenance',
|
|
collapsed: true,
|
|
items: [
|
|
{
|
|
label: 'Automate updating dependencies',
|
|
link: 'features/automate-updating-dependencies',
|
|
},
|
|
{
|
|
label: 'Advanced update process',
|
|
link: 'guides/tips-n-tricks/advanced-update',
|
|
},
|
|
{
|
|
label: 'Automate importing projects',
|
|
link: 'guides/adopting-nx/import-project',
|
|
},
|
|
{
|
|
label: 'Manual migrations',
|
|
link: 'guides/adopting-nx/manual',
|
|
},
|
|
{
|
|
label: 'Preserving Git histories',
|
|
link: 'guides/adopting-nx/preserving-git-histories',
|
|
},
|
|
{
|
|
label: 'Migrating from Turborepo',
|
|
link: 'guides/adopting-nx/from-turborepo',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: 'Enterprise',
|
|
collapsed: true,
|
|
items: [
|
|
{ label: 'Conformance', link: 'enterprise/conformance' },
|
|
{
|
|
label: 'Configure conformance rules in Nx Cloud',
|
|
link: 'enterprise/configure-conformance-rules-in-nx-cloud',
|
|
},
|
|
{
|
|
label: 'Publish conformance rules to Nx Cloud',
|
|
link: 'enterprise/publish-conformance-rules-to-nx-cloud',
|
|
},
|
|
{ label: 'Owners', link: 'enterprise/owners' },
|
|
{ label: 'Custom workflows', link: 'enterprise/custom-workflows' },
|
|
{ label: 'Activate license', link: 'enterprise/activate-license' },
|
|
{
|
|
label: 'Single tenant',
|
|
collapsed: true,
|
|
items: [
|
|
{
|
|
label: 'Overview',
|
|
link: 'enterprise/single-tenant/overview',
|
|
},
|
|
{
|
|
label: 'Auth GitHub',
|
|
link: 'enterprise/single-tenant/auth-github',
|
|
},
|
|
{
|
|
label: 'Auth GitLab',
|
|
link: 'enterprise/single-tenant/auth-gitlab',
|
|
},
|
|
{
|
|
label: 'Auth Bitbucket',
|
|
link: 'enterprise/single-tenant/auth-bitbucket',
|
|
},
|
|
{
|
|
label: 'Auth Bitbucket Data Center',
|
|
link: 'enterprise/single-tenant/auth-bitbucket-data-center',
|
|
},
|
|
{
|
|
label: 'Custom GitHub app',
|
|
link: 'enterprise/single-tenant/custom-github-app',
|
|
},
|
|
{
|
|
label: 'Okta SAML',
|
|
link: 'enterprise/single-tenant/okta-saml',
|
|
},
|
|
{
|
|
label: 'Azure SAML',
|
|
link: 'enterprise/single-tenant/azure-saml',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: 'Conformance reference',
|
|
collapsed: true,
|
|
items: [
|
|
{
|
|
label: 'Overview',
|
|
link: 'reference/conformance/overview',
|
|
},
|
|
{
|
|
label: 'Create conformance rule',
|
|
link: 'reference/conformance/create-conformance-rule',
|
|
},
|
|
{
|
|
label: 'Test conformance rule',
|
|
link: 'reference/conformance/test-conformance-rule',
|
|
},
|
|
{
|
|
label: 'Generators',
|
|
link: 'reference/conformance/generators',
|
|
},
|
|
{
|
|
label: 'Executors',
|
|
link: 'reference/conformance/executors',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: 'Enterprise release notes',
|
|
link: 'reference/nx-cloud/release-notes',
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
const technologiesGroups: SidebarItems = [
|
|
{
|
|
label: 'Technologies & tools',
|
|
collapsed: true,
|
|
items: [
|
|
{
|
|
label: 'Frameworks & libraries',
|
|
collapsed: false,
|
|
items: [
|
|
{
|
|
label: 'TypeScript',
|
|
link: 'technologies/typescript/introduction',
|
|
},
|
|
{ label: 'Angular', link: 'technologies/angular/introduction' },
|
|
{
|
|
label: 'Angular Rspack',
|
|
link: 'technologies/angular/angular-rspack/introduction',
|
|
},
|
|
{
|
|
label: 'Angular Rsbuild',
|
|
link: 'technologies/angular/angular-rsbuild/introduction',
|
|
},
|
|
{ label: 'React', link: 'technologies/react/introduction' },
|
|
{
|
|
label: 'Next.js',
|
|
link: 'technologies/react/next/introduction',
|
|
},
|
|
{
|
|
label: 'Remix',
|
|
link: 'technologies/react/remix/introduction',
|
|
},
|
|
{
|
|
label: 'React Native',
|
|
link: 'technologies/react/react-native/introduction',
|
|
},
|
|
{ label: 'Expo', link: 'technologies/react/expo/introduction' },
|
|
{ label: 'Vue', link: 'technologies/vue/introduction' },
|
|
{ label: 'Nuxt', link: 'technologies/vue/nuxt/introduction' },
|
|
{
|
|
label: 'Module Federation',
|
|
link: 'technologies/module-federation/introduction',
|
|
},
|
|
{ label: 'ESLint', link: 'technologies/eslint/introduction' },
|
|
],
|
|
},
|
|
{
|
|
label: 'Node',
|
|
collapsed: false,
|
|
items: [
|
|
{ label: 'Node.js', link: 'technologies/node/introduction' },
|
|
{
|
|
label: 'Express',
|
|
link: 'technologies/node/express/introduction',
|
|
},
|
|
{ label: 'Nest', link: 'technologies/node/nest/introduction' },
|
|
],
|
|
},
|
|
{
|
|
label: 'Java (JVM)',
|
|
collapsed: false,
|
|
items: [
|
|
{ label: 'Java', link: 'technologies/java/introduction' },
|
|
{
|
|
label: 'Gradle',
|
|
link: 'technologies/java/gradle/introduction',
|
|
},
|
|
{
|
|
label: 'Maven',
|
|
link: 'technologies/java/maven/introduction',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: '.NET',
|
|
collapsed: false,
|
|
items: [{ label: '.NET', link: 'technologies/dotnet/introduction' }],
|
|
},
|
|
{
|
|
label: 'Build tools',
|
|
collapsed: false,
|
|
items: [
|
|
{
|
|
label: 'Webpack',
|
|
link: 'technologies/build-tools/webpack/introduction',
|
|
},
|
|
{
|
|
label: 'Vite',
|
|
link: 'technologies/build-tools/vite/introduction',
|
|
},
|
|
{
|
|
label: 'Rollup',
|
|
link: 'technologies/build-tools/rollup/introduction',
|
|
},
|
|
{
|
|
label: 'ESBuild',
|
|
link: 'technologies/build-tools/esbuild/introduction',
|
|
},
|
|
{
|
|
label: 'Rspack',
|
|
link: 'technologies/build-tools/rspack/introduction',
|
|
},
|
|
{
|
|
label: 'Rsbuild',
|
|
link: 'technologies/build-tools/rsbuild/introduction',
|
|
},
|
|
{
|
|
label: 'Docker',
|
|
link: 'technologies/build-tools/docker/introduction',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: 'Test tools',
|
|
collapsed: false,
|
|
items: [
|
|
{
|
|
label: 'Cypress',
|
|
link: 'technologies/test-tools/cypress/introduction',
|
|
},
|
|
{
|
|
label: 'Vitest',
|
|
link: 'technologies/test-tools/vitest/introduction',
|
|
},
|
|
{
|
|
label: 'Jest',
|
|
link: 'technologies/test-tools/jest/introduction',
|
|
},
|
|
{
|
|
label: 'Playwright',
|
|
link: 'technologies/test-tools/playwright/introduction',
|
|
},
|
|
{
|
|
label: 'Storybook',
|
|
link: 'technologies/test-tools/storybook/introduction',
|
|
},
|
|
{
|
|
label: 'Detox',
|
|
link: 'technologies/test-tools/detox/introduction',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: 'Plugin registry',
|
|
link: 'plugin-registry',
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
const knowledgeBaseGroups: SidebarItems = [
|
|
{
|
|
label: 'Knowledge base',
|
|
collapsed: true,
|
|
items: [
|
|
{
|
|
label: 'Troubleshooting',
|
|
collapsed: true,
|
|
items: [
|
|
{
|
|
label: 'CI execution failed',
|
|
link: 'troubleshooting/ci-execution-failed',
|
|
},
|
|
{
|
|
label: 'Unknown local cache error',
|
|
link: 'troubleshooting/unknown-local-cache',
|
|
},
|
|
{
|
|
label: 'Troubleshoot convert to inferred',
|
|
link: 'troubleshooting/troubleshoot-convert-to-inferred',
|
|
},
|
|
{
|
|
label: 'Profiling performance',
|
|
link: 'troubleshooting/performance-profiling',
|
|
},
|
|
{
|
|
label: 'Troubleshoot Nx Console issues',
|
|
link: 'troubleshooting/console-troubleshooting',
|
|
},
|
|
{
|
|
label: 'Troubleshoot cache misses',
|
|
link: 'troubleshooting/troubleshoot-cache-misses',
|
|
},
|
|
{
|
|
label: 'Troubleshoot Nx installations',
|
|
link: 'troubleshooting/troubleshoot-nx-install-issues',
|
|
},
|
|
{
|
|
label: 'Fix Nx in Claude Code sandbox',
|
|
link: 'troubleshooting/nx-sandbox-unix-sockets',
|
|
},
|
|
{
|
|
label: 'Resolve circular dependencies',
|
|
link: 'troubleshooting/resolve-circular-dependencies',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: 'Recipes',
|
|
collapsed: true,
|
|
items: [
|
|
{
|
|
label: 'Include all package.json files',
|
|
link: 'guides/tips-n-tricks/include-all-packagejson',
|
|
},
|
|
{
|
|
label: 'Disable graph links from source analysis',
|
|
link: 'guides/tips-n-tricks/analyze-source-files',
|
|
},
|
|
{
|
|
label: 'Using Yarn PnP with Nx',
|
|
link: 'guides/tips-n-tricks/yarn-pnp',
|
|
},
|
|
{
|
|
label: 'Use npm workspaces with Nx',
|
|
link: 'guides/tips-n-tricks/npm-workspaces',
|
|
},
|
|
{
|
|
label: 'Use pnpm workspaces with Nx',
|
|
link: 'guides/tips-n-tricks/pnpm-workspaces',
|
|
},
|
|
{
|
|
label: 'Use Yarn workspaces with Nx',
|
|
link: 'guides/tips-n-tricks/yarn-workspaces',
|
|
},
|
|
{
|
|
label: 'Use Bun workspaces with Nx',
|
|
link: 'guides/tips-n-tricks/bun-workspaces',
|
|
},
|
|
{
|
|
label: 'Identify dependencies between folders',
|
|
link: 'guides/tips-n-tricks/identify-dependencies-between-folders',
|
|
},
|
|
{
|
|
label: 'Feature-based testing',
|
|
link: 'guides/tips-n-tricks/feature-based-testing',
|
|
},
|
|
{
|
|
label: 'Configuring browser support',
|
|
link: 'guides/tips-n-tricks/browser-support',
|
|
},
|
|
{
|
|
label: 'Define environment variables',
|
|
link: 'guides/tips-n-tricks/define-environment-variables',
|
|
},
|
|
{
|
|
label: 'Including assets in your build',
|
|
link: 'guides/tips-n-tricks/include-assets-in-build',
|
|
},
|
|
{
|
|
label: 'Keep Nx versions in sync',
|
|
link: 'guides/tips-n-tricks/keep-nx-versions-in-sync',
|
|
},
|
|
{
|
|
label: 'Standalone to monorepo',
|
|
link: 'guides/tips-n-tricks/standalone-to-monorepo',
|
|
},
|
|
{
|
|
label: 'Migrate `nx` imports to `@nx/devkit`',
|
|
link: 'guides/tips-n-tricks/migrate-nx-imports-to-devkit',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: 'Creating releases',
|
|
collapsed: true,
|
|
items: [
|
|
{
|
|
label: 'Release NPM packages',
|
|
link: 'guides/nx-release/release-npm-packages',
|
|
},
|
|
{
|
|
label: 'Release Rust crates',
|
|
link: 'guides/nx-release/publish-rust-crates',
|
|
},
|
|
{
|
|
label: 'Release Docker images',
|
|
link: 'guides/nx-release/release-docker-images',
|
|
},
|
|
{
|
|
label: 'Automate GitHub releases',
|
|
link: 'guides/nx-release/automate-github-releases',
|
|
},
|
|
{
|
|
label: 'Automate GitLab releases',
|
|
link: 'guides/nx-release/automate-gitlab-releases',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: 'Nx Console',
|
|
collapsed: true,
|
|
items: [
|
|
{
|
|
label: 'Telemetry',
|
|
link: 'guides/nx-console/console-telemetry',
|
|
},
|
|
{
|
|
label: 'Run command',
|
|
link: 'guides/nx-console/console-run-command',
|
|
},
|
|
{
|
|
label: 'Nx Cloud integration',
|
|
link: 'guides/nx-console/console-nx-cloud',
|
|
},
|
|
{
|
|
label: 'Generate command',
|
|
link: 'guides/nx-console/console-generate-command',
|
|
},
|
|
{
|
|
label: 'Project details view',
|
|
link: 'guides/nx-console/console-project-details',
|
|
},
|
|
{
|
|
label: 'Troubleshooting',
|
|
link: 'guides/nx-console/console-troubleshooting',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: 'Installation and updates',
|
|
collapsed: true,
|
|
items: [
|
|
{
|
|
label: 'Install Nx in non-JavaScript repo',
|
|
link: 'guides/installation/install-non-javascript',
|
|
},
|
|
{
|
|
label: 'Update global installation',
|
|
link: 'guides/installation/update-global-installation',
|
|
},
|
|
{
|
|
label: 'Nx Console migration assistance',
|
|
link: 'guides/nx-console/console-migrate-ui',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: 'Organizational decisions',
|
|
collapsed: true,
|
|
items: [
|
|
{
|
|
label: 'Why monorepos',
|
|
link: 'concepts/decisions/why-monorepos',
|
|
},
|
|
{
|
|
label: 'Monorepo or polyrepo',
|
|
link: 'concepts/decisions/overview',
|
|
},
|
|
{
|
|
label: 'Dependency management',
|
|
link: 'concepts/decisions/dependency-management',
|
|
},
|
|
{
|
|
label: 'Folder structure',
|
|
link: 'concepts/decisions/folder-structure',
|
|
},
|
|
{
|
|
label: 'Project size',
|
|
link: 'concepts/decisions/project-size',
|
|
},
|
|
{
|
|
label: 'Code ownership',
|
|
link: 'concepts/decisions/code-ownership',
|
|
},
|
|
{
|
|
label: 'Project dependency rules',
|
|
link: 'concepts/decisions/project-dependency-rules',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: 'Extending Nx',
|
|
collapsed: true,
|
|
items: [
|
|
{ label: 'Intro', link: 'extending-nx/intro' },
|
|
{ label: 'Local generators', link: 'extending-nx/local-generators' },
|
|
{
|
|
label: 'Composing generators',
|
|
link: 'extending-nx/composing-generators',
|
|
},
|
|
{
|
|
label: 'Creating files',
|
|
link: 'extending-nx/creating-files',
|
|
},
|
|
{
|
|
label: 'Modifying files',
|
|
link: 'extending-nx/modifying-files',
|
|
},
|
|
{
|
|
label: 'Migration generators',
|
|
link: 'extending-nx/migration-generators',
|
|
},
|
|
{
|
|
label: 'Create sync generator',
|
|
link: 'extending-nx/create-sync-generator',
|
|
},
|
|
{ label: 'Local executors', link: 'extending-nx/local-executors' },
|
|
{
|
|
label: 'Compose executors',
|
|
link: 'extending-nx/compose-executors',
|
|
},
|
|
{
|
|
label: 'Task running lifecycle',
|
|
link: 'extending-nx/task-running-lifecycle',
|
|
},
|
|
{
|
|
label: 'Project graph plugins',
|
|
link: 'extending-nx/project-graph-plugins',
|
|
},
|
|
{
|
|
label: 'CreateNodes compatibility',
|
|
link: 'extending-nx/createnodes-compatibility',
|
|
},
|
|
{
|
|
label: 'Performant project graph plugins',
|
|
link: 'extending-nx/performant-project-graph-plugins',
|
|
},
|
|
{
|
|
label: 'Organization-specific plugin',
|
|
link: 'extending-nx/organization-specific-plugin',
|
|
},
|
|
{
|
|
label: 'Tooling plugin',
|
|
link: 'extending-nx/tooling-plugin',
|
|
},
|
|
{
|
|
label: 'Custom plugin preset',
|
|
link: 'extending-nx/create-preset',
|
|
},
|
|
{
|
|
label: 'Creating an install package',
|
|
link: 'extending-nx/create-install-package',
|
|
},
|
|
{
|
|
label: 'Publish your plugin',
|
|
link: 'extending-nx/publish-plugin',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: 'Continuous integration',
|
|
collapsed: true,
|
|
items: [
|
|
{ label: 'Setup CI', link: 'guides/nx-cloud/setup-ci' },
|
|
{ label: 'Access tokens', link: 'guides/nx-cloud/access-tokens' },
|
|
{
|
|
label: 'Personal access tokens',
|
|
link: 'guides/nx-cloud/personal-access-tokens',
|
|
},
|
|
{
|
|
label: 'Bring Your Own Compute',
|
|
link: 'guides/nx-cloud/bring-your-own-compute',
|
|
},
|
|
{
|
|
label: 'Source control integration',
|
|
link: 'guides/nx-cloud/source-control-integration',
|
|
},
|
|
{
|
|
label: 'Set up CI with Bun',
|
|
link: 'guides/nx-cloud/use-bun',
|
|
},
|
|
{
|
|
label: 'GitHub app permissions',
|
|
link: 'guides/nx-cloud/source-control-integration/github-app-permissions',
|
|
},
|
|
{
|
|
label: 'Configuring the cloud runner',
|
|
link: 'reference/nx-cloud/config',
|
|
},
|
|
{
|
|
label: 'Custom images',
|
|
link: 'reference/nx-cloud/custom-images',
|
|
},
|
|
{
|
|
label: 'Assignment rules',
|
|
link: 'reference/nx-cloud/assignment-rules',
|
|
},
|
|
{
|
|
label: 'Custom steps',
|
|
link: 'reference/nx-cloud/custom-steps',
|
|
},
|
|
{
|
|
label: 'Launch templates',
|
|
link: 'reference/nx-cloud/launch-templates',
|
|
},
|
|
{
|
|
label: 'Launch template examples',
|
|
link: 'reference/nx-cloud/launch-template-examples',
|
|
},
|
|
{
|
|
label: 'Reduce waste in CI',
|
|
link: 'concepts/ci-concepts/reduce-waste',
|
|
},
|
|
{
|
|
label: 'Cache security',
|
|
link: 'concepts/ci-concepts/cache-security',
|
|
},
|
|
{
|
|
label: 'Heartbeat and manual shutdown handling',
|
|
link: 'concepts/ci-concepts/heartbeat-and-manual-shutdown-handling',
|
|
},
|
|
{
|
|
label: 'Fix sandbox violations',
|
|
link: 'guides/nx-cloud/fix-sandbox-violations',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: 'Tasks & caching',
|
|
collapsed: true,
|
|
items: [
|
|
{
|
|
label: 'Configure inputs',
|
|
link: 'guides/tasks--caching/configure-inputs',
|
|
},
|
|
{
|
|
label: 'Configure outputs',
|
|
link: 'guides/tasks--caching/configure-outputs',
|
|
},
|
|
{
|
|
label: 'Defining task pipeline',
|
|
link: 'guides/tasks--caching/defining-task-pipeline',
|
|
},
|
|
{
|
|
label: 'Run tasks in parallel',
|
|
link: 'guides/tasks--caching/run-tasks-in-parallel',
|
|
},
|
|
{
|
|
label: 'Pass args to commands',
|
|
link: 'guides/tasks--caching/pass-args-to-commands',
|
|
},
|
|
{
|
|
label: 'Run commands executor',
|
|
link: 'guides/tasks--caching/run-commands-executor',
|
|
},
|
|
{
|
|
label: 'Reduce repetitive configuration',
|
|
link: 'guides/tasks--caching/reduce-repetitive-configuration',
|
|
},
|
|
{
|
|
label: 'Root level scripts',
|
|
link: 'guides/tasks--caching/root-level-scripts',
|
|
},
|
|
{
|
|
label: 'Convert to inferred',
|
|
link: 'guides/tasks--caching/convert-to-inferred',
|
|
},
|
|
{
|
|
label: 'Change cache location',
|
|
link: 'guides/tasks--caching/change-cache-location',
|
|
},
|
|
{
|
|
label: 'Self-hosted caching',
|
|
link: 'guides/tasks--caching/self-hosted-caching',
|
|
},
|
|
{
|
|
label: 'Skipping cache',
|
|
link: 'guides/tasks--caching/skipping-cache',
|
|
},
|
|
{
|
|
label: 'Workspace watching',
|
|
link: 'guides/tasks--caching/workspace-watching',
|
|
},
|
|
{ label: 'Terminal UI', link: 'guides/tasks--caching/terminal-ui' },
|
|
],
|
|
},
|
|
{
|
|
label: 'Benchmarks',
|
|
collapsed: true,
|
|
items: [
|
|
{
|
|
label: 'Nx Agents at scale',
|
|
link: 'reference/benchmarks/nx-agents',
|
|
},
|
|
{
|
|
label: 'Large Next.js apps with caching',
|
|
link: 'reference/benchmarks/caching',
|
|
},
|
|
{
|
|
label: 'TSC batch mode',
|
|
link: 'reference/benchmarks/tsc-batch-mode',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: 'TypeScript',
|
|
collapsed: true,
|
|
items: [
|
|
{
|
|
label: 'Maintain TypeScript monorepos',
|
|
link: 'features/maintain-typescript-monorepos',
|
|
},
|
|
...getTechnologyKBItems('typescript'),
|
|
{
|
|
label: 'Buildable and publishable libraries',
|
|
link: 'concepts/buildable-and-publishable-libraries',
|
|
},
|
|
{
|
|
label: 'TypeScript project linking',
|
|
link: 'concepts/typescript-project-linking',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: 'Angular',
|
|
collapsed: true,
|
|
items: [
|
|
...getTechnologyKBItems('angular'),
|
|
...getTechnologyKBItems('angular-rspack', 'angular'),
|
|
],
|
|
},
|
|
{
|
|
label: 'React',
|
|
collapsed: true,
|
|
items: [
|
|
...getTechnologyKBItems('react'),
|
|
...getTechnologyKBItems('next', 'react'),
|
|
],
|
|
},
|
|
{
|
|
label: 'Vue',
|
|
collapsed: true,
|
|
items: [...getTechnologyKBItems('nuxt', 'vue')],
|
|
},
|
|
{
|
|
label: 'Node',
|
|
collapsed: true,
|
|
items: [...getTechnologyKBItems('node')],
|
|
},
|
|
{
|
|
label: '.NET',
|
|
collapsed: true,
|
|
items: [...getTechnologyKBItems('dotnet')],
|
|
},
|
|
{
|
|
label: 'Module Federation',
|
|
collapsed: true,
|
|
items: [...getTechnologyKBItems('module-federation')],
|
|
},
|
|
{
|
|
label: 'ESLint',
|
|
collapsed: true,
|
|
items: [
|
|
...getTechnologyKBItems('eslint'),
|
|
...getTechnologyKBItems('eslint-plugin', 'eslint'),
|
|
],
|
|
},
|
|
{
|
|
label: 'Vite',
|
|
collapsed: true,
|
|
items: [...getTechnologyKBItems('vite', 'build-tools')],
|
|
},
|
|
{
|
|
label: 'Webpack',
|
|
collapsed: true,
|
|
items: [...getTechnologyKBItems('webpack', 'build-tools')],
|
|
},
|
|
{
|
|
label: 'Cypress',
|
|
collapsed: true,
|
|
items: [...getTechnologyKBItems('cypress', 'test-tools')],
|
|
},
|
|
{
|
|
label: 'Playwright',
|
|
collapsed: true,
|
|
items: [...getTechnologyKBItems('playwright', 'test-tools')],
|
|
},
|
|
{
|
|
label: 'Storybook',
|
|
collapsed: true,
|
|
items: [...getTechnologyKBItems('storybook', 'test-tools')],
|
|
},
|
|
{
|
|
label: 'Vitest',
|
|
collapsed: true,
|
|
items: [...getTechnologyKBItems('vitest', 'test-tools')],
|
|
},
|
|
{
|
|
label: 'Comparisons',
|
|
collapsed: true,
|
|
items: [
|
|
{
|
|
label: 'Nx vs Turborepo',
|
|
link: 'guides/comparisons/nx-vs-turborepo',
|
|
},
|
|
{ label: 'Nx vs Vite+', link: 'guides/comparisons/nx-vs-vite-plus' },
|
|
{ label: 'Nx vs Bazel', link: 'guides/comparisons/nx-vs-bazel' },
|
|
{ label: 'Nx vs Depot', link: 'guides/comparisons/nx-vs-depot' },
|
|
{
|
|
label: 'Nx vs Blacksmith',
|
|
link: 'guides/comparisons/nx-vs-blacksmith',
|
|
},
|
|
{
|
|
label: 'Nx vs Develocity',
|
|
link: 'guides/comparisons/nx-vs-develocity',
|
|
},
|
|
{
|
|
label: 'Nx vs Buildkite',
|
|
link: 'guides/comparisons/nx-vs-buildkite',
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
const referenceGroups: SidebarItems = [
|
|
{
|
|
label: 'Reference',
|
|
collapsed: true,
|
|
items: [
|
|
{ label: 'nx.json', link: 'reference/nx-json' },
|
|
{
|
|
label: 'Project configuration',
|
|
link: 'reference/project-configuration',
|
|
},
|
|
{ label: 'Inputs', link: 'reference/inputs' },
|
|
{
|
|
label: 'Environment variables',
|
|
link: 'reference/environment-variables',
|
|
},
|
|
{ label: 'nxignore', link: 'reference/nxignore' },
|
|
{ label: 'Glossary', link: 'reference/glossary' },
|
|
{ label: 'Releases', link: 'reference/releases' },
|
|
{ label: 'Nx MCP', link: 'reference/nx-mcp' },
|
|
{ label: 'Nx Console settings', link: 'reference/nx-console-settings' },
|
|
{ label: 'Nx Cloud CLI', link: 'reference/nx-cloud-cli' },
|
|
{ label: 'Telemetry', link: 'reference/telemetry' },
|
|
{
|
|
label: 'TypeScript',
|
|
collapsed: true,
|
|
items: [...getTechnologyAPIItems('js')],
|
|
},
|
|
{
|
|
label: 'Angular',
|
|
collapsed: true,
|
|
items: [
|
|
...getTechnologyAPIItems('angular', undefined, 'Angular'),
|
|
...getTechnologyAPIItems(
|
|
'angular-rspack',
|
|
'angular',
|
|
'Angular Rspack'
|
|
),
|
|
...getTechnologyAPIItems(
|
|
'angular-rsbuild',
|
|
'angular',
|
|
'Angular Rsbuild'
|
|
),
|
|
...getTechnologyAPIItems(
|
|
'angular-rspack-compiler',
|
|
'angular',
|
|
'Angular Rspack Compiler'
|
|
),
|
|
],
|
|
},
|
|
{
|
|
label: 'React',
|
|
collapsed: true,
|
|
items: [
|
|
...getTechnologyAPIItems('react', undefined, 'React'),
|
|
...getTechnologyAPIItems('next', 'react', 'Next.js'),
|
|
...getTechnologyAPIItems('remix', 'react', 'Remix'),
|
|
...getTechnologyAPIItems('react-native', 'react', 'React Native'),
|
|
...getTechnologyAPIItems('expo', 'react', 'Expo'),
|
|
],
|
|
},
|
|
{
|
|
label: 'Vue',
|
|
collapsed: true,
|
|
items: [
|
|
...getTechnologyAPIItems('vue', undefined, 'Vue'),
|
|
...getTechnologyAPIItems('nuxt', 'vue', 'Nuxt'),
|
|
],
|
|
},
|
|
{
|
|
label: 'Node',
|
|
collapsed: true,
|
|
items: [
|
|
...getTechnologyAPIItems('node', undefined, 'Node'),
|
|
...getTechnologyAPIItems('express', 'node', 'Express'),
|
|
...getTechnologyAPIItems('nest', 'node', 'Nest'),
|
|
],
|
|
},
|
|
{
|
|
label: 'Java',
|
|
collapsed: true,
|
|
items: [
|
|
...getTechnologyAPIItems('gradle', 'java', 'Gradle'),
|
|
...getTechnologyAPIItems('maven', 'java', 'Maven'),
|
|
],
|
|
},
|
|
{
|
|
label: '.NET',
|
|
collapsed: true,
|
|
items: [...getTechnologyAPIItems('dotnet')],
|
|
},
|
|
{
|
|
label: 'Module Federation',
|
|
collapsed: true,
|
|
items: [...getTechnologyAPIItems('module-federation')],
|
|
},
|
|
{
|
|
label: 'ESLint',
|
|
collapsed: true,
|
|
items: [
|
|
...getTechnologyAPIItems('eslint', undefined, 'ESLint'),
|
|
...getTechnologyAPIItems('eslint-plugin', 'eslint', 'ESLint Plugin'),
|
|
],
|
|
},
|
|
{
|
|
label: 'Webpack',
|
|
collapsed: true,
|
|
items: [...getTechnologyAPIItems('webpack', 'build-tools')],
|
|
},
|
|
{
|
|
label: 'Vite',
|
|
collapsed: true,
|
|
items: [...getTechnologyAPIItems('vite', 'build-tools')],
|
|
},
|
|
{
|
|
label: 'Rollup',
|
|
collapsed: true,
|
|
items: [...getTechnologyAPIItems('rollup', 'build-tools')],
|
|
},
|
|
{
|
|
label: 'ESBuild',
|
|
collapsed: true,
|
|
items: [...getTechnologyAPIItems('esbuild', 'build-tools')],
|
|
},
|
|
{
|
|
label: 'Rspack',
|
|
collapsed: true,
|
|
items: [...getTechnologyAPIItems('rspack', 'build-tools')],
|
|
},
|
|
{
|
|
label: 'Rsbuild',
|
|
collapsed: true,
|
|
items: [...getTechnologyAPIItems('rsbuild', 'build-tools')],
|
|
},
|
|
{
|
|
label: 'Cypress',
|
|
collapsed: true,
|
|
items: [...getTechnologyAPIItems('cypress', 'test-tools')],
|
|
},
|
|
{
|
|
label: 'Jest',
|
|
collapsed: true,
|
|
items: [...getTechnologyAPIItems('jest', 'test-tools')],
|
|
},
|
|
{
|
|
label: 'Playwright',
|
|
collapsed: true,
|
|
items: [...getTechnologyAPIItems('playwright', 'test-tools')],
|
|
},
|
|
{
|
|
label: 'Storybook',
|
|
collapsed: true,
|
|
items: [...getTechnologyAPIItems('storybook', 'test-tools')],
|
|
},
|
|
{
|
|
label: 'Detox',
|
|
collapsed: true,
|
|
items: [...getTechnologyAPIItems('detox', 'test-tools')],
|
|
},
|
|
{
|
|
label: 'Vitest',
|
|
collapsed: true,
|
|
items: [...getTechnologyAPIItems('vitest', 'test-tools')],
|
|
},
|
|
{
|
|
label: 'Nx Cloud credit pricing',
|
|
link: 'reference/nx-cloud/credits-pricing',
|
|
},
|
|
{
|
|
label: 'Changelog',
|
|
link: `${resolveNxDevUrl()}/changelog`,
|
|
},
|
|
{
|
|
label: 'Deprecations',
|
|
link: 'reference/deprecated',
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
export const sidebarTabs: SidebarTab[] = [
|
|
{
|
|
id: 'tab-learn',
|
|
label: 'Getting Started',
|
|
icon: 'open-book',
|
|
groups: learnGroups,
|
|
},
|
|
{
|
|
id: 'tab-technologies',
|
|
label: 'Technologies',
|
|
icon: 'puzzle',
|
|
groups: technologiesGroups,
|
|
},
|
|
{
|
|
id: 'tab-knowledge-base',
|
|
label: 'Knowledge Base',
|
|
icon: 'information',
|
|
groups: knowledgeBaseGroups,
|
|
},
|
|
{
|
|
id: 'tab-reference',
|
|
label: 'Reference',
|
|
icon: 'document',
|
|
groups: referenceGroups,
|
|
},
|
|
{
|
|
id: 'tab-templates',
|
|
label: 'Templates',
|
|
icon: 'rocket',
|
|
link: 'templates',
|
|
groups: [],
|
|
},
|
|
];
|
|
|
|
export const sidebar: StarlightUserConfig['sidebar'] = sidebarTabs.flatMap(
|
|
(tab) => tab.groups
|
|
);
|