Top Related Projects
Build Better Websites. Create modern, resilient user experiences with web fundamentals.
The React Framework
web development, streamlined
The Intuitive Vue Framework.
The web framework for content-driven websites. ⭐️ Star to support our work!
RedwoodGraphQL
Quick Overview
Solid Start is a meta-framework for SolidJS, designed to simplify the process of building server-side rendered (SSR) and static site generation (SSG) applications. It provides a seamless integration of SolidJS with server-side technologies, offering a full-stack solution for web development.
Pros
- Seamless integration of SolidJS with server-side rendering and static site generation
- Built-in routing system with file-based routing
- Supports multiple deployment targets (Node.js, Deno, Cloudflare Workers, etc.)
- Easy to use API routes for backend functionality
Cons
- Relatively new project, still in beta phase
- Smaller community and ecosystem compared to more established frameworks
- Limited documentation and learning resources
- May have breaking changes as it evolves towards a stable release
Code Examples
- Basic page component:
// src/routes/index.tsx
export default function Home() {
return (
<main>
<h1>Welcome to Solid Start</h1>
<p>Hello, world!</p>
</main>
);
}
- API route example:
// src/routes/api/hello.ts
import { APIEvent } from "solid-start";
export function GET({ request }: APIEvent) {
return new Response("Hello from the API!");
}
- Data fetching with resource:
// src/routes/users.tsx
import { createResource, For } from "solid-js";
import { useRouteData } from "solid-start";
export function routeData() {
const [users] = createResource(() =>
fetch("https://jsonplaceholder.typicode.com/users").then(res => res.json())
);
return { users };
}
export default function Users() {
const { users } = useRouteData<typeof routeData>();
return (
<ul>
<For each={users()}>{user => <li>{user.name}</li>}</For>
</ul>
);
}
Getting Started
To start a new Solid Start project:
# Create a new project
npx degit solidjs/solid-start my-solid-app
cd my-solid-app
# Install dependencies
npm install
# Start the development server
npm run dev
This will create a new Solid Start project and start the development server. You can now open your browser and navigate to http://localhost:3000
to see your application running.
Competitor Comparisons
Build Better Websites. Create modern, resilient user experiences with web fundamentals.
Pros of Remix
- More mature and established framework with a larger community and ecosystem
- Built-in support for server-side rendering and data loading
- Comprehensive documentation and extensive learning resources
Cons of Remix
- Steeper learning curve due to its full-stack nature
- Requires more boilerplate code for simple applications
- Less flexible routing system compared to Solid Start's file-based routing
Code Comparison
Remix route example:
export default function Index() {
return <h1>Hello, Remix!</h1>;
}
export function loader() {
return { message: "Welcome to Remix" };
}
Solid Start route example:
export default function Index() {
return <h1>Hello, Solid Start!</h1>;
}
export function routeData() {
return { message: "Welcome to Solid Start" };
}
Both frameworks use a similar approach for defining routes and data loading, but Remix uses the loader
function while Solid Start uses routeData
. Solid Start's syntax is generally more concise and closer to standard JavaScript, while Remix introduces more framework-specific concepts.
Remix offers a more opinionated structure for building full-stack applications, while Solid Start provides a lighter-weight approach that may be more suitable for smaller projects or developers who prefer more flexibility in their tooling choices.
The React Framework
Pros of Next.js
- Larger ecosystem and community support
- More mature and battle-tested in production environments
- Extensive documentation and learning resources
Cons of Next.js
- Heavier bundle size and potentially slower performance
- More complex setup and configuration
- Steeper learning curve for beginners
Code Comparison
Next.js:
import { useEffect, useState } from 'react'
function HomePage() {
const [data, setData] = useState(null)
useEffect(() => {
fetch('/api/data').then(res => res.json()).then(setData)
}, [])
return <div>{data ? data.message : 'Loading...'}</div>
}
Solid Start:
import { createResource } from 'solid-js'
function HomePage() {
const [data] = createResource(() => fetch('/api/data').then(res => res.json()))
return <div>{data() ? data().message : 'Loading...'}</div>
}
The code comparison shows that Solid Start offers a more concise and reactive approach to data fetching and rendering, while Next.js relies on React hooks for similar functionality. Solid Start's fine-grained reactivity system allows for more efficient updates and potentially better performance in complex applications.
web development, streamlined
Pros of Kit
- More mature and stable ecosystem with a larger community
- Comprehensive documentation and extensive learning resources
- Built-in support for server-side rendering (SSR) and static site generation (SSG)
Cons of Kit
- Steeper learning curve due to Svelte-specific syntax and concepts
- Less flexible routing system compared to Solid Start's file-based routing
- Potentially larger bundle sizes for complex applications
Code Comparison
Kit (Svelte):
<script>
export let name;
</script>
<h1>Hello {name}!</h1>
Solid Start:
import { createSignal } from "solid-js";
export default function Hello(props) {
const [name, setName] = createSignal(props.name);
return <h1>Hello {name()}!</h1>;
}
Key Differences
- Syntax: Kit uses Svelte's template-based approach, while Solid Start uses JSX
- Reactivity: Kit relies on Svelte's compiler for reactivity, Solid Start uses fine-grained reactivity with signals
- Routing: Kit uses a configuration-based routing system, Solid Start employs file-based routing
- Performance: Solid Start generally offers better runtime performance, especially for larger applications
- Learning Curve: Kit may be easier for developers familiar with traditional frameworks, while Solid Start's approach might be more intuitive for those with React experience
Both frameworks offer excellent developer experiences and are suitable for building modern web applications, with the choice depending on specific project requirements and team preferences.
The Intuitive Vue Framework.
Pros of Nuxt
- Mature ecosystem with extensive documentation and community support
- Built-in features like automatic code splitting and server-side rendering
- Seamless integration with Vue.js and its ecosystem
Cons of Nuxt
- Steeper learning curve for developers new to Vue.js
- Potentially larger bundle size due to included features
- Less flexibility in choosing rendering strategies compared to Solid Start
Code Comparison
Nuxt (Vue.js):
<template>
<div>
<h1>{{ title }}</h1>
<button @click="increment">Count: {{ count }}</button>
</div>
</template>
<script>
export default {
data() {
return { count: 0, title: 'Nuxt App' }
},
methods: {
increment() {
this.count++
}
}
}
</script>
Solid Start:
import { createSignal } from 'solid-js';
export default function App() {
const [count, setCount] = createSignal(0);
return (
<div>
<h1>Solid Start App</h1>
<button onClick={() => setCount(count() + 1)}>Count: {count()}</button>
</div>
);
}
Solid Start offers a more concise and reactive approach, while Nuxt provides a familiar Vue.js structure with additional built-in features. The choice between the two depends on project requirements, team expertise, and desired performance characteristics.
The web framework for content-driven websites. ⭐️ Star to support our work!
Pros of Astro
- Supports multiple frontend frameworks (React, Vue, Svelte, etc.) in a single project
- Excellent static site generation capabilities with partial hydration
- Large and active community with extensive ecosystem of integrations
Cons of Astro
- Steeper learning curve due to its unique approach and syntax
- Less suitable for highly dynamic, client-side heavy applications
- Performance may suffer when using multiple frameworks in a single project
Code Comparison
Astro component:
---
const { title } = Astro.props;
---
<h1>{title}</h1>
<slot />
Solid Start component:
import { createSignal } from "solid-js";
export default function Component(props) {
const [count, setCount] = createSignal(0);
return <h1>{props.title}</h1>;
}
Astro focuses on static site generation with optional interactivity, while Solid Start is built for full-stack applications with a reactive approach. Astro's syntax separates frontmatter and markup, whereas Solid Start uses JSX with signals for reactivity. Both frameworks aim to provide excellent performance, but Astro excels in static content delivery, while Solid Start shines in dynamic, interactive applications.
RedwoodGraphQL
Pros of GraphQL
- Comprehensive GraphQL integration with built-in schema generation and resolvers
- Seamless integration with Redwood's full-stack framework, offering a cohesive development experience
- Strong typing and schema validation out of the box
Cons of GraphQL
- Steeper learning curve for developers new to GraphQL concepts
- More opinionated and less flexible compared to Solid Start's minimal approach
- Potentially overkill for smaller projects or those not requiring complex data fetching
Code Comparison
GraphQL schema definition:
type User {
id: ID!
name: String!
email: String!
}
type Query {
users: [User!]!
}
Solid Start data fetching:
const [users] = createResource(async () => {
const response = await fetch('/api/users');
return response.json();
});
Summary
GraphQL offers a robust, type-safe approach to data fetching with seamless integration into the Redwood ecosystem. It excels in complex data scenarios but may be overwhelming for simpler projects. Solid Start, on the other hand, provides a more flexible and lightweight approach to data management, making it easier to get started but potentially requiring more manual setup for advanced use cases. The choice between the two depends on project requirements, team expertise, and scalability needs.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
- For contributing to codebase, check CONTRIBUTING.md
- For creating a new template, please head on to solidjs/templates
- For instructions on building with SolidStart, check the package README.md and our official docs
Prerequisites
- Node.js: Use the version specified in
.nvmrc
, to manage multiple versions across your system, we recommend a version manager such as fnm, or another of your preference. - pnpm: Install globally via
npm install -g pnpm
. Or let Corepack handle it in the setup step below. - Git: Ensure Git is installed for cloning and managing the repository
Monorepo Structure
SolidStart is a pnpm-based monorepo with nested workspaces. Key directories include
packages/start
: The core@solidjs/start
package.apps/landing-page
: The official landing page.apps/tests
: Unit and end-to-end (E2E) tests using Vitest and Cypress.apps/fixtures
: Fixture projects for testing.
Use pnpm filters (e.g. pnpm --filter @solidjs/start ...
) to target specific packages.
Local Setup
-
Clone the repository
git clone https://github.com/solidjs/solid-start.git cd solid-start
-
Enable the correct pnpm version specified in package.json
corepack enable
-
Install dependencies
pnpm dedupe
(
pnpm dedupe
will install dependencies and clean the lockfile from duplicates, useful to preventing conflicts). -
Build all packages and the landing page
pnpm run build:all
If you encounter issues (e.g. missing node_modules
), clean the workspace
pnpm run clean:all
Then reinstall dependencies and rebuild.
Running Tests
End-to-end tests are located in apps/tests
projects. For manual testing and development there's the apps/fixtures
apps, and finally, integration and unit tests live inside their respective packages.
-
Install the Cypress binary (required only once)
pnpm --filter tests exec cypress install
-
For unit tests that check build artifacts, build the test app first
pnpm --filter tests run build
-
Run unit tests
pnpm --filter tests run unit
- CI mode (run once):
pnpm --filter tests run unit:ci
- UI mode:
pnpm --filter tests run unit:ui
- CI mode (run once):
-
Run E2E tests
pnpm --filter tests run tests:run
- Interactive mode:
pnpm --filter tests run tests:open
- With dev server:
pnpm --filter tests run tests
- Interactive mode:
-
Clean test artifacts
pnpm run clean:test
Development
-
Make your changes in the relevant package (e.g.
packages/start
) -
Rebuild affected packages
pnpm run packages:build
For a full rebuild:
pnpm run build:all
-
Test your changes
- For fixtures, pick the name of the fixture and run the
dev
with workspace filtering.pnpm --filter fixture-basic dev
- For the landing page (from the root directory)
pnpm run lp:dev
- For fixtures, pick the name of the fixture and run the
-
Clean builds if needed
pnpm run packages:clean # Cleans packages' node_modules and dist folders pnpm run lp:clean # Cleans the landing page pnpm run clean:root # Cleans root-level caches
If you have read all the way here, you're already a champ! ð Thank you.
Top Related Projects
Build Better Websites. Create modern, resilient user experiences with web fundamentals.
The React Framework
web development, streamlined
The Intuitive Vue Framework.
The web framework for content-driven websites. ⭐️ Star to support our work!
RedwoodGraphQL
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot