---
title: "A full-fledged canvas for Node.js apps"
publication: "Node Weekly"
issue: 558
published_at: "2024-12-03"
canonical_url: "https://nodeweekly.com/issues/558"
---

Plus Prisma 6, how Bluesky uses Node, and Undici gets a big caching update. |        

#​558 — December 3, 2024 

[Read on the Web](https://nodeweekly.com/issues/558)  

Together with [![Crunchy Bridge\](https://res.cloudinary.com/cpress/image/upload/c_fill,g_auto,w_1292,h_286/e_make_transparent/co_white,e_outline:17/somgpnjh8wivqxfry9ga.png)](https://www.crunchydata.com/products/crunchy-bridge?utm_source=cp-nd-112924)  

![Node.js Weekly](https://res.cloudinary.com/cpress/image/upload/v1653576619/lgfqinzbdqttwmhvljxb.png) 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/joyjhkhzmwskhngvuny9.jpg)](https://skia-canvas.org/)  

[Skia Canvas 2.0: A Browserless Canvas Environment for Node](https://skia-canvas.org/) — Based on Google’s [Skia graphics engine](https://skia.org) and offers end results similar to Chrome’s own canvas system. It’s GPU accelerated and can render images, paths, fonts, shapes, and (almost) everything you’d expect. v2.0 adds support for WOFF/WOFF2 fonts, WEBP exporting, and more. [GitHub repo.](https://github.com/samizdatco/skia-canvas) 

Christian Swinehart   [![\](https://res.cloudinary.com/cpress/image/upload/c_limit,w_480,h_480,q_auto/copm/288f8f26.png)](https://www.crunchydata.com/products/crunchy-bridge?utm_source=cp-nd-112924) 

[❤️ Postgres](https://www.crunchydata.com/products/crunchy-bridge?utm_source=cp-nd-112924) — You need a database provider that loves Postgres as much as you do. We'll take care of all the hassle - monitoring, backups, HA, disaster recovery so you don't have to. Want amazing support? We'll be there when you have questions. 

Crunchy Bridge sponsor   

[Prisma 6: Better Performance, More Flexibility and Type-Safe SQL](https://www.prisma.io/blog/prisma-6-better-performance-more-flexibility-and-type-safe-sql) — Prisma is a popular, powerful ORM for Node.js and TypeScript apps that takes pride in doing things a little differently to most. You can now use it easily with serverless database platforms like PlanetScale and Neon, as well as in edge function platforms like Cloudflare Workers. D1 and Turso are now supported, and you can also [write _type-safe raw SQL queries_.](https://www.prisma.io/blog/prisma-6-better-performance-more-flexibility-and-type-safe-sql#typed-sql-type-safe-raw-sql-queries) There’s a [Prisma ORM 6 upgrade guide](https://www.prisma.io/docs/orm/more/upgrade-guides/upgrading-versions/upgrading-to-prisma-6) if you’re an existing user. 

Nikolas Burk (Prisma)   

💡 The Prisma team is also looking to the future and has [produced a manifesto explaining their priorities going forward,](https://www.prisma.io/blog/prisma-orm-manifesto) including migrating Prisma's core logic from Rust to TypeScript.  

**IN BRIEF:** 

- [Porffor](https://porffor.dev/) is an interesting ahead-of-time JavaScript compiler, now complete with a snazzy new homepage.
- The Linux Foundation is offering discounts [on its Node.js courses and certifications](https://training.linuxfoundation.org/cyber-monday-openjs-2024/) over the next week.
- 🎄 If you fancy a daily programming challenge in the run up to Christmas, don't forget that the [Advent of Code 2024](https://adventofcode.com/) has begun.
- [test262.fyi](https://test262.fyi/) presents an interesting technical view of how different JavaScript engines fare on the official ECMAScript conformance test suite.   

[Inside Bluesky’s Engineering Culture](https://newsletter.pragmaticengineer.com/p/bluesky-engineering-culture) — An interesting writeup from May 2024 that’s perhaps become more relevant with Bluesky’s recent rapid ascent. Node.js sits at the heart of the social network’s backend (along with other technologies). 

Gergely Orosz and Elin Nilsson   

[Zero Ops Apache Kafka Replication and Data Mirroring](https://www.warpstream.com/orbit-apache-kafka-migration-and-replication?utm_source=node_weekly&utm_medium=email&utm_campaign=dec_3_24_sponsored_link_node_weekly) — Moving to WarpStream to reduce your Kafka costs by 80+% and simplify ops is easy with 1:1 replication provided by Orbit. 

WarpStream sponsor   

📄 [Writing Composable SQL using Knex and Pipelines](https://lackofimagination.org/2024/11/writing-composable-sql-using-knex-and-pipelines/) Aycan Gulez 

📄 [Using Generative AI to Parse Web Pages into Data](https://www.raymondcamden.com/2024/11/27/using-generative-ai-to-parse-web-pages-into-data) – Raymond turns to Google’s _Gemini._ Raymond Camden 

📄 [Unit Testing in Node with Jest](https://blog.appsignal.com/2024/11/27/unit-testing-in-nodejs-with-jest.html) Antonello Zanini 

📄 [Building Deep-Links in an Electron App](https://www.bigbinary.com/blog/deep-link-electron-app) Farhan CK    

🛠 Code & Tools 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/xop0unnwdez4vbvtnqrg.jpg)](https://blog.platformatic.dev/undici-v7-is-here)  

[Undici v7: The Modern HTTP Client Library for Node](https://blog.platformatic.dev/undici-v7-is-here) — A major release for a fundamental Node.js project. This release brings RFC-9111-compliant [client-side HTTP caching](https://blog.platformatic.dev/bringing-http-caching-to-nodejs), stricter `fetch()` spec compliance, `WebSocketStream`, and a new way to completely customize the lifecycle of requests. 

Matteo Collina   

[VineJS 3.0: Form Data Validation Library for Node Apps](https://vinejs.dev/docs/introduction) — A fast validation library for data received by your backend app, providing both runtime and static type safety, and handling form data and JSON payloads. [v3.0](https://github.com/vinejs/vine/releases/tag/v3.0.0) has a few breaking changes to be aware of. 

VineJS Contributors   

[Kaluma: A Tiny JS Runtime for the Raspberry Pi Pico](https://kalumajs.org/) — Can a JavaScript runtime squeeze into the 64KB necessary to run on the RP2040-based Raspberry Pi Pico? Kaluma can, all while offering some Node.js-like niceties. 

Kaluma Project   

[A Way to Call Node.js Functions from Elixir](https://github.com/revelrylabs/elixir-nodejs) — [Elixir](https://elixir-lang.org/) is a Ruby-inspired, Erlang VM-based language and this provides a way for Elixir apps to call Node functions. 

Revelry       

📰 Classifieds   

🪝 [Hookdeck](https://hookdeck.com/?ref=nodeweekly-558): A serverless queue to reliably send, receive, transform, filter, and route events across your event-driven apps. 

--- 

🔧 Still coding around process crashes, API downtime, and race conditions? [See how durable execution solves these problems in our coding demo](https://t.mp/4eVM9nH). 

--- 

🌐 Caching is the backbone of fast, responsive apps, but when done wrong, things get BAD. We've done a deep dive into [HTTP caching fundamentals](https://www.youtube.com/watch?v=PtHoUMPkCZQ&t=1s).     

[png2embeddedjson: Convert PNGs to Base64-Encoded RGB565 in JSON](https://www.npmjs.com/package/png2embeddedjson) — Niche, but has utility in embedding images directly into apps used on microcontrollers to drive small RGB displays. Both a library and CLI tool. 

Andrew Chalkley   

[Oniguruma-to-ES: Convert Patterns from the Oniguruma Regex Engine to Native JS](https://github.com/slevithan/oniguruma-to-es) — [Oniguruma](https://github.com/kkos/oniguruma) is a powerful regex engine used by Ruby, TextMate, and other projects. This could be useful if you need to share regexes between Ruby, TextMate grammars, and JavaScript, say. There’s [a demo.](https://slevithan.github.io/oniguruma-to-es/demo/) 

Steven Levithan   

- [NeutralinoJS 5.5](https://neutralino.js.org/docs/release-notes/framework/#v550) – The popular lightweight cross platform app platform (and alternative to Electron).
- [Vite 6.0](https://vite.dev/blog/announcing-vite6) – A big release for the popular frontend build tool. Node.js 21 support has been dropped.
- 🤖 [node-llama-cpp 3.3](https://github.com/withcatai/node-llama-cpp) – Run LLMs locally with bindings to`llama.cpp`.
- [NodeGui 0.70](https://github.com/nodegui/nodegui) – Qt6-powered way to build cross-platform native desktop apps.
- [Faker 9.3](https://github.com/faker-js/faker/releases/tag/v9.3.0) – Generate fabricated data to your heart's content.
- [apns2 12.0](https://github.com/AndrewBarba/apns2) – Client for Apple's Push Notification Service.
- 🎹 [JZZ 1.8.7](https://jazz-soft.net/doc/JZZ/) – MIDI library for Node and browsers.
- [ArangoJS 9.2](https://github.com/arangodb/arangojs/releases/tag/v9.2.0) – Driver for the [ArangoDB](https://arangodb.com/) graph database.
- [lmdb-js 3.2](https://github.com/kriszyp/lmdb-js) – Data store wrapper for LMDB.
- [DOCX 9.1](https://github.com/dolanmiu/docx) – Generate .docx / Word files.
- [Opossum 8.4](https://github.com/nodeshift/opossum) – Circuit breaker library.
- [ESLint v9.16.0](https://eslint.org/blog/2024/11/eslint-v9.16.0-released/)
- [Meteor.js 3.1](https://blog.meteor.com/meteor-js-3-1-a-new-dawn-for-full-stack-javascript-development-fe54c372c314)    

**Got a link for us?** Reply and tell us. We can't include everything but we'll look at anything you send. _Thanks!_ 

--- 

**Sponsorship:** Email `[kristina@cooperpress.com](mailto:kristina@cooperpress.com)` for details. 

--- 

Published by Cooper Press Ltd.
Fairfield Enterprise Centre, Louth, LN11 0LS, United Kingdom 

[Cancel your subscription](https://nodeweekly.com/leave/*|UID|*) or [change your address](https://nodeweekly.com/edit_subscription/*|UID|*).
