27 Jan 2026

feedLinuxiac

Proton 10.0-4 Brings Compatibility Boost With Dozens of Games Now Playable

Proton 10.0-4 Brings Compatibility Boost With Dozens of Games Now Playable

Proton 10.0-4 is now available, resolving issues in Far Cry 5, Age of Empires IV, and other titles on Linux and Steam Deck.

27 Jan 2026 9:00am GMT

feedHacker News

The state of Linux music players in 2026

Comments

27 Jan 2026 7:26am GMT

Russia using Interpol's wanted list to target critics abroad, leak reveals

Comments

27 Jan 2026 7:06am GMT

Kimi Released Kimi K2.5, Open-Source Visual SOTA-Agentic Model

Comments

27 Jan 2026 5:42am GMT

26 Jan 2026

feedOMG! Ubuntu

New AppImage Offers an Easier Way to Run Affinity on Ubuntu

No more fighting with Wine dependencies: an unofficial Affinity v3 AppImage runs Canva's creative suite on Ubuntu via a simple, self-contained executable.

You're reading New AppImage Offers an Easier Way to Run Affinity on Ubuntu, a blog post from OMG! Ubuntu. Do not reproduce elsewhere without permission.

26 Jan 2026 11:23pm GMT

feedLinuxiac

Emmabuntüs DE 5 1.05 Brings Accessibility Improvements Based on Debian 12

Emmabuntüs DE 5 1.05 Brings Accessibility Improvements Based on Debian 12

Emmabuntüs Debian Edition 5 1.05 introduces accessibility improvements, Debian 12.13 base, and enhanced support for visually impaired users and refurbished PCs.

26 Jan 2026 9:52pm GMT

GParted 1.8 Partition Editor Improves FAT Handling

GParted 1.8 Partition Editor Improves FAT Handling

GParted 1.8 partition editor is out with multiple crash fixes, improved FAT handling, and safer file system copying.

26 Jan 2026 7:25pm GMT

feedOMG! Ubuntu

Mecha Comet – Modular Linux Handheld with Snap-On Modules

Meet the Mecha Comet: a modular, open-source Linux handheld built for tinkerers. Features snap-on modules, Linux OS and AMOLED display - now on Kickstarter!

You're reading Mecha Comet - Modular Linux Handheld with Snap-On Modules, a blog post from OMG! Ubuntu. Do not reproduce elsewhere without permission.

26 Jan 2026 4:06pm GMT

25 Jan 2026

feedOMG! Ubuntu

Turn Scripts into Quick Settings Toggles with this GNOME Extension

GNOME logo on a laptop with a puzzle piece floating over it to denote extensions.Add custom command and script toggles to GNOME Shell's Quick Settings menu. Create up to 6 buttons to trigger any action you want, easily and in reach!

You're reading Turn Scripts into Quick Settings Toggles with this GNOME Extension, a blog post from OMG! Ubuntu. Do not reproduce elsewhere without permission.

25 Jan 2026 10:56pm GMT

23 Jan 2026

feedUbuntu blog

How to avoid package End of Life through backporting 

When a Git vulnerability hit systems past Ubuntu package end of life, teams had to reassess security options. Learn how to stay protected beyond standard support.

23 Jan 2026 9:15am GMT

22 Jan 2026

feedKubernetes Blog

Headlamp in 2025: Project Highlights

This announcement is a recap from a post originally published on the Headlamp blog.

Headlamp has come a long way in 2025. The project has continued to grow - reaching more teams across platforms, powering new workflows and integrations through plugins, and seeing increased collaboration from the broader community.

We wanted to take a moment to share a few updates and highlight how Headlamp has evolved over the past year.

Updates

Joining Kubernetes SIG UI

This year marked a big milestone for the project: Headlamp is now officially part of Kubernetes SIG UI. This move brings roadmap and design discussions even closer to the core Kubernetes community and reinforces Headlamp's role as a modern, extensible UI for the project.

As part of that, we've also been sharing more about making Kubernetes approachable for a wider audience, including an appearance on Enlightening with Whitney Lee and a talk at KCD New York 2025.

