<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Athan</title>
    <description>The latest articles on DEV Community by Athan (@kgryte).</description>
    <link>https://dev.to/kgryte</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1146539%2Fdb2b03d0-c053-4282-9c15-117954915f14.png</url>
      <title>DEV Community: Athan</title>
      <link>https://dev.to/kgryte</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kgryte"/>
    <language>en</language>
    <item>
      <title>Why another plotting library?</title>
      <dc:creator>Athan</dc:creator>
      <pubDate>Sat, 08 Aug 2026 22:44:43 +0000</pubDate>
      <link>https://dev.to/stdlib/why-another-plotting-library-1gh1</link>
      <guid>https://dev.to/stdlib/why-another-plotting-library-1gh1</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;JavaScript has no shortage of plotting libraries. But scientific computing needs more than a way to render charts, so we're building a plotting system designed around the entire workflow.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;JavaScript does not suffer from a shortage of ways to draw a chart. There are mature libraries for quick statistical graphics, dashboards, bespoke data-driven documents, publication-quality figures, and nearly every use case in between. Some are small and focused. Others are entire ecosystems in their own right.&lt;/p&gt;

&lt;p&gt;So, naturally, stdlib is building another one.&lt;/p&gt;

&lt;p&gt;At first glance, this may look like a textbook case of not-invented-here. It is not. We are not building a plotting library because we think the existing libraries are bad. Quite the opposite: JavaScript has some of the best visualization tooling of any programming ecosystem. We are building one because stdlib is trying to solve a &lt;em&gt;different&lt;/em&gt; problem.&lt;/p&gt;

&lt;p&gt;The gap we care about is not at the level of pixels. Current JavaScript charting libraries can draw lines, symbols, axes, legends, and tooltips just fine. The gap is at the level of workflow: how plotting fits into numerical computation across the browser, the REPL, the command line, on the server, and in desktop windows.&lt;/p&gt;

&lt;p&gt;That is the problem we have not seen addressed as one coherent system.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;We are not building another rendering engine.&lt;/p&gt;

&lt;p&gt;We are building a plotting layer for scientific JavaScript: one which understands n-dimensional arrays (a.k.a., &lt;a href="https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/ndarray/ctor" rel="noopener noreferrer"&gt;&lt;code&gt;ndarrays&lt;/code&gt;&lt;/a&gt;), works naturally in the Node.js REPL, can render to an Electron-powered desktop window, participates in command-line workflows, can be embedded in a browser, exposes a programmatic event model, and provides a path from exploratory analysis to publication-quality graphics.&lt;/p&gt;

&lt;p&gt;For rendering and interaction, we are building on &lt;a href="https://vega.github.io" rel="noopener noreferrer"&gt;Vega&lt;/a&gt;, a declarative visualization grammar and runtime which produces canvas and SVG output in the browser, and supports static rendering on the server. Vega gives us a robust target specification and rendering backend. stdlib provides the scientific data model, ergonomic plotting APIs, runtime integrations, object model, viewers, editing tools, documentation, testing, and long-term compatibility layer around it.&lt;/p&gt;

&lt;p&gt;Put another way: Vega handles the pixels. We are building the workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start where the computation happens
&lt;/h2&gt;

&lt;p&gt;Most JavaScript visualization libraries treat the browser as the center of the universe. That makes sense. JavaScript was born in the browser, and the browser provides a rich environment for interaction, layout, animation, and graphical output. For many applications, targeting a DOM element on a web page is the right abstraction.&lt;/p&gt;

&lt;p&gt;But stdlib does not live only in the browser.&lt;/p&gt;

&lt;p&gt;It also lives in Node.js scripts, REPL sessions, command-line programs, batch jobs, data pipelines, web services, and other server-side environments. If plotting is going to be a first-class part of scientific computing in JavaScript, it needs to feel at home in all of those places.&lt;/p&gt;

&lt;p&gt;When I am exploring a dataset, I do not want to create a browser application just to see whether two variables are correlated. I do not want to scaffold a project, write HTML, start a development server, move my data across an application boundary, and attach a chart to a DOM node. I want to start the stdlib &lt;a href="https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/repl" rel="noopener noreferrer"&gt;REPL&lt;/a&gt;, load my data, create a plot, and keep working.&lt;/p&gt;

&lt;p&gt;That should not be a radical request.&lt;/p&gt;

&lt;p&gt;The plotting work currently underway in stdlib deliberately separates a chart from how that chart is viewed. The same chart can target &lt;code&gt;stdout&lt;/code&gt;, a browser, or an Electron-powered desktop window. A browser remains a first-class destination, but it is not assumed to be the only destination.&lt;/p&gt;

&lt;p&gt;This matters for exploratory data analysis. Plotting is not merely a final presentation step. It is part of the feedback loop through which we inspect data, question assumptions, identify structure, discover errors, and decide what to compute next. A plotting library for scientific computing should begin where the computation happens, not require users to move the computation somewhere else.&lt;/p&gt;

&lt;h2&gt;
  
  
  Numerical data is not always a JSON table
&lt;/h2&gt;

&lt;p&gt;A great deal of JavaScript visualization is organized around arrays of objects (often referred to as &lt;a href="https://vita.had.co.nz/papers/tidy-data.html" rel="noopener noreferrer"&gt;"tidy datasets"&lt;/a&gt;; e.g., see &lt;a href="https://vega.github.io/vega/docs/data/" rel="noopener noreferrer"&gt;Vega&lt;/a&gt; and &lt;a href="https://observablehq.com/plot/features/marks#marks-have-tidy-data" rel="noopener noreferrer"&gt;Observable Plot&lt;/a&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;y&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;3.2&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;y&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;4.8&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;3.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;y&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;4.1&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is a perfectly reasonable interchange format centered on &lt;a href="https://en.wikipedia.org/wiki/JSON" rel="noopener noreferrer"&gt;JSON&lt;/a&gt;. It is readable, flexible, and maps naturally to rows and fields. It is not, however, necessarily the data model used by a numerical program.&lt;/p&gt;

&lt;p&gt;Scientific code routinely works with typed arrays, multi-dimensional arrays, strided views, non-contiguous memory layouts, stacks of matrices, and arrays with explicit shape and data type information. Those objects are not incidental implementation details. They are fundamental abstractions around which numerical software is built.&lt;/p&gt;

&lt;p&gt;In stdlib, we want users to be able to provide the same &lt;code&gt;ndarray&lt;/code&gt; objects they use for statistics, linear algebra, simulation, and signal processing directly to plotting APIs. Users should not need to manually flatten, reshape, transpose, copy, or serialize their data just to look at it.&lt;/p&gt;

&lt;p&gt;Our work-in-progress line-chart implementation already accepts &lt;code&gt;ndarray&lt;/code&gt;-like inputs, determines how to organize those inputs as chart data, and lowers the result into Vega datasets, scales, axes, and marks.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;uniform&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@stdlib/random/uniform&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Float64Vector&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@stdlib/ndarray/vector/float64&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;LineChart&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./../lib&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Define minimum lower and upper bounds for uniformly distributed random numbers:&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Float64Vector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Float64Vector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Generate 5 datasets containing 100 rows of data:&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;uniform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Create a new chart instance:&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;chart&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;LineChart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not the sort of feature which produces a flashy landing-page demo. But it is foundational.&lt;/p&gt;

&lt;p&gt;A plotting library within stdlib should understand the data structures produced by the rest of stdlib. Anything less would make plotting feel like an attached application rather than an integrated part of the numerical computing environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  A plot should be a live computational object
&lt;/h2&gt;

&lt;p&gt;A plot is often treated as a terminal artifact: provide some data and options, create an SVG or canvas element, and move on. That model is useful, but incomplete.&lt;/p&gt;

&lt;p&gt;Plots change. Data arrives. Parameters are updated. Axes are rescaled. Themes are switched. A server may need to notify a connected client. A host application may need to export an image after a computation finishes. A stream may need to trigger an update without any DOM event occurring.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://vega.github.io/vega/docs/signals/" rel="noopener noreferrer"&gt;Vega signals&lt;/a&gt; provide an excellent reactive model within the visualization runtime. Signal values can respond to input events, external API calls, and upstream changes, with updated values propagating through the visualization dataflow. But signals inside a visualization runtime are not a replacement for a general-purpose event model across a JavaScript object graph.&lt;/p&gt;

&lt;p&gt;In our current work, stdlib plotting objects use event emitters throughout the programmatic API. Changes to child objects propagate upward, allowing a chart, server, viewer, logger, or another consumer to respond. A change can result in a visual update, but it could just as readily result in writing a file, emitting a message over a socket, recording an audit log, or initiating some other non-DOM action. This is particularly important on the server, where there may be no user-interface element to bind and no mouse or keyboard event to observe.&lt;/p&gt;

&lt;p&gt;It is also why we are investing in debug logging throughout the plotting stack. Once a visualization becomes reactive, understanding what changed, where that change originated, and why a render occurred becomes essential. Plotting should not be a black box which mysteriously redraws itself. Failure should be easy to diagnose.&lt;/p&gt;

&lt;p&gt;In other words, we are treating a plot as a live computational object, not just a picture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code and GUI should meet in the middle
&lt;/h2&gt;

&lt;p&gt;There is a longstanding tension in scientific plotting between code and graphical editing. Code is reproducible. It can be reviewed, versioned, rerun, tested, and applied consistently across many figures. A graphical interface, however, can be much more efficient for the final stages of figure creation: adjusting padding, changing font sizes, refining tick marks, moving a legend, modifying line styles, and making the dozens of small visual decisions which turn a serviceable plot into a publication-quality graphic.&lt;/p&gt;

&lt;p&gt;Most tools force users to choose. Either every visual detail must be expressed in code, even when direct manipulation would be faster, or a figure is edited in a graphical application and the relationship between the resulting artifact and the code which produced it is severed.&lt;/p&gt;

&lt;p&gt;We want both.&lt;/p&gt;

&lt;p&gt;The current in-progress plotting &lt;a href="https://github.com/stdlib-js/stdlib/pull/7715" rel="noopener noreferrer"&gt;work&lt;/a&gt; contains an early graphical editor which reads from a visualization schema, exposes controls for chart properties, and posts changes back to a server-side plot. The underlying schema remains the source of truth. Programmatic changes can update the editor, and editor changes can update the programmatic object.&lt;/p&gt;

&lt;p&gt;This work is still early, but the direction is important. The goal is not to replace code with a GUI. It is to make the GUI another frontend to the same underlying representation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Knowing when to stop building everything ourselves
&lt;/h2&gt;

&lt;p&gt;At this point, an obvious question arises. If we are building so much custom plotting infrastructure, why build on Vega at all? Why not implement the renderer ourselves?&lt;/p&gt;

&lt;p&gt;We tried.&lt;/p&gt;

&lt;p&gt;stdlib has a strong bias toward building foundational infrastructure in-house. That tendency has served us well. It gives us control over API design, behavior, performance, portability, testing, documentation, and release cadence.&lt;/p&gt;

&lt;p&gt;Our original plotting implementation followed that instinct. We built SVG components, virtual-DOM infrastructure, scales, axes, marks, layout logic, and rendering machinery. It worked. It also made increasingly clear just how much work remained.&lt;/p&gt;

&lt;p&gt;A serious visualization renderer needs to handle scenegraphs, data joins, text measurement, clipping, layout, rendering order, incremental updates, animation, browser differences, event handling, image export, accessibility, canvas, SVG, server-side rendering, and a seemingly endless collection of edge cases. We could keep investing in all of that. But doing so would mean spending an enormous amount of time reproducing infrastructure which already exists and is maintained by people who have devoted years to solving those exact problems.&lt;/p&gt;

&lt;p&gt;At some point, persistence becomes stubbornness. So we folded that hand.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/stdlib-js/stdlib/pull/7715" rel="noopener noreferrer"&gt;pull request&lt;/a&gt; containing the current work explicitly removes the previous virtual-DOM plotting implementation and replaces it with packages for constructing and generating Vega specifications. That does not mean the previous work was wasted. Quite the opposite. It taught us where the correct abstraction boundary should be.&lt;/p&gt;

&lt;p&gt;We do not need to own every pixel in order to own the user experience. Rendering is not where stdlib can add the most value. Integrating plotting into scientific JavaScript is.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Vega?
&lt;/h2&gt;

&lt;p&gt;Vega is described as a visualization grammar. Rather than directly issuing imperative drawing commands, a Vega visualization is described using a &lt;a href="https://vega.github.io/vega/docs/specification/" rel="noopener noreferrer"&gt;JSON specification&lt;/a&gt; containing data, scales, axes, legends, marks, signals, and other components. The specification is then parsed into a reactive dataflow and rendered by the Vega runtime.&lt;/p&gt;

&lt;p&gt;That distinction makes Vega a particularly good fit for what we are building.&lt;/p&gt;

&lt;h3&gt;
  
  
  A portable intermediate representation
&lt;/h3&gt;

&lt;p&gt;We treat a Vega specification as an intermediate representation, which is one of the stated goals of Vega: namely, to provide a &lt;a href="https://vega.github.io/vega/about/vega-and-d3/" rel="noopener noreferrer"&gt;"target language"&lt;/a&gt; in which computer programs can dynamically generate visualizations.&lt;/p&gt;

&lt;p&gt;Conceptually, the architecture looks something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; high-level chart   future plotting
    constructors       DSLs
            \       /
             \     /
        low-level builders     GUI editor
                 \               /
                  \             /
                Vega specification
                         |
                    Vega runtime
                         |
            SVG / Canvas / other renderers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A high-level line-chart constructor does not need to know how to create SVG paths, draw onto a canvas context, or generate shaders. It needs to know how to translate the user's intent and data into a valid visualization specification. Similarly, a graphical editor does not need its own rendering engine. It can modify the same specification generated by a programmatic API.&lt;/p&gt;

&lt;p&gt;This is not an untested architectural model. &lt;a href="https://vega.github.io/vega-lite/" rel="noopener noreferrer"&gt;Vega-Lite&lt;/a&gt; is itself a higher-level grammar which compiles to Vega. &lt;a href="https://github.com/vega/lyra" rel="noopener noreferrer"&gt;Lyra&lt;/a&gt; was an initial attempt at a graphical environment for custom visualization design without writing any code. We are applying a similar separation, but building a different frontend, one which is shaped around JavaScript numerical computing, stdlib conventions, and direct integration with stdlib data structures, such as &lt;code&gt;ndarrays&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Vega specifications also give us portable artifacts which can be inspected, serialized, stored, shared, transformed, and handed to other tools. Because Vega and Vega-Lite sit underneath tools in other ecosystems, including &lt;a href="https://altair-viz.github.io" rel="noopener noreferrer"&gt;Altair&lt;/a&gt; and &lt;a href="https://vegafusion.io/" rel="noopener noreferrer"&gt;VegaFusion&lt;/a&gt; in Python, the specification provides a natural bridge beyond JavaScript as well.&lt;/p&gt;

&lt;p&gt;The schema becomes a boundary rather than a burden.&lt;/p&gt;

&lt;h3&gt;
  
  
  Multiple rendering environments
&lt;/h3&gt;

&lt;p&gt;Vega supports canvas and SVG rendering in the browser and static SVG and PNG export on the server. Server-side SVG generation does not require constructing a server-side DOM. Vega provides multi-view layout machinery, configuration-based theming, and explicit accessibility properties for SVG output. Third-party work has additionally demonstrated a &lt;a href="https://github.com/vega/vega-webgl-renderer" rel="noopener noreferrer"&gt;WebGL renderer&lt;/a&gt; for the Vega scenegraph.&lt;/p&gt;

&lt;p&gt;Those capabilities would each represent substantial projects in their own right. By building on Vega, we inherit a rendering foundation which already spans the environments stdlib cares about. We can then spend our time on the problems which are specific to scientific computing: data adapters, chart semantics, numerical types, server integration, REPL workflows, command-line composition, and user-facing APIs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reactive behavior on the client
&lt;/h3&gt;

&lt;p&gt;Vega's signals and reactive dataflow allow many updates to be resolved directly within the client-side runtime. Not every change should require sending an entirely new specification from a server. A line color, tick size, font weight, or opacity can often be updated without rebuilding the world.&lt;/p&gt;

&lt;p&gt;The current in-progress stdlib view implementation already distinguishes between properties which can be updated dynamically and structural changes which require the specification to be re-parsed. This gives us a useful division of labor. stdlib can own the server-side object model and change propagation, while Vega can handle reactive visual updates close to where rendering occurs and facilitate a more responsive and snappier user experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  An ecosystem rather than an island
&lt;/h3&gt;

&lt;p&gt;Depending on a rendering backend is not a decision we take lightly. Visualization libraries are expensive dependencies. They have large surface areas, and choosing one means placing a certain amount of trust in its architecture, maintainers, and continued development. Vega has continued to evolve, remains actively maintained, and supports a broader ecosystem including Vega-Lite, Altair, VegaFusion, &lt;a href="https://github.com/vega/vega-embed/" rel="noopener noreferrer"&gt;Vega-Embed&lt;/a&gt;, &lt;a href="https://github.com/vega/vega-themes" rel="noopener noreferrer"&gt;Vega Themes&lt;/a&gt;, and the &lt;a href="https://github.com/vega/editor" rel="noopener noreferrer"&gt;Vega Editor&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;That matters.&lt;/p&gt;

&lt;p&gt;We are not tying stdlib to an isolated renderer which only we depend upon. We are aligning with a specification and runtime already shared across languages, applications, and communities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vega is the backend, not the user-facing API
&lt;/h2&gt;

&lt;p&gt;One might reasonably ask: why not simply tell users to write Vega specifications directly? Our answer is that, while powerful, Vega is also low-level.&lt;/p&gt;

&lt;p&gt;Creating even a conventional chart can require thinking about datasets, scales, domains, ranges, axes, marks, encoding sets, value references, signals, and layout, and then trying to encode that in JSON. That level of control is invaluable when building novel visualizations. It is unnecessary ceremony when someone simply wants to plot &lt;code&gt;x&lt;/code&gt; against &lt;code&gt;y&lt;/code&gt;. A scientist should not need to learn a visualization grammar before inspecting an array.&lt;/p&gt;

&lt;p&gt;stdlib's role is to provide ergonomic plotting APIs inspired by established numerical environments such as MATLAB and &lt;a href="https://matplotlib.org" rel="noopener noreferrer"&gt;matplotlib&lt;/a&gt;, while retaining the ability to reach for the full expressive power of Vega when needed. At the highest level, that may mean static chart constructors which make common plots easy. At a lower level, it means programmatic objects corresponding to Vega concepts such as data sources, scales, axes, marks, and encoding sets. Those objects provide validation, defaults, property accessors, change events, debug logs, and predictable serialization. And, at the bottom, the generated Vega specification remains available as an escape hatch and interoperability format.&lt;/p&gt;

&lt;p&gt;The work-in-progress implementation already reflects this layering: high-level quantitative and line-chart objects are composed from lower-level Vega dataset, scale, axis, mark, encoding, and value objects before serializing to a standard specification.&lt;/p&gt;

&lt;p&gt;This is not intended to be a thin wrapper which renames a few Vega properties. What we are building is a frontend and integration layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  The value is in the continuity
&lt;/h2&gt;

&lt;p&gt;To be clear, we are not claiming that every individual feature we want is unprecedented. That would be both false and unhelpful.&lt;/p&gt;

&lt;p&gt;Vega already renders on the server. Other libraries can be made to work with Node.js. Command-line visualization tools exist. Graphical chart editors exist. Some libraries accept typed arrays or can be used inside Electron.&lt;/p&gt;

&lt;p&gt;The individual pieces are out there. What we have not found is a coherent system which brings those pieces together around scientific computing in JavaScript.&lt;/p&gt;

&lt;p&gt;Consider the workflow we are working toward:&lt;/p&gt;

&lt;p&gt;Load an &lt;code&gt;ndarray&lt;/code&gt;. Create a chart without manually reshaping the data. Open the chart in a desktop window directly from the REPL. Update a property and see the view react. Listen for changes from another server-side object. Inspect debug logs to understand why the plot updated. Fine-tune the figure in a graphical editor. Serialize the same underlying specification to stdout. Embed the same visualization in a browser application. Hand the specification to a tool in another ecosystem.&lt;/p&gt;

&lt;p&gt;No single step is the point. The continuity is.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building it the stdlib way
&lt;/h2&gt;

&lt;p&gt;The plotting work is also being built according to the same &lt;a href="https://blog.stdlib.io/zen-of-stdlib/" rel="noopener noreferrer"&gt;principles&lt;/a&gt; which guide the rest of stdlib. Low-level components are modular and independently usable. Higher-level behavior is composed from those components. Complexity is pushed upward into APIs which can provide convenience without compromising the predictability of the foundations underneath.&lt;/p&gt;

&lt;p&gt;Yes, this results in more packages than placing everything inside a single &lt;code&gt;plot&lt;/code&gt; function. It also gives each concept a clear boundary. Components can be tested in isolation, documented independently, benchmarked where appropriate, reused by other packages, and replaced without rewriting the entire plotting system.&lt;/p&gt;

&lt;p&gt;Just as importantly, stdlib owns the user-facing compatibility boundary.&lt;/p&gt;

&lt;p&gt;Vega may evolve. Renderers may change. New specification versions may be released. By placing stdlib APIs in front of that machinery, we can absorb upstream changes, maintain consistent conventions across the rest of the project, and release plotting functionality according to the needs of stdlib users.&lt;/p&gt;

&lt;p&gt;Depending on Vega does not mean surrendering control. It means focusing our control at the layer where we can add the most value.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where things stand
&lt;/h2&gt;

&lt;p&gt;This is not a launch announcement. The plotting work currently lives in a long-running draft &lt;a href="https://github.com/stdlib-js/stdlib/pull/7715" rel="noopener noreferrer"&gt;pull request&lt;/a&gt;, and it is not ready for general use. API names may change. Package boundaries may move. Some features are incomplete, and many details remain to be worked out. But we have made significant progress.&lt;/p&gt;

&lt;p&gt;The branch now contains a programmatic Vega object model, data conversion utilities, scales, axes, marks, encoding objects, high-level chart constructors, direct &lt;code&gt;ndarray&lt;/code&gt; support, multiple view targets, server-side change propagation, and an early graphical editor. Enough of the architecture is now working that the direction is no longer hypothetical.&lt;/p&gt;

&lt;p&gt;We are sharing the rationale before the software is finished because we think the motivation matters. From the outside, another plotting library can look like duplication for duplication's sake. From inside stdlib, it is an important missing piece in our effort to provide a comprehensive environment for scientific computing and data analysis in JavaScript.&lt;/p&gt;

&lt;p&gt;We welcome initial feedback, especially from those whose workflows move between the REPL, scripts, servers, browsers, command-line tools, and publication systems. Those are precisely the boundaries we want to make disappear.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;JavaScript does not need another plotting library in the abstract. stdlib does need a plotting system designed around scientific JavaScript.&lt;/p&gt;

&lt;p&gt;A scientific computing environment is incomplete if it can perform a computation but cannot help you inspect, explore, understand, and communicate the result. Visualization is not an accessory to data analysis. It is part of the process by which analysis happens.&lt;/p&gt;

&lt;p&gt;We are not trying to replace every existing visualization library, nor are we trying to win a chart-library arms race. We are trying to make scientific computing in JavaScript feel whole.&lt;/p&gt;

&lt;p&gt;That means starting where the data lives. It means supporting the runtime the user is already working in. It means understanding numerical data structures. It means treating plots as live computational objects. And it means knowing when to build our own infrastructure and when to rely on excellent work already available in the broader ecosystem.&lt;/p&gt;

&lt;p&gt;Yes, data visualization in JavaScript is a rather frothy and noisy space.&lt;/p&gt;

&lt;p&gt;And yet, here we are.&lt;/p&gt;

&lt;p&gt;That is why we are building another plotting library.&lt;/p&gt;




&lt;p&gt;
    &lt;em&gt;Athan Reines is a software engineer at &lt;a href="https://quansight.com/" rel="noopener noreferrer"&gt;Quansight&lt;/a&gt; and core developer of &lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;stdlib&lt;/a&gt;.&lt;/em&gt;
&lt;/p&gt;




&lt;p&gt;&lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;stdlib&lt;/a&gt; is an open source software project dedicated to providing a comprehensive suite of robust, high-performance libraries to accelerate your project's development and give you peace of mind knowing that you're depending on expertly crafted, high-quality software.&lt;/p&gt;

&lt;p&gt;If you've enjoyed this post, give us a star 🌟 on &lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and consider &lt;a href="https://opencollective.com/stdlib" rel="noopener noreferrer"&gt;supporting&lt;/a&gt; the project. Your contributions and continued support help ensure the project's long-term success and are greatly appreciated!&lt;/p&gt;

&lt;h2&gt;
  
  
  Acknowledgments
&lt;/h2&gt;

&lt;p&gt;This work was supported in part by the National Science Foundation under &lt;a href="https://www.nsf.gov/awardsearch/showAward?AWD_ID=2449410&amp;amp;HistoricalAwards=false" rel="noopener noreferrer"&gt;Award No. 2449410&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Disclaimer: Any opinions, findings and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the National Science Foundation.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>node</category>
      <category>programming</category>
    </item>
    <item>
      <title>Build for Inheritance</title>
      <dc:creator>Athan</dc:creator>
      <pubDate>Thu, 06 Aug 2026 10:36:37 +0000</pubDate>
      <link>https://dev.to/stdlib/build-for-inheritance-4fpd</link>
      <guid>https://dev.to/stdlib/build-for-inheritance-4fpd</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;What if the best measure of your impact in open source isn't being needed, but making yourself unnecessary?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We are often rewarded for becoming indispensable, both in our professional and our personal relationships. There is satisfaction in being the person who understands the obscure subsystem, who remembers the history behind a difficult decision, or who can step in and solve the problem that no one else can solve. Being needed can feel like evidence that our work matters, that we matter. But in open source, indispensability is often another name for fragility.&lt;/p&gt;

&lt;p&gt;A release process that only one person understands is not really a process. It is a dependency. A project whose history lives entirely in one person's memory does not yet possess shared knowledge. And a community that can survive only through the continued sacrifice of a handful of exhausted people is not yet sustainable, no matter how many stars the repository has or how green its dashboards remain.&lt;/p&gt;

&lt;p&gt;This is not a criticism of those people. In fact, if I'm being honest, I'm one of them. More often, it is a testament to how much they have invested and how much they have quietly carried. But it does suggest that good stewardship asks us to do something somewhat counter-intuitive: to care deeply enough about something that it eventually no longer depends on us.&lt;/p&gt;

&lt;p&gt;We care deeply enough whenever we explain not only what we did, but why we did it.&lt;/p&gt;

&lt;p&gt;We do it when we turn an answer we have given ten times into documentation that means no one has to ask the same question an eleventh.&lt;/p&gt;

&lt;p&gt;We do it when we write tests that preserve knowledge of the behavior we intended, when we simplify something clever so another person can understand it, and when we record the context behind a decision rather than allowing that context to disappear into an old chat thread or someone's memory.&lt;/p&gt;

&lt;p&gt;And perhaps most importantly, we do it when we invite another person into the work before we desperately need their help. When we give someone room to make a decision, to own a release, to lead a conversation, or even to make a mistake without immediately taking the work back from them.&lt;/p&gt;

&lt;p&gt;These actions can be easy to dismiss as overhead. They rarely have the drama of solving the hardest technical problem or shipping the long-awaited feature. There may be no benchmark that captures their value and no release note that gives them proper credit. But they are the actions that turn individual expertise into collective capacity. They are what transform a project from something held together by heroes into something genuinely held in common.&lt;/p&gt;

&lt;p&gt;And this is an important part of what it means for open source to be &lt;em&gt;community-driven&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;It does not mean that everyone must participate in every decision, or that expertise and leadership no longer matter. It means that knowledge, trust, context, and authority are distributed widely enough that the work can be carried by more than a few people and that there is a &lt;a href="https://blog.stdlib.io/the-stakeholder-journey/" rel="noopener noreferrer"&gt;visible path&lt;/a&gt; for someone new to become one of those people. In open source, &lt;strong&gt;we are always building an inheritance&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Someone we may never meet will eventually read the documentation we wrote, encounter the interface we designed, puzzle over the test we left behind, or search through an old issue to understand why the software behaves as it does. That person may never know our name, particularly now in the &lt;a href="https://blog.stdlib.io/ai-and-the-invisible-newcomer-in-open-source/" rel="noopener noreferrer"&gt;age of AI&lt;/a&gt;. But they will encounter our judgment. They will discover whether we anticipated their confusion, whether we respected their time, and whether we left enough of a trail for them to understand the work and make it their own.&lt;/p&gt;

&lt;p&gt;As open-source maintainers in a globally distributed world, so much of our shared life exists in code reviews, chat messages, meeting notes, and the moments when one person takes the time to bring another person into context. A shared purpose is not sustained by a &lt;a href="https://blog.stdlib.io/our-mission/" rel="noopener noreferrer"&gt;mission statement&lt;/a&gt; alone. It is sustained by the small, repeated choices through which we make our knowledge available, make room for others to lead, and ensure that no one has to carry important work entirely alone.&lt;/p&gt;

&lt;p&gt;As engineers, maintainers, designers, project leads, and community leaders, our value is not measured only by what we can accomplish ourselves. It is also measured by what others become able to accomplish because we were here.&lt;/p&gt;

&lt;p&gt;Every project will eventually pass from our hands. Code will be rewritten. Interfaces will change. Roles will change. New people will arrive with ideas that we didn't anticipate.&lt;/p&gt;

&lt;p&gt;That is not a failure of our stewardship. That is its purpose.&lt;/p&gt;

&lt;p&gt;We should strive to build things worth inheriting and to do the quieter work that makes inheritance possible.&lt;/p&gt;

&lt;p&gt;Because the best proof that we mattered may not be that the work still needs us. It may be that, because of how we cared for it, others can carry it farther than we ever could carry it alone.&lt;/p&gt;




&lt;p&gt;
    &lt;em&gt;Athan Reines is a software engineer at &lt;a href="https://quansight.com/" rel="noopener noreferrer"&gt;Quansight&lt;/a&gt; and core developer of &lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;stdlib&lt;/a&gt;.&lt;/em&gt;
&lt;/p&gt;




&lt;p&gt;&lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;stdlib&lt;/a&gt; is an open source software project dedicated to providing a comprehensive suite of robust, high-performance libraries to accelerate your project's development and give you peace of mind knowing that you're depending on expertly crafted, high-quality software.&lt;/p&gt;

&lt;p&gt;If you've enjoyed this post, give us a star 🌟 on &lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and consider &lt;a href="https://opencollective.com/stdlib" rel="noopener noreferrer"&gt;supporting&lt;/a&gt; the project. Your contributions and continued support help ensure the project's long-term success and are greatly appreciated!&lt;/p&gt;

&lt;h2&gt;
  
  
  Acknowledgments
&lt;/h2&gt;

&lt;p&gt;This work was supported in part by the National Science Foundation under &lt;a href="https://www.nsf.gov/awardsearch/showAward?AWD_ID=2449410&amp;amp;HistoricalAwards=false" rel="noopener noreferrer"&gt;Award No. 2449410&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Disclaimer: Any opinions, findings and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the National Science Foundation.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>devrel</category>
      <category>programming</category>
      <category>opensource</category>
    </item>
    <item>
      <title>The Browser Is the Largest Compute Platform on Earth</title>
      <dc:creator>Athan</dc:creator>
      <pubDate>Mon, 20 Jul 2026 15:22:00 +0000</pubDate>
      <link>https://dev.to/stdlib/the-browser-is-the-largest-compute-platform-on-earth-m6k</link>
      <guid>https://dev.to/stdlib/the-browser-is-the-largest-compute-platform-on-earth-m6k</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Modern browsers can run numerical computing, machine learning, and GPU-accelerated workloads locally. Here's why that changes everything.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Billions of browsers are already deployed. We just haven't been using them that way. Think about how most web applications work today: a user interacts with a webpage, that interaction triggers a request to a server somewhere in a data center, the server does the computation, and then the result travels back over the network to display in the browser. This architecture makes sense for many applications, but it introduces latency, requires server infrastructure, and means your data has to leave your device to get anything done.&lt;/p&gt;

&lt;p&gt;There's another approach: modern browsers have become powerful enough to handle serious computational work right on your device. At &lt;a href="https://hpsf2026.sched.com/event/2Ei8u/bringing-complex-computations-to-browsers-with-open-source-gunj-joshi-stdlib" rel="noopener noreferrer"&gt;HPSFCon 2026&lt;/a&gt;, I demonstrated what this looks like in practice: real-time object detection processing webcam feeds, gesture recognition identifying hand signals, and numerical computing operations on large datasets. All of it running entirely in the browser. No servers involved. No network requests. Data never leaves the device.&lt;/p&gt;

&lt;p&gt;This represents a fundamental shift in how we think about computation on the web. For decades, the pattern has been to centralize computation on servers and treat browsers as thin clients that just display results. The early days of computing followed a similar centralization pattern with mainframes like the Z3 and ENIAC. Then came Fortran in the 1950s, which made these machines programmable for scientific work. The development of optimized libraries, such as BLAS in the 1970s and LAPACK in the 1980s, established the foundation for numerical computing that we still use today. Fast forward to now, and we're seeing browsers gain capabilities that were previously only available on servers: the ability to run compiled code efficiently, to leverage graphics hardware for computation, and to execute machine-learning models locally.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F53z62j5uclf6jz3p4jz7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F53z62j5uclf6jz3p4jz7.png" alt="Evolution of computing platforms timeline" width="800" height="322"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Deployment Problem
&lt;/h2&gt;

&lt;p&gt;Traditional deployment follows a simple pattern: client devices send requests over a network to servers, which compute results and send them back. As computations scale, the architecture explodes in complexity. Load balancers, caching layers, cloud storage, and dozens of other components pile on. The infrastructure becomes more sophisticated than the computation itself.&lt;/p&gt;

&lt;p&gt;Consider calculating the absolute value of all elements in an array. The computation is trivial. But, in a client-server architecture, you route it through this entire complex infrastructure. The network round-trip time dwarfs the actual computation time by orders of magnitude.&lt;/p&gt;

&lt;p&gt;This pattern dominates high-performance computing, as well. Supercomputers, GPU clusters, HPC facilities all centralize computation. Users submit jobs through schedulers and wait for results. It works, but centralization is a choice, not a requirement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Distributed Computing Works, Deployment Friction Doesn't
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://foldingathome.org/" rel="noopener noreferrer"&gt;Folding@home&lt;/a&gt; and &lt;a href="https://setiathome.berkeley.edu/" rel="noopener noreferrer"&gt;SETI@home&lt;/a&gt; proved that volunteer computing works at scale. These projects harnessed idle capacity across millions of devices to run molecular simulations and signal analysis. The core insight holds: massive amounts of idle compute capacity sit in devices on desks and in pockets.&lt;/p&gt;

&lt;p&gt;The problem was deployment friction. Users had to explicitly install software, configure their systems, and opt in. That barrier limited adoption to enthusiasts and prevented mainstream use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Browsers Are Already Everywhere
&lt;/h2&gt;

&lt;p&gt;Web browsers exist on billions of devices. They require no installation, no external setup, and run on virtually every computing device made in the last decade. The distributed compute platform already exists.&lt;/p&gt;

&lt;p&gt;Browser-based computation solves real problems. When computation happens locally, data never leaves the device. For medical data, financial analysis, or any sensitive information, this is the only acceptable model. Network round-trips are eliminated, so interactive applications respond immediately instead of waiting on network calls. Each browser instance is a compute node, and the infrastructure is already deployed and maintained. Users don't need to install anything, set up environments, or deal with compatibility issues. They click a URL and the application runs.&lt;/p&gt;

&lt;p&gt;Modern browsers can handle complex computation. The technical foundation is already built.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Technical Foundation
&lt;/h2&gt;

&lt;p&gt;So, what makes browsers capable of running complex computations? Several key technologies have matured over the past few years, transforming browsers from simple document viewers into powerful computing platforms. Let's discuss a few of them.&lt;/p&gt;

&lt;h3&gt;
  
  
  WebAssembly: Running High-Performance Code in the Browser
&lt;/h3&gt;

&lt;p&gt;For years, JavaScript was the only language you could run in a browser. If you had existing code written in C, C++, or Rust—especially performance-critical scientific computing libraries—you couldn't use them on the web. &lt;a href="https://webassembly.org/" rel="noopener noreferrer"&gt;WebAssembly&lt;/a&gt; changed that. It's a portable compilation target that lets you take code written in these languages and run it in the browser at speeds approaching what you'd get running natively on your machine.&lt;/p&gt;

&lt;p&gt;The workflow is straightforward. You start with your source code in C, C++, or Rust, which gets compiled to an intermediate representation (typically LLVM IR, which is a common format many compilers use). That intermediate representation then gets converted to WebAssembly's binary format. The browser downloads this binary and executes it directly. What's particularly powerful here is that the browser handles all the platform-specific details. Whether your user is on an Intel laptop, an ARM-based smartphone, or an Apple Silicon Mac, the same WebAssembly binary works across all of them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foc0zg567iaw4z1fko9fo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foc0zg567iaw4z1fko9fo.png" alt="WebAssembly compilation workflow" width="799" height="274"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  WebGPU: Tapping Into Graphics Hardware for Computation
&lt;/h3&gt;

&lt;p&gt;GPUs (graphics processing units) are exceptionally good at certain types of computation, particularly anything that can be parallelized across many small operations. That's why they're used for graphics rendering, but it's also why they're powerful for scientific computing and machine learning. The problem has always been that GPU programming is vendor-specific. Code you write for an NVIDIA GPU won't work on an Intel GPU or an Apple GPU. Each vendor has their own APIs, their own optimization techniques, their own quirks. This makes it incredibly difficult to write portable GPU-accelerated code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.w3.org/TR/webgpu/" rel="noopener noreferrer"&gt;WebGPU&lt;/a&gt; solves this problem for the web. It provides a single, unified API that works across all GPU vendors. Your application code talks to what WebGPU calls a "logical device," which is an abstraction. The browser then maps that logical device to an adapter for whatever physical GPU the user actually has. That adapter translates your WebGPU calls into the native GPU API (e.g., DirectX, Metal, or Vulkan) and communicates with the driver for that specific hardware. As a developer, you write your code once and it runs on any GPU.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvneqgw8ycdw226ps97t4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvneqgw8ycdw226ps97t4.png" alt="WebGPU architecture" width="800" height="792"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Web Workers: Using Multiple CPU Cores
&lt;/h3&gt;

&lt;p&gt;Modern computers have multiple CPU cores, but JavaScript in the browser traditionally runs on a single thread. That means, even if your laptop has eight cores, your JavaScript code can only use one of them. &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API" rel="noopener noreferrer"&gt;Web Workers&lt;/a&gt; fix this limitation. They let you spawn independent threads that can run computation in parallel across multiple cores. Your main JavaScript thread can hand off computationally intensive work to these workers, which means heavy computation doesn't freeze the user interface. The user can still interact with your application while complex calculations happen in the background.&lt;/p&gt;

&lt;h3&gt;
  
  
  Web Neural Networks: Running AI Models Locally
&lt;/h3&gt;

&lt;p&gt;Most AI-powered applications today work the same way: you send your data to a server, the server runs inference on a machine learning model, and the result comes back. Every query requires a network round-trip. The &lt;a href="https://www.w3.org/TR/webnn/" rel="noopener noreferrer"&gt;Web Neural Network API&lt;/a&gt; enables a different approach: running the model directly in the user's browser.&lt;/p&gt;

&lt;p&gt;This works through a stack of abstractions. Your web application uses a framework such as ONNX Runtime Web, which provides a high-level interface for loading and running models. That framework talks to the WebNN API, which is the browser's standardized interface for neural-network operations. WebNN then routes those operations to whatever hardware acceleration is available on the device. On Windows, that might be DirectML. On macOS or iOS, it's Metal Performance Shaders. On devices with specialized neural processing units (NPUs), WebNN can use those directly. If no hardware acceleration is available, it falls back to running on the CPU or even to cloud-based inference.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhh9axqwo2447hf6hh05a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhh9axqwo2447hf6hh05a.png" alt="Web Neural Network API architecture" width="800" height="543"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What makes this powerful is privacy. When the model runs locally, your queries never leave your device. If you're using an AI-powered photo editor, your photos stay on your machine. If you're using a language model for text editing, your documents stay private. Chrome has built an entire infrastructure around this concept, with APIs specifically designed for common AI tasks and pre-loaded models such as Gemini Nano that applications can use without downloading anything.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg271t8yu8yo99rrcqaqp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg271t8yu8yo99rrcqaqp.png" alt="Chrome's on-device AI architecture" width="800" height="767"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Building the Software Foundation
&lt;/h2&gt;

&lt;p&gt;Having powerful browser capabilities is one thing. Having the software libraries to make those capabilities accessible is another. This is where the ecosystem comes in.&lt;/p&gt;

&lt;p&gt;Think about how scientific computing works in languages such as Python, R, or MATLAB. Researchers don't typically write their own matrix multiplication routines or Fourier transform algorithms. They use high-level functions that hide the complexity. When you call &lt;code&gt;numpy.matmul()&lt;/code&gt; in Python to multiply two matrices, you're not executing Python code for the actual multiplication. &lt;a href="https://numpy.org/" rel="noopener noreferrer"&gt;NumPy&lt;/a&gt; calls down to highly optimized libraries such as BLAS (Basic Linear Algebra Subprograms) and LAPACK (Linear Algebra Package), which are written in Fortran and C and have been optimized over decades. The high-level language provides the interface, the low-level libraries provide the performance.&lt;/p&gt;

&lt;p&gt;This layered architecture is what makes scientific computing practical. Researchers work at a high level of abstraction, but get performance from heavily optimized low-level code. For browser-based computation to be viable for real work, we need the same kind of ecosystem.&lt;/p&gt;

&lt;p&gt;That ecosystem is emerging. &lt;a href="https://www.tensorflow.org/js" rel="noopener noreferrer"&gt;TensorFlow.js&lt;/a&gt; pioneered deep learning on the web by bringing machine learning to the browser with APIs that felt familiar to anyone who's used TensorFlow in Python. &lt;a href="https://huggingface.co/docs/transformers.js" rel="noopener noreferrer"&gt;Transformers.js&lt;/a&gt; builds on the success of TensorFlow.js and leverages the ONNX Runtime to let you load pre-trained language models and run inference locally. &lt;a href="https://ai.google.dev/edge/litert/web" rel="noopener noreferrer"&gt;LiteRT.js&lt;/a&gt; brings Google's cross-platform edge AI runtime to the web, delivering high-performance model inference with WebGPU and WebNN acceleration. &lt;a href="https://stdlib.io" rel="noopener noreferrer"&gt;stdlib&lt;/a&gt; provides the numerical computing foundation: multidimensional arrays, linear algebra routines, statistical functions, and more.&lt;/p&gt;

&lt;p&gt;The Python ecosystem shows how this works at scale. NumPy sits at the foundation, providing arrays and basic operations. On top of NumPy, you have &lt;a href="https://scipy.org/" rel="noopener noreferrer"&gt;SciPy&lt;/a&gt; for more advanced scientific computing, Matplotlib for visualization, pandas for data analysis, scikit-learn for machine learning. Then on top of those, you have domain-specific libraries for astronomy (AstroPy), biology (BioPython), image processing (scikit-image), and countless other fields. Each layer builds on the layer below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faud2sg3mzc0u52zr1b5e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faud2sg3mzc0u52zr1b5e.png" alt="Python scientific computing ecosystem" width="800" height="830"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;JavaScript is following the same pattern. stdlib provides the foundational layer: the basic data structures (e.g., ndarrays for multidimensional arrays), the core numerical algorithms, and bindings to optimized libraries such as BLAS and LAPACK. Above that foundation, you can build technique-specific libraries for particular methods such as optimization or signal processing, domain-specific libraries for particular fields such as finance or biology, and application-specific tools for particular use cases. The structure is remarkably similar to Python's approach, which makes sense because both are solving the same problem: how to build a productive scientific computing environment on top of a high-level language.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz487d5py6nywuztthee5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz487d5py6nywuztthee5.png" alt="JavaScript scientific computing stack" width="799" height="696"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Seeing It Work
&lt;/h2&gt;

&lt;p&gt;All of this technology is real and shipping today. At the conference, I ran several live demonstrations to show what browser-based computation actually looks like in practice.&lt;/p&gt;

&lt;h3&gt;
  
  
  Object Detection with MediaPipe
&lt;/h3&gt;

&lt;p&gt;The first demo used Google's &lt;a href="https://developers.google.com/mediapipe" rel="noopener noreferrer"&gt;MediaPipe&lt;/a&gt; for real-time object detection. I pointed my webcam at the audience, and the browser identified objects in the video feed in real-time. The entire machine learning model was running locally in the browser. No data was being sent to any server. The webcam feed went directly into the model, the model processed each frame, and the browser drew bounding boxes around detected objects. Zero network requests after the initial page load.&lt;/p&gt;

&lt;p&gt;This isn't a toy demo. MediaPipe is a production-quality framework used in real applications. Running it entirely in the browser means instant feedback (no network latency) and complete privacy (your webcam feed never leaves your device).&lt;/p&gt;

&lt;h3&gt;
  
  
  Gesture Recognition
&lt;/h3&gt;

&lt;p&gt;The second demo was gesture recognition. The browser watched my hands through the webcam and identified specific gestures: thumbs up, peace signs, open palms. Again, everything ran locally. The model loaded once when the page opened, and then all the inference happened on my machine. No API calls. No external services. Just a machine-learning model executing in the browser, processing video frames in real-time.&lt;/p&gt;

&lt;p&gt;These demonstrations matter because they're not hypothetical. These are production-quality models running at production-quality speeds, entirely client-side. The technology works today.&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance Benchmarks
&lt;/h2&gt;

&lt;p&gt;Demonstrations are one thing, but quantitative comparisons tell a clearer story. To make the comparison tangible, I built three separate live demos, one for each implementation approach. Each demo takes the same input image and inverts its colors, running the operation 10 times to measure consistent performance. The &lt;a href="https://stdlib-demo-cs-client.vercel.app/" rel="noopener noreferrer"&gt;first&lt;/a&gt; implementation uses traditional client-server architecture: send the image to a server, it processes the image, and then returns the result. The &lt;a href="https://gunjjoshi.github.io/stdlib-demo-pyodide/" rel="noopener noreferrer"&gt;second&lt;/a&gt; runs Python with NumPy in the browser via &lt;a href="https://pyodide.org/" rel="noopener noreferrer"&gt;Pyodide&lt;/a&gt;, which compiles the entire Python runtime to WebAssembly. The &lt;a href="https://gunjjoshi.github.io/stdlib-demo/" rel="noopener noreferrer"&gt;third&lt;/a&gt; uses stdlib for native JavaScript computation. The performance difference is immediately visible: the client-server implementation takes over 2 seconds for 10 iterations, while the browser-based approaches finish in milliseconds.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcnfytszefagbl9s57lvw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcnfytszefagbl9s57lvw.png" alt="Image inversion comparison demo" width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I tested each implementation across different image sizes, from small 100×100 pixel images up to larger 3200×3200 images. The pattern holds across all sizes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7hjoxgyhz6caixyrtr5d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7hjoxgyhz6caixyrtr5d.png" alt="Performance comparison chart" width="799" height="551"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The client-server approach isn't slow because the server is slow. Network round-trip time dwarfs the actual computation time. For a trivial operation, such as inverting image colors, the time spent moving data over the network completely dominates the time spent actually computing. The infrastructure overhead exceeds the computation itself by 300×.&lt;/p&gt;

&lt;p&gt;Pyodide and stdlib both run in the browser, which eliminates network overhead entirely. But even between these two browser-based approaches, there's a significant difference. Native JavaScript (stdlib) outperforms Python-via-WebAssembly (Pyodide) by 4.6×. This makes sense: Pyodide has to run the entire Python interpreter compiled to WebAssembly, which adds overhead. Cross-compiling existing ecosystems to the browser works, and projects such as Pyodide and &lt;a href="https://docs.r-wasm.org/webr/latest/" rel="noopener noreferrer"&gt;WebR&lt;/a&gt; bring valuable tools to the web. But native browser-based libraries deliver better performance by avoiding that interpreter overhead.&lt;/p&gt;

&lt;p&gt;The chart shows another important pattern: as image dimensions increase, the performance gap between client-server and browser-based approaches widens. For small images, network overhead is a fixed cost. For larger images, you're paying both the network cost and the cost of moving more data. Browser-based computation scales better because there's no network involved.&lt;/p&gt;

&lt;h2&gt;
  
  
  Python and R in the Browser
&lt;/h2&gt;

&lt;p&gt;Python and R now run in browsers through impressive engineering efforts. Pyodide brings Python, including NumPy and SciPy, to the browser by compiling the entire Python runtime to WebAssembly. WebR does the same for R. These projects make established ecosystems available on the web, which means researchers can use familiar tools without changing their workflow.&lt;/p&gt;

&lt;p&gt;The tradeoff is performance. These projects compile interpreters to WebAssembly and run them in the browser, which adds overhead. The alternative is writing directly in JavaScript using libraries like stdlib that provide the same numerical primitives as NumPy or SciPy. Both approaches work. Compiled runtimes leverage decades of existing code and let people use tools they already know. Native JavaScript avoids interpreter overhead and delivers better performance for new projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Deployment Shifts to the Browser
&lt;/h2&gt;

&lt;p&gt;AI model deployment changes fundamentally when you move inference to the browser. The training pipeline stays exactly the same: train on GPU clusters, supercomputers, wherever you train today. But deployment changes completely. Instead of deploying models to cloud servers where users send queries over the network, you load the model into the user's browser once. After that initial load, users query a local model, not a remote API.&lt;/p&gt;

&lt;p&gt;This shift delivers concrete benefits. Queries never leave the device, which means complete data privacy. There's no network round-trip, which means low latency for every inference. You don't need to run massive inference servers, which means reduced infrastructure costs. Training infrastructure stays the same, but deployment becomes radically simpler and completely privacy-preserving.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where This Goes
&lt;/h2&gt;

&lt;p&gt;JavaScript has closed the gap for numerical computing. WebAssembly brings near-native performance for compiled languages. WebGPU provides hardware-agnostic GPU acceleration. Web Workers enable true parallelism across CPU cores. WebAI and the Web Neural Network API make on-device inference practical. These aren't experimental features. They're shipping in production browsers today.&lt;/p&gt;

&lt;p&gt;The ecosystem is developing rapidly. &lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;stdlib&lt;/a&gt; provides the numerical computing foundation. Higher-level, domain-specific libraries will follow the same pattern we've seen in Python, building on these foundational tools to solve specific problems.&lt;/p&gt;

&lt;p&gt;Browsers will become the default platform for privacy-sensitive applications where data cannot leave the device. They're ideal for interactive tools where latency matters and network round-trips kill the user experience. Educational platforms benefit from zero-friction deployment: students click a link and the application runs, no installation required. Edge computing scenarios where connectivity is intermittent or expensive make browser-based computation the obvious choice.&lt;/p&gt;

&lt;p&gt;Computation is moving from servers to browsers. Not as a replacement for all server-side compute, but as the superior model for specific use cases. The infrastructure is already deployed. Billions of browsers are waiting to compute. You can explore stdlib on &lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;, join the conversation on &lt;a href="https://stdlib.zulipchat.com" rel="noopener noreferrer"&gt;Zulip&lt;/a&gt;, or watch the &lt;a href="https://youtu.be/rox9LZz_ffI" rel="noopener noreferrer"&gt;full HPSFCon 2026 talk&lt;/a&gt; for more details on browser-based scientific computing.&lt;/p&gt;




&lt;p&gt;
    &lt;em&gt;Gunj Joshi is a core developer of &lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;stdlib&lt;/a&gt;, a JavaScript library for numerical and scientific computing.&lt;/em&gt;
&lt;/p&gt;




&lt;p&gt;&lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;stdlib&lt;/a&gt; is an open source software project dedicated to providing a comprehensive suite of robust, high-performance libraries to accelerate your project's development and give you peace of mind knowing that you're depending on expertly crafted, high-quality software.&lt;/p&gt;

&lt;p&gt;If you've enjoyed this post, give us a star 🌟 on &lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and consider &lt;a href="https://opencollective.com/stdlib" rel="noopener noreferrer"&gt;supporting&lt;/a&gt; the project. Your contributions and continued support help ensure the project's long-term success and are greatly appreciated!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>programming</category>
      <category>opensource</category>
    </item>
    <item>
      <title>The Stakeholder Journey: From User to Contributor</title>
      <dc:creator>Athan</dc:creator>
      <pubDate>Wed, 08 Jul 2026 09:34:49 +0000</pubDate>
      <link>https://dev.to/stdlib/the-stakeholder-journey-from-user-to-contributor-1jdc</link>
      <guid>https://dev.to/stdlib/the-stakeholder-journey-from-user-to-contributor-1jdc</guid>
      <description>&lt;p&gt;This is the third post in a series on the tools we picked up during I-Corps training, part of the NSF's Pathways for Open-Source Ecosystems (POSE) program. &lt;a href="https://blog.stdlib.io/open-source-ecosystem-canvas/" rel="noopener noreferrer"&gt;The Open-Source Ecosystem Canvas&lt;/a&gt; and &lt;a href="https://blog.stdlib.io/mapping-your-ecosystem-and-its-saboteurs/" rel="noopener noreferrer"&gt;the Ecosystem and Stakeholder Map&lt;/a&gt; both ended on the same question—&lt;em&gt;what does it actually take to keep a project alive?&lt;/em&gt;—and on the observation that the passive window we used to watch our communities through is narrowing. This tool is about looking on purpose instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the journey is
&lt;/h2&gt;

&lt;p&gt;The third tool is the &lt;strong&gt;Stakeholder Journey&lt;/strong&gt;, taught to us by &lt;a href="https://www.linkedin.com/in/betsypeters/" rel="noopener noreferrer"&gt;Betsy Peters&lt;/a&gt; as part of the go-to-market module of POSE. It maps the path a person takes from never having heard of your project to being one of the people who sustains and leads it:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Discovery → Acquisition → Activation → First Impact → Habit → Commitment → Ecosystem Leadership.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F56mka4rg1d9db6e7elt1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F56mka4rg1d9db6e7elt1.png" alt="The Stakeholder Journey as a left-to-right bowtie through seven stages—Discovery, Acquisition, Activation, First Impact, Habit, Commitment, and Ecosystem Leadership—with each stage paired with a stakeholder voice quote. First Impact sits at the center as the narrow pinch point where the two funnels meet. Adapted from Betsy Peters, NSF I-Corps POSE program." width="799" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most projects, when they think about onboarding at all, think about the left side. &lt;em&gt;Discovery&lt;/em&gt; is whether your project shows up—in search, in a tutorial, in a coworker's recommendation, in an AI's suggested package. &lt;em&gt;Acquisition&lt;/em&gt; is whether someone reaches it: installs it, opens the docs, clones the repo. &lt;em&gt;Activation&lt;/em&gt; is whether they get past the first wall—the README works, the install command runs, the example does what it promised.&lt;/p&gt;

&lt;p&gt;These are the things engineering teams instinctively optimize for. They're also where most projects stop. &lt;em&gt;We made it easier to install. We rewrote the getting-started guide. We added a Colab badge.&lt;/em&gt; All of that work matters. It's not enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  First Impact is the pinch point
&lt;/h2&gt;

&lt;p&gt;The pinch point at the center is &lt;strong&gt;First Impact&lt;/strong&gt;—the moment when a person can say &lt;em&gt;this thing helped me achieve a goal I actually had.&lt;/em&gt; Not "I got it running," but "it did the thing I came here to do." Without First Impact, nobody moves any further to the right. Everything downstream is gated by it. A project can have a beautiful README and a flawless install and still fail at First Impact, because the person came looking for a result, not a successful build.&lt;/p&gt;

&lt;p&gt;The right side of the journey is what you're actually building toward. The left—Discovery, Acquisition, Activation—is about volume and lowering friction. The right is about depth, repeat use, and the people who eventually keep the project alive. And the right side is where the open-source-specific problem hides.&lt;/p&gt;

&lt;p&gt;Everything up to Habit used to be relational by accident. To get the install to work, the example to do the thing, the edge case to resolve, you had to look in someone's docs, read someone else's post about hitting the same wall, maybe venture into the somewhat hostile waters of Stack Overflow. None of that was billed as community engagement. It was the cost of getting the thing to work. But every step put you in proximity to other people's care—the maintainer who wrote the doc, the contributor who answered the question three years ago, the stranger who took your duplicate question seriously enough to point you somewhere. The community wasn't somewhere you went; it was somewhere you passed through to get to the thing you came for. AI dissolves the passage. The install still has to run, the example still has to do the thing—but you can now clear those walls without ever touching the artifacts of care that used to do the introducing. &lt;a href="https://blog.stdlib.io/ai-and-the-invisible-newcomer-in-open-source/" rel="noopener noreferrer"&gt;AI and the Invisible Newcomer in Open Source&lt;/a&gt; was about what we didn't know we were relying on until it was gone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Habit&lt;/strong&gt; is the territory of repeat use—the project becomes a default, a known quantity in someone's toolchain. This can still happen passively. People settle into tools because the tool works and they don't have to think about it. &lt;em&gt;Someone finds your project, uses it, relies on it—and you may never know they exist.&lt;/em&gt; Habit users have never been fully visible—plenty went unseen even when public friction was the norm—but the passive window &lt;a href="https://blog.stdlib.io/mapping-your-ecosystem-and-its-saboteurs/" rel="noopener noreferrer"&gt;the Ecosystem and Stakeholder Map&lt;/a&gt; named used to make more of them visible than it does now, if not to maintainers then to each other. That visibility to each other matters: people who can see others engaged at the same stage recognize themselves as part of something larger, and what you help build feels worth more than what you just consume.&lt;sup id="fnref1"&gt;1&lt;/sup&gt; AI absorbs the friction that produced that visibility, which means projects at the Habit stage increasingly have plenty of repeat users and no idea who they are.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Commitment&lt;/strong&gt; is different. Commitment is a crossing—the moment a person stops being a user and starts being someone who tends to the project. They file the issue. They open the PR. They answer somebody else's question. They show up to the call. (Past it lies one more stage, &lt;strong&gt;Ecosystem Leadership&lt;/strong&gt;—the people willing to help steward the whole thing—but Commitment is the crossing everything hinges on.) The transition from Habit to Commitment is the one that has never happened by itself, and it has gotten harder, not easier, as Habit has grown less visible.&lt;/p&gt;

&lt;p&gt;The three conditions that have to be true for someone to make that crossing are uncomfortably soft to talk about, and they matter anyway: people have to feel seen and valued; they need an authentic connection inside the project, not just awareness of it; and they have to participate in creation, not just consumption—to feel like they helped shape something, not only consume it.&lt;/p&gt;

&lt;p&gt;None of those happen on their own. Discovery through Habit can be a passive flow. Commitment isn't.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnxq7nsbcqj83q6clzpzl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnxq7nsbcqj83q6clzpzl.png" alt="The Stakeholder Journey as a left-to-right bowtie through seven stages—Discovery, Acquisition, Activation, First Impact, Habit, Commitment, and Ecosystem Leadership—with each stage paired with a stakeholder voice quote. First Impact sits at the center as the narrow pinch point where the two funnels meet. Commitment and Ecosystem Leadership are highlighted in yellow to mark where the open-source-specific relational challenge concentrates." width="799" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Who does the inviting
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://blog.stdlib.io/ai-and-the-invisible-newcomer-in-open-source/" rel="noopener noreferrer"&gt;AI and the Invisible Newcomer in Open Source&lt;/a&gt; landed on invitation: that crossing into a community almost never happens by accident, and that there's usually a person with standing who reaches out and makes it personal. The journey is where you can see exactly what that act does. Invitation is the force at the Commitment crossing—the one transition no amount of passive flow will carry someone across.&lt;/p&gt;

&lt;p&gt;Among the people we interviewed who'd already crossed that chasm—the maintainers, the stewards—the story came back the same shape. Nobody starts their open-source journey with a grand plan to maintain a project. You stumble in. You find something that works. You stick around because it keeps working. You read an issue, then another. You answer one question. Somewhere along the way, almost without noticing, you're doing it because the work itself matters to you. That shift—from user to contributor, from consumer to caretaker—doesn't happen by accident. There has to be someone with standing already inside the community who reaches out, who makes it personal, who says: &lt;em&gt;we see you, and there's a place for you here.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So who does the inviting?&lt;/p&gt;

&lt;p&gt;The people in the inner rings. The scaffold &lt;a href="https://blog.stdlib.io/ai-and-the-invisible-newcomer-in-open-source/" rel="noopener noreferrer"&gt;AI and the Invisible Newcomer in Open Source&lt;/a&gt; laid out—old-timers at the center, casual visitors at the outermost edge, a labeled trajectory pulling inward through intermediate roles—describes how any community works, and it pins down where the inviting has to come from. The people whose attention pulls that trajectory are the ones with the standing to do it. It's the same point the communities-of-practice literature has made for decades&lt;sup id="fnref2"&gt;2&lt;/sup&gt;—that the journey from periphery to center is a social one, needing paths and people willing to guide—but the journey map is where you can finally put your finger on the step it happens at.&lt;/p&gt;

&lt;p&gt;But "the inner rings do the inviting" hides a more specific mechanism. Invitation from the center—the maintainer who reaches out, the steward who notices—is rare and high-signal and doesn't scale. The daily work of pulling someone inward, the work that makes the next step look like a step rather than a leap, is done by the person &lt;em&gt;one&lt;/em&gt; ring ahead of them. The trajectory the figure draws as a single arrow from edge to center is, in practice, a relay of short pulls. The near-peer who just crossed the same threshold is a better guide than the expert who crossed it years ago—not because they know more, but because they can still see where it was hard.&lt;sup id="fnref3"&gt;3&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;That mechanism needs density. A community where the next ring is visibly populated—where someone at Habit can see other people doing what Commitment looks like—can pull contributors along it. A community where the rings are sparse can't. The path doesn't close; it stops being visible from where most people are standing. Recent empirical work on aging OSS projects finds that sustained substantive engagement is what keeps the trajectory functioning over time, while passive attention loses its predictive power as a project ages.&lt;sup id="fnref4"&gt;4&lt;/sup&gt; The failure mode is quiet: the dashboards stay green; the path just stops being navigable.&lt;/p&gt;

&lt;p&gt;Invitation is how the trajectory begins. Belonging is what carries it forward. And belonging—not a tutorial, not your &lt;code&gt;CONTRIBUTING.md&lt;/code&gt;—is what turns a user into a contributor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three questions for every project
&lt;/h2&gt;

&lt;p&gt;If there's a single way to summarize what the canvas, the map, and the journey are for, it's that they make three questions impossible to leave unanswered.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Have you mapped your ecosystem—including the saboteurs?&lt;/strong&gt; Or are you assuming you already know who's in your world? Most projects know their power users by name and their critics by reputation, but can't actually draw the network of incentives around them. The map exists because the people you haven't named are still acting on your project—funders, competitors, downstream maintainers, model providers, the people quietly recommending a different library in every Slack you can't see. If you can't see them, you can't steer around them, and they will steer anyway.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Are you designing your contributor pipeline—or assuming it will appear?&lt;/strong&gt; It used to appear on its own—the byproduct of public friction that &lt;a href="https://blog.stdlib.io/ai-and-the-invisible-newcomer-in-open-source/" rel="noopener noreferrer"&gt;AI and the Invisible Newcomer in Open Source&lt;/a&gt; was about, and the one that's weakening. Designed programs help, but they aren't a substitute: even Google Summer of Code, about as structured an onramp as open source has, sees only around 45% of true newcomers&lt;sup id="fnref5"&gt;5&lt;/sup&gt; who keep contributing after the program ends, and most never arrived intending to become maintainers in the first place.&lt;sup id="fnref6"&gt;6&lt;/sup&gt; So, if you want a next generation of people who can run your project after you, the activities friction used to produce for free have to be built on purpose now: invitation, mentorship, and a path from user to contributor to maintainer with visible, named rungs that people know exist and can actually reach for. Mentorship in particular has more measurable shape than it usually gets credit for: in the most thorough study to date&lt;sup id="fnref7"&gt;7&lt;/sup&gt; of mentors in Google Summer of Code, Tan and colleagues find that the heaviest load falls in proposal evaluation and the first weeks of onboarding—phases you can design around once you know they're the binding ones.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Is your community built for survivorship?&lt;/strong&gt; Not just for how things worked before. The shape of the world a project's community grew up in is not the shape of the world the next one will. The question isn't whether the old onramps are still working; it's whether you've designed onramps that still work when the old ones don't.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The reason to ask these isn't to add another set of metrics to a dashboard. It's because the projects that will still matter in ten years—the ones that are still vibrant and alive—will be the ones where someone chose to tend to the community with the same rigor they brought to the code.&lt;/p&gt;

&lt;p&gt;The code is the part that's easy to measure. The community is the part that decides whether the code still matters.&lt;/p&gt;




&lt;p&gt;
    &lt;em&gt;Mara Averick is a developer advocate at &lt;a href="https://quansight.com/" rel="noopener noreferrer"&gt;Quansight&lt;/a&gt; and contributor experience lead for &lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;stdlib&lt;/a&gt;.&lt;/em&gt;
&lt;/p&gt;




&lt;p&gt;&lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;stdlib&lt;/a&gt; is an open source software project dedicated to providing a comprehensive suite of robust, high-performance libraries to accelerate your project's development and give you peace of mind knowing that you're depending on expertly crafted, high-quality software.&lt;/p&gt;

&lt;p&gt;If you've enjoyed this post, give us a star 🌟 on &lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and consider &lt;a href="https://opencollective.com/stdlib" rel="noopener noreferrer"&gt;supporting&lt;/a&gt; the project. Your contributions and continued support help ensure the project's long-term success and are greatly appreciated!&lt;/p&gt;

&lt;h2&gt;
  
  
  Acknowledgments
&lt;/h2&gt;

&lt;p&gt;This work was supported in part by the National Science Foundation under &lt;a href="https://www.nsf.gov/awardsearch/showAward?AWD_ID=2449410&amp;amp;HistoricalAwards=false" rel="noopener noreferrer"&gt;Award No. 2449410&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Disclaimer: Any opinions, findings and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the National Science Foundation.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;Strayhorn, T. L. (2018). &lt;em&gt;College students' sense of belonging: A key to educational success for all students&lt;/em&gt; (2nd ed.). Routledge. &lt;a href="https://doi.org/10.4324/9781315297293" rel="noopener noreferrer"&gt;https://doi.org/10.4324/9781315297293&lt;/a&gt;&amp;nbsp;↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn2"&gt;
&lt;p&gt;Sholler, D., Steinmacher, I., Ford, D., Averick, M., Hoye, M., &amp;amp; Wilson, G. (2019). Ten simple rules for helping newcomers become contributors to open projects. &lt;em&gt;PLOS Computational Biology&lt;/em&gt;, 15(9): e1007296. &lt;a href="https://doi.org/10.1371/journal.pcbi.1007296" rel="noopener noreferrer"&gt;https://doi.org/10.1371/journal.pcbi.1007296&lt;/a&gt;&amp;nbsp;↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn3"&gt;
&lt;p&gt;On the curse of expertise—the structural blind-spot experts develop about what was hard for them years ago: Hinds, P. J. (1999). The curse of expertise: The effects of expertise and debiasing methods on prediction of novice performance. &lt;em&gt;Journal of Experimental Psychology: Applied&lt;/em&gt;, 5(2), 205–221. &lt;a href="https://doi.org/10.1037/1076-898X.5.2.205" rel="noopener noreferrer"&gt;https://doi.org/10.1037/1076-898X.5.2.205&lt;/a&gt;. See also Nathan, M. J., &amp;amp; Petrosino, A. (2003). Expert blind spot among preservice teachers. &lt;em&gt;American Educational Research Journal&lt;/em&gt;, 40(4), 905–928. &lt;a href="https://doi.org/10.3102/00028312040004905" rel="noopener noreferrer"&gt;https://doi.org/10.3102/00028312040004905&lt;/a&gt;.&amp;nbsp;↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn4"&gt;
&lt;p&gt;Kaushik, M., &amp;amp; Chahal, K. K. (2026). Community engagement and the lifespan of open-source software projects. &lt;em&gt;Information and Software Technology&lt;/em&gt;. &lt;a href="https://doi.org/10.1016/j.infsof.2025.107914" rel="noopener noreferrer"&gt;https://doi.org/10.1016/j.infsof.2025.107914&lt;/a&gt; — sustained substantive participation keeps aging projects alive; passive attention loses predictive power as a project ages. Companion death-spiral dynamics paper: Kaushik, M., &amp;amp; Chahal, K. K. (2026). The death spiral of open source projects: A post-mortem analysis of pull request workflow dynamics. &lt;em&gt;Journal of Systems and Software&lt;/em&gt;, 240, 112942. &lt;a href="https://doi.org/10.1016/j.jss.2026.112942" rel="noopener noreferrer"&gt;https://doi.org/10.1016/j.jss.2026.112942&lt;/a&gt;.&amp;nbsp;↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn5"&gt;
&lt;p&gt;Silva, J. O. dos, Wiese, I., German, D. M., Steinmacher, I., &amp;amp; Gerosa, M. A. (2017). How long and how much: What to expect from Summer of Code participants? &lt;em&gt;ICSME 2017.&lt;/em&gt; &lt;a href="https://doi.org/10.1109/ICSME.2017.81" rel="noopener noreferrer"&gt;https://doi.org/10.1109/ICSME.2017.81&lt;/a&gt;&amp;nbsp;↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn6"&gt;
&lt;p&gt;Silva, J. O., Wiese, I., German, D. M., Treude, C., Gerosa, M. A., &amp;amp; Steinmacher, I. (2020). Google Summer of Code: Student motivations and contributions. &lt;em&gt;Journal of Systems and Software&lt;/em&gt;, 162, 110487. &lt;a href="https://doi.org/10.1016/j.jss.2019.110487" rel="noopener noreferrer"&gt;https://doi.org/10.1016/j.jss.2019.110487&lt;/a&gt; — surveys of 141 students and 53 mentors plus ten confirmatory interviews found most students enter GSoC seeking an enriching experience or skill development, not long-term project membership.&amp;nbsp;↩&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn7"&gt;
&lt;p&gt;Tan, X., Zhou, M., &amp;amp; Zhang, L. (2023). Understanding mentors' engagement in OSS communities via Google Summer of Code. &lt;em&gt;IEEE Transactions on Software Engineering&lt;/em&gt;, 49(5), 3106–3130. &lt;a href="https://doi.org/10.1109/TSE.2023.3242415" rel="noopener noreferrer"&gt;https://doi.org/10.1109/TSE.2023.3242415&lt;/a&gt;; they catalog 41 distinct challenges and 52 strategies across all phases.&amp;nbsp;↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>opensource</category>
      <category>javascript</category>
      <category>devrel</category>
      <category>programming</category>
    </item>
    <item>
      <title>Mapping Your Ecosystem (and Its Saboteurs)</title>
      <dc:creator>Athan</dc:creator>
      <pubDate>Sat, 27 Jun 2026 08:26:42 +0000</pubDate>
      <link>https://dev.to/stdlib/mapping-your-ecosystem-and-its-saboteurs-4206</link>
      <guid>https://dev.to/stdlib/mapping-your-ecosystem-and-its-saboteurs-4206</guid>
      <description>&lt;p&gt;This is the second post in a series on the tools we picked up during I-Corps training, part of the NSF's POSE (Pathways to Enable Open-Source Ecosystems) program. The &lt;a href="https://blog.stdlib.io/open-source-ecosystem-canvas/" rel="noopener noreferrer"&gt;first post&lt;/a&gt; covered the Open-Source Ecosystem Canvas—who you're building for, what it takes, and how you sustain it. This one is about drawing the network those answers live inside.&lt;/p&gt;

&lt;p&gt;The map changes as you learn. Like the canvas, it surfaces the assumptions you didn't know you were making.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the map is
&lt;/h2&gt;

&lt;p&gt;The tool is the &lt;strong&gt;Ecosystem and Stakeholder Map&lt;/strong&gt;. Your project doesn't operate in a silo; the map simplifies the world around it enough to look at. The first thing it asks you to do is something surprisingly difficult: name everyone who is in your world.&lt;/p&gt;

&lt;p&gt;Not just your users.&lt;/p&gt;

&lt;p&gt;Not just your contributors.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Everyone.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Our map has a box labeled "Saboteurs"—a category the I-Corps program asks every team to fill in. The label is sharper than the function. In the framing, "saboteurs" is one of six stakeholder categories (among them competitors, partners, users, contributors, and influencers), not a class of villains.&lt;/p&gt;

&lt;p&gt;Many of the people in it are friends and colleagues whose work is good and valuable, and we're not trying to deny that. The point of the box is closer to &lt;em&gt;what else is around here that could take our place.&lt;/em&gt; These are the projects and people who inform what we do—who could plausibly substitute for us, who is shaping the conversation around what we build. Knowing how you fit in that competitive landscape is how you figure out where your project adds value. Leave the box blank and you lose your read on where you stand, and on what it will take to keep standing there. And the box isn't hypothetical: of our hundred-odd interviews, fourteen were with people who belonged in it—alongside industry and academic users, contributors, downstream adopters, and funders.&lt;/p&gt;

&lt;p&gt;And not every saboteur is a competitor. One of this year's CHI papers names a different kind—"Invisible Saboteurs"&lt;sup&gt;1&lt;/sup&gt;—high-sycophancy LLMs that made users &lt;em&gt;less&lt;/em&gt; likely to correct their misconceptions, with a majority unable to detect that AI was being agreeable. The most consequential saboteur in your ecosystem may not be another project at all. It may be a tool that agrees with everyone, including your newest contributor, at the moment they're forming the wrong mental model.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frdtjjh49akhtang5q9it.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frdtjjh49akhtang5q9it.png" alt="stdlib's ecosystem and stakeholder map: the OSS product at center-left with five stakeholder clusters around it—Saboteurs, Funders (direct and indirect), Users (industry and academia), a Contributors pipeline (new contributors through summer internships and recurring contributors into core contributors, with emeritus deliberately outside the boundary), and a Technical Steering Committee. Labeled arrows show value flows: software and docs, funding, influence, governance, learning and reputation (OSS product to contributors), and a trust arc spanning the contributor lifecycle with mentoring and belonging arrows running back from core contributors to earlier stages. Small tallies in each card record I-Corps interview counts per segment." width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One small discipline that pays off here: map people before organizations, and notice your blind spots. The world your project sits in is bigger than the people you already know to name. The segments where you can only name one or two—or none—are where your understanding is thinnest and your confidence is least earned. They're also where opportunities tend to hide.&lt;/p&gt;

&lt;h2&gt;
  
  
  The arrows matter as much as the nodes
&lt;/h2&gt;

&lt;p&gt;The map isn't only a roster of who's there. It's a steering tool: arrows show how value flows. Where it comes from, where it goes, where it leaks.&lt;/p&gt;

&lt;p&gt;We tend to talk about open-source value in concrete terms. The software is free. The tooling saves time. The license costs nothing. Those are real, and they belong on the map. But there's a less tangible current, too: &lt;strong&gt;reputation and belonging&lt;/strong&gt;. Standing. The regard of people whose regard means something.&lt;/p&gt;

&lt;p&gt;That's always mattered. It matters more now. As AI makes writing code faster and cheaper, the thing that doesn't get cheaper is trust—because trust requires a real other with the standing to withhold it. A system engineered to validate you can satisfy the &lt;em&gt;form&lt;/em&gt; of recognition without the &lt;em&gt;substance&lt;/em&gt;&lt;sup&gt;2&lt;/sup&gt;; a friend whose approval costs them nothing isn't really a friend&lt;sup&gt;3&lt;/sup&gt;. When you weigh in on a decision, people listen—not because of your commit count, but because of what you've earned in the community over time. &lt;em&gt;That is a value proposition.&lt;/em&gt; It belongs on your map alongside the funding arrows.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the canvas and the map are both asking
&lt;/h2&gt;

&lt;p&gt;Both are asking the same question.&lt;/p&gt;

&lt;p&gt;What does it actually take to keep an open-source community alive?&lt;/p&gt;

&lt;p&gt;Part of the answer turns on a distinction that's easy to miss. Your &lt;em&gt;code&lt;/em&gt; can be copied, distributed, and shared without being depleted—if anything, it grows in value the more it's shared. Your &lt;em&gt;community&lt;/em&gt; is the opposite. Time, attention, and trust are finite, spent in the giving, and not replenished automatically—which is why burnout is a resource-depletion problem. The code can largely sustain itself. The community has to be designed. The code is free; the community isn't.&lt;/p&gt;

&lt;p&gt;That's why the honest answer to what it takes has three levels, and most projects only think seriously about the first one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Level 1 is code.&lt;/strong&gt; Does it run. Does it build. Are the tests green. Is the dependency graph manageable. This is the level that maintainers are trained to think about, that funders understand, that GitHub measures for you. Almost every "sustainability" conversation in open source starts and ends here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Level 2 is governance.&lt;/strong&gt; Who decides. How decisions get made. What happens when the founder steps back, or burns out, or moves on. Whether there's a process for contention that doesn't depend on a single person being in the room. Some projects take this seriously; many don't, and by the time they need to, the people who would have done the work have already left.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Level 3 is community.&lt;/strong&gt; Who actually shows up. Whether new people are arriving, and whether the people already there are staying. Whether the project has a story about itself that someone could find their way into. This is where projects die—not when the code breaks, but when nobody's left who cares enough to fix it. The empirical record on project abandonment bears this out. A post-mortem of 104 deprecated GitHub projects found the recurring failure modes were community-side, not code-side: loss of the lead maintainer, lack of time or interest from main contributors, displacement by a competitor &lt;sup&gt;4&lt;/sup&gt;. The live-project picture mirrors this: in a study of nearly 34,000 active GitHub repos, what predicted longevity wasn't stars, watchers, or workflow efficiency but active community engagement on issues—and that predictive power &lt;em&gt;intensifies&lt;/em&gt; as projects age &lt;sup&gt;5&lt;/sup&gt;. Both are proxies—measuring issue activity and deprecation events, not the sense of belonging that actually keeps a community alive. But anyone who's worked in one knows the research is pointing at the right wall.&lt;/p&gt;

&lt;p&gt;The asymmetry matters here. AI is good at producing the artifact and bad at producing the attachment, because attachment is a byproduct of the labor AI removes. The merged PR, the answered question, the completed exercise can all look identical whether a person grew through them or skipped them—and the difference, invisible on the artifact graph, is the entire ballgame for whether your community has a next generation.&lt;/p&gt;

&lt;p&gt;For a long time, Level 3 had a window we could look through without thinking about it. Stack Overflow. GitHub issues. Mailing lists. Forum threads. We could see—passively, almost automatically—whether the community was still there, because people kept showing up to ask questions in public.&lt;/p&gt;

&lt;p&gt;That's the window &lt;a href="https://blog.stdlib.io/ai-and-the-invisible-newcomer-in-open-source/" rel="noopener noreferrer"&gt;&lt;em&gt;AI and the Invisible Newcomer in Open Source&lt;/em&gt;&lt;/a&gt; was about. It's narrowing.&lt;/p&gt;

&lt;p&gt;The point of what comes next isn't to mourn the window. It's to notice that if the passive view is gone, the active one has to be designed. What used to happen by accident is now deliberate work. That's the Stakeholder Journey, which I will discuss in the next post in this series.&lt;/p&gt;

&lt;h2&gt;
  
  
  Notes
&lt;/h2&gt;

&lt;p id="fn-1"&gt;1. Bo, J. Y., Kazemitabaar, M., Deng, M., Inzlicht, M., &amp;amp; Anderson, A. (2026). Invisible saboteurs: Sycophantic LLMs mislead novices in problem-solving tasks. In &lt;em&gt;CHI '26: Proceedings of the 2026 CHI Conference on Human Factors in Computing Systems&lt;/em&gt;. &lt;a href="https://doi.org/10.1145/3772318.3791365" rel="noopener noreferrer"&gt;https://doi.org/10.1145/3772318.3791365&lt;/a&gt;&lt;/p&gt;

&lt;p id="fn-2"&gt;2. Jacobs, K. A. (2024). Digital loneliness—Changes of social recognition through AI companions. &lt;em&gt;Frontiers in Digital Health&lt;/em&gt;, 6, 1281037. &lt;a href="https://doi.org/10.3389/fdgth.2024.1281037" rel="noopener noreferrer"&gt;https://doi.org/10.3389/fdgth.2024.1281037&lt;/a&gt;&lt;/p&gt;

&lt;p id="fn-3"&gt;3. Sparrow, R., &amp;amp; Brown, J. (2026). Against imaginary friends: Why digital companions are no solution to social isolation. &lt;em&gt;Communications of the ACM&lt;/em&gt;, 69(2), 60–68. &lt;a href="https://doi.org/10.1145/3750037" rel="noopener noreferrer"&gt;https://doi.org/10.1145/3750037&lt;/a&gt;&lt;/p&gt;

&lt;p id="fn-4"&gt;4. Coelho, J., &amp;amp; Valente, M. T. (2017). Why modern open source projects fail. In &lt;em&gt;Proceedings of the 2017 11th Joint Meeting on Foundations of Software Engineering (ESEC/FSE 2017)&lt;/em&gt; (pp. 186–196). &lt;a href="https://doi.org/10.1145/3106237.3106246" rel="noopener noreferrer"&gt;https://doi.org/10.1145/3106237.3106246&lt;/a&gt;&lt;/p&gt;

&lt;p id="fn-5"&gt;5. Kaushik, M., &amp;amp; Chahal, K. K. (2026). Community engagement and the lifespan of open-source software projects. &lt;em&gt;Information and Software Technology&lt;/em&gt;. &lt;a href="https://doi.org/10.1016/j.infsof.2025.107914" rel="noopener noreferrer"&gt;https://doi.org/10.1016/j.infsof.2025.107914&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;
    &lt;em&gt;Mara Averick is a developer advocate at &lt;a href="https://quansight.com/" rel="noopener noreferrer"&gt;Quansight&lt;/a&gt; and contributor experience lead for &lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;stdlib&lt;/a&gt;.&lt;/em&gt;
&lt;/p&gt;




&lt;p&gt;&lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;stdlib&lt;/a&gt; is an open source software project dedicated to providing a comprehensive suite of robust, high-performance libraries to accelerate your project's development and give you peace of mind knowing that you're depending on expertly crafted, high-quality software.&lt;/p&gt;

&lt;p&gt;If you've enjoyed this post, give us a star 🌟 on &lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and consider &lt;a href="https://opencollective.com/stdlib" rel="noopener noreferrer"&gt;supporting&lt;/a&gt; the project. Your contributions and continued support help ensure the project's long-term success and are greatly appreciated!&lt;/p&gt;

&lt;h2&gt;
  
  
  Acknowledgments
&lt;/h2&gt;

&lt;p&gt;This work was supported in part by the National Science Foundation under &lt;a href="https://www.nsf.gov/awardsearch/showAward?AWD_ID=2449410&amp;amp;HistoricalAwards=false" rel="noopener noreferrer"&gt;Award No. 2449410&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Disclaimer: Any opinions, findings and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the National Science Foundation.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>devrel</category>
      <category>javascript</category>
      <category>programming</category>
      <category>opensource</category>
    </item>
    <item>
      <title>The Open-Source Ecosystem Canvas</title>
      <dc:creator>Athan</dc:creator>
      <pubDate>Wed, 17 Jun 2026 15:00:00 +0000</pubDate>
      <link>https://dev.to/stdlib/the-open-source-ecosystem-canvas-156n</link>
      <guid>https://dev.to/stdlib/the-open-source-ecosystem-canvas-156n</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;An ecosystem canvas makes an open-source project say who it's really for. Here's what ours surfaced about stdlib's value propositions for contributors and users—and why they're not the same.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is the first in a series of posts on the tools we picked up during I-Corps training—part of the NSF's POSE (Pathways to Enable Open-Source Ecosystems) program—and what each one showed us about &lt;a href="https://stdlib.io" rel="noopener noreferrer"&gt;stdlib&lt;/a&gt;'s ecosystem. It picks up where &lt;a href="https://blog.stdlib.io/ai-and-the-invisible-newcomer-in-open-source/" rel="noopener noreferrer"&gt;&lt;em&gt;AI and the Invisible Newcomer in Open Source&lt;/em&gt;&lt;/a&gt; left off: that post was the diagnosis—the visible friction open-source communities have always relied on is being absorbed by AI, and what's eroding underneath is how newcomers get seen. It closed on a question—&lt;em&gt;what signals are you still relying on that may no longer be reaching you?&lt;/em&gt;—and a promise to come back to the tools we've been using to ask it.&lt;/p&gt;

&lt;p&gt;One discipline ran through the whole program, and it's worth stating up front because it decides whether these tools work or just flatter you: you don't pitch—you examine. You're there to learn what's true about your project, not to sell anyone on what it already is. A canvas you fill in to feel good about yourself is worthless.&lt;/p&gt;

&lt;p&gt;How you do the examining is on a sliding scale. The program ran on roughly 100 interviews in seven weeks—brutal, and not what most teams will (or should) try to repeat. The canvas works at lower fidelity too: a team running its own prompts honestly, a handful of conversations with people in your orbit, even one careful pass with the people already in the room. The discipline is what travels; the interview count scales to whatever you can get.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the canvas is
&lt;/h2&gt;

&lt;p&gt;The program led with the &lt;strong&gt;Open-Source Ecosystem Canvas&lt;/strong&gt;: a grid of cells you fill in, one per facet of the project—who it's for, what value they get, how you reach them, what it costs, how it's funded. It's adapted from the Business Model Canvas, and the adaptation is the interesting part. An open-source project doesn't have customers in the SaaS sense, and the people who &lt;em&gt;use&lt;/em&gt; it, &lt;em&gt;build&lt;/em&gt; it, and &lt;em&gt;fund&lt;/em&gt; it are often three different groups. So the canvas makes you account for value role by role, instead of letting you collapse everyone into a single "user." Most of what follows came from that one move.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhqypvbse8dy00l3qrtpu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhqypvbse8dy00l3qrtpu.png" alt="The OSE Canvas as a blank labeled template: a tri-fold layout of eleven empty cells grouped by dimension. Left column (green) — Viability: Funding Sources, Revenue Streams, In-Kind Support. Middle columns (red) — Feasibility: Operations and Activities, Governance, Costs, Channels, Go to Market. Right column (blue) — Desirability: Value Propositions, Community Members, Impact." width="800" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What makes the canvas different from a plan is that nothing on it is a promise. Every cell is a hypothesis—what you suspect is true, written down where you can look at it, not what you've committed to deliver. That's a strange kind of freedom: a canvas is a place to be tentatively wrong on purpose. A blank brainstorm follows your attention—you end up circling the parts of the project you already think about. The canvas fixes the prompts in advance, so it asks about the cells you'd never have raised yourself. Those are usually the ones worth lingering on.&lt;/p&gt;

&lt;h2&gt;
  
  
  What ours surfaced
&lt;/h2&gt;

&lt;p&gt;So here's ours. We've worked on it and it's still unfinished—which is what a canvas is supposed to be: some cells are firmer than others, and a few are mostly still questions. Doing it turned up things we'd been quietly avoiding: about sustainability, about the gap between who we were building for and who we said we were building for, about what the next ten years of stdlib look like if we change nothing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5q4lg069vr62nn5ghax3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5q4lg069vr62nn5ghax3.png" alt="stdlib's filled-in Open-Source Ecosystem Canvas, shown as a snapshot of working hypotheses rather than a finished plan: an eleven-cell grid grouped into Viability (green), Feasibility (red), and Desirability (blue). Most cells are kept deliberately brief; the two most developed are Value Propositions—a list of competing hypotheses, some aimed at contributors (a résumé-builder, mentorship and recognition) and some at users (browser-native results, familiar tooling for Python/R developers, no back end)—and Community Members, which separates contributors (often GSoC applicants, usually non-users) from the people who depend on the library." width="800" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Two cells did most of the surfacing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Value Propositions.&lt;/strong&gt; This cell asks you to think beyond the fact that you're shipping "free" code, and name what value each kind of person gets from the project—and the moment we took that seriously, one answer split into several. Contribution as a résumé line and a career stepping-stone? Numerical computing that runs on anything with a browser, no server or back end required? Familiar data tooling for people arriving from Python or R? These don't reduce to a single pitch, and forcing them into one would have buried the actual finding: some of these are reasons people &lt;em&gt;use&lt;/em&gt; stdlib, some are reasons people &lt;em&gt;contribute&lt;/em&gt; to it, and those turned out not to be the same people.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Community Members.&lt;/strong&gt; This cell asks you to list who's actually there. We wrote down the obvious roles—core maintainers, Google Summer of Code (GSoC) alumni who stuck around, ecosystem package authors, industry users, the JavaScript developers who'd steered clear of statistics because the tools weren't there—and a handful more. Then we noticed a phrase we'd typed almost without thinking, parenthetical, next to casual contributors: &lt;em&gt;usually non-users.&lt;/em&gt; That aside was doing more work than the rest of the list. For a lot of open-source projects, contributors are a subset of users—they show up because they hit a limitation in something they depend on. For stdlib, that's frequently not the case. A large share of the people opening pull requests aren't people using JavaScript for numerical computing in their own work; many arrive through GSoC and other on-ramps, and they're building the thing more than using it. Once that's written down, you can't un-see it—and you can't describe both groups honestly on one grid. We ended up needing two canvases, one per community, because the questions that matter for the people who &lt;em&gt;build&lt;/em&gt; stdlib aren't the questions that matter for the people who &lt;em&gt;depend on&lt;/em&gt; it. A project where contributors and users overlap heavily might never need that split—the canvas surfaces what's true for you, not a particular answer. And the canvas keeps asking for more precision than its grid can hold—"users" isn't one group either, which is where the rest of the series picks up.&lt;/p&gt;

&lt;p&gt;It's worth saying why an exercise like this earns its discomfort. The ground under open source is moving fast enough that the honest reactions are either to keep shipping and trust it'll sort itself out, or to decide the whole thing isn't worth the trouble anymore. Both are real, and both can be self-protective if left unexamined. A canvas is the examination—stopping to look at what you're actually doing and who it's for, before you decide. And if you decide parts of it aren't worth sustaining, that's a decision made on purpose rather than by default—different from throwing up your hands. And if you decide it &lt;em&gt;is&lt;/em&gt; worth sustaining, it shows you where the work has to change by design—the note the last post ended on: the on-ramps that used to happen by accident increasingly have to be built.&lt;/p&gt;

&lt;p&gt;You don't need ours, though—you need yours. That's the whole point: filling one in surfaces the choices you'd otherwise leave implicit.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to ask once it's filled in
&lt;/h2&gt;

&lt;p&gt;A filled canvas isn't the deliverable—the conversations it forces are. The useful questions read &lt;em&gt;across&lt;/em&gt; cells, not down a single column—for us, that means questions that straddle the split between non-user contributors and the users they build for. The best of them are the ones you can't answer without going and asking someone. A few we're sitting with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Do our operations actually deliver the value we promise contributors?&lt;/strong&gt; Our Operations-and-Activities cell lists GSoC as the contributor pipeline, with monthly newcomer sessions and office hours as the mentorship structure. Our Value Propositions include mentorship and recognition, and contribution as a career stepping-stone. Do those activities close that loop—does a GSoC contributor leave having gotten what we say they'll get?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Do users' value propositions match the ones we think we're offering?&lt;/strong&gt; Our Value-Propositions cell mixes contributor value (résumé-builder, mentorship) with user value (browser-native results, familiar tooling for Python/R developers, no back end). This is the one you pair with interviews. What you think you're building and what your users think you're building are not necessarily the same thing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Are our go-to-market activities still pointed at the people we want?&lt;/strong&gt; Our Go-to-Market cell was built for a pre-AI world: Bluesky posts, conference talks, SEO, cross-posting, video onboarding. If AI is absorbing those accidental on-ramps, which of those activities still land—and which need to be jettisoned and replaced with something else? One channel is sliding into gatekeeper territory: AI-mediated discovery is increasingly how developers find their way to a numerical library, and the canvas' flat Community Members cell can't see it. Another tool from the program—Ecosystem Segmentation, which we'll get to later in this series—splits User from Decision Maker from Gatekeeper, and that split is what makes the gatekeeper visible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Are the resources keeping this alive still going to be there?&lt;/strong&gt; Open-source projects run on time, money, and effort that someone commits to them—written down by name in the canvas' Funding-Sources, In-Kind Support, and Costs cells. For us right now, that's an NSF POSE grant, in-kind labor from sponsoring companies, and recurring donations. AI has already changed the shape of open-source communities, not just for newcomers—and the labor that goes into the code itself isn't immune. There's a physics teacher's line in Svetlana Alexievich's &lt;em&gt;Secondhand Time&lt;/em&gt; we keep returning to: money solves all problems, even differential equations. Particularly sharp when the differential equations are the product.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some of those questions gesture at something the canvas does quietly. It captures not just &lt;em&gt;who's&lt;/em&gt; in your world—builders and users—but the gap between the state you're in and the state you want. The discipline that exposes that gap is to work the canvas right to left: start with who you want your Community Members to be and what Impact you want to have, then ask whether your current Value Propositions match the community you've actually got. If they don't, the cells you've written down are describing a project pointed somewhere other than the future you want. The cells that earn their keep aren't the ones describing what you do now; they're the ones that make you decide what to carry forward and what to stop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run it yourself
&lt;/h2&gt;

&lt;p&gt;No special software, no template, nothing that has to look like ours: a canvas is just as happily done on paper, in a shared doc, on a whiteboard, or vibe-coded in an hour. The format matters less than the honesty.&lt;/p&gt;

&lt;p&gt;Next in the series, we move from &lt;em&gt;who's in your world&lt;/em&gt; to &lt;em&gt;how value flows through it&lt;/em&gt;: the Ecosystem and Stakeholder Map—including the people who aren't rooting for you.&lt;/p&gt;




&lt;p&gt;
    &lt;em&gt;Mara Averick is a developer advocate at &lt;a href="https://quansight.com/" rel="noopener noreferrer"&gt;Quansight&lt;/a&gt; and contributor experience lead for &lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;stdlib&lt;/a&gt;.&lt;/em&gt;
&lt;/p&gt;




&lt;p&gt;&lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;stdlib&lt;/a&gt; is an open source software project dedicated to providing a comprehensive suite of robust, high-performance libraries to accelerate your project's development and give you peace of mind knowing that you're depending on expertly crafted, high-quality software.&lt;/p&gt;

&lt;p&gt;If you've enjoyed this post, give us a star 🌟 on &lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and consider &lt;a href="https://opencollective.com/stdlib" rel="noopener noreferrer"&gt;supporting&lt;/a&gt; the project. Your contributions and continued support help ensure the project's long-term success and are greatly appreciated!&lt;/p&gt;

&lt;h2&gt;
  
  
  Acknowledgments
&lt;/h2&gt;

&lt;p&gt;This work was supported in part by the National Science Foundation under Award No. 2449410.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Disclaimer: Any opinions, findings and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the National Science Foundation.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>devrel</category>
      <category>javascript</category>
      <category>opensource</category>
    </item>
    <item>
      <title>What We're No Longer Seeing: AI and the Invisible Newcomer in Open Source</title>
      <dc:creator>Athan</dc:creator>
      <pubDate>Mon, 08 Jun 2026 15:00:00 +0000</pubDate>
      <link>https://dev.to/stdlib/what-were-no-longer-seeing-ai-and-the-invisible-newcomer-in-open-source-4b3e</link>
      <guid>https://dev.to/stdlib/what-were-no-longer-seeing-ai-and-the-invisible-newcomer-in-open-source-4b3e</guid>
      <description>&lt;p&gt;How AI is absorbing the visible friction that open-source communities have always relied on to see—and welcome—newcomers.&lt;/p&gt;

&lt;p&gt;Last winter, our team went through I-Corps training as part of the NSF's POSE—Pathways to Enable Open-Source Ecosystems—program. I-Corps is the National Science Foundation's customer-discovery training, and POSE adapts it for open-source projects. For us, that meant seven weeks and more than a hundred interviews with stakeholders in and around our ecosystem. (The "us" here is &lt;a href="https://stdlib.io" rel="noopener noreferrer"&gt;stdlib&lt;/a&gt;, an open-source standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing.)&lt;/p&gt;

&lt;p&gt;These ecosystem-discovery interviews had one hard and fast rule: &lt;em&gt;you don't pitch.&lt;/em&gt; No explaining what stdlib does, no defending decisions, no selling.&lt;/p&gt;

&lt;p&gt;You ask, and you listen.&lt;/p&gt;

&lt;p&gt;So that's what we did. The curriculum taught us how open-source ecosystems are supposed to be sustained—the frameworks, the canvases, the interview discipline. The interviews taught us something nobody had put on the syllabus. Talking with maintainers, contributors, and users, the same theme kept surfacing: AI was changing how people found projects, got help, and contributed. And we weren't just hearing it in the interviews. At conferences and in hallway conversations, in blog posts and LinkedIn threads, peers who do developer relations and community work for a living were describing the same shift from their own angles.&lt;/p&gt;

&lt;p&gt;We went to learn about our ecosystem. While we were looking, the ecosystem was changing around us.&lt;/p&gt;

&lt;p&gt;This post is about what we were seeing. It's also about what we weren't.&lt;/p&gt;

&lt;p&gt;For a long time, open-source communities have depended on a specific kind of visible friction. People got stuck and they showed up—on Stack Overflow, in GitHub issues, on mailing lists, in forum threads. That first act of asking for help in public was itself a form of participation. It was the way you found the edge of someone else's community, and the way they found you.&lt;/p&gt;

&lt;p&gt;There's an old model from Charles Vogl's &lt;em&gt;The Art of Community&lt;/em&gt;—the idea that any community has concentric rings around it. People start as visitors. They find their footing. They ask, in one way or another, &lt;em&gt;what am I doing here?&lt;/em&gt; The journey from the outer ring inward—visitor to member to elder—isn't automatic. It requires visible pathways. It requires people willing to guide. And, crucially, it requires that the path be known to others.&lt;/p&gt;

&lt;p&gt;That model isn't unique to Vogl, or to open source. The figure below comes from &lt;a href="https://eric.ed.gov/?id=ED360387" rel="noopener noreferrer"&gt;a study&lt;/a&gt; of a community most readers have no skin in: recreational scuba divers in the early 1990s. Edouard Lagache, building on &lt;strong&gt;legitimate peripheral participation&lt;/strong&gt; (a term coined by Jean Lave and Étienne Wenger), mapped the same geometry—old-timers at the center, casual sightseers at the outermost ring, a labeled trajectory pulling inward. People become members of a community by doing low-risk things at its edges—things that exist &lt;em&gt;because&lt;/em&gt; there's a structure around them that makes them visible. Early 90s scuba diving is just an example, but the same dynamic and shape exists in open source, in sports, in fandoms, in any community you can name. The details differ, but the geometry is the same.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F386t2dfovcumsfilsdta.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F386t2dfovcumsfilsdta.png" alt="Concentric-rings diagram of legitimate peripheral participation in the scuba-diving community, adapted from Lagache (1993), Figure 5" width="800" height="516"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What made it work in open source, structurally speaking, was friction—visible friction. Someone got stuck, showed up, and both sides could see each other. That first public question was a form of initiation, and it was also legitimate peripheral participation in action: a low-risk, visible way of taking part from the edge. That dynamic is woven through decades of open-source community-building practice—it's underneath &lt;a href="https://doi.org/10.1371/journal.pcbi.1007296" rel="noopener noreferrer"&gt;Ten simple rules for helping newcomers become contributors to open projects&lt;/a&gt;, among others. The public question made the newcomer visible, and it created the opportunity for someone already inside to respond.&lt;/p&gt;

&lt;p&gt;It also made the community visible to the newcomer. &lt;em&gt;Oh—there's a there here. There are people. There's a way in.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;For a while, the shift we kept hearing about was a vibe more than a finding—something you could feel in the conversations before you could point to it on a chart. But it kept turning out to be tangible. At FOSDEM this year, David Allen, who leads developer relations at Grafana, &lt;a href="https://fosdem.org/2026/schedule/event/KXPSTQ-the_ai_shockwave_in_open_source_communities_how_ai_is_reshaping_the_foundations_/" rel="noopener noreferrer"&gt;showed everyone his numbers&lt;/a&gt;, describing a moment some maintainers haven't had yet but many will.&lt;/p&gt;

&lt;p&gt;He'd gotten comfortable expecting community growth of 8 to 18 percent a quarter, almost automatically—&lt;em&gt;I could fall asleep,&lt;/em&gt; he said, &lt;em&gt;and the community would grow.&lt;/em&gt; Then one quarter the number dropped 27 percent. They checked the data, ran it again, and it wasn't a measurement error: the number of people entering the community had collapsed, even though overall user growth was still going up. The mechanism wasn't mysterious, either. Organic traffic to community spaces was down roughly 30 percent, traceable to question-and-answer behavior moving to LLMs.&lt;/p&gt;

&lt;p&gt;And it's not a one-project story. &lt;a href="https://doi.org/10.1093/pnasnexus/pgae400" rel="noopener noreferrer"&gt;A 2024 study&lt;/a&gt; in &lt;em&gt;PNAS Nexus&lt;/em&gt; found a clean way to isolate the effect: compare Stack Overflow activity in English (where ChatGPT was available) with Russian- and Chinese-language counterparts (where it wasn't), and with mathematics forums (where LLMs are weaker). Within six months of ChatGPT's release, English-language activity had dropped 25 percent relative to those controls—and the authors call that a lower bound. The decline wasn't limited to beginners or to duplicate questions. Experienced and inexperienced users alike posted less.&lt;/p&gt;

&lt;p&gt;And that was 2024. You don't need a natural experiment to know what's happened since: LLM-assisted development has gone from novelty to default, and more of the questions that used to be asked in public are answered in private.&lt;/p&gt;

&lt;p&gt;Allen and his co-presenter, Amanda Wagner, offered a framing I keep coming back to: AI isn't the cause of this. It's an accelerant, exposing foundations that were already fragile.&lt;/p&gt;

&lt;p&gt;Here's where the argument I want to make sharpens.&lt;/p&gt;

&lt;p&gt;The surface loss is signal. Questions that used to surface as GitHub issues or forum threads are now answered privately. That's real, and it's measurable, and it's not nothing. But it understates what's actually happening.&lt;/p&gt;

&lt;p&gt;When AI handles the initial friction, the newcomer gets unblocked. They get functional value. They make progress; they solve the problem. But they get it without connection—without anyone seeing them, without a moment of initiation. This isn't inherently bad. It's just different. However, the friction that we've always addressed as a "bug"—the thing we wanted to smooth out—was also doing work we didn't understand until it was gone.&lt;/p&gt;

&lt;p&gt;Think about what deepens anyone's engagement with a community—what turns getting an answer into the start of a journey: they choose it, they're making progress in it, and they feel some connection to the people in it. AI delivers choice and progress with remarkable efficiency, but it doesn't replicate connection.&lt;/p&gt;

