Skip to content

Instantly share code, notes, and snippets.

@Turbo87
Created December 11, 2025 13:42
Show Gist options
  • Select an option

  • Save Turbo87/cd20b54dea6b50ba2b18cb646b3068a5 to your computer and use it in GitHub Desktop.

Select an option

Save Turbo87/cd20b54dea6b50ba2b18cb646b3068a5 to your computer and use it in GitHub Desktop.

crates.io Frontend Framework Evaluation

Context

The crates.io frontend is currently built with Ember.js. We're evaluating alternatives due to:

  • Difficulty finding contributors: Ember's declining mindshare makes it hard to attract help
  • Bundle size: Current JS payload is larger than ideal
  • Ecosystem decline: Fewer packages, less community activity, uncertain long-term future

Characteristics of the crates.io frontend

  • ~70–75% static/read-only pages (crate info, search results, browsing)
  • ~25–30% interactive features (settings, token management, dashboards)
  • Interactivity is mostly simple request/response patterns, no complex real-time state
  • SEO matters for crate discoverability, but audience is developers who tolerate some loading time

Evaluation Criteria

1. Community & Ecosystem

How active and healthy is the framework's community, and how likely is it to be around and well-supported in 5+ years?

Stars Description
⭐⭐⭐⭐⭐ Massive community, rich ecosystem, strong backing, dominant market position
⭐⭐⭐⭐ Large active community, healthy ecosystem, clear long-term viability
⭐⭐⭐ Medium community, adequate ecosystem for most needs, stable but not growing
⭐⭐ Small but loyal community, limited ecosystem, shrinking mindshare
Very small community, sparse ecosystem, high risk of abandonment
0 Dead or dying project, no community activity

2. Performance

Bundle size, initial load time, runtime performance, and memory usage.

Stars Description
⭐⭐⭐⭐⭐ Minimal/no JS shipped, near-instant load, excellent runtime performance
⭐⭐⭐⭐ Small bundle (<50kb), fast initial load, smooth interactions
⭐⭐⭐ Moderate bundle (50-150kb), acceptable load times, adequate runtime performance
⭐⭐ Large bundle (150-300kb), noticeable load times, occasional sluggishness
Very large bundle (>300kb), slow initial load, poor runtime performance
0 Unusably slow, massive payload

3. Developer Experience

Day-to-day ergonomics: type safety, error messages, hot reload, IDE support, debugging.

Stars Description
⭐⭐⭐⭐⭐ Excellent ergonomics, first-class types, great errors, instant hot reload, superb IDE support
⭐⭐⭐⭐ Good ergonomics, solid type support, helpful errors, fast iteration cycle
⭐⭐⭐ Adequate DX, types available but not seamless, workable tooling
⭐⭐ Rough edges, limited type support, slow feedback loops, sparse tooling
Poor ergonomics, weak types, confusing errors, painful iteration
0 Actively hostile to developers

4. SSR Support

Server-side rendering maturity, hydration strategy, SEO capability.

Stars Description
⭐⭐⭐⭐⭐ SSR is the default/primary mode, mature tooling, flexible hydration strategies
⭐⭐⭐⭐ Well-supported SSR, stable implementation, good documentation
⭐⭐⭐ SSR available and functional, may require some configuration or trade-offs
⭐⭐ SSR possible but experimental, limited documentation, rough edges
SSR technically possible but not practical, significant limitations
0 No SSR support, client-only

5. Styling Approach

CSS handling, scoped styles, theming support, integration with modern CSS tooling.

Stars Description
⭐⭐⭐⭐⭐ First-class scoped styles built-in, excellent theming support, seamless CSS tooling integration
⭐⭐⭐⭐ Good built-in styling solution, scoping works well, easy to integrate with CSS tools
⭐⭐⭐ Styling works but requires some setup or third-party library, adequate scoping
⭐⭐ Styling is an afterthought, manual scoping, limited tooling integration
Awkward styling story, poor CSS support, fighting the framework
0 No reasonable path to styled components

6. Testing

Unit testing, integration testing, E2E compatibility, test tooling maturity.

Stars Description
⭐⭐⭐⭐⭐ Excellent built-in test utilities, mature ecosystem, great mocking support, works seamlessly with E2E tools
⭐⭐⭐⭐ Good testing story, established patterns, solid library support
⭐⭐⭐ Testing works, community solutions available, adequate documentation
⭐⭐ Testing possible but limited tooling, sparse examples, some friction
Testing is painful, immature tooling, poor documentation
0 No practical way to test components

