1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
|
import type Image from "next/image";
import EcosystemIconDark from "../public/images/docs/shared/feature-icons/ecosystem-dark.svg";
import EcosystemIconLight from "../public/images/docs/shared/feature-icons/ecosystem-light.svg";
import LightningIconDark from "../public/images/docs/shared/feature-icons/lightning-dark.svg";
import LightningIconLight from "../public/images/docs/shared/feature-icons/lightning-light.svg";
import BarsIconDark from "../public/images/docs/shared/feature-icons/bars-dark.svg";
import BarsIconLight from "../public/images/docs/shared/feature-icons/bars-light.svg";
import MultiEnvTargetsIconDark from "../public/images/docs/shared/feature-icons/multi-env-targets-dark.svg";
import MultiEnvTargetsIconLight from "../public/images/docs/shared/feature-icons/multi-env-targets-light.svg";
import NextJSIconDark from "../public/images/docs/shared/feature-icons/nextjs-dark.svg";
import NextJSIconLight from "../public/images/docs/shared/feature-icons/nextjs-light.svg";
import ServerComponentsIconDark from "../public/images/docs/shared/feature-icons/server-components-dark.svg";
import ServerComponentsIconLight from "../public/images/docs/shared/feature-icons/server-components-light.svg";
import FingerprintIconDark from "../public/images/docs/shared/feature-icons/fingerprint-dark.svg";
import FingerprintIconLight from "../public/images/docs/shared/feature-icons/fingerprint-light.svg";
import CloudIconDark from "../public/images/docs/shared/feature-icons/cloud-dark.svg";
import CloudIconLight from "../public/images/docs/shared/feature-icons/cloud-light.svg";
import CpuIconDark from "../public/images/docs/shared/feature-icons/cpu-dark.svg";
import CpuIconLight from "../public/images/docs/shared/feature-icons/cpu-light.svg";
import PieconDark from "../public/images/docs/shared/feature-icons/piecon-dark.svg";
import PieconLight from "../public/images/docs/shared/feature-icons/piecon-light.svg";
import RefreshIconDark from "../public/images/docs/shared/feature-icons/refresh-dark.svg";
import RefreshIconLight from "../public/images/docs/shared/feature-icons/refresh-light.svg";
import ArrowsExpandIconDark from "../public/images/docs/shared/feature-icons/arrows-expand-dark.svg";
import ArrowsExpandIconLight from "../public/images/docs/shared/feature-icons/arrows-expand-light.svg";
import BeakerIconDark from "../public/images/docs/shared/feature-icons/beaker-dark.svg";
import BeakerIconLight from "../public/images/docs/shared/feature-icons/beaker-light.svg";
type NextImageSrc = Parameters<typeof Image>[0]["src"];
export type Feature = {
name: string;
description: string;
iconDark: NextImageSrc;
iconLight: NextImageSrc;
page: "all" | "home" | "docs";
};
export type Features = Array<Feature>;
const REPO_FEATURES: Features = [
{
name: "Incremental builds",
description: `Building once is painful enough, Turborepo will remember what you've built and skip the stuff that's already been computed.`,
iconDark: RefreshIconDark,
iconLight: RefreshIconLight,
page: "all",
},
{
name: "Content-aware hashing",
description: `Turborepo looks at the contents of your files, not timestamps to figure out what needs to be built.`,
iconDark: FingerprintIconDark,
iconLight: FingerprintIconLight,
page: "home",
},
{
name: "Parallel execution",
description: `Execute builds using every core at maximum parallelism without wasting idle CPUs.`,
iconDark: LightningIconDark,
iconLight: LightningIconLight,
page: "all",
},
{
name: "Remote Caching",
description: `Share a remote build cache with your teammates and CI/CD for even faster builds.`,
iconDark: CloudIconDark,
iconLight: CloudIconLight,
page: "all",
},
{
name: "Zero runtime overhead",
description: `Turborepo won’t interfere with your runtime code or touch your sourcemaps. `,
iconDark: CpuIconDark,
iconLight: CpuIconLight,
page: "all",
},
{
name: "Pruned subsets",
description: `Speed up PaaS deploys by generating a subset of your monorepo with only what's needed to build a specific target.`,
iconDark: PieconDark,
iconLight: PieconLight,
page: "all",
},
{
name: "Task pipelines",
description: `Define the relationships between your tasks and then let Turborepo optimize what to build and when.`,
iconDark: ArrowsExpandIconDark,
iconLight: ArrowsExpandIconLight,
page: "all",
},
{
name: "Meets you where you’re at",
description: `Using Lerna? Keep your package publishing workflow and use Turborepo to turbocharge task running.`,
iconDark: BeakerIconDark,
iconLight: BeakerIconLight,
page: "home",
},
{
name: `Profile in your browser`,
description: `Generate build profiles and import them in Chrome or Edge to understand which tasks are taking the longest.`,
iconDark: BarsIconDark,
iconLight: BarsIconLight,
page: "home",
},
];
const PACK_FEATURES: Features = [
{
name: "Incremental by design",
description: `Building once is enough work—once Turbopack performs a task, it never does it again. `,
iconDark: BarsIconDark,
iconLight: BarsIconLight,
page: "all",
},
{
name: "Ecosystem-friendly",
description: `Get out-of-the-box support for TypeScript, JSX, CSS, CSS Modules, WebAssembly, and more.`,
iconDark: EcosystemIconDark,
iconLight: EcosystemIconLight,
page: "home",
},
{
name: "Lightning fast HMR",
description: `Hot Module Replacement (HMR) stays fast regardless of the size of your app.`,
iconDark: LightningIconDark,
iconLight: LightningIconLight,
page: "all",
},
{
name: "React Server Components",
description: `Get native support for React Server Components when using Turbopack. `,
iconDark: ServerComponentsIconDark,
iconLight: ServerComponentsIconLight,
page: "all",
},
{
name: "Simultaneous Multiple Env Targets",
description: `Build and optimize for multiple environments together (Browser, Server, Edge, SSR, React Server Components).`,
iconDark: MultiEnvTargetsIconDark,
iconLight: MultiEnvTargetsIconLight,
page: "all",
},
{
name: "Next.js support",
description: `Turbopack will also power Next.js production builds, both locally and in the cloud.`,
iconDark: NextJSIconDark,
iconLight: NextJSIconLight,
page: "all",
},
];
export const REPO_DOCS_FEATURES = REPO_FEATURES.filter(
(f) => f.page === "docs" || f.page === "all"
);
export const REPO_HOME_FEATURES = REPO_FEATURES.filter(
(f) => f.page === "home" || f.page === "all"
);
export const PACK_HOME_FEATURES = PACK_FEATURES.filter(
(f) => f.page === "home" || f.page === "all"
);
|