&lt;p&gt;And here's the part that doesn't get said enough:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The blindness goes both ways.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The newcomer doesn't know they're at the edge of your community. They're using your software through an AI intermediary, and they may not think of themselves as being in relationship with a project at all—only with a tool. They don't know you exist as a community. They only know you exist as a dependency. They have no idea that they're already part of your ecosystem.&lt;/p&gt;

&lt;p&gt;And you don't know they're there.&lt;/p&gt;

&lt;p&gt;Vogl's inner-rings model depends on visibility in both directions. People can only be invited inward if they can be seen. They can only begin the journey if they know there's a path. When the first interaction with a project happens through an AI layer, neither condition is reliably met.&lt;/p&gt;

&lt;p&gt;This is a different problem than the old problem of lurkers. Lurkers were quiet, but they were &lt;em&gt;present.&lt;/em&gt; They were in your spaces. They could see you, even when you couldn't see them. The observer who finds your library through an AI assistant may never visit your spaces at all.&lt;/p&gt;

&lt;p&gt;To be clear: not everyone wants to move inward, and that's fine. Vogl &lt;a href="https://www.charlesvogl.com/articles/people-mature-inside-communities" rel="noopener noreferrer"&gt;writes about this directly&lt;/a&gt;—most members of any community stay in the outer rings, and a healthy community makes room for them. Users don't owe a project anything. But open-source ecosystems aren't sustained by everyone; they're sustained by the few who do make the journey inward. And that's the real cost of the outer rings going invisible. It's not that every unseen user is a lost contributor. It's that we no longer know who's out there—which means we no longer know whom to invite.&lt;/p&gt;

