Skip to main content

Blog

Rebuilding Flutter and Dart's web presence for over a million developers

Men with sweater and jeans shirt smiling

Kilian Schulte

In 2022, I had a question I couldn’t leave alone. I’d been building Flutter apps and loved Dart: its type safety, its tooling, the development experience. But for building actual websites? There was no viable solution for Dart. So I started building something myself.

That personal challenge became Jaspr: an open-source web framework for Dart, combining Flutter's familiar component model with native web technologies: HTML, CSS, and a full-stack rendering architecture supporting client-side rendering, server-side rendering, and static site generation. No JavaScript dependency. No switching ecosystems. Just Dart, end to end.

For three years, I worked on the project in my free time. As a solo maintainer, I had full creative freedom, and all the responsibility that comes with it. I made deliberate trade-offs: narrowing the scope rather than compromising on quality, designing APIs that were flexible and composable rather than exhaustive, building features only when a real use case demanded it.

That rigour paid off. In 2025, Jaspr was chosen as the foundation to rebuild and power the official Flutter and Dart websites. All three – dart.dev, flutter.dev, and docs.flutter.dev – were migrated from a fragmented mix of Node.js and Python-based tools to a single, unified Dart stack. The sites serve over one million monthly active users across more than 3,900 pages. To formalise the collaboration and invest directly in Jaspr’s continued development, Google partnered with me and Netlight.

What made this possible wasn’t just technical capability — it was the intersection of deep craftsmanship and genuine community contribution. I built something the ecosystem needed and maintained it to a standard that earned trust. The Google partnership was a direct consequence of that.

Divider

How a Netlight consultant’s open-source project became the backbone of Google’s Flutter and Dart websites

The migration brought concrete outcomes: a unified toolchain where every contributor – engineers, technical writers, community members – needs only Dart. Interactive tutorials, now live on dart.dev/learn and docs.flutter.dev/learn, were built on the new foundation. dart.dev now compiles to WebAssembly on compatible browsers.

Jaspr’s success has also shaped its role in the ecosystem. I see it as an antithesis to the trend of AI causing everyone to converge onto the same stack. There is immense value in exploring alternative ecosystems: it pushes boundaries, surfaces new ideas, and keeps our industry vibrant.

For teams already working with Flutter and Dart, the argument is also a practical one: Jaspr and Flutter projects can share up to 100% of their business logic, models, and validation code. One language, one toolchain, one set of conventions – across mobile apps and the web.

At Netlight, I’ve always had the space to pursue work driven by curiosity and craft; the willingness to build the tools you want to use, not just the ones that already exist. Jaspr is what that looks like when you follow a problem all the way through.

Under the hood

One of the most deliberate decisions in Jaspr’s design was to use DOM-based rendering rather than the canvas approach Flutter Web takes. Canvas gives you pixel-perfect Flutter apps in the browser, but at a cost: SEO is poor, loading is heavier, and you’re isolated from the web platform. Jaspr’s rendering algorithm is closer to React – working directly with the DOM – which means better performance, better accessibility, and content that search engines can actually read.

Developer experience was a first-class priority from the start. Jaspr supports stateful hot-reload during development – preserving client-side state while swapping code instantly, which Dart’s compiler architecture makes uniquely possible. The framework also surfaces component scope hints in the editor: you can see at a glance whether a component renders server-side, client-side, or both – which matters a lot when you’re working across a full-stack Dart codebase.

For the Google migration, I built jaspr_content; a plugin for Markdown-driven content sites that handles templating, data loading, and flexible customisation across flutter.dev and dart.dev’s 3,900+ pages. It’s now available as an open-source package for anyone building content-heavy sites in Dart. On the performance side, dart.dev now compiles to WebAssembly via Dart’s dart2wasm compiler on compatible browsers – delivering near-native runtime performance without a single line of JavaScript.

Kilian is a software engineering consultant at Netlight and the creator and maintainer of Jaspr. Read his full perspective on the framework's design, tooling, and future: Jaspr: Why web development in Dart might just be a good idea. Read Google’s account of the migration: We rebuilt Flutter’s websites with Dart and Jaspr.

About the Author

Kilian Schulte is a Netlight consultant specialising in mobile engineering with Flutter and Dart. He is the creator of Jaspr - the open-source framework now powering Google's developer sites for over one million users.

Men with sweater and jeans shirt smiling

Kilian Schulte

Blog
Netlight Consulting | Data & AI

Blog

MCPs business case

To find the real business case for MCP, we must look past the technical plumbing and examine the economic lever. Why are pragmatic engineering organisations like Block and Stripe investing here? It is not merely engineering hygiene. It is an attempt to solve two expensive enterprise problems: productivity at the edge and integration at the core.

Blog
ChatGPT on mobile screen

Blog

The next platform shift: why ChatGPT Apps matter

Today, we can build apps inside ChatGPT using prompt engineering. But the real transformation is happening one level deeper — with MCP servers and the ChatGPT Apps SDK, which let you deliver fully interactive applications directly inside the chat interface.

Blog
  • Design
  • Product
  • Tech
Apple liquid glass design

Blog

Design systems on hard mode: multi-brand edition

  • Design
  • Product
  • Tech

Practical lessons to keep complexity under control and consistency alive without drowning in tokens and variants.