Linux Foundation mentorship

This year, we were excited to work with several students through the Linux Foundation's Mentorship program, and our mentees have already left a visible mark on Headlamp:

New changes

Multi-cluster view

Managing multiple clusters is challenging: teams often switch between tools and lose context when trying to see what runs where. Headlamp solves this by giving you a single view to compare clusters side-by-side. This makes it easier to understand workloads across environments and reduces the time spent hunting for resources.

Multi-cluster view View of multi-cluster workloads

Projects

Kubernetes apps often span multiple namespaces and resource types, which makes troubleshooting feel like piecing together a puzzle. We've added Projects to give you an application-centric view that groups related resources across multiple namespaces - and even clusters. This allows you to reduce sprawl, troubleshoot faster, and collaborate without digging through YAML or cluster-wide lists.

Projects feature View of the new Projects feature

Changes:

Navigation and Activities

Day-to-day ops in Kubernetes often means juggling logs, terminals, YAML, and dashboards across clusters. We redesigned Headlamp's navigation to treat these as first-class "activities" you can keep open and come back to, instead of one-off views you lose as soon as you click away.

New task bar View of the new task bar

Changes:

Thanks to Jan Jansen and Aditya Chaudhary.

Search and map

When something breaks in production, the first two questions are usually "where is it?" and "what is it connected to?" We've upgraded both search and the map view so you can get from a high-level symptom to the right set of objects much faster.

Advanced search View of the new Advanced Search feature

Changes:

Thanks to Fabian, Alexander North, and Victor Marcolino from Swisscom, and also to Aditya Chaudhary.

OIDC and authentication

We've put real work into making OIDC setup clearer and more resilient, especially for in-cluster deployments.

User info View of user information for OIDC clusters

Changes:

Thanks to David Dobmeier and Harsh Srivastava.

App Catalog and Helm

We've broadened how you deploy and source apps via Headlamp, specifically supporting vanilla Helm repos.

Changes:

Thanks to Vrushali Shah and Murali Annamneni from Oracle, and also to Pat Riehecky, Joshua Akers, Rostislav Stříbrný, Rick L,and Victor.

Performance, accessibility, and UX

Finally, we've spent a lot of time on the things you notice every day but don't always make headlines: startup time, list views, log viewers, accessibility, and small network UX details. A continuous accessibility self-audit has also helped us identify key issues and make Headlamp easier for everyone to use.

Learn section View of the Learn section in docs

Changes:

Thanks to Jaehan Byun and Jan Jansen.

Plugins and extensibility

Discovering plugins is simpler now - no more hopping between Artifact Hub and assorted GitHub repos. Browse our dedicated Plugins page for a curated catalog of Headlamp-endorsed plugins, along with a showcase of featured plugins.

Plugins page View of the Plugins showcase

Headlamp AI Assistant

Managing Kubernetes often means memorizing commands and juggling tools. Headlamp's new AI Assistant changes this by adding a natural-language interface built into the UI. Now, instead of typing kubectl or digging through YAML you can ask, "Is my app healthy?" or "Show logs for this deployment," and get answers in context, speeding up troubleshooting and smoothing onboarding for new users. Learn more about it here.

New plugins additions

Alongside the new AI Assistant, we've been growing Headlamp's plugin ecosystem so you can bring more of your workflows into a single UI, with integrations like Minikube, Karpenter, and more.

Highlights from the latest plugin releases:

Thanks to Vrushali Shah and Murali Annamneni from Oracle, and also to Anirban Singha, Adwait Godbole, Sertaç Özercan, Ernest Wong, and Chloe Lim.

Other plugins updates

Alongside new additions, we've also spent time refining plugins that many of you already use, focusing on smoother workflows and better integration with the core UI.

Backstage plugin View of the Backstage plugin

Changes:

Plugin development

We've focused on making it faster and clearer to build, test, and ship Headlamp plugins, backed by improved documentation and lighter tooling.

Plugin development View of the Plugin Development guide

Changes:

Security upgrades

We've also been investing in keeping Headlamp secure - both by tightening how authentication works and by staying on top of upstream vulnerabilities and tooling.

