Skip to content

Commit aa3c0c1

Browse files
authored
Merge branch 'main' into fix/start-header-link
2 parents cb75178 + 61428f8 commit aa3c0c1

File tree

12 files changed

+215
-15
lines changed

12 files changed

+215
-15
lines changed

app/libraries/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ export type Library = {
7272
description: React.ReactNode
7373
}[]
7474
docsRoot?: string
75+
embedEditor?: 'codesandbox' | 'stackblitz'
7576
}
7677

7778
export type LibraryMenuItem = {

app/libraries/router.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export const routerProject = {
3333
colorFrom: 'from-emerald-500',
3434
colorTo: 'to-lime-600',
3535
textColor: textStyles,
36-
frameworks: ['react'],
36+
frameworks: ['react', 'solid'],
3737
scarfId: '3d14fff2-f326-4929-b5e1-6ecf953d24f4',
3838
defaultDocs: 'framework/react/overview',
3939
hideCodesandboxUrl: true,

app/libraries/start.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,20 @@ export const startProject = {
2828
colorFrom: 'from-teal-500',
2929
colorTo: 'to-cyan-500',
3030
textColor: 'text-cyan-600',
31+
embedEditor: 'codesandbox',
3132
frameworks: ['react'],
3233
scarfId: 'b6e2134f-e805-401d-95c3-2a7765d49a3d',
3334
menu: [
34-
{
35-
icon: <BiBookAlt />,
36-
label: 'Docs',
37-
to: '/start/latest/docs/framework/react/overview',
38-
},
3935
{
4036
icon: <VscPreview />,
4137
label: 'Examples',
4238
to: '/start/latest/docs/framework/react/examples/start-basic',
4339
},
40+
{
41+
icon: <BiBookAlt />,
42+
label: 'Docs',
43+
to: '/start/latest/docs/framework/react/overview',
44+
},
4445
{
4546
icon: <FaGithub />,
4647
label: 'GitHub',

app/routeTree.gen.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import { Route as LibrariesTermsImport } from './routes/_libraries/terms'
2323
import { Route as LibrariesSupportImport } from './routes/_libraries/support'
2424
import { Route as LibrariesPrivacyImport } from './routes/_libraries/privacy'
2525
import { Route as LibrariesLearnImport } from './routes/_libraries/learn'
26+
import { Route as LibrariesEthosImport } from './routes/_libraries/ethos'
2627
import { Route as LibrariesDedicatedSupportImport } from './routes/_libraries/dedicated-support'
2728
import { Route as LibrariesBlogImport } from './routes/_libraries/blog'
2829
import { Route as LibraryIdVersionImport } from './routes/$libraryId/$version'
@@ -116,6 +117,12 @@ const LibrariesLearnRoute = LibrariesLearnImport.update({
116117
getParentRoute: () => LibrariesRouteRoute,
117118
} as any)
118119

120+
const LibrariesEthosRoute = LibrariesEthosImport.update({
121+
id: '/ethos',
122+
path: '/ethos',
123+
getParentRoute: () => LibrariesRouteRoute,
124+
} as any)
125+
119126
const LibrariesDedicatedSupportRoute = LibrariesDedicatedSupportImport.update({
120127
id: '/dedicated-support',
121128
path: '/dedicated-support',
@@ -311,6 +318,13 @@ declare module '@tanstack/react-router' {
311318
preLoaderRoute: typeof LibrariesDedicatedSupportImport
312319
parentRoute: typeof LibrariesRouteImport
313320
}
321+
'/_libraries/ethos': {
322+
id: '/_libraries/ethos'
323+
path: '/ethos'
324+
fullPath: '/ethos'
325+
preLoaderRoute: typeof LibrariesEthosImport
326+
parentRoute: typeof LibrariesRouteImport
327+
}
314328
'/_libraries/learn': {
315329
id: '/_libraries/learn'
316330
path: '/learn'
@@ -531,6 +545,7 @@ const LibrariesBlogRouteWithChildren = LibrariesBlogRoute._addFileChildren(
531545
interface LibrariesRouteRouteChildren {
532546
LibrariesBlogRoute: typeof LibrariesBlogRouteWithChildren
533547
LibrariesDedicatedSupportRoute: typeof LibrariesDedicatedSupportRoute
548+
LibrariesEthosRoute: typeof LibrariesEthosRoute
534549
LibrariesLearnRoute: typeof LibrariesLearnRoute
535550
LibrariesPrivacyRoute: typeof LibrariesPrivacyRoute
536551
LibrariesSupportRoute: typeof LibrariesSupportRoute
@@ -550,6 +565,7 @@ interface LibrariesRouteRouteChildren {
550565
const LibrariesRouteRouteChildren: LibrariesRouteRouteChildren = {
551566
LibrariesBlogRoute: LibrariesBlogRouteWithChildren,
552567
LibrariesDedicatedSupportRoute: LibrariesDedicatedSupportRoute,
568+
LibrariesEthosRoute: LibrariesEthosRoute,
553569
LibrariesLearnRoute: LibrariesLearnRoute,
554570
LibrariesPrivacyRoute: LibrariesPrivacyRoute,
555571
LibrariesSupportRoute: LibrariesSupportRoute,
@@ -580,6 +596,7 @@ export interface FileRoutesByFullPath {
580596
'/$libraryId/$version': typeof LibraryIdVersionRouteWithChildren
581597
'/blog': typeof LibrariesBlogRouteWithChildren
582598
'/dedicated-support': typeof LibrariesDedicatedSupportRoute
599+
'/ethos': typeof LibrariesEthosRoute
583600
'/learn': typeof LibrariesLearnRoute
584601
'/privacy': typeof LibrariesPrivacyRoute
585602
'/support': typeof LibrariesSupportRoute
@@ -611,6 +628,7 @@ export interface FileRoutesByTo {
611628
'/sponsors-embed': typeof SponsorsEmbedRoute
612629
'/$libraryId/$version': typeof LibraryIdVersionRouteWithChildren
613630
'/dedicated-support': typeof LibrariesDedicatedSupportRoute
631+
'/ethos': typeof LibrariesEthosRoute
614632
'/learn': typeof LibrariesLearnRoute
615633
'/privacy': typeof LibrariesPrivacyRoute
616634
'/support': typeof LibrariesSupportRoute
@@ -645,6 +663,7 @@ export interface FileRoutesById {
645663
'/$libraryId/$version': typeof LibraryIdVersionRouteWithChildren
646664
'/_libraries/blog': typeof LibrariesBlogRouteWithChildren
647665
'/_libraries/dedicated-support': typeof LibrariesDedicatedSupportRoute
666+
'/_libraries/ethos': typeof LibrariesEthosRoute
648667
'/_libraries/learn': typeof LibrariesLearnRoute
649668
'/_libraries/privacy': typeof LibrariesPrivacyRoute
650669
'/_libraries/support': typeof LibrariesSupportRoute
@@ -681,6 +700,7 @@ export interface FileRouteTypes {
681700
| '/$libraryId/$version'
682701
| '/blog'
683702
| '/dedicated-support'
703+
| '/ethos'
684704
| '/learn'
685705
| '/privacy'
686706
| '/support'
@@ -711,6 +731,7 @@ export interface FileRouteTypes {
711731
| '/sponsors-embed'
712732
| '/$libraryId/$version'
713733
| '/dedicated-support'
734+
| '/ethos'
714735
| '/learn'
715736
| '/privacy'
716737
| '/support'
@@ -743,6 +764,7 @@ export interface FileRouteTypes {
743764
| '/$libraryId/$version'
744765
| '/_libraries/blog'
745766
| '/_libraries/dedicated-support'
767+
| '/_libraries/ethos'
746768
| '/_libraries/learn'
747769
| '/_libraries/privacy'
748770
| '/_libraries/support'
@@ -816,6 +838,7 @@ export const routeTree = rootRoute
816838
"children": [
817839
"/_libraries/blog",
818840
"/_libraries/dedicated-support",
841+
"/_libraries/ethos",
819842
"/_libraries/learn",
820843
"/_libraries/privacy",
821844
"/_libraries/support",
@@ -863,6 +886,10 @@ export const routeTree = rootRoute
863886
"filePath": "_libraries/dedicated-support.tsx",
864887
"parent": "/_libraries"
865888
},
889+
"/_libraries/ethos": {
890+
"filePath": "_libraries/ethos.tsx",
891+
"parent": "/_libraries"
892+
},
866893
"/_libraries/learn": {
867894
"filePath": "_libraries/learn.tsx",
868895
"parent": "/_libraries"

app/routes/$libraryId/$version.docs.framework.$framework.examples.$.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,11 @@ export default function Example() {
125125
</div>
126126
<div className="flex-1 lg:px-6 flex flex-col min-h-0">
127127
<iframe
128-
src={stackBlitzUrl}
128+
src={
129+
library.embedEditor === 'codesandbox'
130+
? codesandboxUrl
131+
: stackBlitzUrl
132+
}
129133
title={`${library.name} | ${examplePath}`}
130134
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
131135
className="flex-1 w-full overflow-hidden lg:rounded-lg shadow-xl shadow-gray-700/20 bg-white dark:bg-black"

app/routes/_libraries/ethos.tsx

Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
import { createFileRoute } from '@tanstack/react-router'
2+
import { Footer } from '~/components/Footer'
3+
import { seo } from '~/utils/seo'
4+
5+
export const Route = createFileRoute('/_libraries/ethos')({
6+
component: RouteComp,
7+
head: () => ({
8+
meta: seo({
9+
title: 'TanStack Ethos',
10+
description:
11+
'Our philosophy and commitment to building for the open web.',
12+
}),
13+
}),
14+
})
15+
16+
export default function RouteComp() {
17+
return (
18+
<div className="flex flex-col max-w-full min-h-screen gap-12 p-4 md:p-8 pb-0">
19+
<div className="flex-1 space-y-12 w-full max-w-3xl mx-auto">
20+
<header className="">
21+
<h1 className="text-4xl font-bold">TanStack Ethos</h1>
22+
</header>
23+
24+
<section className="">
25+
<p className="text-lg">
26+
At TanStack, our philosophy is simple: we build for the open web,
27+
open standards, and the freedom to compose, deploy, and innovate
28+
however you see fit.
29+
</p>
30+
</section>
31+
32+
<section className="space-y-4">
33+
<h2 className="text-2xl font-semibold">
34+
Independently Owned, Unbiased by Design
35+
</h2>
36+
<p>
37+
TanStack LLC is <strong>100% privately owned</strong> by its
38+
founder—no external investors, no controlling interests, and no
39+
hidden agendas. Our funding comes from media and marketing
40+
partnerships with companies that share our core values:{' '}
41+
<strong>
42+
the open web, open standards, and the freedom to compose and
43+
deploy anything you want, anywhere you please.
44+
</strong>
45+
</p>
46+
</section>
47+
48+
<section className="space-y-4">
49+
<h2 className="text-2xl font-semibold">A Sustainable Future</h2>
50+
<p>
51+
TanStack is a lean, focused team: a full-time founder, several
52+
prominent and well-sponsored maintainers and a thriving community of
53+
users and contributors who share our core values.
54+
</p>
55+
<p className="">
56+
Unlike venture-backed projects chasing growth at all costs,{' '}
57+
<strong>
58+
we don't need to "scale", "grow", or "expand" into a VC-funded,
59+
acquisition-seeking, or freemium-grifting product.
60+
</strong>{' '}
61+
We're not obsessed with hitting the next 10x multiplier to satisfy
62+
some parent company's lead-generating IPO ambitions.
63+
</p>
64+
<p className="">That means:</p>
65+
<ul className="list-disc pl-8 space-y-2">
66+
<li>
67+
No pressure to chase profits at the cost of developer experience.
68+
</li>
69+
<li>No corporate influence dictating our technical direction.</li>
70+
<li>
71+
A singular focus on{' '}
72+
<strong>
73+
building tools that make the web better for users and developers
74+
</strong>
75+
</li>
76+
</ul>
77+
</section>
78+
79+
<section className="space-y-4">
80+
<h2 className="text-2xl font-semibold">
81+
Technology-Agnostic by Default
82+
</h2>
83+
<p>
84+
We believe in{' '}
85+
<strong>
86+
framework-agnostic, platform-agnostic, and future-proof tooling
87+
</strong>{' '}
88+
that puts developers first:
89+
</p>
90+
<ul className="list-disc pl-8 space-y-2">
91+
<li>
92+
TanStack libraries are built on framework and platform-agnostic
93+
primitives. When our libraries build on other tools, like TanStack
94+
Start builds on Nitro, we ensure that these tools uphold these
95+
same values of openness and flexibility.
96+
</li>
97+
<li>
98+
<strong>TanStack Libraries</strong> either already support or will
99+
support all major (and some minor!) frameworks and deployment
100+
environments—no exceptions.
101+
</li>
102+
<li>
103+
<strong>
104+
If there's any technology we're aligned with, it's TypeScript
105+
</strong>
106+
—or more broadly, "typed JavaScript", whatever that evolves into
107+
as time goes on.
108+
</li>
109+
</ul>
110+
</section>
111+
112+
<section className="space-y-4">
113+
<h2 className="text-2xl font-semibold">Open Sponsorships</h2>
114+
<p>
115+
Every sponsor we work with not only understands but actively upholds
116+
our values:
117+
</p>
118+
<ul className="list-disc pl-8 space-y-2">
119+
<li>
120+
No sponsor can dictate or influence TanStack's core technology in
121+
a way that biases it toward their platform.
122+
</li>
123+
<li>
124+
Our libraries are built to serve <strong>developers first</strong>
125+
, not corporate interests.
126+
</li>
127+
<li>
128+
If a company supports us, it's because they believe in what we're
129+
building—not because they expect preferential treatment.
130+
</li>
131+
</ul>
132+
</section>
133+
134+
<section className="space-y-4">
135+
<p className="text-lg font-medium">
136+
At the end of the day,{' '}
137+
<strong>
138+
TanStack isn't just a set of libraries—it's a commitment to
139+
building the web <em>on your terms</em>, without compromise.
140+
</strong>{' '}
141+
All we need is enough to keep improving tools that we believe
142+
actually make the web a better place.
143+
</p>
144+
</section>
145+
146+
<section className="space-y-4">
147+
<div>
148+
<strong>- Tanner Linsley</strong>
149+
<br />
150+
Founder, TanStack LLC
151+
</div>
152+
</section>
153+
</div>
154+
<Footer />
155+
</div>
156+
)
157+
}

app/routes/_libraries/route.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { searchBoxParams, searchButtonParams } from '~/components/Orama'
1919
import { ClientOnlySearchButton } from '~/components/ClientOnlySearchButton'
2020
import { ThemeToggle, useThemeStore } from '~/components/ThemeToggle'
2121
import { TbBrandBluesky, TbBrandTwitter } from 'react-icons/tb'
22+
import { BiSolidCheckShield } from 'react-icons/bi'
2223

2324
export const Route = createFileRoute('/_libraries')({
2425
staleTime: Infinity,
@@ -190,6 +191,11 @@ function LibrariesLayout() {
190191
icon: <FaGithub />,
191192
to: 'https://github.com/tanstack',
192193
},
194+
{
195+
label: 'Ethos',
196+
icon: <BiSolidCheckShield />,
197+
to: '/ethos',
198+
},
193199
].map((item, i) => {
194200
return (
195201
<Link

app/routes/_libraries/router.$version.index.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,14 @@ function RouterVersionIndex() {
5858
<span className="underline decoration-dashed decoration-yellow-500 decoration-3 underline-offset-2">
5959
Modern and scalable
6060
</span>{' '}
61-
routing for React applications
61+
routing for React and Solid applications
6262
</h2>
6363
<p
6464
className="text opacity-90 max-w-sm
6565
lg:text-xl lg:max-w-2xl"
6666
>
67-
A fully type-safe React router with built-in data fetching,
68-
stale-while revalidate caching and first-class search-param APIs.
67+
A fully type-safe router with built-in data fetching, stale-while
68+
revalidate caching and first-class search-param APIs.
6969
</p>
7070
<Link
7171
to="./docs/framework/react/overview"

0 commit comments

Comments
 (0)