&lt;p&gt;What's actually being lost, then, is not support traffic or page views or the other surface metrics. It's the early moments of maturation—the activities that mark a new member, signal arrival, and begin the process of belonging. The public question used to be one of those moments, almost without anyone meaning it that way. It made someone visible, opened a door, created the conditions for response.&lt;/p&gt;

&lt;p&gt;And we kept hearing versions of this from people working entirely different corners of the problem. Abigail Cabunoc Mayes, &lt;a href="https://fosdem.org/2026/schedule/event/AJGB73-the_synthetic_senior_rethinking_free_software_mentorship_in_the_ai_era/" rel="noopener noreferrer"&gt;talking about mentorship at FOSDEM&lt;/a&gt;, put it plainly: "the volume of contributions is going up, but the signal-to-noise ratio is really going down." A community can look alive by the surface metrics—commits, PRs, downloads—while the substrate of belonging is hollowing out underneath.&lt;/p&gt;

&lt;p&gt;The months since haven't quieted any of this. Maintainers are sharing their experiences—Daniel Stenberg has been chronicling &lt;a href="https://daniel.haxx.se/blog/2026/05/26/the-pressure/" rel="noopener noreferrer"&gt;what the AI era looks like from inside curl&lt;/a&gt;, and Franck Nijhof recently described &lt;a href="https://frenck.dev/open-source-was-not-ready-for-ai-speed-contributions/" rel="noopener noreferrer"&gt;Home Assistant's version of it&lt;/a&gt;: contributions arriving faster than anyone can review them, because "contributors are being amplified, but maintainers are still the verification bottleneck." Projects across the ecosystem are rethinking their contribution policies in response. The particulars differ; the shape is the same.&lt;/p&gt;

&lt;p&gt;And here's the uncomfortable realization underneath all of it: &lt;em&gt;we were relying on a friction we didn't even know we needed&lt;/em&gt;. The playbook for building and sustaining open-source communities—accumulated over decades by a lot of people who took the question seriously—assumed newcomers would keep becoming visible on their own. Nobody wrote that assumption down, because nobody had to. Now that it's failing, the playbook has to change.&lt;/p&gt;

&lt;h2&gt;
  
  
  This is a design problem, not a crisis
&lt;/h2&gt;

&lt;p&gt;The instinct, when something erodes, is to mourn it or try to restore it. The more useful response is to ask: what has to be built intentionally that used to happen as a byproduct?&lt;/p&gt;

&lt;p&gt;Everything we were learning—from the program on one track, from our interviews and our peers on the other—kept converging on the same few answers.&lt;/p&gt;

&lt;p&gt;The communities that come through this in shape will be the ones oriented around &lt;em&gt;relationships and narrative&lt;/em&gt;—not tooling, not clever onboarding flows, not any one platform. The technology stack underneath a community is replaceable. What isn't replaceable is whether the people in it are in real relationship with each other and with the project, and whether the project has a story about itself that someone can find their way into. That sounds soft. It is the hard part.&lt;/p&gt;

&lt;p&gt;A piece of that is what Allen and Wagner call &lt;em&gt;proof of effort.&lt;/em&gt; When the cost of producing surface-level engagement falls—an issue that reads as plausible, a PR that compiles, a comment that sounds informed—the signal that someone is actually here, actually paying attention, actually committed, has to come from somewhere else. Getting prospective contributors to demonstrate investment becomes more important, not less. Not as a gatekeeping move. As a way of making real participation visible again. Communities that ask people to &lt;em&gt;do something on the project's terms&lt;/em&gt;—show up to a call, take a small responsibility, write the doc nobody wants to write—are not being precious. They are reconstructing the legibility the old friction used to provide.&lt;/p&gt;

&lt;p&gt;The other shift—one we heard named, in almost the same words, by different people in different rooms—is from &lt;em&gt;extractive&lt;/em&gt; to &lt;em&gt;contributive&lt;/em&gt;: communities oriented around what someone can give to the project, not just what they can get from it. That's not a new idea either. What's new is that the default has flipped. If you don't say anything, the default relationship a person now has with your project is consumption with an AI in the middle. The contributive frame has to be made explicit because the extractive one is no longer being challenged by the structure of how people find you.&lt;/p&gt;

&lt;p&gt;The structural argument follows directly from this. If the passive onramps are narrowing—and the evidence is now plural enough that this is no longer a hunch—then the active ones have to be designed. If the outer ring of the community is becoming invisible, you have to go looking for the people in it; they will not show up on your dashboard. If initiation no longer happens by accident, the project has to create the conditions for it on purpose. None of this is a return to a previous state. It's a different posture toward maintenance: looking, naming, inviting, and following up are now first-order work, not extracurricular.&lt;/p&gt;

&lt;p&gt;Which lands the section, and the post, in one specific place.&lt;/p&gt;

&lt;p&gt;Invitation. Invitation has to come from someone already inside the community—someone with standing, someone whose attention means something—saying out loud to a particular person: &lt;em&gt;we see you, and there's a place for you here.&lt;/em&gt; That isn't new advice. The communities of practice literature has been making this argument, in one form or another, for thirty years. What's new is that it used to be advice. Now it's structural. The friction that used to put newcomers in front of us is thinner. The work of putting them in front of us, on purpose, is the work.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you might not be seeing—and what's next
&lt;/h2&gt;

&lt;p&gt;So: what signals are you still relying on that may no longer be reaching you? What onramps did you assume would always be there? Whose first contact with your project this year went through a layer you can't see into—and what would it take to find out?&lt;/p&gt;

&lt;p&gt;In subsequent posts, I want to talk about the tools I-Corps handed us for actually looking at these questions honestly. A canvas, a map, a journey—they aren't the answer, but they can help you take a realistic look at your ecosystem and figure out where the gaps are.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Allen, D., &amp;amp; Wagner, A. V. (2026). &lt;em&gt;The AI Shockwave in Open Source Communities: How AI Is Reshaping the Foundations of Open Source Communities.&lt;/em&gt; FOSDEM 2026, Brussels. &lt;a href="https://fosdem.org/2026/schedule/event/KXPSTQ-the_ai_shockwave_in_open_source_communities_how_ai_is_reshaping_the_foundations_/" rel="noopener noreferrer"&gt;https://fosdem.org/2026/schedule/event/KXPSTQ-the_ai_shockwave_in_open_source_communities_how_ai_is_reshaping_the_foundations_/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Cabunoc Mayes, A. (2026). &lt;em&gt;The Synthetic Senior: Rethinking Free Software Mentorship in the AI Era.&lt;/em&gt; FOSDEM 2026, Brussels. &lt;a href="https://fosdem.org/2026/schedule/event/AJGB73-the_synthetic_senior_rethinking_free_software_mentorship_in_the_ai_era/" rel="noopener noreferrer"&gt;https://fosdem.org/2026/schedule/event/AJGB73-the_synthetic_senior_rethinking_free_software_mentorship_in_the_ai_era/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;del Rio-Chanona, R. M., Laurentsyeva, N., &amp;amp; Wachs, J. (2024). Large language models reduce public knowledge sharing on online Q&amp;amp;A platforms. &lt;em&gt;PNAS Nexus&lt;/em&gt;, 3(9): pgae400. &lt;a href="https://doi.org/10.1093/pnasnexus/pgae400" rel="noopener noreferrer"&gt;https://doi.org/10.1093/pnasnexus/pgae400&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Lagache, E. (1993). &lt;em&gt;"Diving" into Communities of Practice: Examining Learning as Legitimate Peripheral Participation in an Everyday Setting.&lt;/em&gt; Paper presented at the American Educational Research Association annual meeting, Atlanta, GA. ERIC ED 360 387. &lt;a href="https://eric.ed.gov/?id=ED360387" rel="noopener noreferrer"&gt;https://eric.ed.gov/?id=ED360387&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Lave, J., &amp;amp; Wenger, E. (1991). &lt;em&gt;Situated Learning: Legitimate Peripheral Participation.&lt;/em&gt; Cambridge University Press.&lt;/li&gt;
&lt;li&gt;Sholler, D., Steinmacher, I., Ford, D., Averick, M., Hoye, M., &amp;amp; Wilson, G. (2019). Ten simple rules for helping newcomers become contributors to open projects. &lt;em&gt;PLOS Computational Biology&lt;/em&gt;, 15(9): e1007296. &lt;a href="https://doi.org/10.1371/journal.pcbi.1007296" rel="noopener noreferrer"&gt;https://doi.org/10.1371/journal.pcbi.1007296&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Vogl, C. H. (2025). &lt;em&gt;The Art of Community: 7 Principles for Belonging&lt;/em&gt; (2nd ed.). Berrett-Koehler.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;
    &lt;em&gt;Mara Averick is a developer advocate at &lt;a href="https://quansight.com/" rel="noopener noreferrer"&gt;Quansight&lt;/a&gt; and contributor experience lead for &lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;stdlib&lt;/a&gt;.&lt;/em&gt;
&lt;/p&gt;




&lt;p&gt;&lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;stdlib&lt;/a&gt; is an open source software project dedicated to providing a comprehensive suite of robust, high-performance libraries to accelerate your project's development and give you peace of mind knowing that you're depending on expertly crafted, high-quality software.&lt;/p&gt;

&lt;p&gt;If you've enjoyed this post, give us a star 🌟 on &lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and consider &lt;a href="https://opencollective.com/stdlib" rel="noopener noreferrer"&gt;supporting&lt;/a&gt; the project. Your contributions and continued support help ensure the project's long-term success and are greatly appreciated!&lt;/p&gt;

&lt;h2&gt;
  
  
  Acknowledgments
&lt;/h2&gt;

&lt;p&gt;This work was supported in part by the National Science Foundation under Award No. 2449410.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Disclaimer: Any opinions, findings and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the National Science Foundation.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>devrel</category>
      <category>javascript</category>
      <category>software</category>
    </item>
    <item>
      <title>GSoC 2026 Selected Projects</title>
      <dc:creator>Athan</dc:creator>
      <pubDate>Sat, 09 May 2026 03:21:40 +0000</pubDate>
      <link>https://dev.to/stdlib/gsoc-2026-selected-projects-3d7d</link>
      <guid>https://dev.to/stdlib/gsoc-2026-selected-projects-3d7d</guid>
      <description>&lt;p&gt;We're excited to share that &lt;a href="https://summerofcode.withgoogle.com" rel="noopener noreferrer"&gt;Google Summer of Code 2026&lt;/a&gt; is officially underway and that stdlib has been awarded five contributor slots for this year's program.&lt;/p&gt;

&lt;p&gt;This is our third year participating in GSoC, and every year the program has gotten bigger, more competitive, and more energizing for the project.&lt;/p&gt;

&lt;p&gt;What continues to stand out most is not just the number of proposals we receive, but the level of engagement contributors bring &lt;em&gt;before&lt;/em&gt; applications even open. Increasingly, contributors are showing up months in advance: opening pull requests, participating in discussions, helping with reviews, fixing bugs, improving documentation, and steadily becoming part of the community long before proposal season begins.&lt;/p&gt;

&lt;p&gt;And that matters.&lt;/p&gt;

&lt;p&gt;Open source is not built over the course of a single summer. It is built through consistency, trust, curiosity, and sustained collaboration over time. GSoC works best when it amplifies an existing trajectory rather than starting from zero.&lt;/p&gt;

&lt;p&gt;This year's application season was the most competitive we've seen so far.&lt;/p&gt;

&lt;p&gt;From January 1 through April 21 of this year, prospective GSoC contributors were busy ramping up on stdlib's development practices, refining their proposals, and contributing across the project. During that time, the stdlib community:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  open more than 2,000 PRs, with 1,452 of those being successfully merged.&lt;/li&gt;
&lt;li&gt;  added 2,209 commits and 146 new packages.&lt;/li&gt;
&lt;li&gt;  welcomed contributions from 89 different contributors.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;During the official proposal period alone (February 19 – April 21), contributors opened 1,250 pull requests and authored 1,421 commits across the project.&lt;/p&gt;

&lt;p&gt;In total, we received &lt;strong&gt;75 proposals&lt;/strong&gt; for just &lt;strong&gt;5 slots&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That level of participation says a lot about the momentum behind scientific computing on the web and about the community that continues to grow around stdlib.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 2026 Cohort
&lt;/h2&gt;

&lt;p&gt;This year's accepted projects span numerical computing, machine learning, visualization, and low-level linear algebra infrastructure, all areas which are foundational to stdlib's long-term vision for scientific computing on the web.&lt;/p&gt;

&lt;p&gt;Over the next several months, contributors will be working closely with mentors across the project, participating in design discussions, iterating on implementations, writing documentation, and helping shape the future direction of stdlib.&lt;/p&gt;

&lt;p&gt;One thing we emphasize heavily within stdlib is that open source is not just about writing code. Good engineering requires communication, design thinking, documentation, review discipline, testing rigor, and an ability to collaborate effectively with others. GSoC gives contributors exposure to all of those dimensions.&lt;/p&gt;

&lt;p&gt;With that, on to the projects!&lt;/p&gt;

&lt;h3&gt;
  
  
  BLAS Bindings and Implementations for Linear Algebra
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Contributor&lt;/strong&gt;: &lt;a href="https://github.com/MeKaustubh07" rel="noopener noreferrer"&gt;Kaustubh Patange&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This &lt;a href="https://summerofcode.withgoogle.com/programs/2026/projects/Mh2Oa6l1" rel="noopener noreferrer"&gt;project&lt;/a&gt; focuses on expanding stdlib's BLAS support by adding missing Level 2 and 3 BLAS routines. The work continues stdlib's broader effort to bring high-performance numerical computing primitives to the JavaScript ecosystem while maintaining API consistency and portability across runtimes.&lt;/p&gt;

&lt;p&gt;More broadly, the project will strengthen one of the most important foundational layers for scientific computing: fast and reliable linear algebra operations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Batch Machine Learning Algorithms in JavaScript and C
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Contributor&lt;/strong&gt;: &lt;a href="https://github.com/nakul-krishnakumar" rel="noopener noreferrer"&gt;Nakul Krishnakumar&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This &lt;a href="https://summerofcode.withgoogle.com/programs/2026/projects/UpnxnHuL" rel="noopener noreferrer"&gt;project&lt;/a&gt; aims to introduce a new set of foundational machine learning algorithms to stdlib, implemented in both JavaScript and C. The focus is on building reusable low-level primitives which can serve as the basis for a broader machine learning ecosystem within stdlib over time.&lt;/p&gt;

&lt;p&gt;Machine learning infrastructure on the web is still relatively immature compared to other ecosystems. One of stdlib's goals is to help close that gap by providing robust, modular, and composable numerical tooling that works across Node.js, browsers, edge runtimes, and beyond.&lt;/p&gt;

&lt;h3&gt;
  
  
  Singular Value Decomposition (SVD) via LAPACK
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Contributor&lt;/strong&gt;: &lt;a href="https://github.com/prajjwalbajpai" rel="noopener noreferrer"&gt;Prajjwal Bajpai&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This &lt;a href="https://summerofcode.withgoogle.com/programs/2026/projects/UUCgNDEW" rel="noopener noreferrer"&gt;project&lt;/a&gt; will add LAPACK bindings and JavaScript implementations for singular value decomposition (SVD), centered around LAPACK's &lt;code&gt;dgesvd&lt;/code&gt; routine.&lt;/p&gt;

&lt;p&gt;SVD is one of the most important algorithms in numerical linear algebra and underpins a wide range of applications, including dimensionality reduction, least-squares optimization, signal processing, recommendation systems, and machine learning.&lt;/p&gt;

&lt;p&gt;Adding robust SVD support will significantly expand stdlib's growing linear algebra capabilities and move the project closer toward providing a comprehensive numerical computing stack for the web.&lt;/p&gt;

&lt;h3&gt;
  
  
  Linear System Solvers and Factorization Workflows
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Contributor&lt;/strong&gt;: &lt;a href="https://github.com/iampratik13" rel="noopener noreferrer"&gt;Pratik Bhagwat&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This &lt;a href="https://summerofcode.withgoogle.com/programs/2026/projects/sJ7nndHz" rel="noopener noreferrer"&gt;project&lt;/a&gt; focuses on enabling factorization-to-solution workflows within stdlib by integrating matrix factorizations and linear system solvers into a more cohesive numerical linear algebra pipeline.&lt;/p&gt;

&lt;p&gt;In practice, scientific computing is rarely about isolated kernels. Real-world workflows often involve composing lower-level primitives into larger computational pipelines. This project will help bridge that gap by improving interoperability between routines and strengthening stdlib's higher-level numerical computing ergonomics.&lt;/p&gt;

&lt;h3&gt;
  
  
  Plotting Infrastructure and Chart Creation
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Contributor&lt;/strong&gt;: &lt;a href="https://github.com/Sachinn-64" rel="noopener noreferrer"&gt;Sachin Pangal&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This &lt;a href="https://summerofcode.withgoogle.com/programs/2026/projects/AOnAAohn" rel="noopener noreferrer"&gt;project&lt;/a&gt; will extend stdlib's plotting infrastructure by implementing missing components needed for end-to-end chart generation using Vega.&lt;/p&gt;

&lt;p&gt;Visualization is a critical part of scientific computing workflows, yet the JavaScript ecosystem still lacks cohesive, low-level scientific visualization tooling designed around composability and modularity. This work will help move stdlib toward a more complete data analysis and visualization stack capable of supporting exploratory analysis, diagnostics, dashboards, and educational tooling directly in the browser and in server-side runtimes such as Node.js.&lt;/p&gt;

&lt;h2&gt;
  
  
  More Than a Summer Program
&lt;/h2&gt;

&lt;p&gt;One of the most rewarding aspects of GSoC has been seeing contributors continue participating well after the program ends.&lt;/p&gt;

&lt;p&gt;Several former GSoC contributors are still active members of the stdlib community today, continuing to review code, mentor newer contributors, and help drive development across the project. That long-term continuity is enormously valuable and is ultimately what makes programs such as GSoC successful.&lt;/p&gt;

&lt;p&gt;For stdlib specifically, GSoC has also helped accelerate an important broader goal: building a sustainable ecosystem for scientific computing in JavaScript and bringing more contributors into that ecosystem.&lt;/p&gt;

&lt;p&gt;The web platform has become one of the most important computing environments in the world. Scientific computing tools should exist there as first-class citizens.&lt;/p&gt;

&lt;p&gt;That means performant numerical primitives. It means robust infrastructure. It means approachable tooling. It means strong documentation. And it means building a healthy contributor community capable of sustaining all of that over the long term.&lt;/p&gt;

&lt;p&gt;Programs like GSoC help make that possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thank You
&lt;/h2&gt;

&lt;p&gt;A huge thank you to everyone who submitted a proposal this year.&lt;/p&gt;

&lt;p&gt;We know how much time and effort goes into preparing applications, contributing beforehand, engaging with mentors, and refining project ideas. The selection process was very difficult this year, and there were many strong proposals we simply did not have enough slots to support.&lt;/p&gt;

&lt;p&gt;We also want to thank all of the mentors and community members who continue investing time into reviewing pull requests, answering questions, helping contributors onboard, and supporting the project day to day. Open source communities only work because people choose to show up for one another.&lt;/p&gt;

&lt;p&gt;We're excited to get started and are looking forward to seeing what this year's contributors build.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;stdlib&lt;/a&gt; is an open source software project dedicated to providing a comprehensive suite of robust, high-performance libraries to accelerate your project's development and give you peace of mind knowing that you're depending on expertly crafted, high-quality software.&lt;/p&gt;

&lt;p&gt;If you've enjoyed this post, give us a star 🌟 on &lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and consider &lt;a href="https://opencollective.com/stdlib" rel="noopener noreferrer"&gt;supporting&lt;/a&gt; the project. Your contributions and continued support help ensure the project's long-term success and are greatly appreciated!&lt;/p&gt;

</description>
      <category>node</category>
      <category>javascript</category>
      <category>software</category>
    </item>
    <item>
      <title>Zen of stdlib</title>
      <dc:creator>Athan</dc:creator>
      <pubDate>Sat, 09 May 2026 00:42:41 +0000</pubDate>
      <link>https://dev.to/stdlib/zen-of-stdlib-3id</link>
      <guid>https://dev.to/stdlib/zen-of-stdlib-3id</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;A philosophy of simplicity, modularity, consistency, and craft.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Over the past several years, stdlib has grown from a small collection of utilities into a large, highly modular system for scientific computing in JavaScript and on the web. Along the way, we've made thousands of small decisions about APIs, naming, performance, package boundaries, and implementation strategies.&lt;/p&gt;

&lt;p&gt;Individually, those decisions may seem minor. Collectively, they define the character of the project.&lt;/p&gt;

&lt;p&gt;As the project has grown, it's become increasingly important to make those underlying principles explicit not just for maintainers, but for contributors and users who want to understand how and why stdlib is the way it is.&lt;/p&gt;

&lt;p&gt;Today, we're introducing the &lt;strong&gt;Zen of stdlib&lt;/strong&gt;: a set of guiding principles that capture the philosophy behind the project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a "Zen"?
&lt;/h2&gt;

&lt;p&gt;This is not a style guide.&lt;/p&gt;

&lt;p&gt;It's not a checklist.&lt;/p&gt;

&lt;p&gt;And it's not meant to be followed dogmatically.&lt;/p&gt;

&lt;p&gt;Instead, the Zen is a distillation of experience: what has worked, what hasn't, and what tends to scale as a codebase and community grow. It exists to guide decisions, especially in ambiguous situations where there is no obviously "correct" answer.&lt;/p&gt;

&lt;p&gt;If you've ever asked questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Should this be a new package or part of an existing one?&lt;/li&gt;
&lt;li&gt;  Is this API too general?&lt;/li&gt;
&lt;li&gt;  Should we add another option or compose existing functionality?&lt;/li&gt;
&lt;li&gt;  Is this abstraction worth it?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Zen is meant to help answer those questions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Zen of stdlib
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Do one thing. Do it well.
Embrace radical modularity.
Favor composition over configuration.
Stability is a feature.

Make it obvious and predictable.
Don't be clever.

Complexity kills.
Push complexity up the stack.

If it's hard to explain, it's a bad idea.
If it's hard to test, it's a bad design.

Failure should be easy to diagnose.

Value consistency above all else.
Except when correctness, safety, or clarity demands otherwise.

Write it like C.
Be explicit. Avoid polymorphism by default.

Automate where it scales; stop where it obscures.

Code is read more than it is written.
Be kind to your future self.

Code is craft.
Tend to the garden.

Mistakes are infectious.
Fix them early.

Simple is beautiful.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What this means in practice
&lt;/h2&gt;

&lt;p&gt;A few themes show up repeatedly throughout stdlib.&lt;/p&gt;

&lt;h3&gt;
  
  
  Radical modularity
&lt;/h3&gt;

&lt;p&gt;If something can stand on its own, it should.&lt;/p&gt;

&lt;p&gt;stdlib is intentionally composed of many small packages rather than a few large ones. This enables reuse, makes testing easier, and allows consumers to include only what they need. It also forces discipline, as each package must have a clear purpose and boundary.&lt;/p&gt;

&lt;h3&gt;
  
  
  Composition over configuration
&lt;/h3&gt;

&lt;p&gt;We prefer simple building blocks over highly configurable interfaces.&lt;/p&gt;

&lt;p&gt;Instead of adding more flags, options, and modes, we aim to provide small primitives that can be composed. This keeps individual APIs predictable and avoids combinatorial complexity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pushing complexity up the stack
&lt;/h3&gt;

&lt;p&gt;Lower-level APIs should be simple, predictable, and easy to reason about.&lt;/p&gt;

&lt;p&gt;More complex behavior, such as branching logic, multiple modes of operation, and orchestration, belongs in higher-level utilities built on top of those primitives. This separation is critical for both performance and maintainability.&lt;/p&gt;

&lt;h3&gt;
  
  
  Predictability and consistency
&lt;/h3&gt;

&lt;p&gt;Users should not have to guess what an API does.&lt;/p&gt;

&lt;p&gt;Naming conventions, argument ordering, and error behavior should be consistent across the entire project. Consistency reduces cognitive load and makes the system easier to learn and use.&lt;/p&gt;

&lt;h3&gt;
  
  
  Performance by design
&lt;/h3&gt;

&lt;p&gt;"Write it like C" is less about language and more about mindset.&lt;/p&gt;

&lt;p&gt;We favor predictable performance characteristics, monomorphic code paths, and explicit behavior. Hidden allocations, excessive polymorphism, and implicit work tend to introduce both performance and debugging challenges.&lt;/p&gt;

&lt;h3&gt;
  
  
  Maintainability as a first-class concern
&lt;/h3&gt;

&lt;p&gt;Code is read far more often than it is written.&lt;/p&gt;

&lt;p&gt;That reality drives many of the principles in the Zen: clarity over cleverness, simplicity over abstraction, and documentation that explains not just &lt;em&gt;what&lt;/em&gt; the code does, but &lt;em&gt;why&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A living document
&lt;/h2&gt;

&lt;p&gt;The Zen of stdlib is not fixed.&lt;/p&gt;

&lt;p&gt;As the project evolves, so will our understanding of what works and what doesn't. The Zen may change over time, but changes should be rare, deliberate, and grounded in experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  For contributors
&lt;/h2&gt;

&lt;p&gt;If you're contributing to stdlib, the Zen is a useful reference point when designing APIs or reviewing code.&lt;/p&gt;

&lt;p&gt;It won't answer every question, but it should help you reason about trade-offs and make decisions that align with the broader direction of the project.&lt;/p&gt;

&lt;p&gt;When in doubt: prefer &lt;strong&gt;simplicity&lt;/strong&gt;, &lt;strong&gt;clarity&lt;/strong&gt;, and &lt;strong&gt;consistency&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;stdlib is an ongoing experiment in what scientific computing in JavaScript and on the web looks like when built around strong principles.&lt;/p&gt;

&lt;p&gt;The Zen is an attempt to capture those principles so that the project can continue to grow without losing what makes it coherent.&lt;/p&gt;

&lt;p&gt;As always, feedback is welcome.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;stdlib&lt;/a&gt; is an open source software project dedicated to providing a comprehensive suite of robust, high-performance libraries to accelerate your project's development and give you peace of mind knowing that you're depending on expertly crafted, high-quality software.&lt;/p&gt;

&lt;p&gt;If you've enjoyed this post, give us a star 🌟 on &lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and consider &lt;a href="https://opencollective.com/stdlib" rel="noopener noreferrer"&gt;supporting&lt;/a&gt; the project. Your contributions and continued support help ensure the project's long-term success and are greatly appreciated!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>software</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Connect with the stdlib community on Zulip</title>
      <dc:creator>Athan</dc:creator>
      <pubDate>Wed, 17 Dec 2025 05:45:04 +0000</pubDate>
      <link>https://dev.to/stdlib/connect-with-the-stdlib-community-on-zulip-487m</link>
      <guid>https://dev.to/stdlib/connect-with-the-stdlib-community-on-zulip-487m</guid>
      <description>&lt;p&gt;As the stdlib community continues to grow and evolve, so has our need for new ways to connect and collaborate (see, for example, our &lt;a href="https://blog.stdlib.io/new-ways-to-engage-with-the-stdlib-community" rel="noopener noreferrer"&gt;announcement of office hours and a public events calendar&lt;/a&gt;). While Gitter's simple, single-channel interface worked well in the early days, it no longer scales with the range of conversations happening around the project. Today we're excited to announce our new &lt;a href="https://stdlib.zulipchat.com" rel="noopener noreferrer"&gt;Zulip chat&lt;/a&gt;, which provides a more full-featured, structured, and searchable space for us to interact.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Zulip?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://zulip.com" rel="noopener noreferrer"&gt;Zulip&lt;/a&gt; is open source and generously &lt;a href="https://zulip.com/for/open-source" rel="noopener noreferrer"&gt;supports open-source projects&lt;/a&gt; like ours with a free cloud plan. Its channel-and-topic model makes it easier to keep discussions focused, follow ongoing threads, and resurface past knowledge through powerful &lt;a href="https://zulip.com/help/search-for-messages#search-filters" rel="noopener noreferrer"&gt;search features&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Anyone can browse the web-public channels of &lt;a href="https://stdlib.zulipchat.com" rel="noopener noreferrer"&gt;stdlib's Zulip&lt;/a&gt; without an account, and you can sign up at any time to join the conversation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Join and get started
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://stdlib.zulipchat.com" rel="noopener noreferrer"&gt;&lt;strong&gt;stdlib Zulip chat&lt;/strong&gt;&lt;/a&gt; is open to all. A welcome bot will greet you when you first join and share some tips specific to stdlib about how to participate effectively. If you're new to Zulip, their &lt;a href="https://zulip.com/help/getting-started-with-zulip" rel="noopener noreferrer"&gt;getting started guide&lt;/a&gt; is an invaluable resource. If you're already familiar with applications such as Slack or Discord, much of the experience will be familiar.&lt;/p&gt;

&lt;p&gt;We encourage you to come say hello in the &lt;a href="https://stdlib.zulipchat.com/#narrow/channel/546733-introductions" rel="noopener noreferrer"&gt;&lt;strong&gt;#introductions&lt;/strong&gt;&lt;/a&gt; channel and take some time to explore other channels and topics that may be of interest to you. If you have any questions about Zulip itself, we've got a channel for that too (&lt;a href="https://stdlib.zulipchat.com/#narrow/channel/546662-zulip" rel="noopener noreferrer"&gt;&lt;strong&gt;#zulip&lt;/strong&gt;&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;The stdlib team is active in the chat, and public messages are the best way to get timely help—no need for routine &lt;strong&gt;@-mentions&lt;/strong&gt;. Asking questions in public is the fastest way to get a response, as more people can help, &lt;em&gt;plus&lt;/em&gt; it's likely that someone else will benefit from finding out the answer to your question. The stdlib &lt;a href="https://github.com/stdlib-js/stdlib/blob/develop/CODE_OF_CONDUCT.md" rel="noopener noreferrer"&gt;Code of Conduct&lt;/a&gt; applies to all community spaces, including stdlib's Zulip. Should you encounter an issue, Zulip's &lt;a href="https://zulip.com/help/report-a-message" rel="noopener noreferrer"&gt;reporting tools&lt;/a&gt; and our moderation team are available.&lt;/p&gt;

&lt;h2&gt;
  
  
  See you there!
&lt;/h2&gt;

&lt;p&gt;We're looking forward to seeing you in the stdlib Zulip instance! We welcome questions and suggestions as we continue shaping a space that is useful, inclusive, and genuinely supportive for everyone who wants to learn, build, or contribute.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;stdlib&lt;/a&gt; is an open source software project dedicated to providing a comprehensive suite of robust, high-performance libraries to accelerate your project's development and give you peace of mind knowing that you're depending on expertly crafted, high-quality software.&lt;/p&gt;

&lt;p&gt;If you've enjoyed this post, give us a star 🌟 on &lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and consider &lt;a href="https://opencollective.com/stdlib" rel="noopener noreferrer"&gt;financially supporting&lt;/a&gt; the project. Your contributions and continued support help ensure the project's long-term success and are greatly appreciated!&lt;/p&gt;

</description>
      <category>community</category>
      <category>news</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Google Summer of Code 2025</title>
      <dc:creator>Athan</dc:creator>
      <pubDate>Thu, 27 Feb 2025 18:22:14 +0000</pubDate>
      <link>https://dev.to/stdlib/google-summer-of-code-2025-13kh</link>
      <guid>https://dev.to/stdlib/google-summer-of-code-2025-13kh</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;We're thrilled to announce that stdlib was accepted as a Google Summer of Code mentoring organization for 2025!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We are beyond excited to share that &lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;stdlib&lt;/a&gt; has once again been accepted as a mentoring organization for &lt;a href="https://summerofcode.withgoogle.com" rel="noopener noreferrer"&gt;Google Summer of Code&lt;/a&gt; 2025! This marks our second consecutive year participating in this incredible program, and we cannot wait to work alongside aspiring open source contributors to push the boundaries of scientific computing on the web.&lt;/p&gt;

&lt;p&gt;Google Summer of Code (GSoC) is a global initiative that introduces new contributors to open source software by offering mentorship and funding for meaningful, long-term projects. Over the years, GSoC has been instrumental in helping open source projects like stdlib grow, while also giving participants valuable real-world software development experience. With our acceptance into GSoC 2025, we are looking forward to welcoming a new wave of enthusiastic contributors who share our vision of making JavaScript and the extended ecosystem of TypeScript, Node.js, Deno, and other JavaScript runtimes first-class environments for numerical and scientific computing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reflecting on GSoC 2024: A Year of Growth
&lt;/h3&gt;

&lt;p&gt;Last year marked our first time participating in GSoC, and we could not have asked for a better experience. We had the privilege of mentoring four incredibly talented contributors, each of whom made substantial contributions to the stdlib ecosystem.&lt;/p&gt;

&lt;p&gt;From integrating BLAS bindings and optimizing special mathematical functions to enhancing support for boolean arrays and improving our interactive REPL experience, their work strengthened the foundation of stdlib and paved the way for even greater advancements. Beyond just code, their contributions sparked deeper engagement within our community, leading to over &lt;strong&gt;2,000 pull requests from more than 100 contributors&lt;/strong&gt; and &lt;strong&gt;3,000+ new commits&lt;/strong&gt; to &lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;stdlib&lt;/a&gt; since February 2024.&lt;/p&gt;

&lt;p&gt;If you missed our retrospective on last year's program, be sure to check out our blog post: &lt;a href="https://blog.stdlib.io/reflecting-on-gsoc-2024/" rel="noopener noreferrer"&gt;Reflecting on GSoC 2024&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's in Store for GSoC 2025?
&lt;/h3&gt;

&lt;p&gt;As we gear up for GSoC 2025, we have a range of exciting project ideas that we hope will inspire potential contributors. Whether you're passionate about numerical computing, statistical modeling, performance optimization, or developer tooling, there's something for you. Some areas we're particularly excited about include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;BLAS/LAPACK&lt;/strong&gt;: continuing to expand stdlib's coverage of BLAS and LAPACK operations to provide a robust foundation for linear algebra and machine learning in JavaScript and Node.js.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;WebAssembly&lt;/strong&gt;: compiling BLAS and statistical kernels to WebAssembly with support for ergonomic inter-operation between WebAssembly and JavaScript.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;ndarray kernels&lt;/strong&gt;: implementing lower-level ndarray kernels for efficient element-wise iteration and reduction to improve performance.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Improving developer tooling&lt;/strong&gt;: improving the stdlib development experience by creating better tools for automation, publishing, and managing the stdlib package ecosystem.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Expanding statistical distributions&lt;/strong&gt;: building on previous efforts to provide C implementations for special mathematical functions, thus unlocking a wider range of probability distributions and making stdlib a comparable alternative to SciPy for statistical computing in JavaScript.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These ideas, however, are just the beginning. We believe that innovation comes from collaboration, and we welcome fresh ideas from prospective contributors. If you have a project concept that aligns with our mission and a clear plan for execution, we would love to hear about it. Our current list of ideas is available on our GSoC &lt;a href="https://github.com/stdlib-js/google-summer-of-code/blob/main/ideas.md" rel="noopener noreferrer"&gt;repository&lt;/a&gt;, but don't feel constrained by it—great ideas come from all directions!&lt;/p&gt;

&lt;h3&gt;
  
  
  How to Get Involved
&lt;/h3&gt;

&lt;p&gt;If you're interested in contributing to stdlib for GSoC 2025, now is the perfect time to get started. Here's how you can begin your journey:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Explore stdlib&lt;/strong&gt;: familiarize yourself with the project by browsing the project's &lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt; and reading our documentation.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Join the conversation&lt;/strong&gt;: engage with the stdlib community on &lt;a href="https://gitter.im/stdlib-js/stdlib" rel="noopener noreferrer"&gt;Element&lt;/a&gt; to discuss project ideas, ask questions, and connect with mentors.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Review our guidelines&lt;/strong&gt;: carefully read our &lt;a href="https://github.com/stdlib-js/google-summer-of-code/tree/main" rel="noopener noreferrer"&gt;GSoC Application Guidelines&lt;/a&gt; to understand what we're looking for in a proposal.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Start contributing&lt;/strong&gt;: we strongly encourage all applicants to contribute to stdlib before submitting their application. This can be in the form of a bug fix, new feature, performance improvement, or some other enhancement to stdlib's capabilities.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The official GSoC timeline is as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;February 27 – March 24&lt;/strong&gt;: prospective contributors discuss project ideas with mentoring organizations.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;March 24 – April 8&lt;/strong&gt;: application period (final deadline: April 8 at 18:00 UTC).&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;May 8&lt;/strong&gt;: accepted proposals announced.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;May 8 – June 1&lt;/strong&gt;: community bonding period.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;June 2 – September 1&lt;/strong&gt;: standard 12-week coding period.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the full timeline, visit the &lt;a href="https://developers.google.com/open-source/gsoc/timeline" rel="noopener noreferrer"&gt;GSoC 2025 Timeline&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Looking Ahead
&lt;/h3&gt;

&lt;p&gt;As we embark on another exciting GSoC season, we want to extend our deepest gratitude to Google for this opportunity. We are incredibly excited to meet new contributors, explore new ideas, and continue building an open source ecosystem where JavaScript thrives as a language for scientific computing.&lt;/p&gt;

&lt;p&gt;If you're passionate about building high-quality software and eager to make an impact, we invite you to join us. We can't wait to see your ideas and begin working together to advance scientific computing in JavaScript. Let's make this year's GSoC program one to remember!&lt;/p&gt;




&lt;p&gt;&lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;stdlib&lt;/a&gt; is an open source software project dedicated to providing a comprehensive suite of robust, high-performance libraries to accelerate your project's development and give you peace of mind knowing that you're depending on expertly crafted, high-quality software.&lt;/p&gt;

&lt;p&gt;If you've enjoyed this post, give us a star 🌟 on &lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and consider &lt;a href="https://opencollective.com/stdlib" rel="noopener noreferrer"&gt;financially supporting&lt;/a&gt; the project. Your contributions and continued support help ensure the project's long-term success and are greatly appreciated!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>node</category>
    </item>
    <item>
      <title>New ways to engage with the stdlib community!</title>
      <dc:creator>Athan</dc:creator>
      <pubDate>Tue, 14 Jan 2025 00:47:48 +0000</pubDate>
      <link>https://dev.to/stdlib/new-ways-to-engage-with-the-stdlib-community-3in4</link>
      <guid>https://dev.to/stdlib/new-ways-to-engage-with-the-stdlib-community-3in4</guid>
      <description>&lt;p&gt;Fostering a vibrant and inclusive community is crucial for ensuring the long-term success of open-source software, and stdlib is no exception. We believe that collaboration and open communication are key to driving innovation and making scientific computing on the web accessible to everyone. To that end, we're thrilled to announce two new initiatives designed to make it easier than ever for contributors, users, and maintainers to connect, collaborate, and grow together!&lt;/p&gt;

&lt;h2&gt;
  
  
  Weekly Office Hours
&lt;/h2&gt;

&lt;p&gt;As part of our efforts to enhance transparency and collaboration, we're proud to announce weekly office hours! We've been running these informally for the past few months, and they've been a wonderful success, providing high-bandwidth opportunities to connect with project maintainers, users, and new and existing stdlib contributors.&lt;/p&gt;

&lt;p&gt;To facilitate the coordination of office hours and other public project meetings, we've created a public GitHub &lt;a href="https://github.com/stdlib-js/meetings" rel="noopener noreferrer"&gt;repository&lt;/a&gt; to serve as a centralized hub where community members can propose agenda topics, review discussion points, and participate in shaping the direction of stdlib. Each week in advance of the next office hours, we'll create a new dedicated agenda &lt;a href="https://github.com/stdlib-js/meetings/issues?q=sort%3Aupdated-desc+state%3Aopen+label%3A%22Office+Hours%22" rel="noopener noreferrer"&gt;issue&lt;/a&gt;, where you can link issues and pull requests you want to discuss, post questions in advance, and share any pre-reads. Thus far, agendas have run the gamut, from project overviews to live code reviews to discussions about the project roadmap to upcoming events and community announcements. &lt;/p&gt;

&lt;p&gt;In short, if you have questions about stdlib or if you need help fixing a bug, figuring out what to do next, or are just looking for feedback, this is your time to shine! Please join our weekly office hours to connect with project maintainers, stay updated on the latest project news, and chat with other community members. This is a great opportunity to ask questions, share ideas, and engage directly with the stdlib team.&lt;/p&gt;

&lt;p&gt;Everyone is welcome—drop in and say hello!&lt;/p&gt;

&lt;h2&gt;
  
  
  Public Community Calendar
&lt;/h2&gt;

&lt;p&gt;Second, we're excited to introduce our new public community &lt;a href="https://calendar.google.com/calendar/u/0/embed?src=a72677fe2820c833714b8b9a2aa87393f742bcaf0d0f6c9499eee6661795eae0@group.calendar.google.com" rel="noopener noreferrer"&gt;calendar&lt;/a&gt;, where you can stay up-to-date with all stdlib events, including office hours, project orientations, development meetings, and other important happenings.&lt;/p&gt;

&lt;p&gt;With this &lt;a href="https://calendar.google.com/calendar/u/0/embed?src=a72677fe2820c833714b8b9a2aa87393f742bcaf0d0f6c9499eee6661795eae0@group.calendar.google.com" rel="noopener noreferrer"&gt;calendar&lt;/a&gt;, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Find the dates and times of upcoming office hours and meetings.&lt;/li&gt;
&lt;li&gt;  Add our events to your own calendar for easy reminders.&lt;/li&gt;
&lt;li&gt;  Stay informed about new opportunities to engage with the stdlib team and community.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How You Can Get Involved
&lt;/h2&gt;

&lt;p&gt;Here are a few ways you can make the most of these new resources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Bookmark the &lt;a href="https://calendar.google.com/calendar/u/0/embed?src=a72677fe2820c833714b8b9a2aa87393f742bcaf0d0f6c9499eee6661795eae0@group.calendar.google.com" rel="noopener noreferrer"&gt;community calendar&lt;/a&gt; or add it to your own.&lt;/strong&gt; Be on the lookout for upcoming events, and mark your calendar to join us.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Engage on GitHub.&lt;/strong&gt; Visit our meetings &lt;a href="https://github.com/stdlib-js/meetings" rel="noopener noreferrer"&gt;repository&lt;/a&gt; to propose agenda topics or contribute to ongoing discussions.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Attend Office Hours.&lt;/strong&gt; Whether you're stuck on a problem or curious about the latest project updates, office hours are an excellent opportunity to connect and learn.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Spread the Word.&lt;/strong&gt; Help us grow the stdlib community by sharing these updates with anyone who might be interested.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Let's Build Together!
&lt;/h2&gt;

&lt;p&gt;We're committed to creating a supportive and inspiring environment for everyone in the scientific computing ecosystem, and we're excited to see how these new initiatives will help our community thrive. Needless to say, we can't wait to connect with you at our next office hours!&lt;/p&gt;

&lt;p&gt;Together, we're building the future of scientific computing on the web! 🚀&lt;/p&gt;




&lt;p&gt;&lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;stdlib&lt;/a&gt; is an open source software project dedicated to providing a comprehensive suite of robust, high-performance libraries to accelerate your project's development and give you peace of mind knowing that you're depending on expertly crafted, high-quality software.&lt;/p&gt;

&lt;p&gt;If you've enjoyed this post, give us a star 🌟 on &lt;a href="https://github.com/stdlib-js/stdlib" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and consider &lt;a href="https://opencollective.com/stdlib" rel="noopener noreferrer"&gt;financially supporting&lt;/a&gt; the project. Your contributions and continued support help ensure the project's long-term success and are greatly appreciated!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>programming</category>
      <category>node</category>
    </item>
  </channel>
</rss>