Updates:

Conclusion

Thank you to everyone who has contributed to Headlamp this year - whether through pull requests, plugins, or simply sharing how you're using the project. Seeing the different ways teams are adopting and extending the project is a big part of what keeps us moving forward. If your organization uses Headlamp, consider adding it to our adopters list.

If you haven't tried Headlamp recently, all these updates are available today. Check out the latest Headlamp release, explore the new views, plugins, and docs, and share your feedback with us on Slack or GitHub - your feedback helps shape where Headlamp goes next.

22 Jan 2026 2:00am GMT

21 Jan 2026

feedKubernetes Blog

Announcing the Checkpoint/Restore Working Group

The community around Kubernetes includes a number of Special Interest Groups (SIGs) and Working Groups (WGs) facilitating discussions on important topics between interested contributors. Today we would like to announce the new Kubernetes Checkpoint Restore WG focusing on the integration of Checkpoint/Restore functionality into Kubernetes.

Motivation and use cases

There are several high-level scenarios discussed in the working group:

Across these scenarios, the goal is to help facilitate discussions of ideas between the Kubernetes community and the growing Checkpoint/Restore in Userspace (CRIU) ecosystem. The CRIU community includes several projects that support these use cases, including:

More information about the checkpoint/restore integration with Kubernetes is also available here.

Related events

Following our presentation about transparent checkpointing at KubeCon EU 2025, we are excited to welcome you to our panel discussion and AI + ML session at KubeCon + CloudNativeCon Europe 2026.

Connect with us

If you are interested in contributing to Kubernetes or CRIU, there are several ways to participate:

21 Jan 2026 6:00pm GMT

20 Jan 2026

feedJavaScript Weekly

A big week for jQuery

#​769 - January 20, 2026

Read on the Web

JavaScript Weekly

jQuery 4.0 Released - 20 years on from its original release, the ever-popular (in terms of actual usage) library reaches 4.0 with a migration to ES modules (compatible with modern build tools) along with dropping support for IE 10 and older. With jQuery being a popular guest in our newsletters in the early years, it's fantastic to see it pop back for a quick visit.

Timmy Willison

💡 If you're using jQuery, you'll find jQuery Migrate, an official tool to help you upgrade, useful. jQuery in 2026 is a somewhat legacy choice, though, and you might not need jQuery at all..

Add Excel-like Spreadsheet Functionality to Your JavaScript Apps - SpreadJS is the industry-leading JavaScript spreadsheet for adding advanced spreadsheet features to your enterprise apps. Build finance, analysis, budget, and other apps. Excel I/O, 500+ calc functions, tables, charts, and more. View demos now.

SpreadJS from MESCIUS inc sponsor

Astro is Joining Cloudflare - Big news in the Web framework space as the team behind the popular Astro framework (the beta of v6.0 is now available) is headed to Cloudflare. Few major frameworks are now not under the wing of a larger entity.

Schott and Irvine-Broque

IN BRIEF:

RELEASES:

📖 Articles and Videos

ASCII Characters Are Not Pixels: A Deep Dive Into ASCII Rendering - Alex digs deep into getting ASCII-based graphics rendering just right with JavaScript, complete with examples of the algorithms used and numerous demos. The neatest technical blog post I've seen so far this year.

Alex Harri

JavaScript Now a First-Class Citizen in Aspire - Aspire is a Microsoft framework for orchestrating the deployment of distributed apps. Originally just for .NET, Aspire 13 now makes JavaScript a first-class citizen, so you can run Vite and full-stack JS apps with service discovery, telemetry, and production-ready containers.

Microsoft

Breakpoints and console.log Is the Past, Time Travel Is the Future - 15x faster JavaScript debugging than with breakpoints and console.log, supports Vitest, jest, Karma, Jasmine, and more.

Wallaby Team sponsor

Introducing the <geolocation> Element - Chrome 144 introduces a new <geolocation> element for requesting user location data, moving away from a JavaScript-triggered prompt.

Viana, Le, Steiner

📄 Bootstrapping Bun - "My journey running the build system for Bun … without relying on any of its usual binary dependencies - namely itself." Bradley Walters

📄 Building a Scroll-Driven Dual-Wave Text Animation with GSAP Valentin Descombes

📄 How the Electron Team Improved Window Resize Behavior Niklas Wenzel

📄 How to Learn to Build Apps in 2026 Eric Elliott

🛠 Code & Tools

Starry Night 3.9: GitHub-Like Syntax Highlighting - GitHub's own syntax highlighter isn't open source, but this library is a powerful alternative that tries to get as close as it can, with support for hundreds of languages. I've put a basic Web demo here to show off how to use it on the Web.

Titus Wormer

Extension.js 3: Browser Extension Development Framework - Create cross-browser extensions without manual build configuration and develop, build, and preview across browsers with a unified workflow. GitHub repo.

Cezar Augusto et al.

Easily Add Image Editing to your Web App - Import pintura, give it an image, and instantly get features like cropping, rotating, and annotation. Try for free today.

Pintura sponsor

React Aria: Adobe's World-Class React Components - React Aria has a fantastic new site and all-new documentation that really sells the entire experience, complete with interactive CSS and Tailwind examples to get started quickly.

Adobe

localspace: Modern localForage-Compatible Storage Toolkit - localForage is/was a popular storage library that wrapped various browser storage APIs with a simple, localStorage-like API. It hasn't been updated for years, though, and "localspace exists to bridge that gap".

Michael Lin

📰 Classifieds

🔑 Add API key auth to any JS backend. Clerk handles generation, hashing, scopes, and instant revocation. Free during public beta.

Notion, Dropbox and LaunchDarkly have switched to Meticulous for frontend tests that provide near-exhaustive coverage with zero developer effort. Find out why.

🛠️ Auth0 for AI Agents provides a foundation for developers to build AI agents without compromising security or innovation. Start building.

📢 Elsewhere in the ecosystem

Some other interesting tidbits in the broader landscape:

20 Jan 2026 12:00am GMT

19 Jan 2026

feedKubernetes Blog

Uniform API server access using clientcmd

If you've ever wanted to develop a command line client for a Kubernetes API, especially if you've considered making your client usable as a kubectl plugin, you might have wondered how to make your client feel familiar to users of kubectl. A quick glance at the output of kubectl options might put a damper on that: "Am I really supposed to implement all those options?"

Fear not, others have done a lot of the work involved for you. In fact, the Kubernetes project provides two libraries to help you handle kubectl-style command line arguments in Go programs: clientcmd and cli-runtime (which uses clientcmd). This article will show how to use the former.

General philosophy

As might be expected since it's part of client-go, clientcmd's ultimate purpose is to provide an instance of restclient.Config that can issue requests to an API server.

It follows kubectl semantics:

It doesn't set up a --kubeconfig command line argument, which you might want to do to align with kubectl; you'll see how to do this in the "Bind the flags" section.

Available features

clientcmd allows programs to handle

Configuration merging

In various scenarios, clientcmd supports merging configuration settings: KUBECONFIG can specify multiple files whose contents are combined. This can be confusing, because settings are merged in different directions depending on how they are implemented. If a setting is defined in a map, the first definition wins, subsequent definitions are ignored. If a setting is not defined in a map, the last definition wins.

When settings are retrieved using KUBECONFIG, missing files result in warnings only. If the user explicitly specifies a path (in --kubeconfig style), there must be a corresponding file.

If KUBECONFIG isn't defined, the default configuration file, ~/.kube/config, is used instead, if present.

Overall process

The general usage pattern is succinctly expressed in the clientcmd package documentation:

loadingRules := clientcmd.NewDefaultClientConfigLoadingRules()
// if you want to change the loading rules (which files in which order), you can do so here

configOverrides := &clientcmd.ConfigOverrides{}
// if you want to change override values or bind them to flags, there are methods to help you

kubeConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules, configOverrides)
config, err := kubeConfig.ClientConfig()
if err != nil {
 // Do something
}
client, err := metav1.New(config)
// ...

In the context of this article, there are six steps:

  1. Configure the loading rules.
  2. Configure the overrides.
  3. Build a set of flags.
  4. Bind the flags.
  5. Build the merged configuration.
  6. Obtain an API client.

Configure the loading rules

clientcmd.NewDefaultClientConfigLoadingRules() builds loading rules which will use either the contents of the KUBECONFIG environment variable, or the default configuration file name (~/.kube/config). In addition, if the default configuration file is used, it is able to migrate settings from the (very) old default configuration file (~/.kube/.kubeconfig).

You can build your own ClientConfigLoadingRules, but in most cases the defaults are fine.

Configure the overrides

clientcmd.ConfigOverrides is a struct storing overrides which will be applied over the settings loaded from the configuration derived using the loading rules. In the context of this article, its primary purpose is to store values obtained from command line arguments. These are handled using the pflag library, which is a drop-in replacement for Go's flag package, adding support for double-hyphen arguments with long names.

In most cases there's nothing to set in the overrides; I will only bind them to flags.

Build a set of flags

In this context, a flag is a representation of a command line argument, specifying its long name (such as --namespace), its short name if any (such as -n), its default value, and a description shown in the usage information. Flags are stored in instances of the FlagInfo struct.

Three sets of flags are available, representing the following command line arguments:

The recommended selection includes all three with a named context selection argument and a timeout argument.

These are all available using the Recommended…Flags functions. The functions take a prefix, which is prepended to all the argument long names.

So calling clientcmd.RecommendedConfigOverrideFlags("") results in command line arguments such as --context, --namespace, and so on. The --timeout argument is given a default value of 0, and the --namespace argument has a corresponding short variant, -n. Adding a prefix, such as "from-", results in command line arguments such as --from-context, --from-namespace, etc. This might not seem particularly useful on commands involving a single API server, but they come in handy when multiple API servers are involved, such as in multi-cluster scenarios.

There's a potential gotcha here: prefixes don't modify the short name, so --namespace needs some care if multiple prefixes are used: only one of the prefixes can be associated with the -n short name. You'll have to clear the short names associated with the other prefixes' --namespace , or perhaps all prefixes if there's no sensible -n association. Short names can be cleared as follows:

kflags := clientcmd.RecommendedConfigOverrideFlags(prefix)
kflags.ContextOverrideFlags.Namespace.ShortName = ""

In a similar fashion, flags can be disabled entirely by clearing their long name:

kflags.ContextOverrideFlags.Namespace.LongName = ""

Bind the flags

Once a set of flags has been defined, it can be used to bind command line arguments to overrides using clientcmd.BindOverrideFlags. This requires a pflag FlagSet rather than one from Go's flag package.

If you also want to bind --kubeconfig, you should do so now, by binding ExplicitPath in the loading rules:

flags.StringVarP(&loadingRules.ExplicitPath, "kubeconfig", "", "", "absolute path(s) to the kubeconfig file(s)")

Build the merged configuration

Two functions are available to build a merged configuration:

As the names suggest, the difference between the two is that the first can ask for authentication information interactively, using a provided reader, whereas the second only operates on the information given to it by the caller.

The "deferred" mention in these function names refers to the fact that the final configuration will be determined as late as possible. This means that these functions can be called before the command line arguments are parsed, and the resulting configuration will use whatever values have been parsed by the time it's actually constructed.

Obtain an API client

The merged configuration is returned as a ClientConfig instance. An API client can be obtained from that by calling the ClientConfig() method.