7. Deployment Simplicity

Hosting requirements, CDN compatibility, build output simplicity.

Stars Description
⭐⭐⭐⭐⭐ Static files to any CDN, or trivial server setup, zero special requirements
⭐⭐⭐⭐ Straightforward deployment, well-documented hosting options, minor config needed
⭐⭐⭐ Deployment works, may need specific runtime or platform considerations
⭐⭐ Complex deployment, significant infrastructure requirements, limited hosting options
Difficult deployment, specialized hosting needed, high operational burden
0 Deployment is a nightmare

8. Migration Effort

Effort to migrate from current Ember.js codebase, including incremental adoption possibilities.

Stars Description
⭐⭐⭐⭐⭐ No migration needed (staying with current solution)
⭐⭐⭐⭐ Incremental migration possible, can coexist with Ember, clear migration patterns
⭐⭐⭐ Mostly straightforward rewrite, concepts transfer well, tooling helps
⭐⭐ Moderate effort, some paradigm shifts required, manageable scope
Significant rewrite, different mental model, limited reuse of existing code
0 Complete rewrite, fundamentally different paradigm, steep learning curve

9. Team Familiarity

Existing experience with the framework across the team (maintainers and contributors).

Stars Description
⭐⭐⭐⭐⭐ Deep production experience across multiple team members
⭐⭐⭐⭐ Strong experience from at least one maintainer, others have some exposure
⭐⭐⭐ Moderate experience (side projects, tutorials), team could ramp up reasonably fast
⭐⭐ Limited exposure, significant learning curve for most of the team
No meaningful experience on the team, starting from scratch
0 Actively unfamiliar or averse

Comparison Matrix

Framework Community Performance DX SSR Styling Testing Deployment Migration Familiarity Total
Ember.js ⭐⭐ ⭐⭐ ⭐⭐⭐ ⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ 30
Rust SSR ⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐ ⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐ 28
Rust SSR + htmx ⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐ ⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐ 27
Svelte 5 ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐ 33
Svelte 5 + SSR ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐ ⭐⭐⭐ 34
Leptos ⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐ ⭐⭐ ⭐⭐ ⭐⭐⭐ 19
Dioxus ⭐⭐⭐ ⭐⭐⭐ ⭐⭐ ⭐⭐ ⭐⭐ ⭐⭐⭐ 18
React ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐ ⭐⭐ 32
Vue ⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐ 34

Notes

Ember.js (current)

  • Staying avoids migration effort entirely
  • Testing story is mature (QUnit, ember-test-helpers)
  • Bundle size is a known issue
  • Contributor pool continues to shrink

Rust SSR (with e.g. minijinja)

  • Perfect for static pages, zero JS overhead
  • Forms require full page reloads or custom JS
  • No established patterns for interactive features
  • Testing templates requires custom setup
  • Tight backend integration (single codebase)

Rust SSR + htmx

  • htmx adds interactivity without SPA complexity
  • Still very lightweight JS footprint (~14kb)
  • Partial page updates via AJAX
  • Less mature ecosystem, fewer established patterns
  • Testing htmx interactions requires E2E tests

Svelte 5 (client-side)

  • Excellent DX with runes reactivity model
  • Compiler-based approach yields small bundles
  • Built-in scoped CSS is excellent
  • No SSR means slower first paint, weaker SEO
  • Growing ecosystem, good trajectory

Svelte 5 + SSR (SvelteKit)

  • Best of both worlds: fast first paint and interactivity
  • SvelteKit is mature and well-documented
  • Flexible: SSR, SSG, or hybrid per-route
  • Adds deployment complexity (needs Node.js runtime or adapter)
  • Migration is a full rewrite, but concepts are approachable

Leptos

  • Rust everywhere appeals conceptually
  • WASM bundle sizes are larger than compiled Svelte/Vue
  • DX is rougher than JS alternatives (compile times, error messages)
  • Small maintainer team, ecosystem risk
  • SSR support exists but less mature

Dioxus

  • Similar tradeoffs to Leptos
  • Multi-platform ambitions may dilute web focus

React

  • Largest talent pool by far
  • Ecosystem is massive but fragmented (many choices to make)
  • Performance requires effort (memoization, careful state management)
  • Testing is excellent (React Testing Library, mature patterns)

Vue

  • Good middle ground: approachable, performant, well-documented
  • Single-file components similar to Svelte
  • Nuxt provides mature SSR story
  • Smaller than React but still very healthy ecosystem
  • Independent governance (not tied to single company)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment