Sr. Content Developer at Microsoft, working remotely in PA, TechBash conference organizer, former Microsoft MVP, Husband, Dad and Geek.
151788 stories
·
33 followers

Build with React, Run on Salesforce: Introducing Salesforce Multi-Framework

1 Share

You can now build native Salesforce apps in React. Salesforce Multi-Framework is a framework-agnostic runtime on the Agentforce 360 Platform that lets developers build native Salesforce apps using React and other frontend frameworks — with authentication, security, and governance built in. It’s now in open beta for scratch orgs and sandboxes that use English as the default language. React is supported today; additional frameworks are coming. 

Bring your hooks, your component libraries, your existing toolchain, and build on Salesforce without having to choose between your framework and your platform.

Why React on Salesforce? 

Until now, building on Salesforce meant adopting Lightning Web Components (LWC) or Aura. You got base components, declarative tools, Lightning Data Service, and UI API access, but you gave up the broader ecosystem. Open-source libraries had to be managed as static resources, and there was no way to use your own framework without losing platform features. Salesforce Multi-Framework eliminates that trade-off.

Starting today, you can bring your existing React apps, dashboards, and micro-frontends and run them natively on the Agentforce 360 Platform. Multi-Framework apps can retrieve and mutate records with GraphQL, invoke Apex methods, and use UI APIs to get user information and context, all with the same security and governance model you already know.

Build your first React app on Salesforce

Before you start, you’ll need the Salesforce CLI, Node.js v18 or later, and a scratch org or sandbox. Multi-Framework is not available in production orgs during beta.

Generate your first app

The easiest way to get started is with the new React project template in the Agentforce Vibes welcome screen. Click the React App tile and select Internal App to generate a new employee-facing React app.

Agentforce Vibes welcome screen showing the React App tile

Alternatively, you can generate an app using the SFDX CLI:

sf plugins install @salesforce/plugin-ui-bundle-dev

# Generate the project

sf template generate project --name my-react-project

# Switch to the project directory

cd my-react-project

# Generate the web app using the reactbasic template

sf template generate ui-bundle -n myreactapp -d "./force-app/main/default/uiBundles" -t reactbasic

The sf template generate ui-bundle command generates a starter React app in force-app/main/default/uiBundles. The React template comes preconfigured with:

  • Salesforce Multi-Framework SDK for accessing Salesforce APIs and services
  • Vite for bundling
  • Vitest for testing
  • shadcn/ui for components
  • Tailwind CSS for styling

Running the app locally

The underlying project is just a React app, so you can run and preview it locally like any other:

# Switch to the web app folder

cd force-app/main/default/uiBundles/myreactapp

# Install the react app dependencies

npm install

# Run the project in local dev

npm run dev

Open your browser and navigate to the local app (default: localhost:5173) to see the app.

Starter React app running locally at localhost:5173]

Deploying to Salesforce

When you’re ready to deploy the app to your org, build the React app and push it:

# Build the project with Vite

# This creates a /dist folder or overwrites its contents

npm run build

# Deploy the metadata file and the build to Salesforce

sf project deploy --target-org my-org

Search for “myreactapp” in the App Launcher to see the app live. You can update the app label from the app meta xml file. You now have a React-based app hosted on Salesforce with built-in authentication, security, and governance.

Access Salesforce data from React

Once your app is deployed, you’ll want to pull live data from your org. The @salesforce/sdk-data package provides hooks for querying records via GraphQL and invoking Apex methods. Here’s a React component that fetches a Contact record:

import { useEffect, useState } from 'react';
import { createDataSDK, gql } from '@salesforce/sdk-data';

const QUERY = gql`
  query GetContact {
    uiapi {
      query {
        Contact(first: 1) {
          edges {
            node {
              Name { value }
              Title { value }
              Picture__c { value }
            }
          }
        }
      }
    }
  }
`;

export default function SingleRecord() {
  const [contact, setContact] = useState(null);

  useEffect(() => {
    const fetchData = async () => {
      const sdk = await createDataSDK();
      const response = await sdk.graphql(QUERY);
      
      // Navigate the UI API tree to get the first record
      const record = response.data?.uiapi?.query?.Contact?.edges[0]?.node;
      
      if (record) {
        setContact({
          name: record.Name.value,
          title: record.Title.value,
          picture: record.Picture__c.value
        });
      }
    };
    fetchData();
  }, []);

  if (!contact) return <p>Loading...</p>;

  return (
    <div style={{ border: '1px solid #ccc', padding: '1rem' }}>
      {contact.picture && (
        <img src={contact.picture} alt={contact.name} width="50" />
      )}
      <h1>{contact.name}</h1>
      <p>{contact.title}</p>
    </div>
  );
}

The createDataSDK() utility handles authentication automatically so no token management is required in the application code. You can also call Apex methods directly using the SDK’s fetch() method for server-side logic that goes beyond CRUD operations. See the Multi-Framework Beta Documentation for the full API reference.

Build React Apps with Agentforce Vibes

Agentforce Vibes 2.0 generates Multi-Framework React apps from natural language prompts. Describe the component you need to Agentforce Vibes — a dashboard showing open Opportunities by stage, for example — and Vibes produces the React code, GraphQL queries, and Salesforce metadata.

Vibes has a variety of tools to make it easy to build React apps:

  • React and Apex templates to scaffold apps without starting from scratch
  • Salesforce MCP server for retrieving and deploying metadata directly from the IDE
  • Live Preview to see your React app update in real time as you build
  • Einstein Trust Layer to ensure prompts and responses are never used to train future models

React and Lightning Web Components on Salesforce

Salesforce Multi-Framework doesn’t replace LWC; it runs alongside it. Your existing Lightning Web Components continue to work. On Lightning, React components can be embedded as micro-frontends, with the platform providing the shared data and permissions layer between them. Micro-frontend support is in developer preview. 

Choosing React does not mean leaving the platform capabilities that make Salesforce useful. We’re bringing those enterprise features to React through framework-agnostic libraries 

  • Efficient Data Management: React developers can use @salesforce/sdk-data, which provides API client methods for GraphQL and Apex that manage record querying and mutation efficiently, ensuring your app stays within API limits.
  • Built-in Governance: The createDataSDK() utility handles authentication automatically, removing the need for manual token management.
  • Security and Accessibility: While LWC has accessibility baked in, Multi-Framework apps can use Agentforce Vibes 2.0 templates, tools, and skills to embed enterprise-grade accessibility and security into every component.

Where they differ is in the developer experience and tooling:

Capability React (Multi-Framework) Lightning Web Components
Data access GraphQL queries, Apex invocations, UI API @wire decorators, Lightning Data Service with built-in caching
Component library Bring your own (Shadcn, MUI, Ant Design, etc.) or use Agentforce Vibes-generated components Salesforce Base Components (80+ out of the box)
Styling Tailwind CSS, CSS Modules, or any CSS-in-JS library Salesforce Lightning Design System (SLDS) tokens and classes
Security and standards Delivered via SDK and Agentforce Vibes governed “vibe coding” Built directly into the LWC compiler and base components
App Builder support Not yet available (planned for GA) Full drag-and-drop support with property panels
Cross-platform reuse Share components across Salesforce and non-Salesforce apps Salesforce-only; can run on LWR sites and Experience Cloud
Ecosystem tooling npm, Vite, Vitest, React DevTools, full open-source ecosystem Salesforce CLI, LWC Local Dev, limited third-party tooling

Which should you choose?

Choose React when you need to share components across Salesforce and non-Salesforce surfaces, or use the broader React ecosystem. 

Choose LWC when you want declarative data access with @wire and Lightning Data Service, the base component library, and the drag-and-drop Lightning App Builder.

Beta limitations

This has been one of the most requested capabilities by the developer community, and we’re excited to finally get it into your hands. Multi-Framework is in open beta now in scratch orgs and sandboxes, and your feedback will shape where it goes from here.

A few constraints to know before you start: beta apps cannot be deployed to production orgs, Lightning App Builder drag-and-drop placement is not yet supported for React components, and some platform APIs are not available in the beta runtime. Check the Beta Documentation for the full list of known limitations.

Looking ahead, micro-frontend support for embedding React components directly into Lightning pages is in closed pilot for Spring 2027. In the meantime, we encourage you to try it out, file issues, and tell us what’s missing and what you want to see in the future.

Resources

About the Authors

Amanda Lane leads product marketing for privacy, developer tools, and Agentforce at Salesforce. Before Salesforce, she worked in finance at PwC and the KIPP Foundation. She holds an MBA in consumer analytics from Georgetown and brings a dual background in psychology and economics to product strategy.

Alice Oh is a Director of Product at Salesforce building foundational products that enable flexible and extensible ways to create, vibe code, and surface apps across the Salesforce ecosystem. In her free time, she bikes around the Bay Area in search of the flakiest croissants. Follow and connect with her on LinkedIn.

Charles Watkins is a self-taught software developer and Lead Developer Advocate at Salesforce. He spends his time blogging, crafting code samples, and finding new places to hike in the Pacific Northwest. You can follow him on LinkedIn.

The post Build with React, Run on Salesforce: Introducing Salesforce Multi-Framework appeared first on Salesforce Developers Blog.



Read the whole story
alvinashcraft
4 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

New in Salesforce Developer Edition: Agentforce Vibes IDE, Claude 4.5, MCP

1 Share

The free Salesforce Developer Edition just got a major upgrade today at TDX in April 2026, alongside other platforms like Agent Fabric. Starting today, every Developer Edition org includes access to Agentforce Vibes IDE, Agentforce Vibes with Claude Sonnet 4.5 as the default coding model, and Salesforce Hosted MCP Servers, all at no cost.

If you’ve been waiting for a reason to spin up a new Developer Edition org (or dust off your existing one), this is it. Since we launched the new Developer Edition in March with Agentforce and Data 360 (formerly Data Cloud), these three additions turn it into a full AI development environment.

Agentforce Vibes IDE is now available in Developer Edition

Agentforce Vibes IDE is a browser-based, cloud-hosted Visual Studio Code (VS Code) environment that launches directly from your org’s Setup menu. Previously known as Code Builder, it gives you a fully authenticated, org-aware development environment with no local installation required.

Agentforce Vibes IDE open in the browser

Open Setup, click Agentforce Vibes, and within moments you’re working in a full VS Code editor with Salesforce Extensions, Salesforce CLI, and GitHub integration preconfigured. Your org’s metadata loads automatically into an SFDX project. No manual authentication, no CLI setup, no extension hunting.

From there you can develop and deploy Apex, Lightning Web Components (LWCs), and flows; run tests against your org; use the integrated terminal; and access Agentforce Vibes (the agentic coding experience) directly from the sidebar.

Agentforce Vibes with Claude Sonnet 4.5: vibe coding for Salesforce

Agentforce Vibes is the Salesforce enterprise vibe coding capability, and it’s now available in Developer Edition with Claude Sonnet 4.5 as the default model. It understands your Salesforce org’s metadata, schema, and existing code patterns. When you tell it to “create a trigger that prevents duplicate Accounts based on email,” for example, it reads your actual org structure first. No hallucinated field names.

The coding agent comes with two modes:

  • Plan mode: Analyzes your org, clarifies requirements, and generates an implementation plan before writing code.
  • Act mode: Creates and modifies Apex classes, LWCs, triggers, and test classes based on your natural language instructions.

Agentforce Vibes comes with predefined agent skills, and integrates with Salesforce ALM tools like Code Analyzer, and DevOps Center. It does not deploy anything unless you explicitly ask; by default, it modifies local project files you review first.

Usage limits for Developer Edition

  • 110 requests per month with Claude Sonnet 4.5
  • 1.5 million tokens per month
  • Monthly refresh through May 31, 2026 (allocation resets each month)
  • After May 31: a one-time-only allocation of 110 requests / 1.5M tokens with no further refresh

You have about two months of recurring access to experiment and build, followed by a final allocation, if you start now. Use the monthly cycles to explore broadly; use the final allocation to finish what you’ve started. If you don’t start now, you’ll only get the final allocation.

To stretch your requests, use Plan mode before switching to Act mode, be specific in your prompts (for example, say “create an Apex before-insert trigger on Lead that checks for duplicate Email values” rather than “build something for leads”), and retrieve only the metadata relevant to your current task.

Salesforce Hosted MCP Servers come to Developer Edition

Now available in Developer Edition, Salesforce Hosted MCP Servers provide a standardized way for external AI tools to connect to your Salesforce data.

MCP (Model Context Protocol) is an open standard created by Anthropic that acts as a universal interface between AI assistants and external data sources. Configure one MCP server, and any MCP-compatible client (for example Claude Desktop, Cursor, or Claude Code) can interact with your Salesforce org.

The following table shows how Hosted MCP differs from DX MCP.

Dimension DX MCP Server Hosted MCP Server
Runs on Your local machine Salesforce infrastructure
Authentication CLI credentials OAuth 2.0 (per user)
Primary tools 60+ dev tools (metadata, Apex testing, LWC) sObject API access, invocable actions, flows
Use case Development and deployment workflows Data and logic access for external AI tools
Requires local CLI Yes No

Hosted MCP respects your org’s security model: object and field-level security, sharing rules, and profiles all apply.

Once connected, you can query your Salesforce data through natural language in Claude Desktop, build Agentforce agents that interact with your data via MCP, and prototype AI-driven integrations before committing to a production implementation.

How these three features work together

Agentforce Vibes IDE provides the development environment, Agentforce Vibes with Claude Sonnet 4.5 provides the AI coding partner, and Hosted MCP Servers connect external AI tools to your org’s data. Each is useful independently, but together they create a complete AI-assisted development loop.

A practical workflow:

  1. Launch Agentforce Vibes IDE from Setup.
  2. Use Agentforce Vibes to scaffold an Apex class and an LWC.
  3. Configure a Hosted MCP Server to let Claude Desktop query the data your component displays.
  4. Iterate on the component with Vibes while validating the data layer through MCP.

That’s a full AI-assisted development loop running in a free Salesforce org.

Sign up and start building

If you don’t have a Developer Edition org yet, sign up here. It’s free, doesn’t expire as long as you log in regularly, and now includes everything covered in this post.

If you already have a Developer Edition with Agentforce and Data 360, these features are gradually rolling out starting this week to existing environments. Navigate to Setup and search for “Agentforce Vibes” to get started. No additional enablement steps required.

Developer Edition resources and documentation

About the Author

René Winkelmeyer leads the Developer Advocacy team at Salesforce. His team focuses on Agentforce, Data 360, and the Salesforce Platform. In his spare time, you might find him still coding on GitHub. Follow René on LinkedIn.

The post New in Salesforce Developer Edition: Agentforce Vibes IDE, Claude 4.5, MCP appeared first on Salesforce Developers Blog.



Read the whole story
alvinashcraft
4 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Hurting or Helping Devs?

1 Share

This video features me, a Principal Software Engineer, discussing the impact of AI on software development, the risks of “vibe coding,” and the necessary shifts in engineering practices. Adron argues that traditional manual coding is becoming obsolete and that developers must adapt to a new paradigm defined by systems thinking and AI orchestration.

Key Takeaways:

  • The Dangers of “Vibe Coding”: Adron defines “vibe coding” as the practice of relying on AI to generate code without a deep understanding of the system (0:08:31). This often leads to unmaintainable, “disposable” software—a phenomenon he calls the shinification of software—which can cause significant production issues when systems fail (0:00:46, 0:08:31).
  • Managing AI Agents: To maintain code quality, developers must:
    • Rein in Scope: Avoid open-ended prompts; instead, provide specific, well-defined architectural plans to AI agents (0:05:13, 0:06:01).
    • Diff Discipline: Enforce hard limits on diff sizes (e.g., aiming for ~50 lines) to ensure human reviewers can feasibly audit changes (0:52:37, 0:55:00).
    • Human Gatekeeping: Keep humans as the final gatekeepers for production deployments to ensure security and reliability (0:16:50, 0:57:29).
  • The Evolution of the Developer Role: The junior pipeline is changing; instead of focusing on syntax or pixel-pushing, future developers should act as systemic architects who understand how to orchestrate AI tools and manage complex workflows (0:24:05, 0:26:05).
  • The Industry Reckoning: As VC-subsidized AI adoption faces future economic corrections, companies will need to prioritize efficiency, energy production, and true orchestration over simply generating massive amounts of code (1:02:41, 1:05:00).
  • Future Predictions: Adron predicts that AI will eventually develop its own programming language optimized for machine-to-machine communication, further distancing development from manual human typing (1:09:48).

In this episode, you’ll learn:

  1. Why writing code manually means you are already too far behind.
  2. How to manage the six specific types of AI code changes.
  3. The reason Diff Discipline is the only way to survive vibe coding.

Time Sliced Segments

  • (03:14) Why the junior developer pipeline is imploding
  • (05:13) How to reign in agent scope for better results
  • (08:31) The slow creeping dread of vibe coding
  • (12:50) Moving past communication cycles with prototypes
  • (16:50) Why shipping to production needs a human gatekeeper
  • (20:20) How roles shift when agents handle the workflow
  • (24:05) Why slinging individual lines of code is over
  • (29:47) Bringing a generalist approach back to computer science
  • (34:57) Breaking down the six types of code changes
  • (41:40) Why AI optimizes for plausible output instead of correctness
  • (52:37) Enforcing diff limits to keep human reviewers sane
  • (57:29) Setting up no-fly zones for sensitive code
  • (01:02:41) The coming hundred x shock to the tech industry
  • (01:11:27) What it means to be a coder in 2026
    Read the whole story
    alvinashcraft
    5 minutes ago
    reply
    Pennsylvania, USA
    Share this story
    Delete

    Ticketmaster is an illegal monopoly, jury finds

    1 Share
    Photo illustration of a gavel next to a phone showing the Ticketmaster logo.

    Live Nation-Ticketmaster is an illegal monopolist, a Manhattan jury found, according to Bloomberg. The jury found the company liable on three counts: illegally monopolizing the market for live event ticketing, amphitheaters, and tying its concert promotions business with the use of its venues, Bloomberg reported.

    The verdict, reached after several days of deliberation, leaves the live entertainment giant open to a potential breakup - which was the stated goal of the lawsuit back when it was filed by the Biden administration's Department of Justice. Such an outcome would go far beyond the settlement that the Trump administration's DOJ reache …

    Read the full story at The Verge.

    Read the whole story
    alvinashcraft
    6 minutes ago
    reply
    Pennsylvania, USA
    Share this story
    Delete

    The Pentagon's AI Plan + Behind the Anthropic Fight — With Under Secretary of War Emil Michael

    1 Share

    Emil Michael is the Under Secretary of War for Research and Engineering at the Pentagon. Michael joins Big Technology to discuss how AI is transforming the Department of War, from targeting systems to drone warfare to cyber defense. Tune in to hear his account of why the Pentagon designated Anthropic a supply chain risk, what actually happened in the contract negotiations, and whether the decision was wise. We also cover how the military's Maven Smart System works in practice, what the U.S. learned from drone warfare in Ukraine and Iran, and whether the Pentagon Pizza Index is credible. Hit play for one of the most candid conversations you'll hear about AI and national security.

    ---

    Questions? Feedback? Write bigtechnologypodcast@gmail.com

    Enjoying Big Technology Podcast? Please rate us five stars ⭐⭐⭐⭐⭐ in your podcast app of choice.

    Want a discount for Big Technology on Substack + Discord? Here’s 25% off for the first year: https://www.bigtechnology.com/subscribe?coupon=0843016b



    Learn more about your ad choices. Visit megaphone.fm/adchoices





    Download audio: https://pdst.fm/e/tracking.swap.fm/track/t7yC0rGPUqahTF4et8YD/pscrb.fm/rss/p/traffic.megaphone.fm/AMPP7230758441.mp3?updated=1776279931
    Read the whole story
    alvinashcraft
    6 minutes ago
    reply
    Pennsylvania, USA
    Share this story
    Delete

    We rebuilt Flutter’s websites with Dart and Jaspr

    1 Share
    Dash and Jasper sitting behind a laptop, checking out the new Dart and Flutter websites built with Dart and Jaspr, with a mockup of a website layout behind them.
    Rebuilding three websites using Jaspr, a Dart-based, open-source web framework.

    Despite Dart starting out as a web language and being used every day to build apps across platforms, including the web, our own websites (dart.dev, flutter.dev, docs.flutter.dev) relied on a fragmented mix of non-Dart tools. That’s finally changed. We’ve migrated all three websites to use Jaspr, an open-source framework for building websites with Dart.

    The result is a unified stack with a consistent developer experience where contributing only requires Dart. If you’re curious about building web experiences with Dart beyond standard Flutter web apps, this post explores what motivated our migration and how Dart and Jaspr made it all possible.

    A fragmented and unfamiliar technical stack

    While the previous setup of our sites worked, their implementations were fragmented, and required increasingly more effort to update the sites to meet our evolving needs. The documentation sites were built with Eleventy, a Node.js static-site generator. Meanwhile, flutter.dev had a completely separate setup, powered by Wagtail, a CMS built on Python and Django.

    This fragmentation meant that anyone wanting to contribute to or maintain our sites needed additional experience and tooling outside the Dart ecosystem: Node.js tooling for one set of sites, Python for another. While some surrounding infrastructure and interactive components were already built with Dart, the separate ecosystems limited code sharing, significantly increased set-up and contribution friction, and grew increasingly complicated.

    We wanted to change that. We wanted a single, unified stack built on the language and tools our team and community already know. We also had growing ambitions and needs for interactivity on our sites, from richer code samples to quizzes for tutorials. Our existing setups made each new interactive element an uphill battle, often requiring one-off imperative DOM logic.

    Finding a unified solution in Jaspr

    Jaspr is a versatile Dart web framework that supports client-side rendering, server-side rendering, and static site generation. Beyond being a traditional DOM-based (with HTML and CSS) web framework and being written in the language we already know, Jaspr stood out for a few reasons:

    Flutter skills transfer directly. The Jaspr framework and its component model were designed to feel natural and familiar to any Flutter developer while being compatible with the DOM model of the web. If you’ve written a Flutter widget before, you can read this:

    class FeatureCard extends StatelessComponent {
    const FeatureCard({
    required this.title,
    required this.description,
    super.key,
    });

    final String title;
    final String description;

    @override
    Component build(BuildContext context) {
    return div(classes: 'feature-card', [
    h3([.text(title)]),
    p([.text(description)]),
    ]);
    }
    }

    With Jaspr, contributors can directly apply the Dart and Flutter experience they already have to a new platform, significantly lowering the barrier to entry for team and community members who want to improve our documentation and websites.

    Seamless support for partial hydration. One major underlying reason for this exploration and migration was to make it easier to build and integrate interactive experiences on our sites. Jaspr’s built-in support for partial hydration allows each page to be prerendered as static HTML, then the client-side logic is attached only for the components that need it. This is perfect for websites like ours, where the majority of the content is static and only small pockets of interactivity are needed, ensuring quick page loading and good SEO.

    Jaspr Content for Markdown-driven sites. Jaspr also provides Jaspr Content, a package that supports quickly building content-driven sites. It provides enough out-of-the-box functionality to create a running Markdown-based website in just a few minutes while also being easy to expand and customize extensively. This built-in functionality saved a significant amount of time while the customizability enabled us to keep our original functionality and content practices intact.

    What we gained

    The migration brought all the benefits we imagined and more, both for the sites themselves and the contribution experience.

    A singular, unified toolchain. With everything written in Dart, not only do you need just one SDK to contribute, we also gained access to Dart’s powerful, unified tooling. We can manage all dependencies with dart pub, format code with dart format, analyze it with dart analyze, and then test it with dart test. Managing the site now requires only one set of tools to know, one set of conventions to follow, and one ecosystem to stay current with, and it’s the one we’re already most familiar with.

    A stack our contributors already know. Our websites have a lot of contributors, from engineers, to technical writers, to passionate community members. We want everyone to be able to contribute, but the fragmented setup was complex and unfamiliar to most. Now the sites are implemented as standard Dart projects, and if you know Dart, you have everything you need. We hope this lowers the barrier for team and community members who want to help improve Flutter and Dart’s documentation.

    Less had to change than you’d expect. With Jaspr Content supporting most of what we needed out of the box, such as templating support, Markdown, and data loading, our content and writing workflows barely needed to change. Nor did our styles, as we already used Sass, a CSS extension language, which is actually implemented in Dart, and therefore requires an even simpler setup than we had before.

    The collaborative migration

    Overall, the site migration to Jaspr and Jaspr Content went well, but there were, of course, some challenges along the way. We occasionally ran into issues as well as opportunities for improvement with both Dart’s web tooling and Jaspr itself.

    What made the migration possible was Kilian, Jaspr’s creator and maintainer. Beyond creating Jaspr, he supported us throughout the migration. He migrated components as early proofs of concept, responded to issues, shipped fixes, improved the developer experience, and even built out Jaspr Content with our websites as a driving use case. To support this ongoing effort and formalize the collaboration, we partnered with Kilian and his consultancy, Netlight, to help us migrate the rest of our web presence and continue investing directly in Jaspr. It was a genuinely collaborative process. Our sites and Jaspr both grew as a result.

    In the Dart and Flutter ecosystem, the community is everything and what Kilian has provided to the community with Jaspr is a great example of that. Jaspr has shown itself to be a powerful and modern web framework that is well maintained, responsive to feedback, and ready for you to try out. Thank you, Kilian!

    To hear Kilian’s perspective on building and maintaining the framework, check out his article: Jaspr: Why web development in Dart might just be a good idea.

    Dart and Jaspr growing together

    One of the most rewarding aspects of building on an all-Dart stack is that improvements to the Dart language and surrounding tooling benefit everything. Not just your Flutter apps, but your websites too. Here are a few recent Dart features that have directly impacted and improved the experience of building with Jaspr.

    Dot shorthands make component trees cleaner. Dart 3.10 introduced support for a dot shorthand syntax enabling you to omit the type name from static member accesses when they can be inferred from the context. Kilian took advantage of this by consolidating several component constructors onto the Component class and designing them to work naturally with the new syntax:

    Component build(BuildContext context) => const div([
    // After the API changes:
    h1([Component.text('Dash says hi!')]),
    Component.fragment([
    Component.text('First element'),
    Component.text('Second element'),
    ]),
    Component.empty(),

    // With dot shorthands:
    h1([.text('Dash says hi!')]),
    .fragment([
    .text('First element'),
    .text('Second element'),
    ]),
    .empty(),
    ]);

    The result was a more consistent API with better discoverability and a concise syntax that still works in constant contexts. Best of all, Jaspr’s CLI comes with a jaspr migrate command that automatically handled the migration to the new API as well as other changes.

    Null-aware collection elements simplify conditional rendering. Dart 3.8 added support for null-aware collection elements, providing a clean syntax to conditionally include non-null values in collections. In Jaspr code, where you’re regularly composing lists of child components, they offer an elegant way to handle conditional UI elements:

    Component build(BuildContext context) => div(classes: 'header', [
    h1([.text('Welcome to Flutter!')]),

    // Before null-aware collection elements:
    if (eventBanner != null) eventBanner!,

    // With a null-aware collection element:
    ?eventBanner,
    ]);

    No more verbose if checks and not-null assertions cluttering your component trees.

    Modern, lightweight JS interop and compilation to WebAssembly. To enable efficient access to modern web APIs and compilation to WebAssembly, Dart 3.3 introduced new JS interop libraries as well as package:web. Jaspr was quick to migrate to and support the new APIs, ensuring Jaspr developers could benefit from their new capabilities and build modern Dart apps. Building on this, Jaspr additionally supports experimental compilation to WebAssembly when running on the client. In fact, dart.dev already uses and benefits from this support on compatible browsers.

    A helpful, integrated analyzer plugin. For a while, Jaspr had a helpful linting package built on top of package:custom_lint, helping developers write idiomatic and correct Jaspr code. With the release of official analyzer plugin support in Dart 3.10, Jaspr migrated to adopt the feature. The plugin provides a great example of what is possible, providing Jaspr-specific diagnostics and code assists. For example, it can convert between component types or quickly wrap a component with another, similar to the assists you might already be used to with Flutter.

    None of these features were built specifically for Jaspr. They’re improvements to the Dart language and tooling that benefit the entire ecosystem, not just Flutter. For some of them, Jaspr was able to immediately take advantage, while others required framework changes from Kilian and contributors to unlock their potential. Either way, it’s clear that Dart keeps evolving and that evolution continues to open up improvements and possibilities for everything built with it, including Jaspr and Flutter.

    What’s next and how to get started

    We’re not done yet. Now that our websites share this new technical stack, we can start to share more code, build new interactive features, and continue to improve Dart’s web development story. We’re also migrating the Dart and Flutter blogs from Medium to being directly hosted on our Jaspr-powered sites. You’ll hopefully be able to read this very post there soon.

    If you’re a Dart or Flutter developer curious about building websites with the skills you already have, there’s never been a better time to try. Jaspr is a great option for content-heavy sites, such as landing pages and documentation. It can even naturally integrate with your Flutter web apps. Try it out now on Jaspr’s online playground (which is also built with Jaspr!) or by following the Jaspr quickstart.

    Or, if you’re interested in contributing to the Flutter or Dart documentation sites, the barrier to entry just got a lot lower. Now with Jaspr, all you need is Dart.


    We rebuilt Flutter’s websites with Dart and Jaspr was originally published in Flutter on Medium, where people are continuing the conversation by highlighting and responding to this story.

    Read the whole story
    alvinashcraft
    6 minutes ago
    reply
    Pennsylvania, USA
    Share this story
    Delete
    Next Page of Stories