If no configuration is given (KUBECONFIG is empty or points to non-existent files, ~/.kube/config doesn't exist, and no configuration is given using command line arguments), the default setup will return an obscure error referring to KUBERNETES_MASTER. This is legacy behaviour; several attempts have been made to get rid of it, but it is preserved for the --local and --dry-run command line arguments in --kubectl. You should check for "empty configuration" errors by calling clientcmd.IsEmptyConfig() and provide a more explicit error message.

The Namespace() method is also useful: it returns the namespace that should be used. It also indicates whether the namespace was overridden by the user (using --namespace).

Full example

Here's a complete example.

package main

import (
 "context"
 "fmt"
 "os"

 "github.com/spf13/pflag"
 v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 "k8s.io/client-go/kubernetes"
 "k8s.io/client-go/tools/clientcmd"
)

func main() {
 // Loading rules, no configuration
 loadingRules := clientcmd.NewDefaultClientConfigLoadingRules()

 // Overrides and flag (command line argument) setup
 configOverrides := &clientcmd.ConfigOverrides{}
 flags := pflag.NewFlagSet("clientcmddemo", pflag.ExitOnError)
 clientcmd.BindOverrideFlags(configOverrides, flags,
 clientcmd.RecommendedConfigOverrideFlags(""))
 flags.StringVarP(&loadingRules.ExplicitPath, "kubeconfig", "", "", "absolute path(s) to the kubeconfig file(s)")
 flags.Parse(os.Args)

 // Client construction
 kubeConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules, configOverrides)
 config, err := kubeConfig.ClientConfig()
 if err != nil {
 if clientcmd.IsEmptyConfig(err) {
 panic("Please provide a configuration pointing to the Kubernetes API server")
 }
 panic(err)
 }
 client, err := kubernetes.NewForConfig(config)
 if err != nil {
 panic(err)
 }

 // How to find out what namespace to use
 namespace, overridden, err := kubeConfig.Namespace()
 if err != nil {
 panic(err)
 }
 fmt.Printf("Chosen namespace: %s; overridden: %t\n", namespace, overridden)

 // Let's use the client
 nodeList, err := client.CoreV1().Nodes().List(context.TODO(), v1.ListOptions{})
 if err != nil {
 panic(err)
 }
 for _, node := range nodeList.Items {
 fmt.Println(node.Name)
 }
}

Happy coding, and thank you for your interest in implementing tools with familiar usage patterns!

19 Jan 2026 6:00pm GMT

feedUbuntu blog

Showcasing open design in action: Loughborough University design students explore open source projects

Last year, we collaborated with two design student teams from Loughborough University in the UK. These students were challenged to work on open source project briefs. Team 1 focused on non-code contributions, while Team 2's brief was to create a unified documentation experience, giving them a chance to apply their design skills to real-world problems […]

19 Jan 2026 11:09am GMT

15 Jan 2026

feedUbuntu blog

Canonical Ubuntu and Ubuntu Pro now available on AWS European Sovereign Cloud

Canonical announced it is a launch partner for the AWS European Sovereign Cloud, with Ubuntu and Ubuntu Pro now available. This new independent cloud for Europe enables organizations to run secure, enterprise workloads with full operational autonomy and EU data residency. By combining the performance and expanded security coverage of Ubuntu Pro with AWS sovereignty controls, customers can meet stringent EU regulatory requirements while continuing to innovate at scale.

15 Jan 2026 10:06pm GMT

13 Jan 2026

feedJavaScript Weekly

Can we ever fix the web dependency mess?

#​768 - January 13, 2026

Read on the Web

JavaScript Weekly

Web Dependencies are Broken; Can We Fix Them? - Lea, who has worked at the heart of Web Standards for years, delivers a compelling (and educational) call to action about a problem every JavaScript developer has encountered: why is managing dependencies and introducing them into code so unnecessarily messy and what could we do about it?

Lea Verou

Build Marketing Sites Like Apple - Learn how modern, high-impact marketing sites are built from someone doing it at the highest level. Matias Gonzales, Design Engineer at Vercel, teaches GSAP animation, scroll-driven storytelling, 3D with Three.js, and performance-first techniques used on award-winning sites.

Frontend Masters sponsor

IN BRIEF:

RELEASES:

📖 Articles and Videos

Date is Out, Temporal is In - The Temporal API has been promised as a future API tackling the weaknesses of JavaScript's Date for many years now, but finally that future is arriving. Mat leans on numerous examples to show off Date's weaknesses and push Temporal's strengths here.

Mat "Wilto" Marquis

💡 Temporal's browser support still looks weak, but Chrome 144 - rolling out generally this week - brings full support. Temporal Polyfill also offers a stop-gap while native support grows.

