Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 

README.md

🚀 Weather Front - Solid.js


A tiny weather app
🚀 Demo📊 Results

About

This is a simple weather app, built in Solid.js (as well as also 10 other frontend frameworks) in order to review, compare and benchmark frontend web frameworks.

  • 🌦️ Live weather conditions
  • 📅 7-day weather forecast
  • 🔍 City search functionality
  • 📍 Geolocation support
  • 💾 Persistent location storage
  • 📱 Responsive design
  • ♿ Accessible interface
  • 🎨 Multi-theme support
  • 🧪 Fully unit tested
  • 🌐 Internationalized

Status

Task Status
Test - Executes all e2e and unit tests Test Status
Lint - Verifies code style and quality Lint Status
Build - Builds and deploys the app Build Status

Usage

First, follow the repo setup instructions. Then cd apps/solid and use the following commands:

npm run dev    # Start dev server (vite)
npm test       # Run tests
npm run lint   # Run lint checks
npm build      # Build for production (vite build)
npm start      # Serve built prod app (from ./dist)

For troubleshooting, use npm run verify from the root of the project.

Solid Implementation

Fine-Grained Reactivity with Signals

The weatherStore.js uses SolidJS's createSignal() for fine-grained reactivity. Unlike React, changes only update specific DOM nodes, not entire component trees.

JSX Without Virtual DOM

SolidJS uses JSX syntax but compiles to real DOM operations. No virtual DOM overhead - changes are tracked at the signal level and update the DOM directly.

Signal Accessors

Signals return getter/setter pairs: const [count, setCount] = createSignal(0). The store exposes both getter functions and signal accessors for flexible consumption patterns.

Race Condition Prevention

The store implements request ID tracking (latestRequestId) to prevent race conditions when multiple async operations are in flight simultaneously.

Reactive Dependencies

SolidJS automatically tracks dependencies, so reactive computations only re-run when their actual dependencies change, not when the entire component re-renders.

About Solid

Solid looks like React on the surface but skips the virtual DOM, updating the DOM directly with fine-grained reactivity. This makes it blazing fast and efficient. It has a smaller community but a lot of buzz among developers chasing performance. If you like React’s syntax but hate its runtime overhead, Solid is refreshing.

My Thoughts on Solid

Solid feels like React, but actually reactive. It looks like JSX, but underneath it's magic. While React re-renders entire component trees, Solid surgically updates only the exact DOM nodes that need to change. The result is performance that makes other frameworks look sluggish.

The mental shift from React is subtle but profound. Instead of thinking about re-renders and memoization, you think about signals and reactivity. createSignal returns a getter and setter - call temperature() to read, setTemperature(25) to update, and everything that depends on it automatically updates.

Our weather app showcases this, as the temperature display, the weather icon, the styling - they all react independently when the weather data changes. No useEffect, no dependency arrays, no useMemo - just pure reactive programming that actually works.

The JSX looks familiar, but <Show> and <For> components replace your typical {condition && <div>} patterns. These aren't just syntactic sugar - they're compiled into efficient conditional rendering that only updates when necessary.

createResource handles async data elegantly, giving you loading states, error handling, and refetching without the usual ceremony. For our simple weather app, we didn't need Solid's more advanced features like stores or effects, but for something complex, the fine-grained reactivity becomes essential.

Real-World App

Since the weather app is very simple, it may be helpful to see a more practical implementation of a Solid.js app. So, checkout:

Chief Snack Officer - Office snack management app
🐙 Get it on GitHub at github.com/Lissy93/cso
🌐 View the website at lissy93.github.io/cso


License

Weather-Front is licensed under MIT © Alicia Sykes 2025.
View Attributions for credits, thanks and contributors.