How Wrong Can a JavaScript Date Calculation Go? - "the story of an issue that I faced that will be much easier to handle once Temporal is more widespread."

Phil Nash

Add GitHub, Slack & Google Integrations Without Rebuilding OAuth - WorkOS Pipes handles OAuth flows, token refresh, and storage. Users connect via a widget, your app makes one API call.

WorkOS sponsor

Stop Turning Everything Into Arrays (and Do Less Work Instead) - A post showing off iterator helpers, a broadly supported set of methods for working with Iterator objects as a more efficient way of processing data lazily in an iterative (rather than randomly accessed) fashion.

Matt Smith

How to 'Steal' Any React Component - A look at how to reproduce a component from a production React app without the original source, using React's internal data structures (via Fiber) and LLMs to reconstruct things.

David Fant

📄 JavaScript's for-of Loops Are Actually Fast Suren Enfiajyan

📄 Why ARM Has a 'JavaScript Instruction' - FJCVTZS, specifically. NotNotP

📄 How I Write Custom Elements with lit-html Dave Samaniego

📄 document.currentScript is More Useful Than I Thought Chris Coyier

📄 What Happened (and What's Happening) to WebAssembly Emnudge

🛠 Code & Tools

memlab 2.0: A Framework for Finding JavaScript Memory Leaks - A testing and analysis framework for identifying memory leaks and optimization opportunities that spawned from Facebook's own approach to optimizing its main app. Write scenarios, and memlab compares heap snapshots, filters memory leaks, and aggregates the results.

Facebook Open Source

The Time-Series Database That Balances Simplicity and Performance - Stay Postgres-native with automatic partitioning, 95% compression, and continuous aggregates at production scale.

Tiger Data (creators of TimescaleDB) sponsor

Fabric.js 7.1: A Powerful SVG Abstraction Library - Provides an interactive object model on top of the HTML5 canvas to make it easier to work with multiple visual elements. Ideal for the browser but it works with Node too.

Fabric.js

Ohm: A Parsing Toolkit for JavaScript and TypeScript - It's been a few years since we covered this project and it's come along a lot since. It's a library for building PEG-based parsers you can use in interpreters, compilers, analysis tools, etc. and you can even play with its grammar online.

Warth, Dubroy, et al.

Superdiff 3.2: Compares Two Arrays or Objects and Return a Diff - Got two similar objects or arrays and want to see the underlying differences? Superdiff's recent updates boost performance, add support for streamed input and using a worker for more efficient diffing in a separate thread.

antoine

📰 Classifieds

⚡️Add lightning-fast barcode & QR scanning to your web app with STRICH, a lean JS library. Simple, predictable pricing. Free trial and demo!

Only fools write manual tests - modern engineering teams like Notion, Dropbox and Lattice use Meticulous to maintain E2E UI tests covering every edge case of your web app.

🚀 Auth0 for AI Agents is the complete auth solution for building AI agents more securely. Start building today.

📢 Elsewhere in the ecosystem

Some other interesting tidbits in the broader landscape:

13 Jan 2026 12:00am GMT

06 Jan 2026

feedJavaScript Weekly

A new JavaScript engine from Fabrice Bellard

#​767 - January 6, 2026

Read on the Web

🎉 Happy New Year. JavaScript Weekly is now landing in your inboxes on Tuesdays, so here we are! Let's see what 2026 brings.
__
Your editor, Peter Cooper

JavaScript Weekly

The 2025 JavaScript Rising Stars - At the start of each year, Michael rounds up the projects in the JavaScript ecosystem that gained the most popularity on GitHub in the prior year. After a two-year run of topping the chart, shadcn/ui has been pushed down to #3 by n8n and React Bits. This is a fantastic roundup, now in its tenth(!) year, and features commentary from a few industry experts too.

Michael Rambeau et al.

Make Flaky Tests a Last-Year Problem - Meticulous creates and maintains a continuously evolving E2E UI test suite with zero developer effort. Built on Chromium with a deterministic engine, it's the only testing tool that eliminates flakes. Relied on by Dropbox, Notion, and Lattice.

Meticulous Ai sponsor

MicroQuickJS: A New JavaScript Engine from Fabrice Bellard - Fabrice, one of the world's most prolific developers well-known for creating FFmpeg, QEMU and QuickJS, is back with a new JavaScript engine targeting embedded systems, and that can run with as little as 10KB of RAM.

Fabrice Bellard

💡 The discussion about MicroQuickJS on Hacker News was particularly rich. Redis's creator, Salvatore Sanfilippo, even noted that Redis would have used JavaScript as its scripting language instead of Lua if this had existed in 2010.

IN BRIEF:

RELEASES:

  • pnpm 10.27 - The alternative, efficient (and increasingly security-focused) package manager gets some tweaks, including a setting to ignore trust policy checks for packages published more than a specified time ago.

  • Ink 6.6 - Use React to build CLI apps, as used by Claude Code, Gemini CLI, and many others.

  • 🎨 Color.js v0.6 - The popular standards-compliant color conversion and manipulation library approaches its eventual 1.0 release.

  • Prisma 7.2, Deno 2.6.4

📖 Articles and Videos

How to Compile JavaScript to C with Static Hermes - The creator of Parcel is porting parts of the project to Rust, but this raises some challenges on interoperating with existing JavaScript plugins, especially without a runtime JS interpreter. What about compiling JavaScript to C libraries that can be called directly? It's possible!

Devon Govett

🦖 Build a Dinosaur Runner Game with Deno - An ongoing series of posts (part two and three are also available) on the official Deno blog where you get to recreate something akin to Chrome's Dinosaur Game for yourself.

Jo Franchetti

How CERN Cut Storage by 95% and 40x'd Query Speed with TimescaleDB - Learn how CERN engineers modernized Large Hadron Collider time-series data for performance, scale, and cost efficiency.

Tiger Data (creators of TimescaleDB) sponsor

Fixing TypeScript Performance Problems: A Case Study - A big monorepo-based TypeScript project was suffering sluggish IntelliSense, long type-checking times, and slow builds, but Solomon's team found some ways to significantly improve things.

Solomon Hawk

Why Object of Arrays (SoA Pattern) Beat Interleaved Arrays - A dive down a JavaScript performance rabbit hole.

Royal Bhati

📄 Brendan Eich Warns Against "Rushed Web UX Over Native" as Windows 11 Leans Harder on WebView2 and Electron Windows Latest

📄 Implementing Streaming JSON in Just 200 Lines of JavaScript Krasimir Tsonev

📄 Signals vs Query-Based Compilers Marvin Hagemeister

📄 The Nine Levels of JavaScript Dependency Hell Andrew Nesbitt

📄 How to Create a Pixel-to-Voxel Video Drop Effect with Three.js and Rapier Junichi Kasahara

🛠 Code & Tools

Schedule-X 3.6: A Material Design Calendar and Date Picker - Available in the form of React/Preact, Vue, Svelte, Angular, or plain JS components. Open source but with a premium version with extra features. GitHub repo.

Tom Österlund

📄 jsPDF 4.0: Client-Side JavaScript PDF Generation - Create tickets, documents, certificates, etc. all on the fly. There's a live demo, as well as thorough documentation.

Parallax

SurveyJS: JavaScript Libraries for Custom Web Forms - Keep full ownership of your data. Build JSON-driven forms in your app without SaaS limitations.

SurveyJS sponsor

Bruno 3.0: An Open-Source HTTP API Client App - There are a lot of 'API client' tools with varying levels of features, but this is open source and entirely built in JavaScript. v3.0 features a complete overhaul of the UI, adds workspaces for grouping things together, and more. GitHub repo.

Bruno Software Inc.

📰 Classifieds

🔑 Let users create their own API keys with Clerk. Built-in UI components, scopes, expiration & revocation. Now in public beta.

Trigger.dev handles queues, retries, and long-running tasks so you can build production-ready agents and TypeScript workflows reliably at scale.

📢 Elsewhere in the ecosystem

Some other interesting tidbits in the broader landscape:

06 Jan 2026 12:00am GMT