#Bun has been acquired by #Anthropic and subsequently sloppified and #Deno has been acquired by #Cloudflare and subsequently killed. So doing nothing and staying on #Node is a huge win after all. 🙃️
Hashtag
#Deno
580 posts tagged with this hashtag.
It all makes sense now. 😅
#celld build was proof #Deno can run as a #cloudflare thing.
blog.cloudflare.com
Deno is joining Cloudflare
The Deno team is joining Cloudflare to radically simplify self-hosting Workers and Durable Objects, so developers can use the same primitives in more places.
@marvinh #deno :
Do you / fresh join #cloudflare too ?
So #Deno is dead, looks like the @silverbulletmd pivot away from it some time ago was the right one. https://deno.com/blog/cloudflare
deno.com
Deno is joining Cloudflare | Deno
Putting ourselves in the best place to build the future of the web
Welp there it is: #Deno is joining Cloudflare and the Deno cli will EOL in a year.
https://blog.cloudflare.com/deno-joins-cloudflare/
Dropserver uses Deno as its sandbox, so this is not great news. I'll post a blog about this and https://Dropserver.org in general soon.
dropserver.org
Dropserver Personal Application Server
People, let's just imagine.
I mean, very calm, far from reality just imagine [meditative music starts] :
You had spent the past 3 years fulltime to build a codebase for 3 different fedi-projects on #deno
What would you do, what would happy trees do and what would Jesus have done ?
Friendship Ended With Deno, Now Node Is My Best Friend, by @dbushell@fosstodon.org:
https://dbushell.com/2026/10/03/deno-to-node/?ref=frontenddogma.com
dbushell.com
Friendship ended with Deno, now Node is my best friend
The one where I go crawling back.
LogTape 2.4.0 is out. #LogTape is a zero-dependency #logging library for #JavaScript and #TypeScript that runs on #Deno, #Node.js, #Bun, and browsers.
The main changes:
- Opt-in source locations:
captureSourceLocationrecords where each log call was made, and the text formatters can show it. Meant for development, since it costs a stack trace per call. inspectLogger()reports how a logger's level, inherited sinks, and filters combine, so you can see why a record doesn't reach a sink.parentSinks: "forward"lets a child category inherit its ancestors' sinks without their level thresholds.drain()waits for pending sink output without disposing of the sinks, andfromAsyncSink()gets queue limits and awaitUntilhook for serverless platforms.fingersCrossed()can go back to buffering after a trigger, and flush or discard buffers per request.- The Express, Hono, Koa, and Elysia integrations take a
completionLevelcallback that picks the log level from the response.
Two changes can affect existing code: getRotatingFileSink() now requires maxFiles to be an integer from 1 to 1,000, and TextFormatterOptions.value now also accepts "bare", so code that calls it directly has to check its type first.
github.com
LogTape 2.4.0: Source locations, configuration inspection, sink draining, and request completion levels · dahlia/logtape · Discussion #254
LogTape is a logging library for JavaScript and TypeScript that works across Deno, Node.js, Bun, and browsers. It's built around structured logging, has zero dependencies, and is designed to work a...
LogTape 2.4.0 is out. #LogTape is a zero-dependency #logging library for #JavaScript and #TypeScript that runs on #Deno, #Node.js, #Bun, and browsers.
The main changes:
- Opt-in source locations:
captureSourceLocationrecords where each log call was made, and the text formatters can show it. Meant for development, since it costs a stack trace per call. inspectLogger()reports how a logger's level, inherited sinks, and filters combine, so you can see why a record doesn't reach a sink.parentSinks: "forward"lets a child category inherit its ancestors' sinks without their level thresholds.drain()waits for pending sink output without disposing of the sinks, andfromAsyncSink()gets queue limits and awaitUntilhook for serverless platforms.fingersCrossed()can go back to buffering after a trigger, and flush or discard buffers per request.- The Express, Hono, Koa, and Elysia integrations take a
completionLevelcallback that picks the log level from the response.
Two changes can affect existing code: getRotatingFileSink() now requires maxFiles to be an integer from 1 to 1,000, and TextFormatterOptions.value now also accepts "bare", so code that calls it directly has to check its type first.
github.com
LogTape 2.4.0: Source locations, configuration inspection, sink draining, and request completion levels · dahlia/logtape · Discussion #254
LogTape is a logging library for JavaScript and TypeScript that works across Deno, Node.js, Bun, and browsers. It's built around structured logging, has zero dependencies, and is designed to work a...
LogTape 2.4.0 is out. #LogTape is a zero-dependency #logging library for #JavaScript and #TypeScript that runs on #Deno, #Node.js, #Bun, and browsers.
The main changes:
- Opt-in source locations:
captureSourceLocationrecords where each log call was made, and the text formatters can show it. Meant for development, since it costs a stack trace per call. inspectLogger()reports how a logger's level, inherited sinks, and filters combine, so you can see why a record doesn't reach a sink.parentSinks: "forward"lets a child category inherit its ancestors' sinks without their level thresholds.drain()waits for pending sink output without disposing of the sinks, andfromAsyncSink()gets queue limits and awaitUntilhook for serverless platforms.fingersCrossed()can go back to buffering after a trigger, and flush or discard buffers per request.- The Express, Hono, Koa, and Elysia integrations take a
completionLevelcallback that picks the log level from the response.
Two changes can affect existing code: getRotatingFileSink() now requires maxFiles to be an integer from 1 to 1,000, and TextFormatterOptions.value now also accepts "bare", so code that calls it directly has to check its type first.
github.com
LogTape 2.4.0: Source locations, configuration inspection, sink draining, and request completion levels · dahlia/logtape · Discussion #254
LogTape is a logging library for JavaScript and TypeScript that works across Deno, Node.js, Bun, and browsers. It's built around structured logging, has zero dependencies, and is designed to work a...
I'm digging into the #ubuntu #autoinstall. The goal: see how far I can go with the machine setup I want as base for all things. And... It looks like, with a little #Deno, I'm making a frankenstein. 🤣
https://canonical-subiquity.readthedocs-hosted.com/en/latest/intro-to-autoinstall.html#
canonical-subiquity.readthedocs-hosted.com
Introduction to autoinstall
Automatic Ubuntu installation is performed with the autoinstall format. You might also know this feature as “unattended”, “hands-off” or “preseeded” installation. This format is supported in the fo...
Woah, so #Deno made a new runtime called #celld. Basically #cloudflare worker durable objects ecosystem, but fully self hosted. 😅
Durable objects is basically a love letter to the #BEAM. 😉 I'm going to have to play with this.
celld.dev
celld documentation · celld
Documentation for the self-hosted celld runtime.
So @deno_land put a breaking change in 2.9 but don't mention that there was a breaking change in their release notes or blog post. Not great.
The release notes: https://github.com/denoland/deno/releases#release-v2.9.0
Blog post: https://deno.com/blog/v2.9
Actual breaking change: https://github.com/denoland/deno/pull/34395
It caused Dropserver apps to fail to start if you we were running Deno 2.9. I am working on a fix.
Hopefully this is not the beginning of a trend. i used to praise #Deno's stability.
github.com
fix(permissions): require --allow-net for Unix domain socket ops by bartlomieju · Pull Request #34395 · denoland/deno
Unix socket connect and listen (Deno.connect / Deno.listen / Deno.listenDatagram with transport: "unix" or "unixpacket", plus Deno.DatagramConn.send) checked only filesystem per...
#LogTape 2.2.0 is out!
The headline is two new packages:
@logtape/lint adds lint rules for ESLint v8/v9 (flat config), Oxlint, and Deno Lint that catch common logging mistakes before they reach production: template literal interpolation in message arguments, eager property evaluation where lazy is needed, unawaited async log callbacks, and missing meta sink configuration.
@logtape/testing gives you createLogRecorder() and domain-aware assertion helpers, replacing the hand-rolled array-sink boilerplate that every project ends up writing.
Other highlights:
-
context: trueon Express/Hono/Koa/Elysia middleware handles request ID generation,x-request-idheader propagation, and implicit context. One option instead of several moving parts. -
Seven performance optimizations on the enabled-logging hot path
-
New logtape.org website
Full release notes: https://github.com/dahlia/logtape/discussions/179
#JavaScript #TypeScript #Deno #Node #NodeJS #Bun #logging #opensource
github.com
LogTape 2.2.0: Lint rules, testing utilities, and request context · dahlia/logtape · Discussion #179
LogTape is a logging library for JavaScript and TypeScript that works across Deno, Node.js, Bun, and browsers. It's built around structured logging, has zero dependencies, and is designed to work a...
#LogTape 2.2.0 is out!
The headline is two new packages:
@logtape/lint adds lint rules for ESLint v8/v9 (flat config), Oxlint, and Deno Lint that catch common logging mistakes before they reach production: template literal interpolation in message arguments, eager property evaluation where lazy is needed, unawaited async log callbacks, and missing meta sink configuration.
@logtape/testing gives you createLogRecorder() and domain-aware assertion helpers, replacing the hand-rolled array-sink boilerplate that every project ends up writing.
Other highlights:
-
context: trueon Express/Hono/Koa/Elysia middleware handles request ID generation,x-request-idheader propagation, and implicit context. One option instead of several moving parts. -
Seven performance optimizations on the enabled-logging hot path
-
New logtape.org website
Full release notes: https://github.com/dahlia/logtape/discussions/179
#JavaScript #TypeScript #Deno #Node #NodeJS #Bun #logging #opensource
github.com
LogTape 2.2.0: Lint rules, testing utilities, and request context · dahlia/logtape · Discussion #179
LogTape is a logging library for JavaScript and TypeScript that works across Deno, Node.js, Bun, and browsers. It's built around structured logging, has zero dependencies, and is designed to work a...
#LogTape 2.2.0 is out!
The headline is two new packages:
@logtape/lint adds lint rules for ESLint v8/v9 (flat config), Oxlint, and Deno Lint that catch common logging mistakes before they reach production: template literal interpolation in message arguments, eager property evaluation where lazy is needed, unawaited async log callbacks, and missing meta sink configuration.
@logtape/testing gives you createLogRecorder() and domain-aware assertion helpers, replacing the hand-rolled array-sink boilerplate that every project ends up writing.
Other highlights:
-
context: trueon Express/Hono/Koa/Elysia middleware handles request ID generation,x-request-idheader propagation, and implicit context. One option instead of several moving parts. -
Seven performance optimizations on the enabled-logging hot path
-
New logtape.org website
Full release notes: https://github.com/dahlia/logtape/discussions/179
#JavaScript #TypeScript #Deno #Node #NodeJS #Bun #logging #opensource
github.com
LogTape 2.2.0: Lint rules, testing utilities, and request context · dahlia/logtape · Discussion #179
LogTape is a logging library for JavaScript and TypeScript that works across Deno, Node.js, Bun, and browsers. It's built around structured logging, has zero dependencies, and is designed to work a...
#LogTape 2.2.0 is out!
The headline is two new packages:
@logtape/lint adds lint rules for ESLint v8/v9 (flat config), Oxlint, and Deno Lint that catch common logging mistakes before they reach production: template literal interpolation in message arguments, eager property evaluation where lazy is needed, unawaited async log callbacks, and missing meta sink configuration.
@logtape/testing gives you createLogRecorder() and domain-aware assertion helpers, replacing the hand-rolled array-sink boilerplate that every project ends up writing.
Other highlights:
-
context: trueon Express/Hono/Koa/Elysia middleware handles request ID generation,x-request-idheader propagation, and implicit context. One option instead of several moving parts. -
Seven performance optimizations on the enabled-logging hot path
-
New logtape.org website
Full release notes: https://github.com/dahlia/logtape/discussions/179
#JavaScript #TypeScript #Deno #Node #NodeJS #Bun #logging #opensource
github.com
LogTape 2.2.0: Lint rules, testing utilities, and request context · dahlia/logtape · Discussion #179
LogTape is a logging library for JavaScript and TypeScript that works across Deno, Node.js, Bun, and browsers. It's built around structured logging, has zero dependencies, and is designed to work a...
I Wish Deno Would Keep Doing What It Does Best, by @hongminhee:
hackers.pub
I wish Deno would keep doing what it does best
Deno emerged as a solution to the overwhelming configuration requirements of the modern TypeScript ecosystem by offering a zero-config, single-binary experience. By integrating essential tools for formatting, linting, and testing alongside web-standard APIs, it removed the tedious setup rituals that often deterred developers. Recently, however, Deno has pivoted toward deep Node.js compatibility, supporting npm packages and traditional module structures to accelerate adoption. This shift creates a strategic risk where high compatibility might inadvertently discourage developers from targeting Deno’s unique APIs, especially as Node.js adopts Deno’s innovations like native TypeScript support and permission models. Commercial pressures may be forcing a prioritization of rapid growth and compatibility over the patient development of a truly self-sufficient, vertically integrated toolchain. While Deno remains a powerful choice, its convergence with the legacy ecosystem suggests a move away from the radical simplicity that originally defined its mission. The ongoing convergence of runtimes serves as a vital reminder of the trade-offs between technical purity and the demands of commercial viability.
I Wish Deno Would Keep Doing What It Does Best, by @hongminhee:
hackers.pub
I wish Deno would keep doing what it does best
Deno emerged as a solution to the overwhelming configuration requirements of the modern TypeScript ecosystem by offering a zero-config, single-binary experience. By integrating essential tools for formatting, linting, and testing alongside web-standard APIs, it removed the tedious setup rituals that often deterred developers. Recently, however, Deno has pivoted toward deep Node.js compatibility, supporting npm packages and traditional module structures to accelerate adoption. This shift creates a strategic risk where high compatibility might inadvertently discourage developers from targeting Deno’s unique APIs, especially as Node.js adopts Deno’s innovations like native TypeScript support and permission models. Commercial pressures may be forcing a prioritization of rapid growth and compatibility over the patient development of a truly self-sufficient, vertically integrated toolchain. While Deno remains a powerful choice, its convergence with the legacy ecosystem suggests a move away from the radical simplicity that originally defined its mission. The ongoing convergence of runtimes serves as a vital reminder of the trade-offs between technical purity and the demands of commercial viability.
I just found out that my code is slower than zod (both zod 3 and zod 4).
techhub.social
Sal Rahman (@manlycoffee@techhub.social)
I have finally released version 1.0 of hyperguard library that I have written 4 years ago, but has been sitting in version 0.1, 0.2, and finally 0.3 without any update since. Version 1 improved the API, and some refactoring was made to remove the reliance of the `any` type. Anyways, check it out. https://github.com/shovon/hyperguard #TypeScript #JavaScript #NodeJS #BunJS #Deno #ECMA262 #ECMAScript
I have finally released version 1.0 of hyperguard library that I have written 4 years ago, but has been sitting in version 0.1, 0.2, and finally 0.3 without any update since.
Version 1 improved the API, and some refactoring was made to remove the reliance of the `any` type.
Anyways, check it out. https://github.com/shovon/hyperguard
#TypeScript #JavaScript #NodeJS #BunJS #Deno #ECMA262 #ECMAScript
github.com
GitHub - shovon/hyperguard: Supercharge your TypeScript type guards with this dead simple object validation library
Supercharge your TypeScript type guards with this dead simple object validation library - shovon/hyperguard
I have finally released version 1.0 of hyperguard library that I have written 4 years ago, but has been sitting in version 0.1, 0.2, and finally 0.3 without any update since.
Version 1 improved the API, and some refactoring was made to remove the reliance of the `any` type.
Anyways, check it out. https://github.com/shovon/hyperguard
#TypeScript #JavaScript #NodeJS #BunJS #Deno #ECMA262 #ECMAScript
github.com
GitHub - shovon/hyperguard: Supercharge your TypeScript type guards with this dead simple object validation library
Supercharge your TypeScript type guards with this dead simple object validation library - shovon/hyperguard
Deno 2.8.0 is out. The compatibility work is real: the #Node.js test suite pass rate jumped from 42% to 76.4%, deno install is now a drop-in for npm install, lib.node is included by default, and setTimeout() now returns a NodeJS.Timeout instead of a number. None of that is irrational on its own. Put it together, though, and #Deno starts looking less like an alternative to Node.js and more like a cleaner way to run Node.js-shaped code.
It reminds me of OS/2's Win32 compatibility layer. IBM offered it so developers wouldn't have to choose, but the effect was the opposite: people kept writing Windows apps, and OS/2-native software never got a reason to exist. The closer Deno gets to Node.js, the less reason anyone has to think about whether their code is Deno-aware. Maybe that helps adoption. I just don't see how a Deno-native package culture survives if the winning path is “pretend it's npm.”
deno.com
Deno 2.8 | Deno
`import defer`, six new subcommands (`deno transpile`, `deno pack`, `deno bump-version`, `deno ci`, `deno why`, `deno audit fix`), network debugging in Chrome DevTools, framework-aware `deno compile`, and 3.66x faster cold npm installs.
Deno 2.8.0 is out. The compatibility work is real: the #Node.js test suite pass rate jumped from 42% to 76.4%, deno install is now a drop-in for npm install, lib.node is included by default, and setTimeout() now returns a NodeJS.Timeout instead of a number. None of that is irrational on its own. Put it together, though, and #Deno starts looking less like an alternative to Node.js and more like a cleaner way to run Node.js-shaped code.
It reminds me of OS/2's Win32 compatibility layer. IBM offered it so developers wouldn't have to choose, but the effect was the opposite: people kept writing Windows apps, and OS/2-native software never got a reason to exist. The closer Deno gets to Node.js, the less reason anyone has to think about whether their code is Deno-aware. Maybe that helps adoption. I just don't see how a Deno-native package culture survives if the winning path is “pretend it's npm.”
deno.com
Deno 2.8 | Deno
`import defer`, six new subcommands (`deno transpile`, `deno pack`, `deno bump-version`, `deno ci`, `deno why`, `deno audit fix`), network debugging in Chrome DevTools, framework-aware `deno compile`, and 3.66x faster cold npm installs.
Deno 2.8.0 is out. The compatibility work is real: the #Node.js test suite pass rate jumped from 42% to 76.4%, deno install is now a drop-in for npm install, lib.node is included by default, and setTimeout() now returns a NodeJS.Timeout instead of a number. None of that is irrational on its own. Put it together, though, and #Deno starts looking less like an alternative to Node.js and more like a cleaner way to run Node.js-shaped code.
It reminds me of OS/2's Win32 compatibility layer. IBM offered it so developers wouldn't have to choose, but the effect was the opposite: people kept writing Windows apps, and OS/2-native software never got a reason to exist. The closer Deno gets to Node.js, the less reason anyone has to think about whether their code is Deno-aware. Maybe that helps adoption. I just don't see how a Deno-native package culture survives if the winning path is “pretend it's npm.”
deno.com
Deno 2.8 | Deno
`import defer`, six new subcommands (`deno transpile`, `deno pack`, `deno bump-version`, `deno ci`, `deno why`, `deno audit fix`), network debugging in Chrome DevTools, framework-aware `deno compile`, and 3.66x faster cold npm installs.
Fedify is an #ActivityPub server framework in #TypeScript & #JavaScript. It aims to eliminate the complexity and redundant boilerplate code when building a federated server app, so that you can focus on your business logic and user experience.
The key features it provides currently are:
- Type-safe objects for Activity Vocabulary (including some vendor-specific extensions)
- #WebFinger client and server
- HTTP Signatures & Linked Data Signatures & Object Integrity Proofs
- Middleware for handling webhooks
- #NodeInfo protocol
- #Node.js, #Deno, and #Bun support
- CLI toolchain for testing and debugging
If you're curious, take a look at the #Fedify website! There's comprehensive docs, a demo, a tutorial, example code, and more:
A few notes on why #SilverBullet recently migrated from #Deno to #Node https://community.silverbullet.md/t/migrating-silverbullet-plugs-from-deno-to-node/3957/7?u=zef
community.silverbullet.md
Migrating SilverBullet Plugs from Deno to Node
So the move away from Deno has a long history. A bit of context, for those who are interested: The very first prototypes of SilverBullet were built on node.js as backend, and built the frontend with node.js-tooling as well. Then I had this idea of allowing for a sandboxed plugin mechanism where plugins could transparently either be run in the browser (in an iframe or webworker) or on the server. I managed to get this to work on the server somewhat with node, but it was clear that node was not r...
#Optique 1.0.0 is out! If you build #CLI tools with #TypeScript, it might be worth a look.
I started it because I wanted a TypeScript CLI parser that felt more like optparse-applicative than the usual builder-style APIs. You build up small typed parsers, compose them, and TypeScript infers the result. It handles subcommands, option dependencies, shell completion, and man pages, and it runs on #Deno, #Node.js, and #Bun.
For 1.0 I added @optique/env, so env vars can fill in missing flags, and @optique/inquirer, so missing values can fall back to Inquirer.js prompts. I also cleaned up a lot of awkward API edges and fixed a long backlog of completion bugs across five shells.
Packages are on JSR and npm.
github.com
Optique 1.0.0: environment variables, interactive prompts, and 1.0 API cleanup · dahlia/optique · Discussion #796
Optique is a type-safe combinatorial CLI parser for TypeScript, inspired by Haskell's optparse-applicative and TypeScript's Zod. It takes a functional approach: you compose small, typed parsers int...
#Optique 1.0.0 is out! If you build #CLI tools with #TypeScript, it might be worth a look.
I started it because I wanted a TypeScript CLI parser that felt more like optparse-applicative than the usual builder-style APIs. You build up small typed parsers, compose them, and TypeScript infers the result. It handles subcommands, option dependencies, shell completion, and man pages, and it runs on #Deno, #Node.js, and #Bun.
For 1.0 I added @optique/env, so env vars can fill in missing flags, and @optique/inquirer, so missing values can fall back to Inquirer.js prompts. I also cleaned up a lot of awkward API edges and fixed a long backlog of completion bugs across five shells.
Packages are on JSR and npm.
github.com
Optique 1.0.0: environment variables, interactive prompts, and 1.0 API cleanup · dahlia/optique · Discussion #796
Optique is a type-safe combinatorial CLI parser for TypeScript, inspired by Haskell's optparse-applicative and TypeScript's Zod. It takes a functional approach: you compose small, typed parsers int...
#Optique 1.0.0 is out! If you build #CLI tools with #TypeScript, it might be worth a look.
I started it because I wanted a TypeScript CLI parser that felt more like optparse-applicative than the usual builder-style APIs. You build up small typed parsers, compose them, and TypeScript infers the result. It handles subcommands, option dependencies, shell completion, and man pages, and it runs on #Deno, #Node.js, and #Bun.
For 1.0 I added @optique/env, so env vars can fill in missing flags, and @optique/inquirer, so missing values can fall back to Inquirer.js prompts. I also cleaned up a lot of awkward API edges and fixed a long backlog of completion bugs across five shells.
Packages are on JSR and npm.
github.com
Optique 1.0.0: environment variables, interactive prompts, and 1.0 API cleanup · dahlia/optique · Discussion #796
Optique is a type-safe combinatorial CLI parser for TypeScript, inspired by Haskell's optparse-applicative and TypeScript's Zod. It takes a functional approach: you compose small, typed parsers int...
@geerlingguy it's gotten really bad. That's why for a while now I've only been developing in a DevContainer. For my side projects, I'm relying more and more on #Deno, as I hope its security architecture will prevent exactly these kinds of threats.
We're excited to announce the release of BotKit 0.3.0! This release marks a significant milestone as #BotKit now supports #Node.js alongside #Deno, making it accessible to a wider audience. The minimum required Node.js version is 22.0.0. This dual-runtime support means you can now choose your preferred #JavaScript runtime while building #ActivityPub #bots with the same powerful BotKit APIs.
One of the most requested features has landed: poll support! You can now create interactive polls in your #bot messages, allowing followers to vote on questions with single or multiple-choice options. Polls are represented as ActivityPub Question objects with proper expiration times, and your bot can react to votes through the new onVote event handler. This feature enhances engagement possibilities and brings BotKit to feature parity with major #fediverse platforms like Mastodon and Misskey.
// Create a poll with multiple choices
await session.publish(text`What's your favorite programming language?`, {
class: Question,
poll: {
multiple: true, // Allow multiple selections
options: ["JavaScript", "TypeScript", "Python", "Rust"],
endTime: Temporal.Now.instant().add({ hours: 24 }),
},
});
// Handle votes
bot.onVote = async (session, vote) => {
console.log(`${vote.actor} voted for "${vote.option}"`);
};The web frontend has been enhanced with a new followers page, thanks to the contribution from Hyeonseo Kim (@gaebalgom)! The /followers route now displays a paginated list of your bot's followers, and the follower count on the main profile page is now clickable, providing better visibility into your bot's audience. This improvement makes the web interface more complete and user-friendly.
For developers looking for alternative storage backends, we've introduced the SqliteRepository through the new @fedify/botkit-sqlite package. This provides a production-ready SQLite-based storage solution with ACID compliance, write-ahead logging (WAL) for optimal performance, and proper indexing. Additionally, the new @fedify/botkit/repository module offers MemoryCachedRepository for adding an in-memory cache layer on top of any repository implementation, improving read performance for frequently accessed data.
This release also includes an important security update: we've upgraded to #Fedify 1.8.8, ensuring your bots stay secure and compatible with the latest ActivityPub standards. The repository pattern has been expanded with new interfaces and types like RepositoryGetMessagesOptions, RepositoryGetFollowersOptions, and proper support for polls storage through the KvStoreRepositoryPrefixes.polls option, providing more flexibility for custom implementations.
botkit.fedify.dev
Repository | BotKit by Fedify
A repository is a data access object that provides an abstraction over the underlying data source. This document provides an overview of repositories and how they are used in the framework.
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Fedify is an #ActivityPub server framework in #TypeScript & #JavaScript. It aims to eliminate the complexity and redundant boilerplate code when building a federated server app, so that you can focus on your business logic and user experience.
The key features it provides currently are:
- Type-safe objects for Activity Vocabulary (including some vendor-specific extensions)
- #WebFinger client and server
- HTTP Signatures & Linked Data Signatures & Object Integrity Proofs
- Middleware for handling webhooks
- #NodeInfo protocol
- #Node.js, #Deno, and #Bun support
- CLI toolchain for testing and debugging
If you're curious, take a look at the #Fedify website! There's comprehensive docs, a demo, a tutorial, example code, and more:
Fedify is an #ActivityPub server framework in #TypeScript & #JavaScript. It aims to eliminate the complexity and redundant boilerplate code when building a federated server app, so that you can focus on your business logic and user experience.
The key features it provides currently are:
- Type-safe objects for Activity Vocabulary (including some vendor-specific extensions)
- #WebFinger client and server
- HTTP Signatures & Linked Data Signatures & Object Integrity Proofs
- Middleware for handling webhooks
- #NodeInfo protocol
- #Node.js, #Deno, and #Bun support
- CLI toolchain for testing and debugging
If you're curious, take a look at the #Fedify website! There's comprehensive docs, a demo, a tutorial, example code, and more:
Fedify is an #ActivityPub server framework in #TypeScript & #JavaScript. It aims to eliminate the complexity and redundant boilerplate code when building a federated server app, so that you can focus on your business logic and user experience.
The key features it provides currently are:
- Type-safe objects for Activity Vocabulary (including some vendor-specific extensions)
- #WebFinger client and server
- HTTP Signatures & Linked Data Signatures & Object Integrity Proofs
- Middleware for handling webhooks
- #NodeInfo protocol
- #Node.js, #Deno, and #Bun support
- CLI toolchain for testing and debugging
If you're curious, take a look at the #Fedify website! There's comprehensive docs, a demo, a tutorial, example code, and more:
Fedify is an #ActivityPub server framework in #TypeScript & #JavaScript. It aims to eliminate the complexity and redundant boilerplate code when building a federated server app, so that you can focus on your business logic and user experience.
The key features it provides currently are:
- Type-safe objects for Activity Vocabulary (including some vendor-specific extensions)
- #WebFinger client and server
- HTTP Signatures & Linked Data Signatures & Object Integrity Proofs
- Middleware for handling webhooks
- #NodeInfo protocol
- #Node.js, #Deno, and #Bun support
- CLI toolchain for testing and debugging
If you're curious, take a look at the #Fedify website! There's comprehensive docs, a demo, a tutorial, example code, and more:
Hongdown 0.2.0 is out! Hongdown is an opinionated #Markdown formatter written in #Rust, and this release brings #WebAssembly support, so you can now use it as a library in #Node.js, #Bun, #Deno, and browsers.
New features:
- Smart heading sentence case conversion with ~450 built-in proper nouns
- SmartyPants-style typographic punctuation (
"straight"→“curly”) - External code formatter integration for code blocks
- Directory argument support for batch formatting
Try it in the browser: https://dahlia.github.io/hongdown/
Release notes: https://github.com/dahlia/hongdown/discussions/10
github.com
Hongdown 0.2.0: WebAssembly support and smart typography · dahlia/hongdown · Discussion #10
We're excited to announce Hongdown 0.2.0! This release brings major new features including WebAssembly support, smart heading capitalization, typographic punctuation transformation, and external co...
Hongdown 0.2.0 is out! Hongdown is an opinionated #Markdown formatter written in #Rust, and this release brings #WebAssembly support, so you can now use it as a library in #Node.js, #Bun, #Deno, and browsers.
New features:
- Smart heading sentence case conversion with ~450 built-in proper nouns
- SmartyPants-style typographic punctuation (
"straight"→“curly”) - External code formatter integration for code blocks
- Directory argument support for batch formatting
Try it in the browser: https://dahlia.github.io/hongdown/
Release notes: https://github.com/dahlia/hongdown/discussions/10
github.com
Hongdown 0.2.0: WebAssembly support and smart typography · dahlia/hongdown · Discussion #10
We're excited to announce Hongdown 0.2.0! This release brings major new features including WebAssembly support, smart heading capitalization, typographic punctuation transformation, and external co...
Bun was bought by Anthropic. For #web devs, it's now:
#Node - OpenJS (non-profit)
vs
#Deno - Deno Land Inc (for-profit)
vs
#Bun - Anthropic (for-profit valued at $350 billion)
https://www.anthropic.com/news/anthropic-acquires-bun-as-claude-code-reaches-usd1b-milestone
anthropic.com
Anthropic acquires Bun as Claude Code reaches $1B milestone
Anthropic is an AI safety and research company that's working to build reliable, interpretable, and steerable AI systems.
#BotKit is a #TypeScript framework for building #ActivityPub bots. The difference from typical Mastodon/Misskey bots? Your bot runs as its own independent server—no platform account needed.
This means no character limits, no rate limiting headaches, no API restrictions.
bot.onMention = async (session, message) => {
await message.reply(text`Hi, ${message.actor}!`);
};The ActivityPub stuff (federation, HTTP Signatures, delivery queues) is handled by #Fedify under the hood. You just write your bot logic.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
#BotKit is a #TypeScript framework for building #ActivityPub bots. The difference from typical Mastodon/Misskey bots? Your bot runs as its own independent server—no platform account needed.
This means no character limits, no rate limiting headaches, no API restrictions.
bot.onMention = async (session, message) => {
await message.reply(text`Hi, ${message.actor}!`);
};The ActivityPub stuff (federation, HTTP Signatures, delivery queues) is handled by #Fedify under the hood. You just write your bot logic.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
#BotKit is a #TypeScript framework for building #ActivityPub bots. The difference from typical Mastodon/Misskey bots? Your bot runs as its own independent server—no platform account needed.
This means no character limits, no rate limiting headaches, no API restrictions.
bot.onMention = async (session, message) => {
await message.reply(text`Hi, ${message.actor}!`);
};The ActivityPub stuff (federation, HTTP Signatures, delivery queues) is handled by #Fedify under the hood. You just write your bot logic.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
#BotKit is a #TypeScript framework for building #ActivityPub bots. The difference from typical Mastodon/Misskey bots? Your bot runs as its own independent server—no platform account needed.
This means no character limits, no rate limiting headaches, no API restrictions.
bot.onMention = async (session, message) => {
await message.reply(text`Hi, ${message.actor}!`);
};The ActivityPub stuff (federation, HTTP Signatures, delivery queues) is handled by #Fedify under the hood. You just write your bot logic.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
#BotKit is a #TypeScript framework for building #ActivityPub bots. The difference from typical Mastodon/Misskey bots? Your bot runs as its own independent server—no platform account needed.
This means no character limits, no rate limiting headaches, no API restrictions.
bot.onMention = async (session, message) => {
await message.reply(text`Hi, ${message.actor}!`);
};The ActivityPub stuff (federation, HTTP Signatures, delivery queues) is handled by #Fedify under the hood. You just write your bot logic.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
#BotKit is a #TypeScript framework for building #ActivityPub bots. The difference from typical Mastodon/Misskey bots? Your bot runs as its own independent server—no platform account needed.
This means no character limits, no rate limiting headaches, no API restrictions.
bot.onMention = async (session, message) => {
await message.reply(text`Hi, ${message.actor}!`);
};The ActivityPub stuff (federation, HTTP Signatures, delivery queues) is handled by #Fedify under the hood. You just write your bot logic.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
#BotKit is a #TypeScript framework for building #ActivityPub bots. The difference from typical Mastodon/Misskey bots? Your bot runs as its own independent server—no platform account needed.
This means no character limits, no rate limiting headaches, no API restrictions.
bot.onMention = async (session, message) => {
await message.reply(text`Hi, ${message.actor}!`);
};The ActivityPub stuff (federation, HTTP Signatures, delivery queues) is handled by #Fedify under the hood. You just write your bot logic.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
#BotKit is a #TypeScript framework for building #ActivityPub bots. The difference from typical Mastodon/Misskey bots? Your bot runs as its own independent server—no platform account needed.
This means no character limits, no rate limiting headaches, no API restrictions.
bot.onMention = async (session, message) => {
await message.reply(text`Hi, ${message.actor}!`);
};The ActivityPub stuff (federation, HTTP Signatures, delivery queues) is handled by #Fedify under the hood. You just write your bot logic.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
BotKitは、ActivityPubボットを作るためのTypeScriptフレームワークです。既存のMastodon/Misskeyボットとの違いは、ボット自体が独立したサーバーとして動作すること。プラットフォームのアカウントは不要です。
文字数制限もなければ、APIレート制限に悩まされることもありません。
bot.onMention = async (session, message) => {
await message.reply(text`こんにちは、${message.actor}さん!`);
};フェデレーション、HTTP Signatures、配送キューといったActivityPub周りの処理はFedifyがすべて引き受けます。ボットのロジックを書くだけです。
DenoでもNode.jsでも動きます。
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
BotKit은 ActivityPub 봇을 만드는 #TypeScript 프레임워크입니다. 일반적인 Mastodon/Misskey 봇과 다른 점은, 봇 자체가 독립된 서버로 돌아간다는 겁니다. 플랫폼 계정이 필요 없습니다.
글자 수 제한도 없고, API 호출 제한에 시달릴 일도 없습니다.
bot.onMention = async (session, message) => {
await message.reply(text`안녕하세요, ${message.actor}님!`);
};연합(federation), HTTP Signatures, 메시지 전달 같은 #ActivityPub 관련 처리는 Fedify가 알아서 해줍니다. 봇 로직만 짜면 되는 거죠.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
#BotKit is a #TypeScript framework for building #ActivityPub bots. The difference from typical Mastodon/Misskey bots? Your bot runs as its own independent server—no platform account needed.
This means no character limits, no rate limiting headaches, no API restrictions.
bot.onMention = async (session, message) => {
await message.reply(text`Hi, ${message.actor}!`);
};The ActivityPub stuff (federation, HTTP Signatures, delivery queues) is handled by #Fedify under the hood. You just write your bot logic.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
#BotKit is a #TypeScript framework for building #ActivityPub bots. The difference from typical Mastodon/Misskey bots? Your bot runs as its own independent server—no platform account needed.
This means no character limits, no rate limiting headaches, no API restrictions.
bot.onMention = async (session, message) => {
await message.reply(text`Hi, ${message.actor}!`);
};The ActivityPub stuff (federation, HTTP Signatures, delivery queues) is handled by #Fedify under the hood. You just write your bot logic.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
BotKitは、ActivityPubボットを作るためのTypeScriptフレームワークです。既存のMastodon/Misskeyボットとの違いは、ボット自体が独立したサーバーとして動作すること。プラットフォームのアカウントは不要です。
文字数制限もなければ、APIレート制限に悩まされることもありません。
bot.onMention = async (session, message) => {
await message.reply(text`こんにちは、${message.actor}さん!`);
};フェデレーション、HTTP Signatures、配送キューといったActivityPub周りの処理はFedifyがすべて引き受けます。ボットのロジックを書くだけです。
DenoでもNode.jsでも動きます。
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
BotKit은 ActivityPub 봇을 만드는 #TypeScript 프레임워크입니다. 일반적인 Mastodon/Misskey 봇과 다른 점은, 봇 자체가 독립된 서버로 돌아간다는 겁니다. 플랫폼 계정이 필요 없습니다.
글자 수 제한도 없고, API 호출 제한에 시달릴 일도 없습니다.
bot.onMention = async (session, message) => {
await message.reply(text`안녕하세요, ${message.actor}님!`);
};연합(federation), HTTP Signatures, 메시지 전달 같은 #ActivityPub 관련 처리는 Fedify가 알아서 해줍니다. 봇 로직만 짜면 되는 거죠.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
#BotKit is a #TypeScript framework for building #ActivityPub bots. The difference from typical Mastodon/Misskey bots? Your bot runs as its own independent server—no platform account needed.
This means no character limits, no rate limiting headaches, no API restrictions.
bot.onMention = async (session, message) => {
await message.reply(text`Hi, ${message.actor}!`);
};The ActivityPub stuff (federation, HTTP Signatures, delivery queues) is handled by #Fedify under the hood. You just write your bot logic.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
#BotKit is a #TypeScript framework for building #ActivityPub bots. The difference from typical Mastodon/Misskey bots? Your bot runs as its own independent server—no platform account needed.
This means no character limits, no rate limiting headaches, no API restrictions.
bot.onMention = async (session, message) => {
await message.reply(text`Hi, ${message.actor}!`);
};The ActivityPub stuff (federation, HTTP Signatures, delivery queues) is handled by #Fedify under the hood. You just write your bot logic.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
BotKitは、ActivityPubボットを作るためのTypeScriptフレームワークです。既存のMastodon/Misskeyボットとの違いは、ボット自体が独立したサーバーとして動作すること。プラットフォームのアカウントは不要です。
文字数制限もなければ、APIレート制限に悩まされることもありません。
bot.onMention = async (session, message) => {
await message.reply(text`こんにちは、${message.actor}さん!`);
};フェデレーション、HTTP Signatures、配送キューといったActivityPub周りの処理はFedifyがすべて引き受けます。ボットのロジックを書くだけです。
DenoでもNode.jsでも動きます。
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
BotKit은 ActivityPub 봇을 만드는 #TypeScript 프레임워크입니다. 일반적인 Mastodon/Misskey 봇과 다른 점은, 봇 자체가 독립된 서버로 돌아간다는 겁니다. 플랫폼 계정이 필요 없습니다.
글자 수 제한도 없고, API 호출 제한에 시달릴 일도 없습니다.
bot.onMention = async (session, message) => {
await message.reply(text`안녕하세요, ${message.actor}님!`);
};연합(federation), HTTP Signatures, 메시지 전달 같은 #ActivityPub 관련 처리는 Fedify가 알아서 해줍니다. 봇 로직만 짜면 되는 거죠.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
#BotKit is a #TypeScript framework for building #ActivityPub bots. The difference from typical Mastodon/Misskey bots? Your bot runs as its own independent server—no platform account needed.
This means no character limits, no rate limiting headaches, no API restrictions.
bot.onMention = async (session, message) => {
await message.reply(text`Hi, ${message.actor}!`);
};The ActivityPub stuff (federation, HTTP Signatures, delivery queues) is handled by #Fedify under the hood. You just write your bot logic.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
#Breaking 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.
https://helixguard.ai/blog/malicious-sha1hulud-2025-11-24
#nodejs #cybersecurity #aws #github #npm #trufflehog #go #cyberattack #ShaiHulud #javascript #deno #browser #Sha1Hulud
helixguard.ai
HelixGuard
Supply chain security, vulnerability intelligence, and malware detection.
#Breaking 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.
https://helixguard.ai/blog/malicious-sha1hulud-2025-11-24
#nodejs #cybersecurity #aws #github #npm #trufflehog #go #cyberattack #ShaiHulud #javascript #deno #browser #Sha1Hulud
helixguard.ai
HelixGuard
Supply chain security, vulnerability intelligence, and malware detection.
@clemensg Habs rausgefunden
--v8-flags=--max-heap-size=8192
:)
#deno Question :
I have a fairly large process calculating all the osm admin levels to hierarchies by continent.
What makes "--max-heap-size" different from "--max-old-space-size" ?
When I had this, it allocated enough RAM for calculating but not for writing somehow …
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Ah, found the culprit. It was one of the spots where I told the program to do nothing later. Turns out my wording was slightly off.
Before:
return new Promise(() => {});
After:
return Promise.resolve(null);
The number of concurrent connections looks negligible now, and no more timeouts either. Calling it a success for tonight, we'll see how things look in the morning. 🥱
As underwhelming as the cause is, that journey might deserve a blog post if I find the time!
Okay, so either Deno's OpenTelemetry metric “http.server.active_requests” (https://docs.deno.com/runtime/fundamentals/open_telemetry/#http.server.active_requests) is actually cumulative over the lifetime of the process, or I have found the explanation for why I can't get the Encyclia server to behave.
Next question is what I could be doing wrong. 🤔 All it does is “deno run” and everything that doesn't time out seems to return what it should.
(The middle of the graph is where I restarted Deno twice.)

ALT text
Line graph showing "http_server_active_requests" over a 9 hour duration. It starts at 0, climbs to 5000 almost in a slow straight line over 3 hours, then drops back down to 0, makes a tiny, quick bump up to 100 and back down to 0, only to start climbing again, slightly slower, to 3000 over the course of about 3.5 hours
Okay, so either Deno's OpenTelemetry metric “http.server.active_requests” (https://docs.deno.com/runtime/fundamentals/open_telemetry/#http.server.active_requests) is actually cumulative over the lifetime of the process, or I have found the explanation for why I can't get the Encyclia server to behave.
Next question is what I could be doing wrong. 🤔 All it does is “deno run” and everything that doesn't time out seems to return what it should.
(The middle of the graph is where I restarted Deno twice.)

ALT text
Line graph showing "http_server_active_requests" over a 9 hour duration. It starts at 0, climbs to 5000 almost in a slow straight line over 3 hours, then drops back down to 0, makes a tiny, quick bump up to 100 and back down to 0, only to start climbing again, slightly slower, to 3000 over the course of about 3.5 hours
One Open-source Project Daily
The NPM drinking game recreated and cli-ified with Deno
https://github.com/ninest/drink-if-exists
#1ospd #opensource #deno #drinkinggame #game #npm
github.com
GitHub - ninest/drink-if-exists: 🍷 The NPM drinking game recreated and cli-ified with Deno
🍷 The NPM drinking game recreated and cli-ified with Deno - ninest/drink-if-exists
Zalvena, originally a fork of Aptabase, has been completely rewritten on Deno for it's backend, and Astro for it's frontend.
It's now a dedicated project for MinPluto, built for event tracking meant for the Zorn video player project.
The project is now part of the MinPluto organization.
One Open-source Project Daily
The NPM drinking game recreated and cli-ified with Deno
https://github.com/ninest/drink-if-exists
#1ospd #opensource #deno #drinkinggame #game #npm
github.com
GitHub - ninest/drink-if-exists: 🍷 The NPM drinking game recreated and cli-ified with Deno
🍷 The NPM drinking game recreated and cli-ified with Deno - ninest/drink-if-exists
Fedify is an #ActivityPub server framework in #TypeScript & #JavaScript. It aims to eliminate the complexity and redundant boilerplate code when building a federated server app, so that you can focus on your business logic and user experience.
The key features it provides currently are:
- Type-safe objects for Activity Vocabulary (including some vendor-specific extensions)
- #WebFinger client and server
- HTTP Signatures & Linked Data Signatures & Object Integrity Proofs
- Middleware for handling webhooks
- #NodeInfo protocol
- #Node.js, #Deno, and #Bun support
- CLI toolchain for testing and debugging
If you're curious, take a look at the #Fedify website! There's comprehensive docs, a demo, a tutorial, example code, and more:
Zalvena, originally a fork of Aptabase, has been completely rewritten on Deno for it's backend, and Astro for it's frontend.
It's now a dedicated project for MinPluto, built for event tracking meant for the Zorn video player project.
The project is now part of the MinPluto organization.
Exciting news for #Fedify developers! We've just landed a major milestone for Fedify 2.0—the #CLI now runs natively on #Node.js and #Bun, not just #Deno (#456). If you install @fedify/cli@2.0.0-dev.1761 from npm, you'll get actual JavaScript that executes directly in your runtime, no more pre-compiled binaries from deno compile. This is part of our broader transition to Optique, a new cross-runtime CLI framework we've developed specifically for Fedify's needs (#374).
This change means a more natural development experience regardless of your #JavaScript runtime preference. Node.js developers can now run the CLI tools directly through their familiar ecosystem, and the same goes for Bun users. While Fedify 2.0 isn't released yet, we're excited to share this progress with the community—feel free to try out the dev version and let us know how it works for you!
github.com
CLI for Fedify 2.0: Cross-runtime transition and Optique adoption · Issue #374 · fedify-dev/fedify
The current Fedify CLI implementation has been working well for our Deno-focused ecosystem, but as we prepare for Fedify 2.0, we're hitting some architectural limitations that are becoming increasi...
Exciting news for #Fedify developers! We've just landed a major milestone for Fedify 2.0—the #CLI now runs natively on #Node.js and #Bun, not just #Deno (#456). If you install @fedify/cli@2.0.0-dev.1761 from npm, you'll get actual JavaScript that executes directly in your runtime, no more pre-compiled binaries from deno compile. This is part of our broader transition to Optique, a new cross-runtime CLI framework we've developed specifically for Fedify's needs (#374).
This change means a more natural development experience regardless of your #JavaScript runtime preference. Node.js developers can now run the CLI tools directly through their familiar ecosystem, and the same goes for Bun users. While Fedify 2.0 isn't released yet, we're excited to share this progress with the community—feel free to try out the dev version and let us know how it works for you!
github.com
CLI for Fedify 2.0: Cross-runtime transition and Optique adoption · Issue #374 · fedify-dev/fedify
The current Fedify CLI implementation has been working well for our Deno-focused ecosystem, but as we prepare for Fedify 2.0, we're hitting some architectural limitations that are becoming increasi...
Exciting news for #Fedify developers! We've just landed a major milestone for Fedify 2.0—the #CLI now runs natively on #Node.js and #Bun, not just #Deno (#456). If you install @fedify/cli@2.0.0-dev.1761 from npm, you'll get actual JavaScript that executes directly in your runtime, no more pre-compiled binaries from deno compile. This is part of our broader transition to Optique, a new cross-runtime CLI framework we've developed specifically for Fedify's needs (#374).
This change means a more natural development experience regardless of your #JavaScript runtime preference. Node.js developers can now run the CLI tools directly through their familiar ecosystem, and the same goes for Bun users. While Fedify 2.0 isn't released yet, we're excited to share this progress with the community—feel free to try out the dev version and let us know how it works for you!
github.com
CLI for Fedify 2.0: Cross-runtime transition and Optique adoption · Issue #374 · fedify-dev/fedify
The current Fedify CLI implementation has been working well for our Deno-focused ecosystem, but as we prepare for Fedify 2.0, we're hitting some architectural limitations that are becoming increasi...
Exciting news for #Fedify developers! We've just landed a major milestone for Fedify 2.0—the #CLI now runs natively on #Node.js and #Bun, not just #Deno (#456). If you install @fedify/cli@2.0.0-dev.1761 from npm, you'll get actual JavaScript that executes directly in your runtime, no more pre-compiled binaries from deno compile. This is part of our broader transition to Optique, a new cross-runtime CLI framework we've developed specifically for Fedify's needs (#374).
This change means a more natural development experience regardless of your #JavaScript runtime preference. Node.js developers can now run the CLI tools directly through their familiar ecosystem, and the same goes for Bun users. While Fedify 2.0 isn't released yet, we're excited to share this progress with the community—feel free to try out the dev version and let us know how it works for you!
github.com
CLI for Fedify 2.0: Cross-runtime transition and Optique adoption · Issue #374 · fedify-dev/fedify
The current Fedify CLI implementation has been working well for our Deno-focused ecosystem, but as we prepare for Fedify 2.0, we're hitting some architectural limitations that are becoming increasi...
Exciting news for #Fedify developers! We've just landed a major milestone for Fedify 2.0—the #CLI now runs natively on #Node.js and #Bun, not just #Deno (#456). If you install @fedify/cli@2.0.0-dev.1761 from npm, you'll get actual JavaScript that executes directly in your runtime, no more pre-compiled binaries from deno compile. This is part of our broader transition to Optique, a new cross-runtime CLI framework we've developed specifically for Fedify's needs (#374).
This change means a more natural development experience regardless of your #JavaScript runtime preference. Node.js developers can now run the CLI tools directly through their familiar ecosystem, and the same goes for Bun users. While Fedify 2.0 isn't released yet, we're excited to share this progress with the community—feel free to try out the dev version and let us know how it works for you!
github.com
CLI for Fedify 2.0: Cross-runtime transition and Optique adoption · Issue #374 · fedify-dev/fedify
The current Fedify CLI implementation has been working well for our Deno-focused ecosystem, but as we prepare for Fedify 2.0, we're hitting some architectural limitations that are becoming increasi...
Exciting news for #Fedify developers! We've just landed a major milestone for Fedify 2.0—the #CLI now runs natively on #Node.js and #Bun, not just #Deno (#456). If you install @fedify/cli@2.0.0-dev.1761 from npm, you'll get actual JavaScript that executes directly in your runtime, no more pre-compiled binaries from deno compile. This is part of our broader transition to Optique, a new cross-runtime CLI framework we've developed specifically for Fedify's needs (#374).
This change means a more natural development experience regardless of your #JavaScript runtime preference. Node.js developers can now run the CLI tools directly through their familiar ecosystem, and the same goes for Bun users. While Fedify 2.0 isn't released yet, we're excited to share this progress with the community—feel free to try out the dev version and let us know how it works for you!
github.com
CLI for Fedify 2.0: Cross-runtime transition and Optique adoption · Issue #374 · fedify-dev/fedify
The current Fedify CLI implementation has been working well for our Deno-focused ecosystem, but as we prepare for Fedify 2.0, we're hitting some architectural limitations that are becoming increasi...
Exciting news for #Fedify developers! We've just landed a major milestone for Fedify 2.0—the #CLI now runs natively on #Node.js and #Bun, not just #Deno (#456). If you install @fedify/cli@2.0.0-dev.1761 from npm, you'll get actual JavaScript that executes directly in your runtime, no more pre-compiled binaries from deno compile. This is part of our broader transition to Optique, a new cross-runtime CLI framework we've developed specifically for Fedify's needs (#374).
This change means a more natural development experience regardless of your #JavaScript runtime preference. Node.js developers can now run the CLI tools directly through their familiar ecosystem, and the same goes for Bun users. While Fedify 2.0 isn't released yet, we're excited to share this progress with the community—feel free to try out the dev version and let us know how it works for you!
github.com
CLI for Fedify 2.0: Cross-runtime transition and Optique adoption · Issue #374 · fedify-dev/fedify
The current Fedify CLI implementation has been working well for our Deno-focused ecosystem, but as we prepare for Fedify 2.0, we're hitting some architectural limitations that are becoming increasi...
Exciting news for #Fedify developers! We've just landed a major milestone for Fedify 2.0—the #CLI now runs natively on #Node.js and #Bun, not just #Deno (#456). If you install @fedify/cli@2.0.0-dev.1761 from npm, you'll get actual JavaScript that executes directly in your runtime, no more pre-compiled binaries from deno compile. This is part of our broader transition to Optique, a new cross-runtime CLI framework we've developed specifically for Fedify's needs (#374).
This change means a more natural development experience regardless of your #JavaScript runtime preference. Node.js developers can now run the CLI tools directly through their familiar ecosystem, and the same goes for Bun users. While Fedify 2.0 isn't released yet, we're excited to share this progress with the community—feel free to try out the dev version and let us know how it works for you!
github.com
CLI for Fedify 2.0: Cross-runtime transition and Optique adoption · Issue #374 · fedify-dev/fedify
The current Fedify CLI implementation has been working well for our Deno-focused ecosystem, but as we prepare for Fedify 2.0, we're hitting some architectural limitations that are becoming increasi...
Exciting news for #Fedify developers! We've just landed a major milestone for Fedify 2.0—the #CLI now runs natively on #Node.js and #Bun, not just #Deno (#456). If you install @fedify/cli@2.0.0-dev.1761 from npm, you'll get actual JavaScript that executes directly in your runtime, no more pre-compiled binaries from deno compile. This is part of our broader transition to Optique, a new cross-runtime CLI framework we've developed specifically for Fedify's needs (#374).
This change means a more natural development experience regardless of your #JavaScript runtime preference. Node.js developers can now run the CLI tools directly through their familiar ecosystem, and the same goes for Bun users. While Fedify 2.0 isn't released yet, we're excited to share this progress with the community—feel free to try out the dev version and let us know how it works for you!
github.com
CLI for Fedify 2.0: Cross-runtime transition and Optique adoption · Issue #374 · fedify-dev/fedify
The current Fedify CLI implementation has been working well for our Deno-focused ecosystem, but as we prepare for Fedify 2.0, we're hitting some architectural limitations that are becoming increasi...
Exciting news for #Fedify developers! We've just landed a major milestone for Fedify 2.0—the #CLI now runs natively on #Node.js and #Bun, not just #Deno (#456). If you install @fedify/cli@2.0.0-dev.1761 from npm, you'll get actual JavaScript that executes directly in your runtime, no more pre-compiled binaries from deno compile. This is part of our broader transition to Optique, a new cross-runtime CLI framework we've developed specifically for Fedify's needs (#374).
This change means a more natural development experience regardless of your #JavaScript runtime preference. Node.js developers can now run the CLI tools directly through their familiar ecosystem, and the same goes for Bun users. While Fedify 2.0 isn't released yet, we're excited to share this progress with the community—feel free to try out the dev version and let us know how it works for you!
github.com
CLI for Fedify 2.0: Cross-runtime transition and Optique adoption · Issue #374 · fedify-dev/fedify
The current Fedify CLI implementation has been working well for our Deno-focused ecosystem, but as we prepare for Fedify 2.0, we're hitting some architectural limitations that are becoming increasi...
Exciting news for #Fedify developers! We've just landed a major milestone for Fedify 2.0—the #CLI now runs natively on #Node.js and #Bun, not just #Deno (#456). If you install @fedify/cli@2.0.0-dev.1761 from npm, you'll get actual JavaScript that executes directly in your runtime, no more pre-compiled binaries from deno compile. This is part of our broader transition to Optique, a new cross-runtime CLI framework we've developed specifically for Fedify's needs (#374).
This change means a more natural development experience regardless of your #JavaScript runtime preference. Node.js developers can now run the CLI tools directly through their familiar ecosystem, and the same goes for Bun users. While Fedify 2.0 isn't released yet, we're excited to share this progress with the community—feel free to try out the dev version and let us know how it works for you!
github.com
CLI for Fedify 2.0: Cross-runtime transition and Optique adoption · Issue #374 · fedify-dev/fedify
The current Fedify CLI implementation has been working well for our Deno-focused ecosystem, but as we prepare for Fedify 2.0, we're hitting some architectural limitations that are becoming increasi...
Exciting news for #Fedify developers! We've just landed a major milestone for Fedify 2.0—the #CLI now runs natively on #Node.js and #Bun, not just #Deno (#456). If you install @fedify/cli@2.0.0-dev.1761 from npm, you'll get actual JavaScript that executes directly in your runtime, no more pre-compiled binaries from deno compile. This is part of our broader transition to Optique, a new cross-runtime CLI framework we've developed specifically for Fedify's needs (#374).
This change means a more natural development experience regardless of your #JavaScript runtime preference. Node.js developers can now run the CLI tools directly through their familiar ecosystem, and the same goes for Bun users. While Fedify 2.0 isn't released yet, we're excited to share this progress with the community—feel free to try out the dev version and let us know how it works for you!
github.com
CLI for Fedify 2.0: Cross-runtime transition and Optique adoption · Issue #374 · fedify-dev/fedify
The current Fedify CLI implementation has been working well for our Deno-focused ecosystem, but as we prepare for Fedify 2.0, we're hitting some architectural limitations that are becoming increasi...
It's been some weeks with npm exploits. But there is a fix, Deno's limited permissions can help here.
https://deno.com/blog/deno-protects-npm-exploits
deno.com
How Deno protects against npm exploits | Deno
Recent supply chain attacks on npm is a reminder that Node and npm grants unfettered access to your systems. Here's how Deno, with an opt-in security model, protects against these vulnerabilities.
It's been some weeks with npm exploits. But there is a fix, Deno's limited permissions can help here.
https://deno.com/blog/deno-protects-npm-exploits
deno.com
How Deno protects against npm exploits | Deno
Recent supply chain attacks on npm is a reminder that Node and npm grants unfettered access to your systems. Here's how Deno, with an opt-in security model, protects against these vulnerabilities.
It's been some weeks with npm exploits. But there is a fix, Deno's limited permissions can help here.
https://deno.com/blog/deno-protects-npm-exploits
deno.com
How Deno protects against npm exploits | Deno
Recent supply chain attacks on npm is a reminder that Node and npm grants unfettered access to your systems. Here's how Deno, with an opt-in security model, protects against these vulnerabilities.
Help Us Raise $200k to Free JavaScript from Oracle
https://deno.com/blog/javascript-tm-gofundme
#HackerNews #HelpUsRaise200k #FreeJavaScript #Oracle #Deno #GoFundMe #TechCommunity
deno.com
Help Us Raise $200k to Free JavaScript from Oracle | Deno
Our legal battle over Oracle's claim on the word "JavaScript" is entering the discovery phase. Here's how you can help.
Help Us Raise $200k to Free JavaScript from Oracle
https://deno.com/blog/javascript-tm-gofundme
#HackerNews #HelpUsRaise200k #FreeJavaScript #Oracle #Deno #GoFundMe #TechCommunity
deno.com
Help Us Raise $200k to Free JavaScript from Oracle | Deno
Our legal battle over Oracle's claim on the word "JavaScript" is entering the discovery phase. Here's how you can help.
People shrug off #Deno, but the way it uses external code, simply by importing it, has some advantages. Also it's a sandbox. But who cares right?
Meanwhile...
https://www.ox.security/blog/npm-2-0-hack-40-npm-packages-hit-in-major-supply-chain-attack/
ox.security
180+ NPM Packages Hit in Major Supply Chain Attack - OX Security
Sandworms in the Supply Chain: The “Shai‑Hulud” npm Credential Theft Overview Attackers slipped malicious code into new releases of a popular open-source color library @ctrl/tinycolor versions 4.1.1 and 4.1.2. The same campaign also trojanized 40+ packages across multiple maintainers. How it spread Installing a compromised package ran code that stole developer/build credentials. With those credentials, attackers could publish malicious updates to…
Big update for our type-safe combinatorial #CLI parser for #TypeScript:
- Labeled merge groups: organize options logically
- Rich docs: brief, description & footer support
- @optique/temporal: new package for date/time parsing
showDefault: automatic default value display
The help text has never looked this good!
hackers.pub
Optique 0.4.0: Better help, rich docs, and Temporal support
Optique 0.4.0 introduces enhancements to streamline CLI development in TypeScript. This release focuses on improving help text organization through labeled merge groups and a new `group()` combinator, making complex CLIs more user-friendly by organizing options under clear sections. Comprehensive documentation support is added via the `run()` function, allowing brief descriptions, detailed explanations, and footers without altering parser definitions. The update also includes Temporal API support with the `@optique/temporal` package, enabling type-safe parsing for dates, times, and time zones. Improved type inference for `merge()` and `tuple()` combinators enhances type safety, alongside minor breaking changes. These updates aim to make CLI construction more intuitive and maintainable, offering developers greater control over user experience and code structure.
We're excited to announce Optique 0.4.0, which brings significant improvements to help text organization, enhanced documentation capabilities, and introduces comprehensive Temporal API support.
Optique is a type-safe combinatorial CLI parser for TypeScript that makes building command-line interfaces intuitive and maintainable. This release focuses on making your CLI applications more user-friendly and maintainable.
Better help text organization
One of the most visible improvements in Optique 0.4.0 is the enhanced help text organization. You can now label and group your options more effectively, making complex CLIs much more approachable for users.
Labeled merge groups
The merge() combinator now accepts an optional label parameter, solving
a common pain point where developers had to choose between clean code structure
and organized help output:
// Before: unlabeled merged options appeared scattered
const config = merge(connectionOptions, performanceOptions);
// Now: group related options under a clear section
const config = merge(
"Server Configuration", // New label parameter
connectionOptions,
performanceOptions
);
This simple addition makes a huge difference in help text readability, especially for CLIs with many options spread across multiple reusable modules.
The resulting help output clearly organizes options under
the Server Configuration section:
Demo app showcasing labeled merge groups
Usage: demo-merge.ts --host STRING --port INTEGER --timeout INTEGER --retries
INTEGER
Server Configuration:
--host STRING Server hostname or IP address
--port INTEGER Port number for the connection
--timeout INTEGER Connection timeout in seconds
--retries INTEGER Number of retry attempts
The new group() combinator
For cases where merge() doesn't apply, the new group()
combinator lets you wrap any parser with a documentation label:
// Group mutually exclusive options under a clear section
const outputFormat = group(
"Output Format",
or(
map(flag("--json"), () => "json"),
map(flag("--yaml"), () => "yaml"),
map(flag("--xml"), () => "xml"),
)
);
This is particularly useful for organizing mutually exclusive flags, multiple inputs, or any parser that doesn't natively support labeling. The resulting help text becomes much more scannable and user-friendly.
Here's how the grouped output format options appear in the help text:
Demo app showcasing group combinator
Usage: demo-group.ts --json
demo-group.ts --yaml
demo-group.ts --xml
Output Format:
--json Output in JSON format
--yaml Output in YAML format
--xml Output in XML format
Rich documentation support
Optique 0.4.0 introduces comprehensive documentation fields that can be added
directly through the run() function, eliminating the need to modify parser
definitions for documentation purposes.
Brief descriptions, detailed explanations, and footers
Both @optique/core/facade and @optique/run now support brief,
description, and footer options through the run() function:
import { run } from "@optique/run";
import { message } from "@optique/core/message";
const result = run(parser, {
brief: message`A powerful data processing tool`,
description: message`This tool provides comprehensive data processing capabilities with support for multiple formats and transformations. It can handle JSON, YAML, and CSV files with automatic format detection.`,
footer: message`Examples:
myapp process data.json --format yaml
myapp validate config.toml --strict
For more information, visit https://example.com/docs`,
help: "option"
});
These documentation fields appear in both help output and error messages (when configured), providing consistent context throughout your CLI's user experience.
The complete help output demonstrates the rich documentation features with brief description, detailed explanation, option descriptions, default values, and footer information:
A powerful data processing tool
Usage: demo-rich-docs.ts [--port INTEGER] [--format STRING] --verbose STRING
This tool provides comprehensive data processing capabilities with support for
multiple formats and transformations. It can handle JSON, YAML, and CSV files
with automatic format detection.
--port INTEGER Server port number [3000]
--format STRING Output format [json]
--verbose STRING Verbosity level
Examples:
myapp process data.json --format yaml
myapp validate config.toml --strict
For more information, visit https://example.com/docs
These documentation fields appear in both help output and error messages (when configured), providing consistent context throughout your CLI's user experience.
Display default values
A frequently requested feature is now available: showing default values
directly in help text. Enable this with the new showDefault option when
using withDefault():
const parser = object({
port: withDefault(
option("--port", integer(), { description: message`Server port number` }),
3000,
),
format: withDefault(
option("--format", string(), { description: message`Output format` }),
"json",
),
});
run(parser, { showDefault: true });
// Or with custom formatting:
run(parser, {
showDefault: {
prefix: " (default: ",
suffix: ")"
} // Shows: --port (default: 3000)
});
Default values are automatically dimmed when colors are enabled, making them visually distinct while remaining readable.
The help output shows default values clearly marked next to each option:
Usage: demo-defaults.ts [--port INTEGER] [--format STRING]
--port INTEGER Server port number [3000]
--format STRING Output format [json]
Temporal API support
Optique 0.4.0 introduces a new package, @optique/temporal, providing comprehensive support for the modern Temporal API. This brings type-safe parsing for dates, times, durations, and time zones:
import { instant, duration, zonedDateTime } from "@optique/temporal";
import { option } from "@optique/core/parser";
const parser = object({
// Parse ISO 8601 timestamps
timestamp: option("--at", instant()),
// Parse durations like "PT30M" or "P1DT2H"
timeout: option("--timeout", duration()),
// Parse zoned datetime with timezone info
meeting: option("--meeting", zonedDateTime()),
});
The temporal parsers return native Temporal objects with full functionality:
const result = parse(timestampArg, ["2023-12-25T10:30:00Z"]);
if (result.success) {
const instant = result.value;
console.log(`UTC: ${instant.toString()}`);
console.log(`Seoul: ${instant.toZonedDateTimeISO("Asia/Seoul")}`);
}
Install the new package with:
npm add @optique/temporal
Improved type inference
The merge() combinator now supports up to 10 parsers (previously 5), and
the tuple() parser has improved type inference using TypeScript's const
type parameter. These enhancements enable more complex CLI structures while
maintaining perfect type safety.
Breaking changes
While we've maintained backward compatibility for most APIs, there are a few changes to be aware of:
- The
Parser.getDocFragments()method now usesDocState<TState>instead of direct state values (only affects custom parser implementations) - The
merge()combinator now enforces stricter type constraints at compile time, rejecting non-object-producing parsers
Learn more
For a complete list of changes, bug fixes, and improvements, see the full changelog.
Check out the updated documentation:
- Structured messages guide for the new documentation features
- Construct combinators reference for
merge()andgroup()usage - Value parsers guide for temporal parsing
- CLI patterns cookbook for practical examples
Installation
Upgrade to Optique 0.4.0:
npm update @optique/core @optique/run
# or
deno add jsr:@optique/core@^0.4.0 jsr:@optique/run@^0.4.0
Add temporal support (optional):
npm add @optique/temporal
# or
deno add jsr:@optique/temporal
We hope these improvements make building CLI applications with Optique even more enjoyable. As always, we welcome your feedback and contributions on GitHub.
github.com
GitHub - dahlia/optique: Type-safe combinatorial CLI parser for TypeScript
Type-safe combinatorial CLI parser for TypeScript. Contribute to dahlia/optique development by creating an account on GitHub.
Big update for our type-safe combinatorial #CLI parser for #TypeScript:
- Labeled merge groups: organize options logically
- Rich docs: brief, description & footer support
- @optique/temporal: new package for date/time parsing
showDefault: automatic default value display
The help text has never looked this good!
hackers.pub
Optique 0.4.0: Better help, rich docs, and Temporal support
Optique 0.4.0 introduces enhancements to streamline CLI development in TypeScript. This release focuses on improving help text organization through labeled merge groups and a new `group()` combinator, making complex CLIs more user-friendly by organizing options under clear sections. Comprehensive documentation support is added via the `run()` function, allowing brief descriptions, detailed explanations, and footers without altering parser definitions. The update also includes Temporal API support with the `@optique/temporal` package, enabling type-safe parsing for dates, times, and time zones. Improved type inference for `merge()` and `tuple()` combinators enhances type safety, alongside minor breaking changes. These updates aim to make CLI construction more intuitive and maintainable, offering developers greater control over user experience and code structure.
We're excited to announce Optique 0.4.0, which brings significant improvements to help text organization, enhanced documentation capabilities, and introduces comprehensive Temporal API support.
Optique is a type-safe combinatorial CLI parser for TypeScript that makes building command-line interfaces intuitive and maintainable. This release focuses on making your CLI applications more user-friendly and maintainable.
Better help text organization
One of the most visible improvements in Optique 0.4.0 is the enhanced help text organization. You can now label and group your options more effectively, making complex CLIs much more approachable for users.
Labeled merge groups
The merge() combinator now accepts an optional label parameter, solving
a common pain point where developers had to choose between clean code structure
and organized help output:
// Before: unlabeled merged options appeared scattered
const config = merge(connectionOptions, performanceOptions);
// Now: group related options under a clear section
const config = merge(
"Server Configuration", // New label parameter
connectionOptions,
performanceOptions
);
This simple addition makes a huge difference in help text readability, especially for CLIs with many options spread across multiple reusable modules.
The resulting help output clearly organizes options under
the Server Configuration section:
Demo app showcasing labeled merge groups
Usage: demo-merge.ts --host STRING --port INTEGER --timeout INTEGER --retries
INTEGER
Server Configuration:
--host STRING Server hostname or IP address
--port INTEGER Port number for the connection
--timeout INTEGER Connection timeout in seconds
--retries INTEGER Number of retry attempts
The new group() combinator
For cases where merge() doesn't apply, the new group()
combinator lets you wrap any parser with a documentation label:
// Group mutually exclusive options under a clear section
const outputFormat = group(
"Output Format",
or(
map(flag("--json"), () => "json"),
map(flag("--yaml"), () => "yaml"),
map(flag("--xml"), () => "xml"),
)
);
This is particularly useful for organizing mutually exclusive flags, multiple inputs, or any parser that doesn't natively support labeling. The resulting help text becomes much more scannable and user-friendly.
Here's how the grouped output format options appear in the help text:
Demo app showcasing group combinator
Usage: demo-group.ts --json
demo-group.ts --yaml
demo-group.ts --xml
Output Format:
--json Output in JSON format
--yaml Output in YAML format
--xml Output in XML format
Rich documentation support
Optique 0.4.0 introduces comprehensive documentation fields that can be added
directly through the run() function, eliminating the need to modify parser
definitions for documentation purposes.
Brief descriptions, detailed explanations, and footers
Both @optique/core/facade and @optique/run now support brief,
description, and footer options through the run() function:
import { run } from "@optique/run";
import { message } from "@optique/core/message";
const result = run(parser, {
brief: message`A powerful data processing tool`,
description: message`This tool provides comprehensive data processing capabilities with support for multiple formats and transformations. It can handle JSON, YAML, and CSV files with automatic format detection.`,
footer: message`Examples:
myapp process data.json --format yaml
myapp validate config.toml --strict
For more information, visit https://example.com/docs`,
help: "option"
});
These documentation fields appear in both help output and error messages (when configured), providing consistent context throughout your CLI's user experience.
The complete help output demonstrates the rich documentation features with brief description, detailed explanation, option descriptions, default values, and footer information:
A powerful data processing tool
Usage: demo-rich-docs.ts [--port INTEGER] [--format STRING] --verbose STRING
This tool provides comprehensive data processing capabilities with support for
multiple formats and transformations. It can handle JSON, YAML, and CSV files
with automatic format detection.
--port INTEGER Server port number [3000]
--format STRING Output format [json]
--verbose STRING Verbosity level
Examples:
myapp process data.json --format yaml
myapp validate config.toml --strict
For more information, visit https://example.com/docs
These documentation fields appear in both help output and error messages (when configured), providing consistent context throughout your CLI's user experience.
Display default values
A frequently requested feature is now available: showing default values
directly in help text. Enable this with the new showDefault option when
using withDefault():
const parser = object({
port: withDefault(
option("--port", integer(), { description: message`Server port number` }),
3000,
),
format: withDefault(
option("--format", string(), { description: message`Output format` }),
"json",
),
});
run(parser, { showDefault: true });
// Or with custom formatting:
run(parser, {
showDefault: {
prefix: " (default: ",
suffix: ")"
} // Shows: --port (default: 3000)
});
Default values are automatically dimmed when colors are enabled, making them visually distinct while remaining readable.
The help output shows default values clearly marked next to each option:
Usage: demo-defaults.ts [--port INTEGER] [--format STRING]
--port INTEGER Server port number [3000]
--format STRING Output format [json]
Temporal API support
Optique 0.4.0 introduces a new package, @optique/temporal, providing comprehensive support for the modern Temporal API. This brings type-safe parsing for dates, times, durations, and time zones:
import { instant, duration, zonedDateTime } from "@optique/temporal";
import { option } from "@optique/core/parser";
const parser = object({
// Parse ISO 8601 timestamps
timestamp: option("--at", instant()),
// Parse durations like "PT30M" or "P1DT2H"
timeout: option("--timeout", duration()),
// Parse zoned datetime with timezone info
meeting: option("--meeting", zonedDateTime()),
});
The temporal parsers return native Temporal objects with full functionality:
const result = parse(timestampArg, ["2023-12-25T10:30:00Z"]);
if (result.success) {
const instant = result.value;
console.log(`UTC: ${instant.toString()}`);
console.log(`Seoul: ${instant.toZonedDateTimeISO("Asia/Seoul")}`);
}
Install the new package with:
npm add @optique/temporal
Improved type inference
The merge() combinator now supports up to 10 parsers (previously 5), and
the tuple() parser has improved type inference using TypeScript's const
type parameter. These enhancements enable more complex CLI structures while
maintaining perfect type safety.
Breaking changes
While we've maintained backward compatibility for most APIs, there are a few changes to be aware of:
- The
Parser.getDocFragments()method now usesDocState<TState>instead of direct state values (only affects custom parser implementations) - The
merge()combinator now enforces stricter type constraints at compile time, rejecting non-object-producing parsers
Learn more
For a complete list of changes, bug fixes, and improvements, see the full changelog.
Check out the updated documentation:
- Structured messages guide for the new documentation features
- Construct combinators reference for
merge()andgroup()usage - Value parsers guide for temporal parsing
- CLI patterns cookbook for practical examples
Installation
Upgrade to Optique 0.4.0:
npm update @optique/core @optique/run
# or
deno add jsr:@optique/core@^0.4.0 jsr:@optique/run@^0.4.0
Add temporal support (optional):
npm add @optique/temporal
# or
deno add jsr:@optique/temporal
We hope these improvements make building CLI applications with Optique even more enjoyable. As always, we welcome your feedback and contributions on GitHub.
github.com
GitHub - dahlia/optique: Type-safe combinatorial CLI parser for TypeScript
Type-safe combinatorial CLI parser for TypeScript. Contribute to dahlia/optique development by creating an account on GitHub.
Big update for our type-safe combinatorial #CLI parser for #TypeScript:
- Labeled merge groups: organize options logically
- Rich docs: brief, description & footer support
- @optique/temporal: new package for date/time parsing
showDefault: automatic default value display
The help text has never looked this good!
hackers.pub
Optique 0.4.0: Better help, rich docs, and Temporal support
Optique 0.4.0 introduces enhancements to streamline CLI development in TypeScript. This release focuses on improving help text organization through labeled merge groups and a new `group()` combinator, making complex CLIs more user-friendly by organizing options under clear sections. Comprehensive documentation support is added via the `run()` function, allowing brief descriptions, detailed explanations, and footers without altering parser definitions. The update also includes Temporal API support with the `@optique/temporal` package, enabling type-safe parsing for dates, times, and time zones. Improved type inference for `merge()` and `tuple()` combinators enhances type safety, alongside minor breaking changes. These updates aim to make CLI construction more intuitive and maintainable, offering developers greater control over user experience and code structure.
We're excited to announce Optique 0.4.0, which brings significant improvements to help text organization, enhanced documentation capabilities, and introduces comprehensive Temporal API support.
Optique is a type-safe combinatorial CLI parser for TypeScript that makes building command-line interfaces intuitive and maintainable. This release focuses on making your CLI applications more user-friendly and maintainable.
Better help text organization
One of the most visible improvements in Optique 0.4.0 is the enhanced help text organization. You can now label and group your options more effectively, making complex CLIs much more approachable for users.
Labeled merge groups
The merge() combinator now accepts an optional label parameter, solving
a common pain point where developers had to choose between clean code structure
and organized help output:
// Before: unlabeled merged options appeared scattered
const config = merge(connectionOptions, performanceOptions);
// Now: group related options under a clear section
const config = merge(
"Server Configuration", // New label parameter
connectionOptions,
performanceOptions
);
This simple addition makes a huge difference in help text readability, especially for CLIs with many options spread across multiple reusable modules.
The resulting help output clearly organizes options under
the Server Configuration section:
Demo app showcasing labeled merge groups
Usage: demo-merge.ts --host STRING --port INTEGER --timeout INTEGER --retries
INTEGER
Server Configuration:
--host STRING Server hostname or IP address
--port INTEGER Port number for the connection
--timeout INTEGER Connection timeout in seconds
--retries INTEGER Number of retry attempts
The new group() combinator
For cases where merge() doesn't apply, the new group()
combinator lets you wrap any parser with a documentation label:
// Group mutually exclusive options under a clear section
const outputFormat = group(
"Output Format",
or(
map(flag("--json"), () => "json"),
map(flag("--yaml"), () => "yaml"),
map(flag("--xml"), () => "xml"),
)
);
This is particularly useful for organizing mutually exclusive flags, multiple inputs, or any parser that doesn't natively support labeling. The resulting help text becomes much more scannable and user-friendly.
Here's how the grouped output format options appear in the help text:
Demo app showcasing group combinator
Usage: demo-group.ts --json
demo-group.ts --yaml
demo-group.ts --xml
Output Format:
--json Output in JSON format
--yaml Output in YAML format
--xml Output in XML format
Rich documentation support
Optique 0.4.0 introduces comprehensive documentation fields that can be added
directly through the run() function, eliminating the need to modify parser
definitions for documentation purposes.
Brief descriptions, detailed explanations, and footers
Both @optique/core/facade and @optique/run now support brief,
description, and footer options through the run() function:
import { run } from "@optique/run";
import { message } from "@optique/core/message";
const result = run(parser, {
brief: message`A powerful data processing tool`,
description: message`This tool provides comprehensive data processing capabilities with support for multiple formats and transformations. It can handle JSON, YAML, and CSV files with automatic format detection.`,
footer: message`Examples:
myapp process data.json --format yaml
myapp validate config.toml --strict
For more information, visit https://example.com/docs`,
help: "option"
});
These documentation fields appear in both help output and error messages (when configured), providing consistent context throughout your CLI's user experience.
The complete help output demonstrates the rich documentation features with brief description, detailed explanation, option descriptions, default values, and footer information:
A powerful data processing tool
Usage: demo-rich-docs.ts [--port INTEGER] [--format STRING] --verbose STRING
This tool provides comprehensive data processing capabilities with support for
multiple formats and transformations. It can handle JSON, YAML, and CSV files
with automatic format detection.
--port INTEGER Server port number [3000]
--format STRING Output format [json]
--verbose STRING Verbosity level
Examples:
myapp process data.json --format yaml
myapp validate config.toml --strict
For more information, visit https://example.com/docs
These documentation fields appear in both help output and error messages (when configured), providing consistent context throughout your CLI's user experience.
Display default values
A frequently requested feature is now available: showing default values
directly in help text. Enable this with the new showDefault option when
using withDefault():
const parser = object({
port: withDefault(
option("--port", integer(), { description: message`Server port number` }),
3000,
),
format: withDefault(
option("--format", string(), { description: message`Output format` }),
"json",
),
});
run(parser, { showDefault: true });
// Or with custom formatting:
run(parser, {
showDefault: {
prefix: " (default: ",
suffix: ")"
} // Shows: --port (default: 3000)
});
Default values are automatically dimmed when colors are enabled, making them visually distinct while remaining readable.
The help output shows default values clearly marked next to each option:
Usage: demo-defaults.ts [--port INTEGER] [--format STRING]
--port INTEGER Server port number [3000]
--format STRING Output format [json]
Temporal API support
Optique 0.4.0 introduces a new package, @optique/temporal, providing comprehensive support for the modern Temporal API. This brings type-safe parsing for dates, times, durations, and time zones:
import { instant, duration, zonedDateTime } from "@optique/temporal";
import { option } from "@optique/core/parser";
const parser = object({
// Parse ISO 8601 timestamps
timestamp: option("--at", instant()),
// Parse durations like "PT30M" or "P1DT2H"
timeout: option("--timeout", duration()),
// Parse zoned datetime with timezone info
meeting: option("--meeting", zonedDateTime()),
});
The temporal parsers return native Temporal objects with full functionality:
const result = parse(timestampArg, ["2023-12-25T10:30:00Z"]);
if (result.success) {
const instant = result.value;
console.log(`UTC: ${instant.toString()}`);
console.log(`Seoul: ${instant.toZonedDateTimeISO("Asia/Seoul")}`);
}
Install the new package with:
npm add @optique/temporal
Improved type inference
The merge() combinator now supports up to 10 parsers (previously 5), and
the tuple() parser has improved type inference using TypeScript's const
type parameter. These enhancements enable more complex CLI structures while
maintaining perfect type safety.
Breaking changes
While we've maintained backward compatibility for most APIs, there are a few changes to be aware of:
- The
Parser.getDocFragments()method now usesDocState<TState>instead of direct state values (only affects custom parser implementations) - The
merge()combinator now enforces stricter type constraints at compile time, rejecting non-object-producing parsers
Learn more
For a complete list of changes, bug fixes, and improvements, see the full changelog.
Check out the updated documentation:
- Structured messages guide for the new documentation features
- Construct combinators reference for
merge()andgroup()usage - Value parsers guide for temporal parsing
- CLI patterns cookbook for practical examples
Installation
Upgrade to Optique 0.4.0:
npm update @optique/core @optique/run
# or
deno add jsr:@optique/core@^0.4.0 jsr:@optique/run@^0.4.0
Add temporal support (optional):
npm add @optique/temporal
# or
deno add jsr:@optique/temporal
We hope these improvements make building CLI applications with Optique even more enjoyable. As always, we welcome your feedback and contributions on GitHub.
github.com
GitHub - dahlia/optique: Type-safe combinatorial CLI parser for TypeScript
Type-safe combinatorial CLI parser for TypeScript. Contribute to dahlia/optique development by creating an account on GitHub.
We're excited to announce the release of BotKit 0.3.0! This release marks a significant milestone as #BotKit now supports #Node.js alongside #Deno, making it accessible to a wider audience. The minimum required Node.js version is 22.0.0. This dual-runtime support means you can now choose your preferred #JavaScript runtime while building #ActivityPub #bots with the same powerful BotKit APIs.
One of the most requested features has landed: poll support! You can now create interactive polls in your #bot messages, allowing followers to vote on questions with single or multiple-choice options. Polls are represented as ActivityPub Question objects with proper expiration times, and your bot can react to votes through the new onVote event handler. This feature enhances engagement possibilities and brings BotKit to feature parity with major #fediverse platforms like Mastodon and Misskey.
// Create a poll with multiple choices
await session.publish(text`What's your favorite programming language?`, {
class: Question,
poll: {
multiple: true, // Allow multiple selections
options: ["JavaScript", "TypeScript", "Python", "Rust"],
endTime: Temporal.Now.instant().add({ hours: 24 }),
},
});
// Handle votes
bot.onVote = async (session, vote) => {
console.log(`${vote.actor} voted for "${vote.option}"`);
};The web frontend has been enhanced with a new followers page, thanks to the contribution from Hyeonseo Kim (@gaebalgom)! The /followers route now displays a paginated list of your bot's followers, and the follower count on the main profile page is now clickable, providing better visibility into your bot's audience. This improvement makes the web interface more complete and user-friendly.
For developers looking for alternative storage backends, we've introduced the SqliteRepository through the new @fedify/botkit-sqlite package. This provides a production-ready SQLite-based storage solution with ACID compliance, write-ahead logging (WAL) for optimal performance, and proper indexing. Additionally, the new @fedify/botkit/repository module offers MemoryCachedRepository for adding an in-memory cache layer on top of any repository implementation, improving read performance for frequently accessed data.
This release also includes an important security update: we've upgraded to #Fedify 1.8.8, ensuring your bots stay secure and compatible with the latest ActivityPub standards. The repository pattern has been expanded with new interfaces and types like RepositoryGetMessagesOptions, RepositoryGetFollowersOptions, and proper support for polls storage through the KvStoreRepositoryPrefixes.polls option, providing more flexibility for custom implementations.
botkit.fedify.dev
Repository | BotKit by Fedify
A repository is a data access object that provides an abstraction over the underlying data source. This document provides an overview of repositories and how they are used in the framework.
We're excited to announce the release of BotKit 0.3.0! This release marks a significant milestone as #BotKit now supports #Node.js alongside #Deno, making it accessible to a wider audience. The minimum required Node.js version is 22.0.0. This dual-runtime support means you can now choose your preferred #JavaScript runtime while building #ActivityPub #bots with the same powerful BotKit APIs.
One of the most requested features has landed: poll support! You can now create interactive polls in your #bot messages, allowing followers to vote on questions with single or multiple-choice options. Polls are represented as ActivityPub Question objects with proper expiration times, and your bot can react to votes through the new onVote event handler. This feature enhances engagement possibilities and brings BotKit to feature parity with major #fediverse platforms like Mastodon and Misskey.
// Create a poll with multiple choices
await session.publish(text`What's your favorite programming language?`, {
class: Question,
poll: {
multiple: true, // Allow multiple selections
options: ["JavaScript", "TypeScript", "Python", "Rust"],
endTime: Temporal.Now.instant().add({ hours: 24 }),
},
});
// Handle votes
bot.onVote = async (session, vote) => {
console.log(`${vote.actor} voted for "${vote.option}"`);
};The web frontend has been enhanced with a new followers page, thanks to the contribution from Hyeonseo Kim (@gaebalgom)! The /followers route now displays a paginated list of your bot's followers, and the follower count on the main profile page is now clickable, providing better visibility into your bot's audience. This improvement makes the web interface more complete and user-friendly.
For developers looking for alternative storage backends, we've introduced the SqliteRepository through the new @fedify/botkit-sqlite package. This provides a production-ready SQLite-based storage solution with ACID compliance, write-ahead logging (WAL) for optimal performance, and proper indexing. Additionally, the new @fedify/botkit/repository module offers MemoryCachedRepository for adding an in-memory cache layer on top of any repository implementation, improving read performance for frequently accessed data.
This release also includes an important security update: we've upgraded to #Fedify 1.8.8, ensuring your bots stay secure and compatible with the latest ActivityPub standards. The repository pattern has been expanded with new interfaces and types like RepositoryGetMessagesOptions, RepositoryGetFollowersOptions, and proper support for polls storage through the KvStoreRepositoryPrefixes.polls option, providing more flexibility for custom implementations.
botkit.fedify.dev
Repository | BotKit by Fedify
A repository is a data access object that provides an abstraction over the underlying data source. This document provides an overview of repositories and how they are used in the framework.
We're excited to announce the release of BotKit 0.3.0! This release marks a significant milestone as #BotKit now supports #Node.js alongside #Deno, making it accessible to a wider audience. The minimum required Node.js version is 22.0.0. This dual-runtime support means you can now choose your preferred #JavaScript runtime while building #ActivityPub #bots with the same powerful BotKit APIs.
One of the most requested features has landed: poll support! You can now create interactive polls in your #bot messages, allowing followers to vote on questions with single or multiple-choice options. Polls are represented as ActivityPub Question objects with proper expiration times, and your bot can react to votes through the new onVote event handler. This feature enhances engagement possibilities and brings BotKit to feature parity with major #fediverse platforms like Mastodon and Misskey.
// Create a poll with multiple choices
await session.publish(text`What's your favorite programming language?`, {
class: Question,
poll: {
multiple: true, // Allow multiple selections
options: ["JavaScript", "TypeScript", "Python", "Rust"],
endTime: Temporal.Now.instant().add({ hours: 24 }),
},
});
// Handle votes
bot.onVote = async (session, vote) => {
console.log(`${vote.actor} voted for "${vote.option}"`);
};The web frontend has been enhanced with a new followers page, thanks to the contribution from Hyeonseo Kim (@gaebalgom)! The /followers route now displays a paginated list of your bot's followers, and the follower count on the main profile page is now clickable, providing better visibility into your bot's audience. This improvement makes the web interface more complete and user-friendly.
For developers looking for alternative storage backends, we've introduced the SqliteRepository through the new @fedify/botkit-sqlite package. This provides a production-ready SQLite-based storage solution with ACID compliance, write-ahead logging (WAL) for optimal performance, and proper indexing. Additionally, the new @fedify/botkit/repository module offers MemoryCachedRepository for adding an in-memory cache layer on top of any repository implementation, improving read performance for frequently accessed data.
This release also includes an important security update: we've upgraded to #Fedify 1.8.8, ensuring your bots stay secure and compatible with the latest ActivityPub standards. The repository pattern has been expanded with new interfaces and types like RepositoryGetMessagesOptions, RepositoryGetFollowersOptions, and proper support for polls storage through the KvStoreRepositoryPrefixes.polls option, providing more flexibility for custom implementations.
botkit.fedify.dev
Repository | BotKit by Fedify
A repository is a data access object that provides an abstraction over the underlying data source. This document provides an overview of repositories and how they are used in the framework.
We're excited to announce the release of BotKit 0.3.0! This release marks a significant milestone as #BotKit now supports #Node.js alongside #Deno, making it accessible to a wider audience. The minimum required Node.js version is 22.0.0. This dual-runtime support means you can now choose your preferred #JavaScript runtime while building #ActivityPub #bots with the same powerful BotKit APIs.
One of the most requested features has landed: poll support! You can now create interactive polls in your #bot messages, allowing followers to vote on questions with single or multiple-choice options. Polls are represented as ActivityPub Question objects with proper expiration times, and your bot can react to votes through the new onVote event handler. This feature enhances engagement possibilities and brings BotKit to feature parity with major #fediverse platforms like Mastodon and Misskey.
// Create a poll with multiple choices
await session.publish(text`What's your favorite programming language?`, {
class: Question,
poll: {
multiple: true, // Allow multiple selections
options: ["JavaScript", "TypeScript", "Python", "Rust"],
endTime: Temporal.Now.instant().add({ hours: 24 }),
},
});
// Handle votes
bot.onVote = async (session, vote) => {
console.log(`${vote.actor} voted for "${vote.option}"`);
};The web frontend has been enhanced with a new followers page, thanks to the contribution from Hyeonseo Kim (@gaebalgom)! The /followers route now displays a paginated list of your bot's followers, and the follower count on the main profile page is now clickable, providing better visibility into your bot's audience. This improvement makes the web interface more complete and user-friendly.
For developers looking for alternative storage backends, we've introduced the SqliteRepository through the new @fedify/botkit-sqlite package. This provides a production-ready SQLite-based storage solution with ACID compliance, write-ahead logging (WAL) for optimal performance, and proper indexing. Additionally, the new @fedify/botkit/repository module offers MemoryCachedRepository for adding an in-memory cache layer on top of any repository implementation, improving read performance for frequently accessed data.
This release also includes an important security update: we've upgraded to #Fedify 1.8.8, ensuring your bots stay secure and compatible with the latest ActivityPub standards. The repository pattern has been expanded with new interfaces and types like RepositoryGetMessagesOptions, RepositoryGetFollowersOptions, and proper support for polls storage through the KvStoreRepositoryPrefixes.polls option, providing more flexibility for custom implementations.
botkit.fedify.dev
Repository | BotKit by Fedify
A repository is a data access object that provides an abstraction over the underlying data source. This document provides an overview of repositories and how they are used in the framework.
We're excited to announce the release of BotKit 0.3.0! This release marks a significant milestone as #BotKit now supports #Node.js alongside #Deno, making it accessible to a wider audience. The minimum required Node.js version is 22.0.0. This dual-runtime support means you can now choose your preferred #JavaScript runtime while building #ActivityPub #bots with the same powerful BotKit APIs.
One of the most requested features has landed: poll support! You can now create interactive polls in your #bot messages, allowing followers to vote on questions with single or multiple-choice options. Polls are represented as ActivityPub Question objects with proper expiration times, and your bot can react to votes through the new onVote event handler. This feature enhances engagement possibilities and brings BotKit to feature parity with major #fediverse platforms like Mastodon and Misskey.
// Create a poll with multiple choices
await session.publish(text`What's your favorite programming language?`, {
class: Question,
poll: {
multiple: true, // Allow multiple selections
options: ["JavaScript", "TypeScript", "Python", "Rust"],
endTime: Temporal.Now.instant().add({ hours: 24 }),
},
});
// Handle votes
bot.onVote = async (session, vote) => {
console.log(`${vote.actor} voted for "${vote.option}"`);
};The web frontend has been enhanced with a new followers page, thanks to the contribution from Hyeonseo Kim (@gaebalgom)! The /followers route now displays a paginated list of your bot's followers, and the follower count on the main profile page is now clickable, providing better visibility into your bot's audience. This improvement makes the web interface more complete and user-friendly.
For developers looking for alternative storage backends, we've introduced the SqliteRepository through the new @fedify/botkit-sqlite package. This provides a production-ready SQLite-based storage solution with ACID compliance, write-ahead logging (WAL) for optimal performance, and proper indexing. Additionally, the new @fedify/botkit/repository module offers MemoryCachedRepository for adding an in-memory cache layer on top of any repository implementation, improving read performance for frequently accessed data.
This release also includes an important security update: we've upgraded to #Fedify 1.8.8, ensuring your bots stay secure and compatible with the latest ActivityPub standards. The repository pattern has been expanded with new interfaces and types like RepositoryGetMessagesOptions, RepositoryGetFollowersOptions, and proper support for polls storage through the KvStoreRepositoryPrefixes.polls option, providing more flexibility for custom implementations.
botkit.fedify.dev
Repository | BotKit by Fedify
A repository is a data access object that provides an abstraction over the underlying data source. This document provides an overview of repositories and how they are used in the framework.
We're excited to announce the release of BotKit 0.3.0! This release marks a significant milestone as #BotKit now supports #Node.js alongside #Deno, making it accessible to a wider audience. The minimum required Node.js version is 22.0.0. This dual-runtime support means you can now choose your preferred #JavaScript runtime while building #ActivityPub #bots with the same powerful BotKit APIs.
One of the most requested features has landed: poll support! You can now create interactive polls in your #bot messages, allowing followers to vote on questions with single or multiple-choice options. Polls are represented as ActivityPub Question objects with proper expiration times, and your bot can react to votes through the new onVote event handler. This feature enhances engagement possibilities and brings BotKit to feature parity with major #fediverse platforms like Mastodon and Misskey.
// Create a poll with multiple choices
await session.publish(text`What's your favorite programming language?`, {
class: Question,
poll: {
multiple: true, // Allow multiple selections
options: ["JavaScript", "TypeScript", "Python", "Rust"],
endTime: Temporal.Now.instant().add({ hours: 24 }),
},
});
// Handle votes
bot.onVote = async (session, vote) => {
console.log(`${vote.actor} voted for "${vote.option}"`);
};The web frontend has been enhanced with a new followers page, thanks to the contribution from Hyeonseo Kim (@gaebalgom)! The /followers route now displays a paginated list of your bot's followers, and the follower count on the main profile page is now clickable, providing better visibility into your bot's audience. This improvement makes the web interface more complete and user-friendly.
For developers looking for alternative storage backends, we've introduced the SqliteRepository through the new @fedify/botkit-sqlite package. This provides a production-ready SQLite-based storage solution with ACID compliance, write-ahead logging (WAL) for optimal performance, and proper indexing. Additionally, the new @fedify/botkit/repository module offers MemoryCachedRepository for adding an in-memory cache layer on top of any repository implementation, improving read performance for frequently accessed data.
This release also includes an important security update: we've upgraded to #Fedify 1.8.8, ensuring your bots stay secure and compatible with the latest ActivityPub standards. The repository pattern has been expanded with new interfaces and types like RepositoryGetMessagesOptions, RepositoryGetFollowersOptions, and proper support for polls storage through the KvStoreRepositoryPrefixes.polls option, providing more flexibility for custom implementations.
botkit.fedify.dev
Repository | BotKit by Fedify
A repository is a data access object that provides an abstraction over the underlying data source. This document provides an overview of repositories and how they are used in the framework.
We're excited to announce the release of BotKit 0.3.0! This release marks a significant milestone as #BotKit now supports #Node.js alongside #Deno, making it accessible to a wider audience. The minimum required Node.js version is 22.0.0. This dual-runtime support means you can now choose your preferred #JavaScript runtime while building #ActivityPub #bots with the same powerful BotKit APIs.
One of the most requested features has landed: poll support! You can now create interactive polls in your #bot messages, allowing followers to vote on questions with single or multiple-choice options. Polls are represented as ActivityPub Question objects with proper expiration times, and your bot can react to votes through the new onVote event handler. This feature enhances engagement possibilities and brings BotKit to feature parity with major #fediverse platforms like Mastodon and Misskey.
// Create a poll with multiple choices
await session.publish(text`What's your favorite programming language?`, {
class: Question,
poll: {
multiple: true, // Allow multiple selections
options: ["JavaScript", "TypeScript", "Python", "Rust"],
endTime: Temporal.Now.instant().add({ hours: 24 }),
},
});
// Handle votes
bot.onVote = async (session, vote) => {
console.log(`${vote.actor} voted for "${vote.option}"`);
};The web frontend has been enhanced with a new followers page, thanks to the contribution from Hyeonseo Kim (@gaebalgom)! The /followers route now displays a paginated list of your bot's followers, and the follower count on the main profile page is now clickable, providing better visibility into your bot's audience. This improvement makes the web interface more complete and user-friendly.
For developers looking for alternative storage backends, we've introduced the SqliteRepository through the new @fedify/botkit-sqlite package. This provides a production-ready SQLite-based storage solution with ACID compliance, write-ahead logging (WAL) for optimal performance, and proper indexing. Additionally, the new @fedify/botkit/repository module offers MemoryCachedRepository for adding an in-memory cache layer on top of any repository implementation, improving read performance for frequently accessed data.
This release also includes an important security update: we've upgraded to #Fedify 1.8.8, ensuring your bots stay secure and compatible with the latest ActivityPub standards. The repository pattern has been expanded with new interfaces and types like RepositoryGetMessagesOptions, RepositoryGetFollowersOptions, and proper support for polls storage through the KvStoreRepositoryPrefixes.polls option, providing more flexibility for custom implementations.
botkit.fedify.dev
Repository | BotKit by Fedify
A repository is a data access object that provides an abstraction over the underlying data source. This document provides an overview of repositories and how they are used in the framework.
We're excited to announce the release of BotKit 0.3.0! This release marks a significant milestone as #BotKit now supports #Node.js alongside #Deno, making it accessible to a wider audience. The minimum required Node.js version is 22.0.0. This dual-runtime support means you can now choose your preferred #JavaScript runtime while building #ActivityPub #bots with the same powerful BotKit APIs.
One of the most requested features has landed: poll support! You can now create interactive polls in your #bot messages, allowing followers to vote on questions with single or multiple-choice options. Polls are represented as ActivityPub Question objects with proper expiration times, and your bot can react to votes through the new onVote event handler. This feature enhances engagement possibilities and brings BotKit to feature parity with major #fediverse platforms like Mastodon and Misskey.
// Create a poll with multiple choices
await session.publish(text`What's your favorite programming language?`, {
class: Question,
poll: {
multiple: true, // Allow multiple selections
options: ["JavaScript", "TypeScript", "Python", "Rust"],
endTime: Temporal.Now.instant().add({ hours: 24 }),
},
});
// Handle votes
bot.onVote = async (session, vote) => {
console.log(`${vote.actor} voted for "${vote.option}"`);
};The web frontend has been enhanced with a new followers page, thanks to the contribution from Hyeonseo Kim (@gaebalgom)! The /followers route now displays a paginated list of your bot's followers, and the follower count on the main profile page is now clickable, providing better visibility into your bot's audience. This improvement makes the web interface more complete and user-friendly.
For developers looking for alternative storage backends, we've introduced the SqliteRepository through the new @fedify/botkit-sqlite package. This provides a production-ready SQLite-based storage solution with ACID compliance, write-ahead logging (WAL) for optimal performance, and proper indexing. Additionally, the new @fedify/botkit/repository module offers MemoryCachedRepository for adding an in-memory cache layer on top of any repository implementation, improving read performance for frequently accessed data.
This release also includes an important security update: we've upgraded to #Fedify 1.8.8, ensuring your bots stay secure and compatible with the latest ActivityPub standards. The repository pattern has been expanded with new interfaces and types like RepositoryGetMessagesOptions, RepositoryGetFollowersOptions, and proper support for polls storage through the KvStoreRepositoryPrefixes.polls option, providing more flexibility for custom implementations.
botkit.fedify.dev
Repository | BotKit by Fedify
A repository is a data access object that provides an abstraction over the underlying data source. This document provides an overview of repositories and how they are used in the framework.
#Development #Overviews
JavaScript’s runtime decade · Running JavaScript beyond the browser and Node.js https://ilo.im/165oqw
_____
#JavaScript #Devices #Cloud #Browser #NodeJS #Deno #Bun #WebDev #Frontend #Backend
#Development #Overviews
JavaScript’s runtime decade · Running JavaScript beyond the browser and Node.js https://ilo.im/165oqw
_____
#JavaScript #Devices #Cloud #Browser #NodeJS #Deno #Bun #WebDev #Frontend #Backend
Fedify is an #ActivityPub server framework in #TypeScript & #JavaScript. It aims to eliminate the complexity and redundant boilerplate code when building a federated server app, so that you can focus on your business logic and user experience.
The key features it provides currently are:
- Type-safe objects for Activity Vocabulary (including some vendor-specific extensions)
- #WebFinger client and server
- HTTP Signatures & Linked Data Signatures & Object Integrity Proofs
- Middleware for handling webhooks
- #NodeInfo protocol
- #Node.js, #Deno, and #Bun support
- CLI toolchain for testing and debugging
If you're curious, take a look at the #Fedify website! There's comprehensive docs, a demo, a tutorial, example code, and more:
Introducing #Upyo!
A simple, cross-runtime email library that works seamlessly on #Deno, #Node.js, #Bun, and edge functions. Zero dependencies, unified API, and excellent testability with built-in mock transport.
Switch between #SMTP, #Mailgun, #SendGrid without changing your code. Available on #JSR & #npm!
upyo.org
Upyo
A simple and cross-runtime library for sending email messages using SMTP and various email providers
Introducing #Upyo!
A simple, cross-runtime email library that works seamlessly on #Deno, #Node.js, #Bun, and edge functions. Zero dependencies, unified API, and excellent testability with built-in mock transport.
Switch between #SMTP, #Mailgun, #SendGrid without changing your code. Available on #JSR & #npm!
upyo.org
Upyo
A simple and cross-runtime library for sending email messages using SMTP and various email providers
Introducing #Upyo!
A simple, cross-runtime email library that works seamlessly on #Deno, #Node.js, #Bun, and edge functions. Zero dependencies, unified API, and excellent testability with built-in mock transport.
Switch between #SMTP, #Mailgun, #SendGrid without changing your code. Available on #JSR & #npm!
upyo.org
Upyo
A simple and cross-runtime library for sending email messages using SMTP and various email providers
Introducing #Upyo!
A simple, cross-runtime email library that works seamlessly on #Deno, #Node.js, #Bun, and edge functions. Zero dependencies, unified API, and excellent testability with built-in mock transport.
Switch between #SMTP, #Mailgun, #SendGrid without changing your code. Available on #JSR & #npm!
upyo.org
Upyo
A simple and cross-runtime library for sending email messages using SMTP and various email providers
Introducing #Upyo!
A simple, cross-runtime email library that works seamlessly on #Deno, #Node.js, #Bun, and edge functions. Zero dependencies, unified API, and excellent testability with built-in mock transport.
Switch between #SMTP, #Mailgun, #SendGrid without changing your code. Available on #JSR & #npm!
upyo.org
Upyo
A simple and cross-runtime library for sending email messages using SMTP and various email providers
Introducing #Upyo!
A simple, cross-runtime email library that works seamlessly on #Deno, #Node.js, #Bun, and edge functions. Zero dependencies, unified API, and excellent testability with built-in mock transport.
Switch between #SMTP, #Mailgun, #SendGrid without changing your code. Available on #JSR & #npm!
upyo.org
Upyo
A simple and cross-runtime library for sending email messages using SMTP and various email providers
Introducing #Upyo!
A simple, cross-runtime email library that works seamlessly on #Deno, #Node.js, #Bun, and edge functions. Zero dependencies, unified API, and excellent testability with built-in mock transport.
Switch between #SMTP, #Mailgun, #SendGrid without changing your code. Available on #JSR & #npm!
upyo.org
Upyo
A simple and cross-runtime library for sending email messages using SMTP and various email providers
Introducing #Upyo!
A simple, cross-runtime email library that works seamlessly on #Deno, #Node.js, #Bun, and edge functions. Zero dependencies, unified API, and excellent testability with built-in mock transport.
Switch between #SMTP, #Mailgun, #SendGrid without changing your code. Available on #JSR & #npm!
upyo.org
Upyo
A simple and cross-runtime library for sending email messages using SMTP and various email providers
Introducing #Upyo!
A simple, cross-runtime email library that works seamlessly on #Deno, #Node.js, #Bun, and edge functions. Zero dependencies, unified API, and excellent testability with built-in mock transport.
Switch between #SMTP, #Mailgun, #SendGrid without changing your code. Available on #JSR & #npm!
upyo.org
Upyo
A simple and cross-runtime library for sending email messages using SMTP and various email providers
Introducing #Upyo!
A simple, cross-runtime email library that works seamlessly on #Deno, #Node.js, #Bun, and edge functions. Zero dependencies, unified API, and excellent testability with built-in mock transport.
Switch between #SMTP, #Mailgun, #SendGrid without changing your code. Available on #JSR & #npm!
upyo.org
Upyo
A simple and cross-runtime library for sending email messages using SMTP and various email providers
Introducing #Upyo!
A simple, cross-runtime email library that works seamlessly on #Deno, #Node.js, #Bun, and edge functions. Zero dependencies, unified API, and excellent testability with built-in mock transport.
Switch between #SMTP, #Mailgun, #SendGrid without changing your code. Available on #JSR & #npm!
upyo.org
Upyo
A simple and cross-runtime library for sending email messages using SMTP and various email providers
Introducing #Upyo!
A simple, cross-runtime email library that works seamlessly on #Deno, #Node.js, #Bun, and edge functions. Zero dependencies, unified API, and excellent testability with built-in mock transport.
Switch between #SMTP, #Mailgun, #SendGrid without changing your code. Available on #JSR & #npm!
upyo.org
Upyo
A simple and cross-runtime library for sending email messages using SMTP and various email providers
It's been 30 years we have #Javascript. So much in technology has changed in that time. It's kind of amazing how much the language and the broader web helped shape the world.
#deno post on the history of Javascript really cements this. Can't believe it's been that long. 😅
deno.com
A brief history of JavaScript | Deno
In 30 years, JavaScript went from being a little scripting language to one of the world's most popular. Here are key moments to show how it has evolved and where it is headed.
It's been 30 years we have #Javascript. So much in technology has changed in that time. It's kind of amazing how much the language and the broader web helped shape the world.
#deno post on the history of Javascript really cements this. Can't believe it's been that long. 😅
deno.com
A brief history of JavaScript | Deno
In 30 years, JavaScript went from being a little scripting language to one of the world's most popular. Here are key moments to show how it has evolved and where it is headed.
We're pleased to announce that #Node.js support has been merged and will be available in #BotKit 0.3.0.
Now you can build your #ActivityPub bots with both #Deno and Node.js, giving you more flexibility in choosing your preferred runtime environment.
Stay tuned for BotKit 0.3.0!
We're pleased to announce that #Node.js support has been merged and will be available in #BotKit 0.3.0.
Now you can build your #ActivityPub bots with both #Deno and Node.js, giving you more flexibility in choosing your preferred runtime environment.
Stay tuned for BotKit 0.3.0!
We're pleased to announce that #Node.js support has been merged and will be available in #BotKit 0.3.0.
Now you can build your #ActivityPub bots with both #Deno and Node.js, giving you more flexibility in choosing your preferred runtime environment.
Stay tuned for BotKit 0.3.0!
We're pleased to announce that #Node.js support has been merged and will be available in #BotKit 0.3.0.
Now you can build your #ActivityPub bots with both #Deno and Node.js, giving you more flexibility in choosing your preferred runtime environment.
Stay tuned for BotKit 0.3.0!
We're pleased to announce that #Node.js support has been merged and will be available in #BotKit 0.3.0.
Now you can build your #ActivityPub bots with both #Deno and Node.js, giving you more flexibility in choosing your preferred runtime environment.
Stay tuned for BotKit 0.3.0!
We're pleased to announce that #Node.js support has been merged and will be available in #BotKit 0.3.0.
Now you can build your #ActivityPub bots with both #Deno and Node.js, giving you more flexibility in choosing your preferred runtime environment.
Stay tuned for BotKit 0.3.0!
We're pleased to announce that #Node.js support has been merged and will be available in #BotKit 0.3.0.
Now you can build your #ActivityPub bots with both #Deno and Node.js, giving you more flexibility in choosing your preferred runtime environment.
Stay tuned for BotKit 0.3.0!
We're pleased to announce that #Node.js support has been merged and will be available in #BotKit 0.3.0.
Now you can build your #ActivityPub bots with both #Deno and Node.js, giving you more flexibility in choosing your preferred runtime environment.
Stay tuned for BotKit 0.3.0!
Anyone here have experience using @vitest with @deno_land, or setting up a unit test suite that works on #Deno, #Node.js, and #Bun?
Anyone here have experience using @vitest with @deno_land, or setting up a unit test suite that works on #Deno, #Node.js, and #Bun?
Anyone here have experience using @vitest with @deno_land, or setting up a unit test suite that works on #Deno, #Node.js, and #Bun?
Last weekend I published a fun little project that allows you to use the #Rust library #Ratatui to make a #TUI (Terminal UI) in #JavaScript/#TypeScript, via #WASM.
https://github.com/nfnitloop/ratatui-wasm-backend
That repo contains an example app, which you can easily run with #Deno, which keeps it entirely sandboxed from your system. Here's a quick screen recording:
https://asciinema.org/a/8Ljb2Tkp9SyujJpaDjMKBadGw
Let me know if you build anything fun with it. 😊
asciinema.org
untitled
Recorded by codyc
Last weekend I published a fun little project that allows you to use the #Rust library #Ratatui to make a #TUI (Terminal UI) in #JavaScript/#TypeScript, via #WASM.
https://github.com/nfnitloop/ratatui-wasm-backend
That repo contains an example app, which you can easily run with #Deno, which keeps it entirely sandboxed from your system. Here's a quick screen recording:
https://asciinema.org/a/8Ljb2Tkp9SyujJpaDjMKBadGw
Let me know if you build anything fun with it. 😊
asciinema.org
untitled
Recorded by codyc
In love with #Deno says the author; not so much Deno Deploy.
@deno_land

intaek.blog
How I got in love with Deno & Fresh.
In love with #Deno says the author; not so much Deno Deploy.
@deno_land

intaek.blog
How I got in love with Deno & Fresh.
I think I've fully adopted to writing scripts in #typescript with #deno. 😅 It can be so immensely convenient.
You can bundle hack something fairly quickly. With dependencies pinned. And most of all, still have some level of security.
Can't say the same of all my other language scripts. 🫠
I think I've fully adopted to writing scripts in #typescript with #deno. 😅 It can be so immensely convenient.
You can bundle hack something fairly quickly. With dependencies pinned. And most of all, still have some level of security.
Can't say the same of all my other language scripts. 🫠
I think I've fully adopted to writing scripts in #typescript with #deno. 😅 It can be so immensely convenient.
You can bundle hack something fairly quickly. With dependencies pinned. And most of all, still have some level of security.
Can't say the same of all my other language scripts. 🫠
AIMindUpdate News!
🚀⚡️ Great news for Deno developers! 2.3 update brings faster compiles, local NPM support, and much more. Boost your workflow! #Deno #JavaScript #TypeScript
Click here↓↓↓
https://aimindupdate.com/2025/05/05/deno-2-3-compile-enhancements-local-npm-support-for-developers
aimindupdate.com
Deno 2.3: Compile & NPM Improvements | GameFi News
Deno 2.3 update: Faster compiles, local NPM package support, & more! Enhance your JavaScript/TypeScript workflow today.
AIMindUpdate News!
🚀⚡️ Great news for Deno developers! 2.3 update brings faster compiles, local NPM support, and much more. Boost your workflow! #Deno #JavaScript #TypeScript
Click here↓↓↓
https://aimindupdate.com/2025/05/05/deno-2-3-compile-enhancements-local-npm-support-for-developers
aimindupdate.com
Deno 2.3: Compile & NPM Improvements | GameFi News
Deno 2.3 update: Faster compiles, local NPM package support, & more! Enhance your JavaScript/TypeScript workflow today.
"Deno has allowed us to transition services faster without sacrificing reliability," says Plaid architecture lead Zander Hill.
Here's how they did it 👇
https://deno.com/blog/how-plaid-migrated-critical-services-with-deno
deno.com
How Plaid migrated 100 services to a new database platform 5x faster with Deno
Learn how Plaid used Deno to minimize downtime and improve cutover speed during a critical infrastructure migration.
Apparently, #deno version 2.3 has been released by @deno_land:
https://github.com/denoland/deno/releases/tag/v2.3.0
Release v2.3.0 · denoland/deno
2.3.0 / 2025.04.30 feat: add --open to deno serve to open server in browser (#25340) feat: Allow access to NO_COLOR env var without --allow-env (#29090) feat: allow forcing in-memory SQLite dbs (#...
Apparently, #deno version 2.3 has been released by @deno_land:
https://github.com/denoland/deno/releases/tag/v2.3.0
Release v2.3.0 · denoland/deno
2.3.0 / 2025.04.30 feat: add --open to deno serve to open server in browser (#25340) feat: Allow access to NO_COLOR env var without --allow-env (#29090) feat: allow forcing in-memory SQLite dbs (#...
Hello @hongminhee
since multiple hours I was sleepless cause I wondered about how to store anything ActivityPub in #deno #kv
I think, I will finish this crazy code somewhen in the next days :) Would you be interested in such a thing?
If:
Tried to solve the following fully ActivityPub conformant, meaning e.g.
- multiple actors can do an action on multiple objects and it needs to be fully versioned cause Undo or Undo/Undo …
- so anything is RFC 6902 <-> kv where anything is ulid and the "version" for the object is the ulid of an Update/Undo etc.
- JSON Patch acknowledges the limits (e.g. size of kv values), any property is stored versioned
- strongly avoiding duplicates;
the "text properties" like contentMap are stored as cid and similar beneath each other by a numeric nilsimsa hash (though /me bad at math)
- we can query all relationships and
- additionally "where", "when", "what" questions are answered by geohash, ulid ranges or a specific hierarchic hash of as:- and our subtypes
Discovered #SilverBullet today. Uses #lua for scripting, #localfirst, and is built with #deno. 🤯 Just wow! I'm going to need to play with this. 😏
youtube.com
SilverBullet Intro & Demo (v2 edition)
SilverBullet is an open source personal productivity platform built on Markdown, turbo charged with the scripting power of Lua.In this demo video I demonstra...
How to automatically associate console logs by request with @opentelemetry and Hyperdx
How to automatically associate console logs by request with @opentelemetry and Hyperdx
Discovered #SilverBullet today. Uses #lua for scripting, #localfirst, and is built with #deno. 🤯 Just wow! I'm going to need to play with this. 😏
youtube.com
SilverBullet Intro & Demo (v2 edition)
SilverBullet is an open source personal productivity platform built on Markdown, turbo charged with the scripting power of Lua.In this demo video I demonstra...
How to automatically associate console logs by request with @opentelemetry and Hyperdx
deno-ast has a tagged version that don't compile, which is used by rustyscript in one of it's default features.
How the fuck do you let this happen ???
I don't necessarily blame rustyscript here since it merely use deno and it's easy to let this kind of bug slide into your project...
But deno? Hello ? Why are you tagging code that don't compile ???
Deno v2.2.10 is out 🎉
⭐ Faster deno install with npm
⭐ improved node:test
⭐ stream and querystring fixes
⭐ virtio VSOCK on Linux
and more!
Release v2.2.10 · denoland/deno
Upgrade deno upgrade Or install for the first time curl -fsSL https://deno.land/install.sh | sh New features using keyword support: Adds support for using, DisposableStack, and AsyncDisposableSt...
Node Just Added TypeScript Support. What Does That Mean for Deno?, by @tinyclouds.org (@deno_land):
deno.com
Node just added TypeScript support. What does that mean for Deno?
Node's experimental TypeScript support will be stabilized in 23.6. Here's what Node's TypeScript integration looks like and how it compares to Deno.
a model context protocol server that securely runs untrusted Python 🐍 code in a sandbox with Deno 🦕
https://github.com/pydantic/pydantic-ai/tree/main/mcp-run-python
github.com
pydantic-ai/mcp-run-python at main · pydantic/pydantic-ai
Agent Framework / shim to use Pydantic with LLMs. Contribute to pydantic/pydantic-ai development by creating an account on GitHub.
How send @opentelemetry data from your #Deno (or #NodeJS) app to @honeycombio
https://docs.deno.com/examples/honeycomb_tutorial/
Deno vs. Oracle Update 3: Fighting the JavaScript Trademark, by @tinyclouds.org (@deno_land):
deno.com
Deno v Oracle Update 3: Fighting the JavaScript Trademark
Oracle has filed a partial motion to dismiss our fraud claim. We’re now waiting on the USPTO to weigh in.
Deno v2.2.10 is out 🎉
⭐ Faster deno install with npm
⭐ improved node:test
⭐ stream and querystring fixes
⭐ virtio VSOCK on Linux
and more!
Release v2.2.10 · denoland/deno
Upgrade deno upgrade Or install for the first time curl -fsSL https://deno.land/install.sh | sh New features using keyword support: Adds support for using, DisposableStack, and AsyncDisposableSt...
Deno v2.2.10 is out 🎉
⭐ Faster deno install with npm
⭐ improved node:test
⭐ stream and querystring fixes
⭐ virtio VSOCK on Linux
and more!
Release v2.2.10 · denoland/deno
Upgrade deno upgrade Or install for the first time curl -fsSL https://deno.land/install.sh | sh New features using keyword support: Adds support for using, DisposableStack, and AsyncDisposableSt...
Deno v2.2.10 is out 🎉
⭐ Faster deno install with npm
⭐ improved node:test
⭐ stream and querystring fixes
⭐ virtio VSOCK on Linux
and more!
Release v2.2.10 · denoland/deno
Upgrade deno upgrade Or install for the first time curl -fsSL https://deno.land/install.sh | sh New features using keyword support: Adds support for using, DisposableStack, and AsyncDisposableSt...
Node Just Added TypeScript Support. What Does That Mean for Deno?, by @tinyclouds.org (@deno_land):
deno.com
Node just added TypeScript support. What does that mean for Deno?
Node's experimental TypeScript support will be stabilized in 23.6. Here's what Node's TypeScript integration looks like and how it compares to Deno.
Deno vs. Oracle Update 3: Fighting the JavaScript Trademark, by @tinyclouds.org (@deno_land):
deno.com
Deno v Oracle Update 3: Fighting the JavaScript Trademark
Oracle has filed a partial motion to dismiss our fraud claim. We’re now waiting on the USPTO to weigh in.
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 ✨
https://deno.com/blog/zero-config-debugging-deno-opentelemetry
Fedify is an #ActivityPub server framework in #TypeScript & #JavaScript. It aims to eliminate the complexity and redundant boilerplate code when building a federated server app, so that you can focus on your business logic and user experience.
The key features it provides currently are:
- Type-safe objects for Activity Vocabulary (including some vendor-specific extensions)
- #WebFinger client and server
- HTTP Signatures & Linked Data Signatures & Object Integrity Proofs
- Middleware for handling webhooks
- #NodeInfo protocol
- #Node.js, #Deno, and #Bun support
- CLI toolchain for testing and debugging
If you're curious, take a look at the #Fedify website! There's comprehensive docs, a demo, a tutorial, example code, and more:
why /me so silent, you ask …
databases are boring but the #deno #denokv #activitypub #normalization #i18n including proper indexing with ulid, geohash, types-hash (when,where,what) and text-similarity sorting and cid stuff MUST be done properly for all the activities side effects.
¯\_(ツ)_/¯
Node Just Added TypeScript Support. What Does That Mean for Deno?, by @tinyclouds.org (@deno_land):
deno.com
Node just added TypeScript support. What does that mean for Deno?
Node's experimental TypeScript support will be stabilized in 23.6. Here's what Node's TypeScript integration looks like and how it compares to Deno.
Releasing Denostories 0.3.0, a storybook implementation for Fresh, combined with headless component behaviour testing. All right in your Fresh instance.
deno.land
denostories@0.3.0 | Deno
Storybook implementation for the Fresh framework, inspired by Ladle.
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 👇
https://deno.com/blog/exploring-art-with-typescript-and-jupyter
deno.com
Exploring Art with TypeScript, Jupyter, Polars, and Observable Plot
With Deno's Jupyter support, you can explore, interact, and create interactive charts with TypeScript and HTML. Here's a tutorial featuring data of over 130,000 famous artworks.
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 👇
https://deno.com/blog/exploring-art-with-typescript-and-jupyter
deno.com
Exploring Art with TypeScript, Jupyter, Polars, and Observable Plot
With Deno's Jupyter support, you can explore, interact, and create interactive charts with TypeScript and HTML. Here's a tutorial featuring data of over 130,000 famous artworks.
#FreeJavaScript update: Oracle has just filed more on their motion to dismiss the Fraud claim.
Here's a summary of where the case stands: https://deno.com/blog/deno-v-oracle3
#FreeJavaScript update: Oracle has just filed more on their motion to dismiss the Fraud claim.
Here's a summary of where the case stands: https://deno.com/blog/deno-v-oracle3
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 (#WebApp) 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 #ForgeJo
- #OpenSource
Nice to have
- Possibly using #Deno, not #NodeJS
- 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
- #FreeSoftware
Absolutely not
- Front-end #JavaScript frameworks
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!)
#Eleventy #11ty #CMS #HeadlessCMS #Ghost #DecapCMS #CraftCMS #Strapi #Web #WebDev #WebDesign #StaticGen #StaticWebsite #Website #HTML #CSS #YunoHost #SelfHosting #Wordpress
jamstack.org
Headless CMS - Top Content Management Systems | Jamstack
Check out this showcase of some of the best, open source headless CMSes. This is community-drive so be sure to submit your favorite CMS today!
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 (#WebApp) 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 #ForgeJo
- #OpenSource
Nice to have
- Possibly using #Deno, not #NodeJS
- 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
- #FreeSoftware
Absolutely not
- Front-end #JavaScript frameworks
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!)
#Eleventy #11ty #CMS #HeadlessCMS #Ghost #DecapCMS #CraftCMS #Strapi #Web #WebDev #WebDesign #StaticGen #StaticWebsite #Website #HTML #CSS #YunoHost #SelfHosting #Wordpress
jamstack.org
Headless CMS - Top Content Management Systems | Jamstack
Check out this showcase of some of the best, open source headless CMSes. This is community-drive so be sure to submit your favorite CMS today!
Releasing Denostories 0.3.0, a storybook implementation for Fresh, combined with headless component behaviour testing. All right in your Fresh instance.
deno.land
denostories@0.3.0 | Deno
Storybook implementation for the Fresh framework, inspired by Ladle.
#NodeJS has an incredibly mature governance model which #Deno lacks completely. Its trajectory is completely determined by the VC-backed company behind it.
I feel like this fact is often overlooked in debates whether to choose one or the other.
github.com
GitHub - nodejs/TSC: The Node.js Technical Steering Committee
The Node.js Technical Steering Committee. Contribute to nodejs/TSC development by creating an account on GitHub.
#Pipelight typescript issue fixed.
It was a nasty bug that slide in with #deno 2.2.
Fixed by replacing external #UUID library with bultins uuid library.
This type of heartful message is what keeps me sharing my best code with you. ☺
github.com
Missing TypeScript type definitions for Pipelight in Deno: "https://deno.land/x/pipelight/mod.ts" · Issue #35 · pipelight/pipelight
Missing TypeScript type definitions in Pipelight Pipelines in Deno Although I'm new to using Pipelight, I think the problem may be a nonexistent import from the server of the library hosted by the ...
Just landed a new manual page on Deno's FFI

docs.deno.com
Foreign Function Interface (FFI)
Learn how to use Deno's Foreign Function Interface (FFI) to call native libraries directly from JavaScript or TypeScript. Includes examples, best practices, and security considerations.
Just landed a new manual page on Deno's FFI

docs.deno.com
Foreign Function Interface (FFI)
Learn how to use Deno's Foreign Function Interface (FFI) to call native libraries directly from JavaScript or TypeScript. Includes examples, best practices, and security considerations.
Is the world in need of a federated Craigslist/Kleinanzeigen platform? I am currently thinking about a project to dig into #fediverse development and learning #golang or stay with #deno and using #fedify.
EDIT: There is already something like that on the fediverse! It's called Flohmarkt. Thanks for the comments mentioning that!
https://codeberg.org/flohmarkt/flohmarkt
codeberg.org
flohmarkt
federated decentral classified ad software using activitypub
Is the world in need of a federated Craigslist/Kleinanzeigen platform? I am currently thinking about a project to dig into #fediverse development and learning #golang or stay with #deno and using #fedify.
EDIT: There is already something like that on the fediverse! It's called Flohmarkt. Thanks for the comments mentioning that!
https://codeberg.org/flohmarkt/flohmarkt
codeberg.org
flohmarkt
federated decentral classified ad software using activitypub
Just landed a new manual page on Deno's FFI

docs.deno.com
Foreign Function Interface (FFI)
Learn how to use Deno's Foreign Function Interface (FFI) to call native libraries directly from JavaScript or TypeScript. Includes examples, best practices, and security considerations.
Just landed a new manual page on Deno's FFI

docs.deno.com
Foreign Function Interface (FFI)
Learn how to use Deno's Foreign Function Interface (FFI) to call native libraries directly from JavaScript or TypeScript. Includes examples, best practices, and security considerations.
#Pipelight typescript issue fixed.
It was a nasty bug that slide in with #deno 2.2.
Fixed by replacing external #UUID library with bultins uuid library.
This type of heartful message is what keeps me sharing my best code with you. ☺
github.com
Missing TypeScript type definitions for Pipelight in Deno: "https://deno.land/x/pipelight/mod.ts" · Issue #35 · pipelight/pipelight
Missing TypeScript type definitions in Pipelight Pipelines in Deno Although I'm new to using Pipelight, I think the problem may be a nonexistent import from the server of the library hosted by the ...
#Pipelight typescript issue fixed.
It was a nasty bug that slide in with #deno 2.2.
Fixed by replacing external #UUID library with bultins uuid library.
This type of heartful message is what keeps me sharing my best code with you. ☺
github.com
Missing TypeScript type definitions for Pipelight in Deno: "https://deno.land/x/pipelight/mod.ts" · Issue #35 · pipelight/pipelight
Missing TypeScript type definitions in Pipelight Pipelines in Deno Although I'm new to using Pipelight, I think the problem may be a nonexistent import from the server of the library hosted by the ...
Want your own custom AI thats trained on confidential material?
Here's how you can build a custom RAG AI agent 👇
deno.com
Build a custom RAG AI agent in TypeScript and Jupyter
AI and LLMs are certainly useful assistive tools. But what if we need to train LLMs on confidential documents and materials? Here's how you can build your own custom RAG AI agent.
🚀 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:
https://github.com/denoland/deno/releases/tag/v2.2.4
Release v2.2.4 · denoland/deno
2.2.4 / 2025.03.14 feat(otel): span context propagators (#28460) feat(unstable/otel): add otel tracing to node:http.request (#28463) feat: support FORCE_COLOR (#28490) fix(bench): lower bench time...
Is the world in need of a federated Craigslist/Kleinanzeigen platform? I am currently thinking about a project to dig into #fediverse development and learning #golang or stay with #deno and using #fedify.
EDIT: There is already something like that on the fediverse! It's called Flohmarkt. Thanks for the comments mentioning that!
https://codeberg.org/flohmarkt/flohmarkt
codeberg.org
flohmarkt
federated decentral classified ad software using activitypub
Is the world in need of a federated Craigslist/Kleinanzeigen platform? I am currently thinking about a project to dig into #fediverse development and learning #golang or stay with #deno and using #fedify.
EDIT: There is already something like that on the fediverse! It's called Flohmarkt. Thanks for the comments mentioning that!
https://codeberg.org/flohmarkt/flohmarkt
codeberg.org
flohmarkt
federated decentral classified ad software using activitypub
Is the world in need of a federated Craigslist/Kleinanzeigen platform? I am currently thinking about a project to dig into #fediverse development and learning #golang or stay with #deno and using #fedify.
EDIT: There is already something like that on the fediverse! It's called Flohmarkt. Thanks for the comments mentioning that!
https://codeberg.org/flohmarkt/flohmarkt
codeberg.org
flohmarkt
federated decentral classified ad software using activitypub
🚀 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:
https://github.com/denoland/deno/releases/tag/v2.2.4
Release v2.2.4 · denoland/deno
2.2.4 / 2025.03.14 feat(otel): span context propagators (#28460) feat(unstable/otel): add otel tracing to node:http.request (#28463) feat: support FORCE_COLOR (#28490) fix(bench): lower bench time...
🚀 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:
https://github.com/denoland/deno/releases/tag/v2.2.4
Release v2.2.4 · denoland/deno
2.2.4 / 2025.03.14 feat(otel): span context propagators (#28460) feat(unstable/otel): add otel tracing to node:http.request (#28463) feat: support FORCE_COLOR (#28490) fix(bench): lower bench time...
🚀 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:
https://github.com/denoland/deno/releases/tag/v2.2.4
Release v2.2.4 · denoland/deno
2.2.4 / 2025.03.14 feat(otel): span context propagators (#28460) feat(unstable/otel): add otel tracing to node:http.request (#28463) feat: support FORCE_COLOR (#28490) fix(bench): lower bench time...
🚀 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:
https://github.com/denoland/deno/releases/tag/v2.2.4
Release v2.2.4 · denoland/deno
2.2.4 / 2025.03.14 feat(otel): span context propagators (#28460) feat(unstable/otel): add otel tracing to node:http.request (#28463) feat: support FORCE_COLOR (#28490) fix(bench): lower bench time...
🚀 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:
https://github.com/denoland/deno/releases/tag/v2.2.4
Release v2.2.4 · denoland/deno
2.2.4 / 2025.03.14 feat(otel): span context propagators (#28460) feat(unstable/otel): add otel tracing to node:http.request (#28463) feat: support FORCE_COLOR (#28490) fix(bench): lower bench time...
🚀 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:
https://github.com/denoland/deno/releases/tag/v2.2.4
Release v2.2.4 · denoland/deno
2.2.4 / 2025.03.14 feat(otel): span context propagators (#28460) feat(unstable/otel): add otel tracing to node:http.request (#28463) feat: support FORCE_COLOR (#28490) fix(bench): lower bench time...
🚀 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:
https://github.com/denoland/deno/releases/tag/v2.2.4
Release v2.2.4 · denoland/deno
2.2.4 / 2025.03.14 feat(otel): span context propagators (#28460) feat(unstable/otel): add otel tracing to node:http.request (#28463) feat: support FORCE_COLOR (#28490) fix(bench): lower bench time...
New blog post: Deno is Fine
I have migrated one #TypeScript application to #Deno and I think it is fine. Probably, it doesn’t make much sense to migrate existing applications, but give it a shot when making one from scratch.
More detailed impressions inside.
urmaul.com
Deno is Fine — urmaul.com
Here's how Deno's built-in OTel support can immediately add logs and traces to any Node.js backend 👇
deno.com
How to get deep traces in your Node.js backend with OTel and Deno
Adding meaningful tracing to a Node backend requires additional instrumentation and configuration. Here’s another approach that requires zero additional code.
Made my first #deno steps today with #typescript, without a doubt it's the beggining of a great new friendship. Lots of JS5 to Typescript porting ahead. The first thing I'll port is the sqlexecutor family, particularly the #postgresql executor lib
https://github.com/allex-libs/postgresqlexecutor
github.com
GitHub - allex-libs/postgresqlexecutor: AllexJS SQL executor for Postgres
AllexJS SQL executor for Postgres. Contribute to allex-libs/postgresqlexecutor development by creating an account on GitHub.
Made my first #deno steps today with #typescript, without a doubt it's the beggining of a great new friendship. Lots of JS5 to Typescript porting ahead. The first thing I'll port is the sqlexecutor family, particularly the #postgresql executor lib
https://github.com/allex-libs/postgresqlexecutor
github.com
GitHub - allex-libs/postgresqlexecutor: AllexJS SQL executor for Postgres
AllexJS SQL executor for Postgres. Contribute to allex-libs/postgresqlexecutor development by creating an account on GitHub.
Made my first #deno steps today with #typescript, without a doubt it's the beggining of a great new friendship. Lots of JS5 to Typescript porting ahead. The first thing I'll port is the sqlexecutor family, particularly the #postgresql executor lib
https://github.com/allex-libs/postgresqlexecutor
github.com
GitHub - allex-libs/postgresqlexecutor: AllexJS SQL executor for Postgres
AllexJS SQL executor for Postgres. Contribute to allex-libs/postgresqlexecutor development by creating an account on GitHub.
New blog post: Deno is Fine
I have migrated one #TypeScript application to #Deno and I think it is fine. Probably, it doesn’t make much sense to migrate existing applications, but give it a shot when making one from scratch.
More detailed impressions inside.
urmaul.com
Deno is Fine — urmaul.com
Here's how Deno's built-in OTel support can immediately add logs and traces to any Node.js backend 👇
deno.com
How to get deep traces in your Node.js backend with OTel and Deno
Adding meaningful tracing to a Node backend requires additional instrumentation and configuration. Here’s another approach that requires zero additional code.
@deno_land Will the Go port of typescript influence Deno in any way? Positive or negative? #typescript #deno
I hate to crawl web pages whether it be with #python or #javascript.
But things never got as snappy than with *rust-scraper*.
Use it with *reqwest* and literally swallows websites in minutes. 😏
If you don't need to render #javascript, I recommend.
Else you'll have to combine it with the #deno crate. 🕵
github.com
GitHub - rust-scraper/scraper: HTML parsing and querying with CSS selectors
HTML parsing and querying with CSS selectors. Contribute to rust-scraper/scraper development by creating an account on GitHub.
I hate to crawl web pages whether it be with #python or #javascript.
But things never got as snappy than with *rust-scraper*.
Use it with *reqwest* and literally swallows websites in minutes. 😏
If you don't need to render #javascript, I recommend.
Else you'll have to combine it with the #deno crate. 🕵
github.com
GitHub - rust-scraper/scraper: HTML parsing and querying with CSS selectors
HTML parsing and querying with CSS selectors. Contribute to rust-scraper/scraper development by creating an account on GitHub.
Denostories version 0.2.0 - added support for automated headless checks. So it takes advantage of Fresh's isomorphic rendering to basically combine storybook with snapshot testing.
deno.land
denostories@0.2.0 | Deno
Storybook implementation for the Fresh framework, inspired by Ladle.
Welcome to Jurassic Park: A Comprehensive Study of #Security Risks in #Deno and its Ecosystem
Deno 2.0 addresses many of the problems identified but it's a great paper to read.
cispa.de
Welcome to Jurassic Park: A Comprehensive Study of Security Risks in Deno and its Ecosystem
Node.js and its ecosystem npm are notoriously insecure, enabling the proliferation of supply chain attacks. Deno is an emerging runtime that promises...
#FreeJavaScript 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.
https://deno.com/blog/deno-v-oracle/20250307-oppostition-to-motion-to-dismiss.pdf
Welcome to Jurassic Park: A Comprehensive Study of #Security Risks in #Deno and its Ecosystem
Deno 2.0 addresses many of the problems identified but it's a great paper to read.
cispa.de
Welcome to Jurassic Park: A Comprehensive Study of Security Risks in Deno and its Ecosystem
Node.js and its ecosystem npm are notoriously insecure, enabling the proliferation of supply chain attacks. Deno is an emerging runtime that promises...
#FreeJavaScript 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.
https://deno.com/blog/deno-v-oracle/20250307-oppostition-to-motion-to-dismiss.pdf
#FreeJavaScript 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.
https://deno.com/blog/deno-v-oracle/20250307-oppostition-to-motion-to-dismiss.pdf
#FreeJavaScript 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.
https://deno.com/blog/deno-v-oracle/20250307-oppostition-to-motion-to-dismiss.pdf
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
Node just added TypeScript support. What does that mean for Deno?
Node's experimental TypeScript support will be stabilized in 23.6. Here's what Node's TypeScript integration looks like and how it compares to Deno.
Welcome to Jurassic Park: A Comprehensive Study of #Security Risks in #Deno and its Ecosystem
Deno 2.0 addresses many of the problems identified but it's a great paper to read.
cispa.de
Welcome to Jurassic Park: A Comprehensive Study of Security Risks in Deno and its Ecosystem
Node.js and its ecosystem npm are notoriously insecure, enabling the proliferation of supply chain attacks. Deno is an emerging runtime that promises...
Denostories version 0.2.0 - added support for automated headless checks. So it takes advantage of Fresh's isomorphic rendering to basically combine storybook with snapshot testing.
deno.land
denostories@0.2.0 | Deno
Storybook implementation for the Fresh framework, inspired by Ladle.
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
Publish a lint rule, get a prize
Deno's new lint plugin system means you can extend the deno lint functionality with your own rules. We're giving prizes for anyone who publishes a lint rule this week. Here's how to participate.
Want to play around with LLMs in 5 minutes?
Check out this quickstart with Deno Jupyter🦕, Ollama 🦙, and Deepseek 🐳
https://deno.com/blog/the-dino-llama-and-whale
#deno #nodejs #javascript #typescript #webdev #deepseek #llm #ollama
deno.com
The Dino 🦕, the Llama 🦙, and the Whale 🐋
Did you know you can run a large language model with Deno and Jupyter Notebooks? Here's how.
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
Publish a lint rule, get a prize
Deno's new lint plugin system means you can extend the deno lint functionality with your own rules. We're giving prizes for anyone who publishes a lint rule this week. Here's how to participate.
Want to play around with LLMs in 5 minutes?
Check out this quickstart with Deno Jupyter🦕, Ollama 🦙, and Deepseek 🐳
https://deno.com/blog/the-dino-llama-and-whale
#deno #nodejs #javascript #typescript #webdev #deepseek #llm #ollama
deno.com
The Dino 🦕, the Llama 🦙, and the Whale 🐋
Did you know you can run a large language model with Deno and Jupyter Notebooks? Here's how.
Want to play around with LLMs in 5 minutes?
Check out this quickstart with Deno Jupyter🦕, Ollama 🦙, and Deepseek 🐳
https://deno.com/blog/the-dino-llama-and-whale
#deno #nodejs #javascript #typescript #webdev #deepseek #llm #ollama
deno.com
The Dino 🦕, the Llama 🦙, and the Whale 🐋
Did you know you can run a large language model with Deno and Jupyter Notebooks? Here's how.
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
Publish a lint rule, get a prize
Deno's new lint plugin system means you can extend the deno lint functionality with your own rules. We're giving prizes for anyone who publishes a lint rule this week. Here's how to participate.
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
Publish a lint rule, get a prize
Deno's new lint plugin system means you can extend the deno lint functionality with your own rules. We're giving prizes for anyone who publishes a lint rule this week. Here's how to participate.
Are you interested in creating bots for the #fediverse? Meet #BotKit, a #TypeScript framework that makes bot development easier than ever!
Key Features:
True Independence
- Create standalone #ActivityPub bots
- No need for a Mastodon or Misskey account
- Free from platform-specific limitations
Simple and Intuitive API
- Create a complete bot in a single TypeScript file
- Intuitive event handlers for mentions, follows, and messages
- Rich text formatting with Markdown support
Modern Deployment
- Deploy on Deno Deploy, Fly.io, Railway, or any virtual server
- Minimal dependencies
- Designed for modern cloud platforms
Enterprise-Ready Foundation
- Built on Fedify, a rock-solid ActivityPub framework
- Seamless federation with Mastodon, Misskey, and other platforms
- Robust compatibility across the fediverse
Developer Experience
- Full TypeScript support with great IDE integration
- Comprehensive documentation
- Built-in testing utilities
Here's a quick example of how simple it is to create a bot:
import { createBot, mention, text } from "@fedify/botkit";
const bot = createBot<void>({
username: "greetbot",
name: "Greet Bot",
summary: text`A friendly bot that greets people!`,
// ... configuration ...
});
// Respond to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Hi, ${message.actor}! Thanks for saying hello!`);
};
export default bot;
Getting Started:
- Install #Deno
- Run:
deno add jsr:@fedify/botkit@^0.1.0-dev - Create your bot with just a few lines of code
Check out our documentation at https://botkit.fedify.dev/ to learn more!
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Deno 🤝 Tanstack
✅ simpler state management
✅ easier data fetching
✅ less boilerplate

docs.deno.com
Build an app with Tanstack and Deno
In-depth documentation, guides, and reference materials for building secure, high-performance JavaScript and TypeScript applications with Deno
Deno 🤝 Tanstack
✅ simpler state management
✅ easier data fetching
✅ less boilerplate

docs.deno.com
Build an app with Tanstack and Deno
In-depth documentation, guides, and reference materials for building secure, high-performance JavaScript and TypeScript applications with Deno
Deno 2.2 is released!
OTEL, node:sqlite, linter plugins, and much more 👇
deno.com
Deno 2.2: OpenTelemetry, Lint Plugins, node:sqlite
Deno 2.2 adds built-in OpenTelemetry, a new linter plugin API, node:sqlite, and major improvements to deno check, deno lsp, and deno task.
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
TheJam.dev 2025
TheJam.dev is a 2-day virtual conference focused on building modern web applications using full stack JavaScript, static site generators, serverless and more.
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 —
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.
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 👇
https://deno.com/blog/not-using-npm-specifiers-doing-it-wrong
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Just integrated #Deno's new workspaces feature into the #Fedify repository! This means we can now manage the main package, CLI tool, and examples all in one place. The best part? No more custom import map generators—everything's simpler and more intuitive for new contributors. Loving how Deno 2.0's workspace support makes managing monorepos so much cleaner.

docs.deno.com
Workspaces and monorepos
In-depth documentation, guides, and reference materials for building secure, high-performance JavaScript and TypeScript applications with Deno
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 👇
https://deno.com/blog/not-using-npm-specifiers-doing-it-wrong
개인적인 생각, Deno
Deno의 강점은 아무래도 "보안" 이라고 느낍니다. 다른 툴킷도 있지만 오늘 스크립트를 짜면서 새삼 보안 기능의 이로움을 다시 느낍니다.
원래 인기가 적은 라이브러리를 쓰려고 하면 걱정부터 앞서지만 Deno에서는 권한을 부여해야하기 때문에 Deno의 보안 기능이 문제 없을거라는 가정하에, 마음 편히 사용할 수 있습니다. 잘 모르는, 안 유명한 라이브러리라도요.
node_modules를 지원하면서 모든 파일 권한을 요구하게 되고 이런것이 마음에 들지 않아 장기적으로 모두 Deno로 넘어가면 좋겠다 라는 개인적인 생각을 합니다.
velog.io
안전하게 니모닉 코드 생성하기
Deno로 NPM 패키지에 있을지도 모를 악성코드의 불안 없이 안전하게 니모닉 코드를 생성해봅니다
개인적인 생각, Deno
Deno의 강점은 아무래도 "보안" 이라고 느낍니다. 다른 툴킷도 있지만 오늘 스크립트를 짜면서 새삼 보안 기능의 이로움을 다시 느낍니다.
원래 인기가 적은 라이브러리를 쓰려고 하면 걱정부터 앞서지만 Deno에서는 권한을 부여해야하기 때문에 Deno의 보안 기능이 문제 없을거라는 가정하에, 마음 편히 사용할 수 있습니다. 잘 모르는, 안 유명한 라이브러리라도요.
node_modules를 지원하면서 모든 파일 권한을 요구하게 되고 이런것이 마음에 들지 않아 장기적으로 모두 Deno로 넘어가면 좋겠다 라는 개인적인 생각을 합니다.
velog.io
안전하게 니모닉 코드 생성하기
Deno로 NPM 패키지에 있을지도 모를 악성코드의 불안 없이 안전하게 니모닉 코드를 생성해봅니다
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
🎉 Announcing BotKit 0.1.0: A new framework for creating ActivityPub bots!
We're thrilled to announce the initial release of #BotKit, a #TypeScript framework that makes creating standalone #ActivityPub bots simpler than ever before. With BotKit, you can create a complete fediverse bot in just a single TypeScript file!
Key features:
- 🔋 Standalone bot creation—no need for a Mastodon/Misskey account
- 🧩 Simple, developer-friendly API
- 🚀 Easy deployment on Deno Deploy, Fly.io, Railway, or your own server
Powered by @fedify for robust ActivityPub protocol handling
Getting started is as simple as:
deno add jsr:@fedify/botkit@^0.1.0
Here's a quick example of a weather bot:
const kv = await Deno.openKv();
const bot = createBot<void>({
username: "weatherbot",
name: "Seoul Weather Bot",
summary: text`I post daily weather updates for Seoul!`,
kv: new DenoKvStore(kv),
queue: new DenoKvMessageQueue(kv),
});
// Reply to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Current temperature in Seoul is 18°C!`);
};
// Post scheduled updates
const session = bot.getSession("https://weather.example.com");
setInterval(async () => {
await session.publish(
text`Seoul Weather Update 🌡️
Current: 18°C
Humidity: 65%
Forecast: Clear skies ☀️`
);
}, 1000 * 60 * 60); // Hourly updates
While BotKit currently supports #Deno, we're working on bringing Node.js and Bun support in future releases.
Ready to create your first fediverse bot? Check out our docs at https://botkit.fedify.dev/ to get started! 🚀
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
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.
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.
JSR is now openly governed — meet its board members and check out its governance charter 👇
deno.com
Introducing the JSR open governance board
JSR, a modern open source JavaScript registry, is meant for the greater JavaScript and TypeScript community. We're thrilled to announce its own independent governing body.
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
Run Rust (left) in JavaScript (right) via wasm
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 —
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.
🎉 Announcing BotKit 0.1.0: A new framework for creating ActivityPub bots!
We're thrilled to announce the initial release of #BotKit, a #TypeScript framework that makes creating standalone #ActivityPub bots simpler than ever before. With BotKit, you can create a complete fediverse bot in just a single TypeScript file!
Key features:
- 🔋 Standalone bot creation—no need for a Mastodon/Misskey account
- 🧩 Simple, developer-friendly API
- 🚀 Easy deployment on Deno Deploy, Fly.io, Railway, or your own server
Powered by @fedify for robust ActivityPub protocol handling
Getting started is as simple as:
deno add jsr:@fedify/botkit@^0.1.0
Here's a quick example of a weather bot:
const kv = await Deno.openKv();
const bot = createBot<void>({
username: "weatherbot",
name: "Seoul Weather Bot",
summary: text`I post daily weather updates for Seoul!`,
kv: new DenoKvStore(kv),
queue: new DenoKvMessageQueue(kv),
});
// Reply to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Current temperature in Seoul is 18°C!`);
};
// Post scheduled updates
const session = bot.getSession("https://weather.example.com");
setInterval(async () => {
await session.publish(
text`Seoul Weather Update 🌡️
Current: 18°C
Humidity: 65%
Forecast: Clear skies ☀️`
);
}, 1000 * 60 * 60); // Hourly updates
While BotKit currently supports #Deno, we're working on bringing Node.js and Bun support in future releases.
Ready to create your first fediverse bot? Check out our docs at https://botkit.fedify.dev/ to get started! 🚀
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
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.
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 —
🎉 Announcing BotKit 0.1.0: A new framework for creating ActivityPub bots!
We're thrilled to announce the initial release of #BotKit, a #TypeScript framework that makes creating standalone #ActivityPub bots simpler than ever before. With BotKit, you can create a complete fediverse bot in just a single TypeScript file!
Key features:
- 🔋 Standalone bot creation—no need for a Mastodon/Misskey account
- 🧩 Simple, developer-friendly API
- 🚀 Easy deployment on Deno Deploy, Fly.io, Railway, or your own server
Powered by @fedify for robust ActivityPub protocol handling
Getting started is as simple as:
deno add jsr:@fedify/botkit@^0.1.0
Here's a quick example of a weather bot:
const kv = await Deno.openKv();
const bot = createBot<void>({
username: "weatherbot",
name: "Seoul Weather Bot",
summary: text`I post daily weather updates for Seoul!`,
kv: new DenoKvStore(kv),
queue: new DenoKvMessageQueue(kv),
});
// Reply to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Current temperature in Seoul is 18°C!`);
};
// Post scheduled updates
const session = bot.getSession("https://weather.example.com");
setInterval(async () => {
await session.publish(
text`Seoul Weather Update 🌡️
Current: 18°C
Humidity: 65%
Forecast: Clear skies ☀️`
);
}, 1000 * 60 * 60); // Hourly updates
While BotKit currently supports #Deno, we're working on bringing Node.js and Bun support in future releases.
Ready to create your first fediverse bot? Check out our docs at https://botkit.fedify.dev/ to get started! 🚀
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
🎉 Announcing BotKit 0.1.0: A new framework for creating ActivityPub bots!
We're thrilled to announce the initial release of #BotKit, a #TypeScript framework that makes creating standalone #ActivityPub bots simpler than ever before. With BotKit, you can create a complete fediverse bot in just a single TypeScript file!
Key features:
- 🔋 Standalone bot creation—no need for a Mastodon/Misskey account
- 🧩 Simple, developer-friendly API
- 🚀 Easy deployment on Deno Deploy, Fly.io, Railway, or your own server
Powered by @fedify for robust ActivityPub protocol handling
Getting started is as simple as:
deno add jsr:@fedify/botkit@^0.1.0
Here's a quick example of a weather bot:
const kv = await Deno.openKv();
const bot = createBot<void>({
username: "weatherbot",
name: "Seoul Weather Bot",
summary: text`I post daily weather updates for Seoul!`,
kv: new DenoKvStore(kv),
queue: new DenoKvMessageQueue(kv),
});
// Reply to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Current temperature in Seoul is 18°C!`);
};
// Post scheduled updates
const session = bot.getSession("https://weather.example.com");
setInterval(async () => {
await session.publish(
text`Seoul Weather Update 🌡️
Current: 18°C
Humidity: 65%
Forecast: Clear skies ☀️`
);
}, 1000 * 60 * 60); // Hourly updates
While BotKit currently supports #Deno, we're working on bringing Node.js and Bun support in future releases.
Ready to create your first fediverse bot? Check out our docs at https://botkit.fedify.dev/ to get started! 🚀
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
🎉 Announcing BotKit 0.1.0: A new framework for creating ActivityPub bots!
We're thrilled to announce the initial release of #BotKit, a #TypeScript framework that makes creating standalone #ActivityPub bots simpler than ever before. With BotKit, you can create a complete fediverse bot in just a single TypeScript file!
Key features:
- 🔋 Standalone bot creation—no need for a Mastodon/Misskey account
- 🧩 Simple, developer-friendly API
- 🚀 Easy deployment on Deno Deploy, Fly.io, Railway, or your own server
Powered by @fedify for robust ActivityPub protocol handling
Getting started is as simple as:
deno add jsr:@fedify/botkit@^0.1.0
Here's a quick example of a weather bot:
const kv = await Deno.openKv();
const bot = createBot<void>({
username: "weatherbot",
name: "Seoul Weather Bot",
summary: text`I post daily weather updates for Seoul!`,
kv: new DenoKvStore(kv),
queue: new DenoKvMessageQueue(kv),
});
// Reply to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Current temperature in Seoul is 18°C!`);
};
// Post scheduled updates
const session = bot.getSession("https://weather.example.com");
setInterval(async () => {
await session.publish(
text`Seoul Weather Update 🌡️
Current: 18°C
Humidity: 65%
Forecast: Clear skies ☀️`
);
}, 1000 * 60 * 60); // Hourly updates
While BotKit currently supports #Deno, we're working on bringing Node.js and Bun support in future releases.
Ready to create your first fediverse bot? Check out our docs at https://botkit.fedify.dev/ to get started! 🚀
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
🎉 Announcing BotKit 0.1.0: A new framework for creating ActivityPub bots!
We're thrilled to announce the initial release of #BotKit, a #TypeScript framework that makes creating standalone #ActivityPub bots simpler than ever before. With BotKit, you can create a complete fediverse bot in just a single TypeScript file!
Key features:
- 🔋 Standalone bot creation—no need for a Mastodon/Misskey account
- 🧩 Simple, developer-friendly API
- 🚀 Easy deployment on Deno Deploy, Fly.io, Railway, or your own server
Powered by @fedify for robust ActivityPub protocol handling
Getting started is as simple as:
deno add jsr:@fedify/botkit@^0.1.0
Here's a quick example of a weather bot:
const kv = await Deno.openKv();
const bot = createBot<void>({
username: "weatherbot",
name: "Seoul Weather Bot",
summary: text`I post daily weather updates for Seoul!`,
kv: new DenoKvStore(kv),
queue: new DenoKvMessageQueue(kv),
});
// Reply to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Current temperature in Seoul is 18°C!`);
};
// Post scheduled updates
const session = bot.getSession("https://weather.example.com");
setInterval(async () => {
await session.publish(
text`Seoul Weather Update 🌡️
Current: 18°C
Humidity: 65%
Forecast: Clear skies ☀️`
);
}, 1000 * 60 * 60); // Hourly updates
While BotKit currently supports #Deno, we're working on bringing Node.js and Bun support in future releases.
Ready to create your first fediverse bot? Check out our docs at https://botkit.fedify.dev/ to get started! 🚀
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
🎉 Announcing BotKit 0.1.0: A new framework for creating ActivityPub bots!
We're thrilled to announce the initial release of #BotKit, a #TypeScript framework that makes creating standalone #ActivityPub bots simpler than ever before. With BotKit, you can create a complete fediverse bot in just a single TypeScript file!
Key features:
- 🔋 Standalone bot creation—no need for a Mastodon/Misskey account
- 🧩 Simple, developer-friendly API
- 🚀 Easy deployment on Deno Deploy, Fly.io, Railway, or your own server
Powered by @fedify for robust ActivityPub protocol handling
Getting started is as simple as:
deno add jsr:@fedify/botkit@^0.1.0
Here's a quick example of a weather bot:
const kv = await Deno.openKv();
const bot = createBot<void>({
username: "weatherbot",
name: "Seoul Weather Bot",
summary: text`I post daily weather updates for Seoul!`,
kv: new DenoKvStore(kv),
queue: new DenoKvMessageQueue(kv),
});
// Reply to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Current temperature in Seoul is 18°C!`);
};
// Post scheduled updates
const session = bot.getSession("https://weather.example.com");
setInterval(async () => {
await session.publish(
text`Seoul Weather Update 🌡️
Current: 18°C
Humidity: 65%
Forecast: Clear skies ☀️`
);
}, 1000 * 60 * 60); // Hourly updates
While BotKit currently supports #Deno, we're working on bringing Node.js and Bun support in future releases.
Ready to create your first fediverse bot? Check out our docs at https://botkit.fedify.dev/ to get started! 🚀
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
🎉 Announcing BotKit 0.1.0: A new framework for creating ActivityPub bots!
We're thrilled to announce the initial release of #BotKit, a #TypeScript framework that makes creating standalone #ActivityPub bots simpler than ever before. With BotKit, you can create a complete fediverse bot in just a single TypeScript file!
Key features:
- 🔋 Standalone bot creation—no need for a Mastodon/Misskey account
- 🧩 Simple, developer-friendly API
- 🚀 Easy deployment on Deno Deploy, Fly.io, Railway, or your own server
Powered by @fedify for robust ActivityPub protocol handling
Getting started is as simple as:
deno add jsr:@fedify/botkit@^0.1.0
Here's a quick example of a weather bot:
const kv = await Deno.openKv();
const bot = createBot<void>({
username: "weatherbot",
name: "Seoul Weather Bot",
summary: text`I post daily weather updates for Seoul!`,
kv: new DenoKvStore(kv),
queue: new DenoKvMessageQueue(kv),
});
// Reply to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Current temperature in Seoul is 18°C!`);
};
// Post scheduled updates
const session = bot.getSession("https://weather.example.com");
setInterval(async () => {
await session.publish(
text`Seoul Weather Update 🌡️
Current: 18°C
Humidity: 65%
Forecast: Clear skies ☀️`
);
}, 1000 * 60 * 60); // Hourly updates
While BotKit currently supports #Deno, we're working on bringing Node.js and Bun support in future releases.
Ready to create your first fediverse bot? Check out our docs at https://botkit.fedify.dev/ to get started! 🚀
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
🎉 Announcing BotKit 0.1.0: A new framework for creating ActivityPub bots!
We're thrilled to announce the initial release of #BotKit, a #TypeScript framework that makes creating standalone #ActivityPub bots simpler than ever before. With BotKit, you can create a complete fediverse bot in just a single TypeScript file!
Key features:
- 🔋 Standalone bot creation—no need for a Mastodon/Misskey account
- 🧩 Simple, developer-friendly API
- 🚀 Easy deployment on Deno Deploy, Fly.io, Railway, or your own server
Powered by @fedify for robust ActivityPub protocol handling
Getting started is as simple as:
deno add jsr:@fedify/botkit@^0.1.0
Here's a quick example of a weather bot:
const kv = await Deno.openKv();
const bot = createBot<void>({
username: "weatherbot",
name: "Seoul Weather Bot",
summary: text`I post daily weather updates for Seoul!`,
kv: new DenoKvStore(kv),
queue: new DenoKvMessageQueue(kv),
});
// Reply to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Current temperature in Seoul is 18°C!`);
};
// Post scheduled updates
const session = bot.getSession("https://weather.example.com");
setInterval(async () => {
await session.publish(
text`Seoul Weather Update 🌡️
Current: 18°C
Humidity: 65%
Forecast: Clear skies ☀️`
);
}, 1000 * 60 * 60); // Hourly updates
While BotKit currently supports #Deno, we're working on bringing Node.js and Bun support in future releases.
Ready to create your first fediverse bot? Check out our docs at https://botkit.fedify.dev/ to get started! 🚀
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
🎉 Announcing BotKit 0.1.0: A new framework for creating ActivityPub bots!
We're thrilled to announce the initial release of #BotKit, a #TypeScript framework that makes creating standalone #ActivityPub bots simpler than ever before. With BotKit, you can create a complete fediverse bot in just a single TypeScript file!
Key features:
- 🔋 Standalone bot creation—no need for a Mastodon/Misskey account
- 🧩 Simple, developer-friendly API
- 🚀 Easy deployment on Deno Deploy, Fly.io, Railway, or your own server
Powered by @fedify for robust ActivityPub protocol handling
Getting started is as simple as:
deno add jsr:@fedify/botkit@^0.1.0
Here's a quick example of a weather bot:
const kv = await Deno.openKv();
const bot = createBot<void>({
username: "weatherbot",
name: "Seoul Weather Bot",
summary: text`I post daily weather updates for Seoul!`,
kv: new DenoKvStore(kv),
queue: new DenoKvMessageQueue(kv),
});
// Reply to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Current temperature in Seoul is 18°C!`);
};
// Post scheduled updates
const session = bot.getSession("https://weather.example.com");
setInterval(async () => {
await session.publish(
text`Seoul Weather Update 🌡️
Current: 18°C
Humidity: 65%
Forecast: Clear skies ☀️`
);
}, 1000 * 60 * 60); // Hourly updates
While BotKit currently supports #Deno, we're working on bringing Node.js and Bun support in future releases.
Ready to create your first fediverse bot? Check out our docs at https://botkit.fedify.dev/ to get started! 🚀
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
🎉 Announcing BotKit 0.1.0: A new framework for creating ActivityPub bots!
We're thrilled to announce the initial release of #BotKit, a #TypeScript framework that makes creating standalone #ActivityPub bots simpler than ever before. With BotKit, you can create a complete fediverse bot in just a single TypeScript file!
Key features:
- 🔋 Standalone bot creation—no need for a Mastodon/Misskey account
- 🧩 Simple, developer-friendly API
- 🚀 Easy deployment on Deno Deploy, Fly.io, Railway, or your own server
Powered by @fedify for robust ActivityPub protocol handling
Getting started is as simple as:
deno add jsr:@fedify/botkit@^0.1.0
Here's a quick example of a weather bot:
const kv = await Deno.openKv();
const bot = createBot<void>({
username: "weatherbot",
name: "Seoul Weather Bot",
summary: text`I post daily weather updates for Seoul!`,
kv: new DenoKvStore(kv),
queue: new DenoKvMessageQueue(kv),
});
// Reply to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Current temperature in Seoul is 18°C!`);
};
// Post scheduled updates
const session = bot.getSession("https://weather.example.com");
setInterval(async () => {
await session.publish(
text`Seoul Weather Update 🌡️
Current: 18°C
Humidity: 65%
Forecast: Clear skies ☀️`
);
}, 1000 * 60 * 60); // Hourly updates
While BotKit currently supports #Deno, we're working on bringing Node.js and Bun support in future releases.
Ready to create your first fediverse bot? Check out our docs at https://botkit.fedify.dev/ to get started! 🚀
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
🎉 Announcing BotKit 0.1.0: A new framework for creating ActivityPub bots!
We're thrilled to announce the initial release of #BotKit, a #TypeScript framework that makes creating standalone #ActivityPub bots simpler than ever before. With BotKit, you can create a complete fediverse bot in just a single TypeScript file!
Key features:
- 🔋 Standalone bot creation—no need for a Mastodon/Misskey account
- 🧩 Simple, developer-friendly API
- 🚀 Easy deployment on Deno Deploy, Fly.io, Railway, or your own server
Powered by @fedify for robust ActivityPub protocol handling
Getting started is as simple as:
deno add jsr:@fedify/botkit@^0.1.0
Here's a quick example of a weather bot:
const kv = await Deno.openKv();
const bot = createBot<void>({
username: "weatherbot",
name: "Seoul Weather Bot",
summary: text`I post daily weather updates for Seoul!`,
kv: new DenoKvStore(kv),
queue: new DenoKvMessageQueue(kv),
});
// Reply to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Current temperature in Seoul is 18°C!`);
};
// Post scheduled updates
const session = bot.getSession("https://weather.example.com");
setInterval(async () => {
await session.publish(
text`Seoul Weather Update 🌡️
Current: 18°C
Humidity: 65%
Forecast: Clear skies ☀️`
);
}, 1000 * 60 * 60); // Hourly updates
While BotKit currently supports #Deno, we're working on bringing Node.js and Bun support in future releases.
Ready to create your first fediverse bot? Check out our docs at https://botkit.fedify.dev/ to get started! 🚀
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
🎉 Announcing BotKit 0.1.0: A new framework for creating ActivityPub bots!
We're thrilled to announce the initial release of #BotKit, a #TypeScript framework that makes creating standalone #ActivityPub bots simpler than ever before. With BotKit, you can create a complete fediverse bot in just a single TypeScript file!
Key features:
- 🔋 Standalone bot creation—no need for a Mastodon/Misskey account
- 🧩 Simple, developer-friendly API
- 🚀 Easy deployment on Deno Deploy, Fly.io, Railway, or your own server
Powered by @fedify for robust ActivityPub protocol handling
Getting started is as simple as:
deno add jsr:@fedify/botkit@^0.1.0
Here's a quick example of a weather bot:
const kv = await Deno.openKv();
const bot = createBot<void>({
username: "weatherbot",
name: "Seoul Weather Bot",
summary: text`I post daily weather updates for Seoul!`,
kv: new DenoKvStore(kv),
queue: new DenoKvMessageQueue(kv),
});
// Reply to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Current temperature in Seoul is 18°C!`);
};
// Post scheduled updates
const session = bot.getSession("https://weather.example.com");
setInterval(async () => {
await session.publish(
text`Seoul Weather Update 🌡️
Current: 18°C
Humidity: 65%
Forecast: Clear skies ☀️`
);
}, 1000 * 60 * 60); // Hourly updates
While BotKit currently supports #Deno, we're working on bringing Node.js and Bun support in future releases.
Ready to create your first fediverse bot? Check out our docs at https://botkit.fedify.dev/ to get started! 🚀
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
🎉 Announcing BotKit 0.1.0: A new framework for creating ActivityPub bots!
We're thrilled to announce the initial release of #BotKit, a #TypeScript framework that makes creating standalone #ActivityPub bots simpler than ever before. With BotKit, you can create a complete fediverse bot in just a single TypeScript file!
Key features:
- 🔋 Standalone bot creation—no need for a Mastodon/Misskey account
- 🧩 Simple, developer-friendly API
- 🚀 Easy deployment on Deno Deploy, Fly.io, Railway, or your own server
Powered by @fedify for robust ActivityPub protocol handling
Getting started is as simple as:
deno add jsr:@fedify/botkit@^0.1.0
Here's a quick example of a weather bot:
const kv = await Deno.openKv();
const bot = createBot<void>({
username: "weatherbot",
name: "Seoul Weather Bot",
summary: text`I post daily weather updates for Seoul!`,
kv: new DenoKvStore(kv),
queue: new DenoKvMessageQueue(kv),
});
// Reply to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Current temperature in Seoul is 18°C!`);
};
// Post scheduled updates
const session = bot.getSession("https://weather.example.com");
setInterval(async () => {
await session.publish(
text`Seoul Weather Update 🌡️
Current: 18°C
Humidity: 65%
Forecast: Clear skies ☀️`
);
}, 1000 * 60 * 60); // Hourly updates
While BotKit currently supports #Deno, we're working on bringing Node.js and Bun support in future releases.
Ready to create your first fediverse bot? Check out our docs at https://botkit.fedify.dev/ to get started! 🚀
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
🎉 Announcing BotKit 0.1.0: A new framework for creating ActivityPub bots!
We're thrilled to announce the initial release of #BotKit, a #TypeScript framework that makes creating standalone #ActivityPub bots simpler than ever before. With BotKit, you can create a complete fediverse bot in just a single TypeScript file!
Key features:
- 🔋 Standalone bot creation—no need for a Mastodon/Misskey account
- 🧩 Simple, developer-friendly API
- 🚀 Easy deployment on Deno Deploy, Fly.io, Railway, or your own server
Powered by @fedify for robust ActivityPub protocol handling
Getting started is as simple as:
deno add jsr:@fedify/botkit@^0.1.0
Here's a quick example of a weather bot:
const kv = await Deno.openKv();
const bot = createBot<void>({
username: "weatherbot",
name: "Seoul Weather Bot",
summary: text`I post daily weather updates for Seoul!`,
kv: new DenoKvStore(kv),
queue: new DenoKvMessageQueue(kv),
});
// Reply to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Current temperature in Seoul is 18°C!`);
};
// Post scheduled updates
const session = bot.getSession("https://weather.example.com");
setInterval(async () => {
await session.publish(
text`Seoul Weather Update 🌡️
Current: 18°C
Humidity: 65%
Forecast: Clear skies ☀️`
);
}, 1000 * 60 * 60); // Hourly updates
While BotKit currently supports #Deno, we're working on bringing Node.js and Bun support in future releases.
Ready to create your first fediverse bot? Check out our docs at https://botkit.fedify.dev/ to get started! 🚀
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
🎉 Announcing BotKit 0.1.0: A new framework for creating ActivityPub bots!
We're thrilled to announce the initial release of #BotKit, a #TypeScript framework that makes creating standalone #ActivityPub bots simpler than ever before. With BotKit, you can create a complete fediverse bot in just a single TypeScript file!
Key features:
- 🔋 Standalone bot creation—no need for a Mastodon/Misskey account
- 🧩 Simple, developer-friendly API
- 🚀 Easy deployment on Deno Deploy, Fly.io, Railway, or your own server
Powered by @fedify for robust ActivityPub protocol handling
Getting started is as simple as:
deno add jsr:@fedify/botkit@^0.1.0
Here's a quick example of a weather bot:
const kv = await Deno.openKv();
const bot = createBot<void>({
username: "weatherbot",
name: "Seoul Weather Bot",
summary: text`I post daily weather updates for Seoul!`,
kv: new DenoKvStore(kv),
queue: new DenoKvMessageQueue(kv),
});
// Reply to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Current temperature in Seoul is 18°C!`);
};
// Post scheduled updates
const session = bot.getSession("https://weather.example.com");
setInterval(async () => {
await session.publish(
text`Seoul Weather Update 🌡️
Current: 18°C
Humidity: 65%
Forecast: Clear skies ☀️`
);
}, 1000 * 60 * 60); // Hourly updates
While BotKit currently supports #Deno, we're working on bringing Node.js and Bun support in future releases.
Ready to create your first fediverse bot? Check out our docs at https://botkit.fedify.dev/ to get started! 🚀
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
🎉 Announcing BotKit 0.1.0: A new framework for creating ActivityPub bots!
We're thrilled to announce the initial release of #BotKit, a #TypeScript framework that makes creating standalone #ActivityPub bots simpler than ever before. With BotKit, you can create a complete fediverse bot in just a single TypeScript file!
Key features:
- 🔋 Standalone bot creation—no need for a Mastodon/Misskey account
- 🧩 Simple, developer-friendly API
- 🚀 Easy deployment on Deno Deploy, Fly.io, Railway, or your own server
Powered by @fedify for robust ActivityPub protocol handling
Getting started is as simple as:
deno add jsr:@fedify/botkit@^0.1.0
Here's a quick example of a weather bot:
const kv = await Deno.openKv();
const bot = createBot<void>({
username: "weatherbot",
name: "Seoul Weather Bot",
summary: text`I post daily weather updates for Seoul!`,
kv: new DenoKvStore(kv),
queue: new DenoKvMessageQueue(kv),
});
// Reply to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Current temperature in Seoul is 18°C!`);
};
// Post scheduled updates
const session = bot.getSession("https://weather.example.com");
setInterval(async () => {
await session.publish(
text`Seoul Weather Update 🌡️
Current: 18°C
Humidity: 65%
Forecast: Clear skies ☀️`
);
}, 1000 * 60 * 60); // Hourly updates
While BotKit currently supports #Deno, we're working on bringing Node.js and Bun support in future releases.
Ready to create your first fediverse bot? Check out our docs at https://botkit.fedify.dev/ to get started! 🚀
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
🎉 Announcing BotKit 0.1.0: A new framework for creating ActivityPub bots!
We're thrilled to announce the initial release of #BotKit, a #TypeScript framework that makes creating standalone #ActivityPub bots simpler than ever before. With BotKit, you can create a complete fediverse bot in just a single TypeScript file!
Key features:
- 🔋 Standalone bot creation—no need for a Mastodon/Misskey account
- 🧩 Simple, developer-friendly API
- 🚀 Easy deployment on Deno Deploy, Fly.io, Railway, or your own server
Powered by @fedify for robust ActivityPub protocol handling
Getting started is as simple as:
deno add jsr:@fedify/botkit@^0.1.0
Here's a quick example of a weather bot:
const kv = await Deno.openKv();
const bot = createBot<void>({
username: "weatherbot",
name: "Seoul Weather Bot",
summary: text`I post daily weather updates for Seoul!`,
kv: new DenoKvStore(kv),
queue: new DenoKvMessageQueue(kv),
});
// Reply to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Current temperature in Seoul is 18°C!`);
};
// Post scheduled updates
const session = bot.getSession("https://weather.example.com");
setInterval(async () => {
await session.publish(
text`Seoul Weather Update 🌡️
Current: 18°C
Humidity: 65%
Forecast: Clear skies ☀️`
);
}, 1000 * 60 * 60); // Hourly updates
While BotKit currently supports #Deno, we're working on bringing Node.js and Bun support in future releases.
Ready to create your first fediverse bot? Check out our docs at https://botkit.fedify.dev/ to get started! 🚀
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
🎉 Announcing BotKit 0.1.0: A new framework for creating ActivityPub bots!
We're thrilled to announce the initial release of #BotKit, a #TypeScript framework that makes creating standalone #ActivityPub bots simpler than ever before. With BotKit, you can create a complete fediverse bot in just a single TypeScript file!
Key features:
- 🔋 Standalone bot creation—no need for a Mastodon/Misskey account
- 🧩 Simple, developer-friendly API
- 🚀 Easy deployment on Deno Deploy, Fly.io, Railway, or your own server
Powered by @fedify for robust ActivityPub protocol handling
Getting started is as simple as:
deno add jsr:@fedify/botkit@^0.1.0
Here's a quick example of a weather bot:
const kv = await Deno.openKv();
const bot = createBot<void>({
username: "weatherbot",
name: "Seoul Weather Bot",
summary: text`I post daily weather updates for Seoul!`,
kv: new DenoKvStore(kv),
queue: new DenoKvMessageQueue(kv),
});
// Reply to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Current temperature in Seoul is 18°C!`);
};
// Post scheduled updates
const session = bot.getSession("https://weather.example.com");
setInterval(async () => {
await session.publish(
text`Seoul Weather Update 🌡️
Current: 18°C
Humidity: 65%
Forecast: Clear skies ☀️`
);
}, 1000 * 60 * 60); // Hourly updates
While BotKit currently supports #Deno, we're working on bringing Node.js and Bun support in future releases.
Ready to create your first fediverse bot? Check out our docs at https://botkit.fedify.dev/ to get started! 🚀
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
🎉 Announcing BotKit 0.1.0: A new framework for creating ActivityPub bots!
We're thrilled to announce the initial release of #BotKit, a #TypeScript framework that makes creating standalone #ActivityPub bots simpler than ever before. With BotKit, you can create a complete fediverse bot in just a single TypeScript file!
Key features:
- 🔋 Standalone bot creation—no need for a Mastodon/Misskey account
- 🧩 Simple, developer-friendly API
- 🚀 Easy deployment on Deno Deploy, Fly.io, Railway, or your own server
Powered by @fedify for robust ActivityPub protocol handling
Getting started is as simple as:
deno add jsr:@fedify/botkit@^0.1.0
Here's a quick example of a weather bot:
const kv = await Deno.openKv();
const bot = createBot<void>({
username: "weatherbot",
name: "Seoul Weather Bot",
summary: text`I post daily weather updates for Seoul!`,
kv: new DenoKvStore(kv),
queue: new DenoKvMessageQueue(kv),
});
// Reply to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Current temperature in Seoul is 18°C!`);
};
// Post scheduled updates
const session = bot.getSession("https://weather.example.com");
setInterval(async () => {
await session.publish(
text`Seoul Weather Update 🌡️
Current: 18°C
Humidity: 65%
Forecast: Clear skies ☀️`
);
}, 1000 * 60 * 60); // Hourly updates
While BotKit currently supports #Deno, we're working on bringing Node.js and Bun support in future releases.
Ready to create your first fediverse bot? Check out our docs at https://botkit.fedify.dev/ to get started! 🚀
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
🎉 Announcing BotKit 0.1.0: A new framework for creating ActivityPub bots!
We're thrilled to announce the initial release of #BotKit, a #TypeScript framework that makes creating standalone #ActivityPub bots simpler than ever before. With BotKit, you can create a complete fediverse bot in just a single TypeScript file!
Key features:
- 🔋 Standalone bot creation—no need for a Mastodon/Misskey account
- 🧩 Simple, developer-friendly API
- 🚀 Easy deployment on Deno Deploy, Fly.io, Railway, or your own server
Powered by @fedify for robust ActivityPub protocol handling
Getting started is as simple as:
deno add jsr:@fedify/botkit@^0.1.0
Here's a quick example of a weather bot:
const kv = await Deno.openKv();
const bot = createBot<void>({
username: "weatherbot",
name: "Seoul Weather Bot",
summary: text`I post daily weather updates for Seoul!`,
kv: new DenoKvStore(kv),
queue: new DenoKvMessageQueue(kv),
});
// Reply to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Current temperature in Seoul is 18°C!`);
};
// Post scheduled updates
const session = bot.getSession("https://weather.example.com");
setInterval(async () => {
await session.publish(
text`Seoul Weather Update 🌡️
Current: 18°C
Humidity: 65%
Forecast: Clear skies ☀️`
);
}, 1000 * 60 * 60); // Hourly updates
While BotKit currently supports #Deno, we're working on bringing Node.js and Bun support in future releases.
Ready to create your first fediverse bot? Check out our docs at https://botkit.fedify.dev/ to get started! 🚀
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
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
Run Rust (left) in JavaScript (right) via wasm
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
Oracle justified its JavaScript trademark by claiming Node.js — now it wants that ignored
#FreeJavaScript
deno.com
Oracle justified its JavaScript trademark with Node.js—now it wants that ignored
Oracle filed a motion to dismiss in response to Deno’s petition to cancel its “JavaScript” trademark. But instead of addressing the real issue—that JavaScript is an open standard with multiple independent implementations—Oracle is trying to stall the process and sidestep accountability.
Oracle justified its JavaScript trademark by claiming Node.js — now it wants that ignored
#FreeJavaScript
deno.com
Oracle justified its JavaScript trademark with Node.js—now it wants that ignored
Oracle filed a motion to dismiss in response to Deno’s petition to cancel its “JavaScript” trademark. But instead of addressing the real issue—that JavaScript is an open standard with multiple independent implementations—Oracle is trying to stall the process and sidestep accountability.
Oracle justified its JavaScript trademark by claiming Node.js — now it wants that ignored
#FreeJavaScript
deno.com
Oracle justified its JavaScript trademark with Node.js—now it wants that ignored
Oracle filed a motion to dismiss in response to Deno’s petition to cancel its “JavaScript” trademark. But instead of addressing the real issue—that JavaScript is an open standard with multiple independent implementations—Oracle is trying to stall the process and sidestep accountability.
Oracle justified its JavaScript trademark by claiming Node.js — now it wants that ignored
#FreeJavaScript
deno.com
Oracle justified its JavaScript trademark with Node.js—now it wants that ignored
Oracle filed a motion to dismiss in response to Deno’s petition to cancel its “JavaScript” trademark. But instead of addressing the real issue—that JavaScript is an open standard with multiple independent implementations—Oracle is trying to stall the process and sidestep accountability.
Oracle justified its JavaScript trademark by claiming Node.js — now it wants that ignored
#FreeJavaScript
deno.com
Oracle justified its JavaScript trademark with Node.js—now it wants that ignored
Oracle filed a motion to dismiss in response to Deno’s petition to cancel its “JavaScript” trademark. But instead of addressing the real issue—that JavaScript is an open standard with multiple independent implementations—Oracle is trying to stall the process and sidestep accountability.
JSR is now openly governed — meet its board members and check out its governance charter 👇
deno.com
Introducing the JSR open governance board
JSR, a modern open source JavaScript registry, is meant for the greater JavaScript and TypeScript community. We're thrilled to announce its own independent governing body.
Deno's fully featured, zero-overhead FFI is stable
Building a CLI is easy with these browser methods 👀
#deno #nodejs #typescript #WebDev #javascript #WebDevelopment
Deno 2.1.8 has been released with important LSP performance improvements along with an important bug fix for S3 uploads
Release v2.1.8 · denoland/deno
2.1.8 / 2025.01.30 feat(unstable): support https otlp endpoints (#27743) fix(check): better handling of TypeScript in npm packages for type checking (#27853) fix(check): compiler options from work...
AsyncIterable<T> can be used to construct the body for Request and Response 👇
Building a CLI is easy with these browser methods 👀
#deno #nodejs #typescript #WebDev #javascript #WebDevelopment
Deno 2.1.8 has been released with important LSP performance improvements along with an important bug fix for S3 uploads
Release v2.1.8 · denoland/deno
2.1.8 / 2025.01.30 feat(unstable): support https otlp endpoints (#27743) fix(check): better handling of TypeScript in npm packages for type checking (#27853) fix(check): compiler options from work...
AsyncIterable<T> can be used to construct the body for Request and Response 👇
Are you interested in creating bots for the #fediverse? Meet #BotKit, a #TypeScript framework that makes bot development easier than ever!
Key Features:
True Independence
- Create standalone #ActivityPub bots
- No need for a Mastodon or Misskey account
- Free from platform-specific limitations
Simple and Intuitive API
- Create a complete bot in a single TypeScript file
- Intuitive event handlers for mentions, follows, and messages
- Rich text formatting with Markdown support
Modern Deployment
- Deploy on Deno Deploy, Fly.io, Railway, or any virtual server
- Minimal dependencies
- Designed for modern cloud platforms
Enterprise-Ready Foundation
- Built on Fedify, a rock-solid ActivityPub framework
- Seamless federation with Mastodon, Misskey, and other platforms
- Robust compatibility across the fediverse
Developer Experience
- Full TypeScript support with great IDE integration
- Comprehensive documentation
- Built-in testing utilities
Here's a quick example of how simple it is to create a bot:
import { createBot, mention, text } from "@fedify/botkit";
const bot = createBot<void>({
username: "greetbot",
name: "Greet Bot",
summary: text`A friendly bot that greets people!`,
// ... configuration ...
});
// Respond to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Hi, ${message.actor}! Thanks for saying hello!`);
};
export default bot;
Getting Started:
- Install #Deno
- Run:
deno add jsr:@fedify/botkit@^0.1.0-dev - Create your bot with just a few lines of code
Check out our documentation at https://botkit.fedify.dev/ to learn more!
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
AsyncIterable<T> can be used to construct the body for Request and Response 👇
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.
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Are you interested in creating bots for the #fediverse? Meet #BotKit, a #TypeScript framework that makes bot development easier than ever!
Key Features:
True Independence
- Create standalone #ActivityPub bots
- No need for a Mastodon or Misskey account
- Free from platform-specific limitations
Simple and Intuitive API
- Create a complete bot in a single TypeScript file
- Intuitive event handlers for mentions, follows, and messages
- Rich text formatting with Markdown support
Modern Deployment
- Deploy on Deno Deploy, Fly.io, Railway, or any virtual server
- Minimal dependencies
- Designed for modern cloud platforms
Enterprise-Ready Foundation
- Built on Fedify, a rock-solid ActivityPub framework
- Seamless federation with Mastodon, Misskey, and other platforms
- Robust compatibility across the fediverse
Developer Experience
- Full TypeScript support with great IDE integration
- Comprehensive documentation
- Built-in testing utilities
Here's a quick example of how simple it is to create a bot:
import { createBot, mention, text } from "@fedify/botkit";
const bot = createBot<void>({
username: "greetbot",
name: "Greet Bot",
summary: text`A friendly bot that greets people!`,
// ... configuration ...
});
// Respond to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Hi, ${message.actor}! Thanks for saying hello!`);
};
export default bot;
Getting Started:
- Install #Deno
- Run:
deno add jsr:@fedify/botkit@^0.1.0-dev - Create your bot with just a few lines of code
Check out our documentation at https://botkit.fedify.dev/ to learn more!
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Are you interested in creating bots for the #fediverse? Meet #BotKit, a #TypeScript framework that makes bot development easier than ever!
Key Features:
True Independence
- Create standalone #ActivityPub bots
- No need for a Mastodon or Misskey account
- Free from platform-specific limitations
Simple and Intuitive API
- Create a complete bot in a single TypeScript file
- Intuitive event handlers for mentions, follows, and messages
- Rich text formatting with Markdown support
Modern Deployment
- Deploy on Deno Deploy, Fly.io, Railway, or any virtual server
- Minimal dependencies
- Designed for modern cloud platforms
Enterprise-Ready Foundation
- Built on Fedify, a rock-solid ActivityPub framework
- Seamless federation with Mastodon, Misskey, and other platforms
- Robust compatibility across the fediverse
Developer Experience
- Full TypeScript support with great IDE integration
- Comprehensive documentation
- Built-in testing utilities
Here's a quick example of how simple it is to create a bot:
import { createBot, mention, text } from "@fedify/botkit";
const bot = createBot<void>({
username: "greetbot",
name: "Greet Bot",
summary: text`A friendly bot that greets people!`,
// ... configuration ...
});
// Respond to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Hi, ${message.actor}! Thanks for saying hello!`);
};
export default bot;
Getting Started:
- Install #Deno
- Run:
deno add jsr:@fedify/botkit@^0.1.0-dev - Create your bot with just a few lines of code
Check out our documentation at https://botkit.fedify.dev/ to learn more!
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Are you interested in creating bots for the #fediverse? Meet #BotKit, a #TypeScript framework that makes bot development easier than ever!
Key Features:
True Independence
- Create standalone #ActivityPub bots
- No need for a Mastodon or Misskey account
- Free from platform-specific limitations
Simple and Intuitive API
- Create a complete bot in a single TypeScript file
- Intuitive event handlers for mentions, follows, and messages
- Rich text formatting with Markdown support
Modern Deployment
- Deploy on Deno Deploy, Fly.io, Railway, or any virtual server
- Minimal dependencies
- Designed for modern cloud platforms
Enterprise-Ready Foundation
- Built on Fedify, a rock-solid ActivityPub framework
- Seamless federation with Mastodon, Misskey, and other platforms
- Robust compatibility across the fediverse
Developer Experience
- Full TypeScript support with great IDE integration
- Comprehensive documentation
- Built-in testing utilities
Here's a quick example of how simple it is to create a bot:
import { createBot, mention, text } from "@fedify/botkit";
const bot = createBot<void>({
username: "greetbot",
name: "Greet Bot",
summary: text`A friendly bot that greets people!`,
// ... configuration ...
});
// Respond to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Hi, ${message.actor}! Thanks for saying hello!`);
};
export default bot;
Getting Started:
- Install #Deno
- Run:
deno add jsr:@fedify/botkit@^0.1.0-dev - Create your bot with just a few lines of code
Check out our documentation at https://botkit.fedify.dev/ to learn more!
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Are you interested in creating bots for the #fediverse? Meet #BotKit, a #TypeScript framework that makes bot development easier than ever!
Key Features:
True Independence
- Create standalone #ActivityPub bots
- No need for a Mastodon or Misskey account
- Free from platform-specific limitations
Simple and Intuitive API
- Create a complete bot in a single TypeScript file
- Intuitive event handlers for mentions, follows, and messages
- Rich text formatting with Markdown support
Modern Deployment
- Deploy on Deno Deploy, Fly.io, Railway, or any virtual server
- Minimal dependencies
- Designed for modern cloud platforms
Enterprise-Ready Foundation
- Built on Fedify, a rock-solid ActivityPub framework
- Seamless federation with Mastodon, Misskey, and other platforms
- Robust compatibility across the fediverse
Developer Experience
- Full TypeScript support with great IDE integration
- Comprehensive documentation
- Built-in testing utilities
Here's a quick example of how simple it is to create a bot:
import { createBot, mention, text } from "@fedify/botkit";
const bot = createBot<void>({
username: "greetbot",
name: "Greet Bot",
summary: text`A friendly bot that greets people!`,
// ... configuration ...
});
// Respond to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Hi, ${message.actor}! Thanks for saying hello!`);
};
export default bot;
Getting Started:
- Install #Deno
- Run:
deno add jsr:@fedify/botkit@^0.1.0-dev - Create your bot with just a few lines of code
Check out our documentation at https://botkit.fedify.dev/ to learn more!
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Are you interested in creating bots for the #fediverse? Meet #BotKit, a #TypeScript framework that makes bot development easier than ever!
Key Features:
True Independence
- Create standalone #ActivityPub bots
- No need for a Mastodon or Misskey account
- Free from platform-specific limitations
Simple and Intuitive API
- Create a complete bot in a single TypeScript file
- Intuitive event handlers for mentions, follows, and messages
- Rich text formatting with Markdown support
Modern Deployment
- Deploy on Deno Deploy, Fly.io, Railway, or any virtual server
- Minimal dependencies
- Designed for modern cloud platforms
Enterprise-Ready Foundation
- Built on Fedify, a rock-solid ActivityPub framework
- Seamless federation with Mastodon, Misskey, and other platforms
- Robust compatibility across the fediverse
Developer Experience
- Full TypeScript support with great IDE integration
- Comprehensive documentation
- Built-in testing utilities
Here's a quick example of how simple it is to create a bot:
import { createBot, mention, text } from "@fedify/botkit";
const bot = createBot<void>({
username: "greetbot",
name: "Greet Bot",
summary: text`A friendly bot that greets people!`,
// ... configuration ...
});
// Respond to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Hi, ${message.actor}! Thanks for saying hello!`);
};
export default bot;
Getting Started:
- Install #Deno
- Run:
deno add jsr:@fedify/botkit@^0.1.0-dev - Create your bot with just a few lines of code
Check out our documentation at https://botkit.fedify.dev/ to learn more!
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Deno 2.1.8 has been released with important LSP performance improvements along with an important bug fix for S3 uploads
Release v2.1.8 · denoland/deno
2.1.8 / 2025.01.30 feat(unstable): support https otlp endpoints (#27743) fix(check): better handling of TypeScript in npm packages for type checking (#27853) fix(check): compiler options from work...
Building a CLI is easy with these browser methods 👀
#deno #nodejs #typescript #WebDev #javascript #WebDevelopment
Are you interested in creating bots for the #fediverse? Meet #BotKit, a #TypeScript framework that makes bot development easier than ever!
Key Features:
True Independence
- Create standalone #ActivityPub bots
- No need for a Mastodon or Misskey account
- Free from platform-specific limitations
Simple and Intuitive API
- Create a complete bot in a single TypeScript file
- Intuitive event handlers for mentions, follows, and messages
- Rich text formatting with Markdown support
Modern Deployment
- Deploy on Deno Deploy, Fly.io, Railway, or any virtual server
- Minimal dependencies
- Designed for modern cloud platforms
Enterprise-Ready Foundation
- Built on Fedify, a rock-solid ActivityPub framework
- Seamless federation with Mastodon, Misskey, and other platforms
- Robust compatibility across the fediverse
Developer Experience
- Full TypeScript support with great IDE integration
- Comprehensive documentation
- Built-in testing utilities
Here's a quick example of how simple it is to create a bot:
import { createBot, mention, text } from "@fedify/botkit";
const bot = createBot<void>({
username: "greetbot",
name: "Greet Bot",
summary: text`A friendly bot that greets people!`,
// ... configuration ...
});
// Respond to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Hi, ${message.actor}! Thanks for saying hello!`);
};
export default bot;
Getting Started:
- Install #Deno
- Run:
deno add jsr:@fedify/botkit@^0.1.0-dev - Create your bot with just a few lines of code
Check out our documentation at https://botkit.fedify.dev/ to learn more!
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Deno's fully featured, zero-overhead FFI is stable
Fedify is an #ActivityPub server framework in #TypeScript & #JavaScript. It aims to eliminate the complexity and redundant boilerplate code when building a federated server app, so that you can focus on your business logic and user experience.
The key features it provides currently are:
- Type-safe objects for Activity Vocabulary (including some vendor-specific extensions)
- #WebFinger client and server
- HTTP Signatures & Linked Data Signatures & Object Integrity Proofs
- Middleware for handling webhooks
- #NodeInfo protocol
- #Node.js, #Deno, and #Bun support
- CLI toolchain for testing and debugging
If you're curious, take a look at the #Fedify website! There's comprehensive docs, a demo, a tutorial, example code, and more:
Are you interested in creating bots for the #fediverse? Meet #BotKit, a #TypeScript framework that makes bot development easier than ever!
Key Features:
True Independence
- Create standalone #ActivityPub bots
- No need for a Mastodon or Misskey account
- Free from platform-specific limitations
Simple and Intuitive API
- Create a complete bot in a single TypeScript file
- Intuitive event handlers for mentions, follows, and messages
- Rich text formatting with Markdown support
Modern Deployment
- Deploy on Deno Deploy, Fly.io, Railway, or any virtual server
- Minimal dependencies
- Designed for modern cloud platforms
Enterprise-Ready Foundation
- Built on Fedify, a rock-solid ActivityPub framework
- Seamless federation with Mastodon, Misskey, and other platforms
- Robust compatibility across the fediverse
Developer Experience
- Full TypeScript support with great IDE integration
- Comprehensive documentation
- Built-in testing utilities
Here's a quick example of how simple it is to create a bot:
import { createBot, mention, text } from "@fedify/botkit";
const bot = createBot<void>({
username: "greetbot",
name: "Greet Bot",
summary: text`A friendly bot that greets people!`,
// ... configuration ...
});
// Respond to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Hi, ${message.actor}! Thanks for saying hello!`);
};
export default bot;
Getting Started:
- Install #Deno
- Run:
deno add jsr:@fedify/botkit@^0.1.0-dev - Create your bot with just a few lines of code
Check out our documentation at https://botkit.fedify.dev/ to learn more!
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Are you interested in creating bots for the #fediverse? Meet #BotKit, a #TypeScript framework that makes bot development easier than ever!
Key Features:
True Independence
- Create standalone #ActivityPub bots
- No need for a Mastodon or Misskey account
- Free from platform-specific limitations
Simple and Intuitive API
- Create a complete bot in a single TypeScript file
- Intuitive event handlers for mentions, follows, and messages
- Rich text formatting with Markdown support
Modern Deployment
- Deploy on Deno Deploy, Fly.io, Railway, or any virtual server
- Minimal dependencies
- Designed for modern cloud platforms
Enterprise-Ready Foundation
- Built on Fedify, a rock-solid ActivityPub framework
- Seamless federation with Mastodon, Misskey, and other platforms
- Robust compatibility across the fediverse
Developer Experience
- Full TypeScript support with great IDE integration
- Comprehensive documentation
- Built-in testing utilities
Here's a quick example of how simple it is to create a bot:
import { createBot, mention, text } from "@fedify/botkit";
const bot = createBot<void>({
username: "greetbot",
name: "Greet Bot",
summary: text`A friendly bot that greets people!`,
// ... configuration ...
});
// Respond to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Hi, ${message.actor}! Thanks for saying hello!`);
};
export default bot;
Getting Started:
- Install #Deno
- Run:
deno add jsr:@fedify/botkit@^0.1.0-dev - Create your bot with just a few lines of code
Check out our documentation at https://botkit.fedify.dev/ to learn more!
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Are you interested in creating bots for the #fediverse? Meet #BotKit, a #TypeScript framework that makes bot development easier than ever!
Key Features:
True Independence
- Create standalone #ActivityPub bots
- No need for a Mastodon or Misskey account
- Free from platform-specific limitations
Simple and Intuitive API
- Create a complete bot in a single TypeScript file
- Intuitive event handlers for mentions, follows, and messages
- Rich text formatting with Markdown support
Modern Deployment
- Deploy on Deno Deploy, Fly.io, Railway, or any virtual server
- Minimal dependencies
- Designed for modern cloud platforms
Enterprise-Ready Foundation
- Built on Fedify, a rock-solid ActivityPub framework
- Seamless federation with Mastodon, Misskey, and other platforms
- Robust compatibility across the fediverse
Developer Experience
- Full TypeScript support with great IDE integration
- Comprehensive documentation
- Built-in testing utilities
Here's a quick example of how simple it is to create a bot:
import { createBot, mention, text } from "@fedify/botkit";
const bot = createBot<void>({
username: "greetbot",
name: "Greet Bot",
summary: text`A friendly bot that greets people!`,
// ... configuration ...
});
// Respond to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Hi, ${message.actor}! Thanks for saying hello!`);
};
export default bot;
Getting Started:
- Install #Deno
- Run:
deno add jsr:@fedify/botkit@^0.1.0-dev - Create your bot with just a few lines of code
Check out our documentation at https://botkit.fedify.dev/ to learn more!
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Want to use Rust in JavaScript?
Increase performance in the browser?
Here's an intro to using Wasm with Deno.
deno.com
Intro to Wasm in Deno
Web Assembly, or Wasm, is a great way to increase performance in your web application. Here is an introductory guide to what it is and how you can use it.
Fedify is an #ActivityPub server framework in #TypeScript & #JavaScript. It aims to eliminate the complexity and redundant boilerplate code when building a federated server app, so that you can focus on your business logic and user experience.
The key features it provides currently are:
- Type-safe objects for Activity Vocabulary (including some vendor-specific extensions)
- #WebFinger client and server
- HTTP Signatures & Linked Data Signatures & Object Integrity Proofs
- Middleware for handling webhooks
- #NodeInfo protocol
- #Node.js, #Deno, and #Bun support
- CLI toolchain for testing and debugging
If you're curious, take a look at the #Fedify website! There's comprehensive docs, a demo, a tutorial, example code, and more:
Are you interested in creating bots for the #fediverse? Meet #BotKit, a #TypeScript framework that makes bot development easier than ever!
Key Features:
True Independence
- Create standalone #ActivityPub bots
- No need for a Mastodon or Misskey account
- Free from platform-specific limitations
Simple and Intuitive API
- Create a complete bot in a single TypeScript file
- Intuitive event handlers for mentions, follows, and messages
- Rich text formatting with Markdown support
Modern Deployment
- Deploy on Deno Deploy, Fly.io, Railway, or any virtual server
- Minimal dependencies
- Designed for modern cloud platforms
Enterprise-Ready Foundation
- Built on Fedify, a rock-solid ActivityPub framework
- Seamless federation with Mastodon, Misskey, and other platforms
- Robust compatibility across the fediverse
Developer Experience
- Full TypeScript support with great IDE integration
- Comprehensive documentation
- Built-in testing utilities
Here's a quick example of how simple it is to create a bot:
import { createBot, mention, text } from "@fedify/botkit";
const bot = createBot<void>({
username: "greetbot",
name: "Greet Bot",
summary: text`A friendly bot that greets people!`,
// ... configuration ...
});
// Respond to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Hi, ${message.actor}! Thanks for saying hello!`);
};
export default bot;
Getting Started:
- Install #Deno
- Run:
deno add jsr:@fedify/botkit@^0.1.0-dev - Create your bot with just a few lines of code
Check out our documentation at https://botkit.fedify.dev/ to learn more!
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Are you interested in creating bots for the #fediverse? Meet #BotKit, a #TypeScript framework that makes bot development easier than ever!
Key Features:
True Independence
- Create standalone #ActivityPub bots
- No need for a Mastodon or Misskey account
- Free from platform-specific limitations
Simple and Intuitive API
- Create a complete bot in a single TypeScript file
- Intuitive event handlers for mentions, follows, and messages
- Rich text formatting with Markdown support
Modern Deployment
- Deploy on Deno Deploy, Fly.io, Railway, or any virtual server
- Minimal dependencies
- Designed for modern cloud platforms
Enterprise-Ready Foundation
- Built on Fedify, a rock-solid ActivityPub framework
- Seamless federation with Mastodon, Misskey, and other platforms
- Robust compatibility across the fediverse
Developer Experience
- Full TypeScript support with great IDE integration
- Comprehensive documentation
- Built-in testing utilities
Here's a quick example of how simple it is to create a bot:
import { createBot, mention, text } from "@fedify/botkit";
const bot = createBot<void>({
username: "greetbot",
name: "Greet Bot",
summary: text`A friendly bot that greets people!`,
// ... configuration ...
});
// Respond to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Hi, ${message.actor}! Thanks for saying hello!`);
};
export default bot;
Getting Started:
- Install #Deno
- Run:
deno add jsr:@fedify/botkit@^0.1.0-dev - Create your bot with just a few lines of code
Check out our documentation at https://botkit.fedify.dev/ to learn more!
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Are you interested in creating bots for the #fediverse? Meet #BotKit, a #TypeScript framework that makes bot development easier than ever!
Key Features:
True Independence
- Create standalone #ActivityPub bots
- No need for a Mastodon or Misskey account
- Free from platform-specific limitations
Simple and Intuitive API
- Create a complete bot in a single TypeScript file
- Intuitive event handlers for mentions, follows, and messages
- Rich text formatting with Markdown support
Modern Deployment
- Deploy on Deno Deploy, Fly.io, Railway, or any virtual server
- Minimal dependencies
- Designed for modern cloud platforms
Enterprise-Ready Foundation
- Built on Fedify, a rock-solid ActivityPub framework
- Seamless federation with Mastodon, Misskey, and other platforms
- Robust compatibility across the fediverse
Developer Experience
- Full TypeScript support with great IDE integration
- Comprehensive documentation
- Built-in testing utilities
Here's a quick example of how simple it is to create a bot:
import { createBot, mention, text } from "@fedify/botkit";
const bot = createBot<void>({
username: "greetbot",
name: "Greet Bot",
summary: text`A friendly bot that greets people!`,
// ... configuration ...
});
// Respond to mentions
bot.onMention = async (session, message) => {
await message.reply(text`Hi, ${message.actor}! Thanks for saying hello!`);
};
export default bot;
Getting Started:
- Install #Deno
- Run:
deno add jsr:@fedify/botkit@^0.1.0-dev - Create your bot with just a few lines of code
Check out our documentation at https://botkit.fedify.dev/ to learn more!
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Want to use Rust in JavaScript?
Increase performance in the browser?
Here's an intro to using Wasm with Deno.
deno.com
Intro to Wasm in Deno
Web Assembly, or Wasm, is a great way to increase performance in your web application. Here is an introductory guide to what it is and how you can use it.
Deno supports the new URL.parse() web API, which provides a simpler control flow for parsing URLs 👇
Want to use Rust in JavaScript?
Increase performance in the browser?
Here's an intro to using Wasm with Deno.
deno.com
Intro to Wasm in Deno
Web Assembly, or Wasm, is a great way to increase performance in your web application. Here is an introductory guide to what it is and how you can use it.
The OpenAI JavaScript SDK is now on JSR 🎉️
Deno supports the new URL.parse() web API, which provides a simpler control flow for parsing URLs 👇
Want to use Rust in JavaScript?
Increase performance in the browser?
Here's an intro to using Wasm with Deno.
deno.com
Intro to Wasm in Deno
Web Assembly, or Wasm, is a great way to increase performance in your web application. Here is an introductory guide to what it is and how you can use it.
Want to use Rust in JavaScript?
Increase performance in the browser?
Here's an intro to using Wasm with Deno.
deno.com
Intro to Wasm in Deno
Web Assembly, or Wasm, is a great way to increase performance in your web application. Here is an introductory guide to what it is and how you can use it.
Deno supports the new URL.parse() web API, which provides a simpler control flow for parsing URLs 👇
Deno supports the new URL.parse() web API, which provides a simpler control flow for parsing URLs 👇
use CSS styling in console log with Deno
Deno 2.1.7 is out!
▸ smaller deno compile binaries (~2Mb)
▸ Node compat bug fixes
Upgrade with `deno upgrade`
VSCode will automatically detect your Deno tests
The OpenAI JavaScript SDK is now on JSR 🎉️
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
The OpenAI JavaScript SDK is now on JSR 🎉️
The OpenAI JavaScript SDK is now on JSR 🎉️
The OpenAI JavaScript SDK is now on JSR 🎉️
FREE BOOKS LINUX AND SHELL SCRIPTING
- https://linuxcommand.org/tlcl.php
- https://bmansoori.ir/book/Linux%20for%20Beginners%20by%20Jason%20Cannon%20.pdf
- https://flaviocopes.pages.dev/books/linux-commands-handbook.pdf
- http://kroah.com/lkn/
- https://linuxfromscratch.org/lfs/downloads/stable/LFS-12.2-SYSV-BOOK.pdf
#python #rust #c #c++ #machinelearning #deeplearning #ai #developer #dev #devsecops #devops #mlops #learn #learning #focus #study #git #gitlab #github #codeberg #software #statistics #pandas #numpy #tensorflow #pytorch #jax #linux #popos #mint #deno #node #ubuntu
FREE BOOKS LINUX AND SHELL SCRIPTING
- https://tldp.org/LDP/Bash-Beginners-Guide/Bash-Beginners-Guide.pdf
- https://lamed-oti.com/school/rl/os/linux_unix/Korn%20Shell%20User%20and%20Programming%20Manual.pdf
- https://theswissbay.ch/pdf/Books/Computer%20science/O%27Reilly/ten-steps-to-linux-survival.pdf
- https://drago1234.github.io/Surviving_kits/data/2021_summer/Linux-101-Hacks.pdf
- https://idris.lecturer.pens.ac.id/files/kon_jarkom/Teach%20Yourself%20Shell%20Programming%20in%2024%20Hours.pdf
#python #rust #c #c++ #machinelearning #deeplearning #ai #developer #dev #devsecops #devops #mlops #learn #learning #focus #study #git #gitlab #github #codeberg #software #statistics #pandas #numpy #tensorflow #pytorch #jax #huggingface #linux #popos #mint #deno #node #ubuntu
FREE BOOKS LINUX AND SHELL SCRIPTING
- https://tldp.org/LDP/Bash-Beginners-Guide/Bash-Beginners-Guide.pdf
- https://lamed-oti.com/school/rl/os/linux_unix/Korn%20Shell%20User%20and%20Programming%20Manual.pdf
- https://theswissbay.ch/pdf/Books/Computer%20science/O%27Reilly/ten-steps-to-linux-survival.pdf
- https://drago1234.github.io/Surviving_kits/data/2021_summer/Linux-101-Hacks.pdf
- https://idris.lecturer.pens.ac.id/files/kon_jarkom/Teach%20Yourself%20Shell%20Programming%20in%2024%20Hours.pdf
#python #rust #c #c++ #machinelearning #deeplearning #ai #developer #dev #devsecops #devops #mlops #learn #learning #focus #study #git #gitlab #github #codeberg #software #statistics #pandas #numpy #tensorflow #pytorch #jax #huggingface #linux #popos #mint #deno #node #ubuntu
FREE BOOKS LINUX AND SHELL SCRIPTING
- https://linuxcommand.org/tlcl.php
- https://bmansoori.ir/book/Linux%20for%20Beginners%20by%20Jason%20Cannon%20.pdf
- https://flaviocopes.pages.dev/books/linux-commands-handbook.pdf
- http://kroah.com/lkn/
- https://linuxfromscratch.org/lfs/downloads/stable/LFS-12.2-SYSV-BOOK.pdf
#python #rust #c #c++ #machinelearning #deeplearning #ai #developer #dev #devsecops #devops #mlops #learn #learning #focus #study #git #gitlab #github #codeberg #software #statistics #pandas #numpy #tensorflow #pytorch #jax #linux #popos #mint #deno #node #ubuntu
VSCode will automatically detect your Deno tests
Deno 2.1.7 is out!
▸ smaller deno compile binaries (~2Mb)
▸ Node compat bug fixes
Upgrade with `deno upgrade`
use CSS styling in console log with Deno
Deno 2.1.7 is out!
▸ smaller deno compile binaries (~2Mb)
▸ Node compat bug fixes
Upgrade with `deno upgrade`
use CSS styling in console log with Deno
use CSS styling in console log with Deno
use CSS styling in console log with Deno
#Development #Launches
Mizu.js · Build dynamic web pages without heavy frameworks https://ilo.im/161hgq
_____
#Library #NextJS #Deno #Bun #Browser #WebDev #Frontend #Backend #HTML #JavaScript

mizu.sh
mizu.js | Lightweight HTML templating library for any-side rendering
mizu.js is a TypeScript/JavaScript library designed to provide a simple and efficient way to create dynamic web pages without the need for a complex framework.
#Development #Launches
Mizu.js · Build dynamic web pages without heavy frameworks https://ilo.im/161hgq
_____
#Library #NextJS #Deno #Bun #Browser #WebDev #Frontend #Backend #HTML #JavaScript

mizu.sh
mizu.js | Lightweight HTML templating library for any-side rendering
mizu.js is a TypeScript/JavaScript library designed to provide a simple and efficient way to create dynamic web pages without the need for a complex framework.
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
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
Release v2.1.6 · denoland/deno
2.1.6 / 2025.01.16 fix(check/lsp): correctly resolve compilerOptions.types (#27686) fix(check/lsp): fix bugs with tsc type resolution, allow npm packages to augment ImportMeta (#27690) fix(compile...
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
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
Release v2.1.6 · denoland/deno
2.1.6 / 2025.01.16 fix(check/lsp): correctly resolve compilerOptions.types (#27686) fix(check/lsp): fix bugs with tsc type resolution, allow npm packages to augment ImportMeta (#27690) fix(compile...
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
Release v2.1.6 · denoland/deno
2.1.6 / 2025.01.16 fix(check/lsp): correctly resolve compilerOptions.types (#27686) fix(check/lsp): fix bugs with tsc type resolution, allow npm packages to augment ImportMeta (#27690) fix(compile...
#Oracle gibt die Marke #JavaScript offenbar nicht kampflos auf | Developer https://www.heise.de/news/JavaScript-Oracle-haelt-an-der-Marke-fest-und-wehrt-sich-gegen-Antrag-von-Deno-10242019.html #Deno #FreeJavaScript #WebDevelopment
heise.de
Oracle gibt die Marke JavaScript offenbar nicht kampflos auf
Denos Antrag auf Löschung von Oracles Marke JavaScript erhält Gegenwehr. Oracle hat zunächst eine Fristverlängerung beantragt.
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
Release v2.1.6 · denoland/deno
2.1.6 / 2025.01.16 fix(check/lsp): correctly resolve compilerOptions.types (#27686) fix(check/lsp): fix bugs with tsc type resolution, allow npm packages to augment ImportMeta (#27690) fix(compile...
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
#Oracle gibt die Marke #JavaScript offenbar nicht kampflos auf | Developer https://www.heise.de/news/JavaScript-Oracle-haelt-an-der-Marke-fest-und-wehrt-sich-gegen-Antrag-von-Deno-10242019.html #Deno #FreeJavaScript #WebDevelopment
heise.de
Oracle gibt die Marke JavaScript offenbar nicht kampflos auf
Denos Antrag auf Löschung von Oracles Marke JavaScript erhält Gegenwehr. Oracle hat zunächst eine Fristverlängerung beantragt.
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust @fedify foundation.
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Playing with #Proxmox, installing #Debian with a preseed file served by #Deno.
https://wiki.debian.org/DebianInstaller/Preseed
Made it all the way through an installation with only one question: where to install the bootloader. That's much better than the tedious series of questions that I always answer the same way in that clumsy installer UI, and I can keep reusing that preseed with slightly different values for new VMs going forwards.
I was worried the few hours I spent wouldn't be worth it, but I think it is.
wiki.debian.org
DebianInstaller/Preseed - Debian Wiki
Key Points:
➡️ BotKit enables the creation of standalone ActivityPub bots, free from platform constraints.
➡️ It is user-friendly and written in TypeScript, ensuring type safety.
➡️ BotKit is easy to deploy with minimal dependencies on various virtual servers.
➡️ Powered by #Fedify, a robust #ActivityPub framework.
#ActivityPub #BotKit #Fediverse #TypeScript #Deno #OpenSource #Programming
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
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 👇️
https://deno.com/blog/advent-of-code-2024
#deno #AOC2024 #aoc #nodejs #javascript #typescript #webdevelopment
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 👇️
https://deno.com/blog/advent-of-code-2024
#deno #AOC2024 #aoc #nodejs #javascript #typescript #webdevelopment
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 👇️
https://deno.com/blog/advent-of-code-2024
#deno #AOC2024 #aoc #nodejs #javascript #typescript #webdevelopment
Key Points:
➡️ BotKit enables the creation of standalone ActivityPub bots, free from platform constraints.
➡️ It is user-friendly and written in TypeScript, ensuring type safety.
➡️ BotKit is easy to deploy with minimal dependencies on various virtual servers.
➡️ Powered by #Fedify, a robust #ActivityPub framework.
#ActivityPub #BotKit #Fediverse #TypeScript #Deno #OpenSource #Programming
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Key Points:
➡️ BotKit enables the creation of standalone ActivityPub bots, free from platform constraints.
➡️ It is user-friendly and written in TypeScript, ensuring type safety.
➡️ BotKit is easy to deploy with minimal dependencies on various virtual servers.
➡️ Powered by #Fedify, a robust #ActivityPub framework.
#ActivityPub #BotKit #Fediverse #TypeScript #Deno #OpenSource #Programming
botkit.fedify.dev
BotKit by Fedify
A framework for creating your ActivityPub bots
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Deno 2.1.5 just landed —
▸ new QUIC API
▸ improved Discord.js compatibility
▸ better tasks support in workspaces
Deno 2.1.5 just landed —
▸ new QUIC API
▸ improved Discord.js compatibility
▸ better tasks support in workspaces
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Deno 2.1.5 just landed —
▸ new QUIC API
▸ improved Discord.js compatibility
▸ better tasks support in workspaces
Deno 2.1.5 just landed —
▸ new QUIC API
▸ improved Discord.js compatibility
▸ better tasks support in workspaces
Deno is committed to web standards - that's why we co-founded WinterCG two years ago. Today marks the next step in that journey: WinterCG moves to Ecma International as technical comittee 55 (TC55).
Goodbye WinterCG, welcome WinterTC!
deno.com
Goodbye WinterCG, welcome WinterTC
WinterCG, the Web Interoperable Runtimes Community Group is moving to Ecma as TC55 to be able to publish standards.
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Deno is committed to web standards - that's why we co-founded WinterCG two years ago. Today marks the next step in that journey: WinterCG moves to Ecma International as technical comittee 55 (TC55).
Goodbye WinterCG, welcome WinterTC!
deno.com
Goodbye WinterCG, welcome WinterTC
WinterCG, the Web Interoperable Runtimes Community Group is moving to Ecma as TC55 to be able to publish standards.
Deno 2.1.5 just landed —
▸ new QUIC API
▸ improved Discord.js compatibility
▸ better tasks support in workspaces
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Deno is committed to web standards - that's why we co-founded WinterCG two years ago. Today marks the next step in that journey: WinterCG moves to Ecma International as technical comittee 55 (TC55).
Goodbye WinterCG, welcome WinterTC!
deno.com
Goodbye WinterCG, welcome WinterTC
WinterCG, the Web Interoperable Runtimes Community Group is moving to Ecma as TC55 to be able to publish standards.
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Deno is committed to web standards - that's why we co-founded WinterCG two years ago. Today marks the next step in that journey: WinterCG moves to Ecma International as technical comittee 55 (TC55).
Goodbye WinterCG, welcome WinterTC!
deno.com
Goodbye WinterCG, welcome WinterTC
WinterCG, the Web Interoperable Runtimes Community Group is moving to Ecma as TC55 to be able to publish standards.
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Introducing #BotKit: A #TypeScript framework for creating truly standalone #ActivityPub bots!
Unlike traditional Mastodon bots, BotKit lets you build fully independent #fediverse bots that aren't constrained by platform limits. Create your entire bot in a single TypeScript file using our simple, expressive API.
Currently #Deno-only, with Node.js & Bun support planned. Built on the robust #Fedify foundation.

ALT text
import { createBot, InProcessMessageQueue, MemoryKvStore, mention, text, } from "@fedify/botkit"; // Create a bot instance: const bot = createBot<void>({ // The bot will have fediverse handle "@greetbot@mydomain": username: "greetbot", // Set the display name: name: "Greet Bot", // Set the profile icon (avatar): icon: new URL("https://mydomain/icon.png"), // Set the bio: summary: text`Hi, there! I'm a simple fediverse bot created by ${ mention("@hongminhee@hollo.social")}.`, // Store data in memory (for development): kv: new MemoryKvStore(), // Use in-process message queue (for development): queue: new InProcessMessageQueue(), }); // A bot can respond to a mention: bot.onMention = async (session, message) => { await message.reply(text`Hi, ${message.actor}!`); }; // Or, a bot also can actively publish a post: const session = bot.getSession("https://mydomain/"); setInterval(async () => { await session.publish(text`Hi, forks! It's an hourly greeting.`); }, 1000 * 60 * 60); export default bot;
Okay, I finished the groundwork of #BotKit today. It's #Deno-only yet though. It's on GitHub!
Even though it's built on #Fedify, its API looks completely different from Fedify's one. I intended to make it resembles more Discord/Telegram bot frameworks than Fedify. I think it's close to my intention.
github.com
GitHub - dahlia/botkit: A framework for creating ActivityPub bots
A framework for creating ActivityPub bots. Contribute to dahlia/botkit development by creating an account on GitHub.
Okay, I finished the groundwork of #BotKit today. It's #Deno-only yet though. It's on GitHub!
Even though it's built on #Fedify, its API looks completely different from Fedify's one. I intended to make it resembles more Discord/Telegram bot frameworks than Fedify. I think it's close to my intention.
github.com
GitHub - dahlia/botkit: A framework for creating ActivityPub bots
A framework for creating ActivityPub bots. Contribute to dahlia/botkit development by creating an account on GitHub.
Okay, I finished the groundwork of #BotKit today. It's #Deno-only yet though. It's on GitHub!
Even though it's built on #Fedify, its API looks completely different from Fedify's one. I intended to make it resembles more Discord/Telegram bot frameworks than Fedify. I think it's close to my intention.
github.com
GitHub - dahlia/botkit: A framework for creating ActivityPub bots
A framework for creating ActivityPub bots. Contribute to dahlia/botkit development by creating an account on GitHub.
Okay, I finished the groundwork of #BotKit today. It's #Deno-only yet though. It's on GitHub!
Even though it's built on #Fedify, its API looks completely different from Fedify's one. I intended to make it resembles more Discord/Telegram bot frameworks than Fedify. I think it's close to my intention.
github.com
GitHub - dahlia/botkit: A framework for creating ActivityPub bots
A framework for creating ActivityPub bots. Contribute to dahlia/botkit development by creating an account on GitHub.
Okay, I finished the groundwork of #BotKit today. It's #Deno-only yet though. It's on GitHub!
Even though it's built on #Fedify, its API looks completely different from Fedify's one. I intended to make it resembles more Discord/Telegram bot frameworks than Fedify. I think it's close to my intention.
github.com
GitHub - dahlia/botkit: A framework for creating ActivityPub bots
A framework for creating ActivityPub bots. Contribute to dahlia/botkit development by creating an account on GitHub.
Okay, I finished the groundwork of #BotKit today. It's #Deno-only yet though. It's on GitHub!
Even though it's built on #Fedify, its API looks completely different from Fedify's one. I intended to make it resembles more Discord/Telegram bot frameworks than Fedify. I think it's close to my intention.
github.com
GitHub - dahlia/botkit: A framework for creating ActivityPub bots
A framework for creating ActivityPub bots. Contribute to dahlia/botkit development by creating an account on GitHub.
Okay, I finished the groundwork of #BotKit today. It's #Deno-only yet though. It's on GitHub!
Even though it's built on #Fedify, its API looks completely different from Fedify's one. I intended to make it resembles more Discord/Telegram bot frameworks than Fedify. I think it's close to my intention.
github.com
GitHub - dahlia/botkit: A framework for creating ActivityPub bots
A framework for creating ActivityPub bots. Contribute to dahlia/botkit development by creating an account on GitHub.
Okay, I finished the groundwork of #BotKit today. It's #Deno-only yet though. It's on GitHub!
Even though it's built on #Fedify, its API looks completely different from Fedify's one. I intended to make it resembles more Discord/Telegram bot frameworks than Fedify. I think it's close to my intention.
github.com
GitHub - dahlia/botkit: A framework for creating ActivityPub bots
A framework for creating ActivityPub bots. Contribute to dahlia/botkit development by creating an account on GitHub.
Okay, I finished the groundwork of #BotKit today. It's #Deno-only yet though. It's on GitHub!
Even though it's built on #Fedify, its API looks completely different from Fedify's one. I intended to make it resembles more Discord/Telegram bot frameworks than Fedify. I think it's close to my intention.
github.com
GitHub - dahlia/botkit: A framework for creating ActivityPub bots
A framework for creating ActivityPub bots. Contribute to dahlia/botkit development by creating an account on GitHub.
Okay, I finished the groundwork of #BotKit today. It's #Deno-only yet though. It's on GitHub!
Even though it's built on #Fedify, its API looks completely different from Fedify's one. I intended to make it resembles more Discord/Telegram bot frameworks than Fedify. I think it's close to my intention.
github.com
GitHub - dahlia/botkit: A framework for creating ActivityPub bots
A framework for creating ActivityPub bots. Contribute to dahlia/botkit development by creating an account on GitHub.
Okay, I finished the groundwork of #BotKit today. It's #Deno-only yet though. It's on GitHub!
Even though it's built on #Fedify, its API looks completely different from Fedify's one. I intended to make it resembles more Discord/Telegram bot frameworks than Fedify. I think it's close to my intention.
github.com
GitHub - dahlia/botkit: A framework for creating ActivityPub bots
A framework for creating ActivityPub bots. Contribute to dahlia/botkit development by creating an account on GitHub.
Okay, I finished the groundwork of #BotKit today. It's #Deno-only yet though. It's on GitHub!
Even though it's built on #Fedify, its API looks completely different from Fedify's one. I intended to make it resembles more Discord/Telegram bot frameworks than Fedify. I think it's close to my intention.
github.com
GitHub - dahlia/botkit: A framework for creating ActivityPub bots
A framework for creating ActivityPub bots. Contribute to dahlia/botkit development by creating an account on GitHub.
Okay, I finished the groundwork of #BotKit today. It's #Deno-only yet though. It's on GitHub!
Even though it's built on #Fedify, its API looks completely different from Fedify's one. I intended to make it resembles more Discord/Telegram bot frameworks than Fedify. I think it's close to my intention.
github.com
GitHub - dahlia/botkit: A framework for creating ActivityPub bots
A framework for creating ActivityPub bots. Contribute to dahlia/botkit development by creating an account on GitHub.
Okay, I finished the groundwork of #BotKit today. It's #Deno-only yet though. It's on GitHub!
Even though it's built on #Fedify, its API looks completely different from Fedify's one. I intended to make it resembles more Discord/Telegram bot frameworks than Fedify. I think it's close to my intention.
github.com
GitHub - dahlia/botkit: A framework for creating ActivityPub bots
A framework for creating ActivityPub bots. Contribute to dahlia/botkit development by creating an account on GitHub.
Building VSCode extensions with Deno (use the browser's translation function if needed): https://qiita.com/kt3k/items/f53bd1b58ed4ad368d77
#deno #vscode
I'm troubleshooting a mysterious TypeError: fetch failed exception when using #Node.js's built-in fetch() function. When I make the same request in #Deno or #Bun, it responds fine. Anyone know why this only happens in Node.js?
![Welcome to Bun v1.1.42
Type ".help" for more information.
[!] Please note that the REPL implementation is still experimental!
Don't consider it to be representative of the stability or behavior of Bun overall.
> await fetch("https://social.zarchbox.fr/notes/a2dn3k8kt5hm3gci");
Response {}
>](https://media.social.fedify.dev/media/0194184f-62bb-7468-9bd6-213301cd830e/thumbnail.webp)
ALT text
Welcome to Bun v1.1.42 Type ".help" for more information. [!] Please note that the REPL implementation is still experimental! Don't consider it to be representative of the stability or behavior of Bun overall. > await fetch("https://social.zarchbox.fr/notes/a2dn3k8kt5hm3gci"); Response {} >

ALT text
Deno 2.1.4 exit using ctrl+d, ctrl+c, or close() REPL is running with all permissions allowed. To specify permissions, run `deno repl` with allow flags. > await fetch("https://social.zarchbox.fr/notes/a2dn3k8kt5hm3gci"); Response { body: ReadableStream { locked: false }, bodyUsed: false, headers: Headers { "alt-svc": 'h3=":443"; ma=2592000', "cache-control": "public, max-age=15", "content-length": "10828", "content-security-policy": "default-src 'self' 'unsafe-inline'; img-src *; media-src *; frame-ancestors *", "content-type": "text/html; charset=utf-8", date: "Mon, 30 Dec 2024 15:59:09 GMT", server: "Caddy", "strict-transport-security": "max-age=15552000; preload", vary: "Origin, Accept", "x-frame-options": "DENY" }, ok: true, redirected: false, status: 200, statusText: "OK", url: "https://social.zarchbox.fr/notes/a2dn3k8kt5hm3gci" } >
![Welcome to Node.js v23.5.0.
Type ".help" for more information.
> await fetch("https://social.zarchbox.fr/notes/a2dn3k8kt5hm3gci");
Uncaught TypeError: fetch failed
at node:internal/deps/undici/undici:13484:13
at process.processTicksAndRejections (node:internal/process/task_queues:105:5)
at async REPL1:1:33 {
[cause]: AggregateError [ETIMEDOUT]:
at internalConnectMultiple (node:net:1139:18)
at internalConnectMultiple (node:net:1215:5)
at Timeout.internalConnectMultipleTimeout (node:net:1739:5)
at listOnTimeout (node:internal/timers:616:11)
at process.processTimers (node:internal/timers:549:7) {
code: 'ETIMEDOUT',
[errors]: [ [Error], [Error] ]
}
}
>](https://media.social.fedify.dev/media/01941850-da6a-7e93-acc0-1a1b6f54dde0/thumbnail.webp)
ALT text
Welcome to Node.js v23.5.0. Type ".help" for more information. > await fetch("https://social.zarchbox.fr/notes/a2dn3k8kt5hm3gci"); Uncaught TypeError: fetch failed at node:internal/deps/undici/undici:13484:13 at process.processTicksAndRejections (node:internal/process/task_queues:105:5) at async REPL1:1:33 { [cause]: AggregateError [ETIMEDOUT]: at internalConnectMultiple (node:net:1139:18) at internalConnectMultiple (node:net:1215:5) at Timeout.internalConnectMultipleTimeout (node:net:1739:5) at listOnTimeout (node:internal/timers:616:11) at process.processTimers (node:internal/timers:549:7) { code: 'ETIMEDOUT', [errors]: [ [Error], [Error] ] } } >
Participating in Advent of Code 🎄?
Use Deno and win some exclusive prizes 🎁️ 👀️
https://deno.com/blog/advent-of-code-2024
#deno #node #javascript #typescript #webdevelopment #adventofcode
deno.com
Solve Advent of Code 2024 with Deno and Win Prizes!
We're giving out exclusive prizes for using Deno during the Advent of Code 2024. Here's what you can win.
This year, I was able to get to Day 6 in #AdventOfCode with #deno... before I needed to sleep at night. 🤣
I forgot how much time this stuff takes. I'll finish all the rest throughout the upcoming year. SLOWLY this time. 😅
I forgot how long part 2s can be. Parts 1 were like 30 minutes to an hour. But the part 2s were definitely the rest of the night. 🫠
Thank you for your support in helping us reach 100,000 GitHub stars! ⭐️
Thank you for your support in helping us reach 100,000 GitHub stars! ⭐️
Building VSCode extensions with Deno (use the browser's translation function if needed): https://qiita.com/kt3k/items/f53bd1b58ed4ad368d77
#deno #vscode
Deno can now finally be installed through npm!
npm install -g deno
npx deno eval -p 1+2
More info about this feature in the release notes: https://deno.com/blog/v2.1#embed-assets-files-in-deno-compile
Interested in contributing to Deno?
Check out Divy's talk on Deno internals and op2: https://www.youtube.com/watch?v=vINOqgn_ik8
Easily check for outdated dependencies with `deno outdated` 👇️
this wren wants to remind you that Deno permission flags have shorthands
Update on #FreeJavaScript: 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.
https://deno.com/blog/deno-v-oracle/20241204-notice-of-appearance.pdf
Did you know you can host your Next.js app on Deno Deploy in just a few steps? Here's how👇️
@deno_land trying #adventofcode with #deno 🦕this year. https://github.com/kuko6/aoc24
4/4 ⭐ so far, I wonder how long I'll manage to keep up 😅
github.com
GitHub - kuko6/aoc24: 2024 Advent of Code with Deno 🦕
2024 Advent of Code with Deno 🦕. Contribute to kuko6/aoc24 development by creating an account on GitHub.
I’m doing #AdventOfCode in #Deno this year, mostly because of the free stickers (https://deno.com/blog/advent-of-code-2024) but it also might be a nice change of pace considering my previous attempts in #rustlang and #cpp
deno.com
Solve Advent of Code 2024 with Deno and Win Prizes!
We're giving out exclusive prizes for using Deno during the Advent of Code 2024. Here's what you can win.
Participating in Advent of Code 🎄?
Use Deno and win some exclusive prizes 🎁️ 👀️
https://deno.com/blog/advent-of-code-2024
#deno #node #javascript #typescript #webdevelopment #adventofcode
deno.com
Solve Advent of Code 2024 with Deno and Win Prizes!
We're giving out exclusive prizes for using Deno during the Advent of Code 2024. Here's what you can win.
It's done. Now it’s your turn, Oracle.
We’ve submitted a formal petition to cancel the JavaScript trademark: it is generic, Oracle has abandoned it, and Oracle committed fraud on the USPTO during the last trademark renewal.
Oracle has until January 4th to respond, or the case will go into default, which will result in the trademark being canceled.
It's time to #FreeJavaScript.
deno.com
Deno v. Oracle: Canceling the JavaScript Trademark
Oracle is holding the JavaScript trademark hostage, and we’re pursuing legal means to #FreeJavaScript. Here’s a brief update.
Deno 2.1 is out 🎉️
✈️️ first class Wasm support
🌳️ Long Term Support branch
⭐️ Improved dependency management
and much more!
#deno #node #javascript #nodejs #typescript #webdev #npm #wasm
Okay. While #Sentry SDK for #Node.js supports #OpenTelemetry integration, Sentry SDK for #Deno does not.
Does anyone have experience integrating Spans measured using the #OpenTelemetry API with #Sentry in #Node.js or #Deno?
According to the docs in the Sentry SDK, OpenTelemetry integration is out of the box and doesn't require any configuration, but Spans instrumented using the OpenTelemetry API are ignored. Spans made with the Sentry API are working fine.
https://docs.sentry.io/platforms/javascript/guides/node/opentelemetry/
Deno is a JavaScript package manager with more flexibility:
📦️ npm and JSR
🛠️️ package.json and deno.json
👟️ fast
はてなブログに投稿しました
TypeScriptのコードをそのままデプロイできてOpenAIのAPIもSQLiteもCronもメール送受信も使える高機能なPaaSの「Val Town」 - await wakeUp(); https://sublimer.hatenablog.com/entry/2024/11/04/090301
This extension is a fork of the official deno extension. Adds support for Deno LSP on notebooks. It also defines a new notebook type (*.nb.ts). This way you can use "import" between notebooks. Lastly, it also adds a notebook controller for vscode, so you can use deno's jupyter kernel in vscode without Python.
Developing an node.js compatible npm package in deno seems to be possible with the dnt tool. I have not tried it yet but, if it works, it is brilliant (it is so much smoother to develop with deno than with node+npm)
Hi everyone, I am now looking for full-time work! If you have a remote Software Engineer position available and work with #Frontend web tech (#HTML / #CSS / #JS / #TS / #React, etc), #NodeJS (or #Bun / #Deno ), #Kubernetes, or #Nix / #NixOS 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: https://jakehamilton.dev
Boosts very much appreciated!
I still think #Deno's initial vision was promising, so its current revised direction (compatibility with Node.js) feels reactionary.
Thought it might be fun to make a small jsr package that actually has a bit of real-world utility. So here's `isit` as in `isit("Friday") ? "Hooray!" : "Boo!"` which I'll use in our morning work standup bot to send a different Teams meeting link depending on what day it is. Maybe it'll be useful to someone else too. It supports custom Dates and timezone offsets too. Enjoy! https://jsr.io/@phocks/isit
I wonder if it’s related to this…
Finally, #IntelliJ supports import_map.json. This support is implemented over the Deno LSP. By default, the IDE uses the import_map.json file from the project root. If you want to specify another file, you can do so in Preferences / Settings | Languages & Frameworks | Deno. Please note that changes in import_map currently require you to restart the Deno LSP service.
What is import_map.json? Is it how the deno.json "imports" key was handled in past versions of #Deno?
#IntelliJ seems to have issues handling the imports for the #Deno file deno.json, and, while it resolves the dependencies correctly, it doesn’t provide any syntax highlighting for objects imported through the import aliases…
This doesn’t work…
import {RedisKvStore} from "@fedify/redis"This does:
import {RedisKvStore} from "https://jsr.io/@fedify/redis/0.3.0/src/kv.ts"Any ideas that could help fix or mitigate the problem?
Want to modernize legacy JavaScript?
One way is to convert CommonJS code to ESM 👇️
Just for fun I decided to try publishing a package on this new JSR "open-source package registry". Quick, simple, and fun. Love it! https://jsr.io/@phocks
Any #Deno program above a certain size will rely on --allow-all.
"By default, #Deno programs don’t have access to the filesystem, the network, etc. — you need to explicitly opt into those via permission flags. Deno’s permission flags extend to its dependencies. You no longer need to conduct audits on your dependencies — simply run your program and see what access your app and its dependencies require."
If you're interested in adding scripting capabilities to your #RustLang applications and missed my talk at @eurorust, you can find my slides and my well-commented @deno_land 🦕 demo code online. The recording will (afaik) be published next month.
Slides: https://dl.korz.dev/eurorust2024.pdf
Demo: https://github.com/niklaskorz/eurorust2024
ALT text
Niklas standing on the stage, presenting his talk "Runtime Scripting for Rust Applications". The slide shown next to him mentions reasons for integrating scripting languages into Rust applications: Fast prototyping (aided by hot reloading), extending applications without needing to alter their source code (through plugins), and to collaborate with people that find Rust too complicated.
Programming should be simple
It's great that #Deno 2.0 is available, but the mascot, Dino, is no longer cute.
4 years after Deno 1.0, the next generation of JavaScript is ready for production at scale.
Deno 2 is out today
🐢 Fully backwards compatible with Node and npm
📦 Package management and node_modules and package.json
📅 Long term support
#Deno 2 is out today: https://deno.com/blog/v2.0
I already released a version of #Dropserver that is compatible with Deno 2: https://github.com/teleclimber/Dropserver/releases/tag/v0.13.3
I also upgraded the Leftovers and Shopping List #Dropserver apps to support #Deno 2:
https://leftovers.olivierforget.net/
https://shoppinglist.olivierforget.net/
Apparently #Deno 2 is now available!
Deno 2 is not yet released, but we've made many️ updates to the release candidate 👇️
The 🦕️ is out of the bag...
If you've been avoiding #JavaScript & #TypeScript due to the complexity of the #Node.js ecosystem, give #Deno a try. Everything is simplified and you can start coding right away without having to set up a development environment.
Rusty V8 is now stable!
With zero-overhead bindings to V8 APIs, memory safety through Rust’s ownership model, and great docs, it’s battle-hardened and production-ready. From here on, Rusty V8 will follow Chrome versions for predictable upgrades.
Deno 2 Release Candidate has dropped:
‣ Add `process` global variable, remove `window`
‣ Improve dep management
‣ Permission system updates
‣ Many stabilizations
‣ Better CommonJS support
‣ Test documentation with `deno test --doc`
Help us spread the word — it's time to #FreeJavaScript
@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. 🤔
JSR and Deno: Final Review | Lobsters
https://lobste.rs/s/qrxgyj/jsr_deno_final_review
DenoやBunが好きな方いらっしゃいますか?
Curious about how the JSR logo and website design came together? 🤔️
Here's a 👀️ into our design process.
https://deno.com/blog/designing-jsr
#deno #node #javascript #typescript #webdevelopment #npm #jsr
Fedifyは、TypeScriptとJavaScriptで書かれたActivityPubサーバーフレームワークです。分散型のソーシャルネットワークを構築するためのサーバーアプリケーションを作る際の複雑さと冗長なコードを排除し、ビジネスロジックとユーザー体験の開発に集中できるようにすることを目指しています。
現在提供している主な機能は以下の通りです:
- Activity Vocabularyのための型安全なオブジェクト(一部のベンダー固有の拡張機能を含む)
- WebFingerクライアントとサーバー
- HTTP SignaturesとObject Integrity Proofs
- ウェブフックを処理するためのミドルウェア
- NodeInfoプロトコル
- Node.js、Deno、Bunのサポート
- テストとデバッグのためのCLIツールチェーン
興味がある方は、Fedifyのウェブサイトをご覧ください!包括的なドキュメント、デモ、チュートリアル、サンプルコードなどが用意されています:
#Fedify #TypeScript #JavaScript #ActivityPub #NodeInfo #Node #Deno #Bun #fedidev
The first release candidate for #Deno 2 has just dropped. To upgrade use the following incantation:
deno upgrade rc
You can also use the --canary flag to do the upgrade.
#javascript
@deno_land
I'm a #softwaredev focusing on #javascript & #typescript specifically #deno. Right now, I'm working on a blog called Craig's Deno Diary. I also contribute to a few Deno projects and am taking a break from working in the corporate world.
I have over 20 years of experience in web development, first using Java and recently JavaScript/TypeScript. Before that I was a #journalist for 10 years.
I live in #Maine USA & try to enjoy the beautiful environment here as often as possible.
I've published an article titled "What every developer needs to know about the Deno third party module registry" on my blog Craig's Deno Diary.
The article highlights an API that pulls data from the registry as content for the Deno Third Party Modules page (deno.land/x). Of particular interest is the explanation how the API is used to rank modules based on a 'popularity score'. I also created an app that demonstrates a way to use the API.
#deno @deno_land
The latest post to my blog Craig's Deno Diary has been published: "A Comprehensive Guide to Deno KV"
Consider this article as a one-stop location for Deno KV info. The post includes sections on pagination, tracking record version history and sorting KV records.
Associated with the article is a repo containing 12 code examples demonstrating all the concepts and tech used in the blog post.
#deno #denokv
https://deno-blog.com/A_Comprehensive_Guide_to_Deno_KV.2023-06-30
I've published a new post to Craig's Deno Diary on fresh-testing-library. This library fills a large void in #Deno Fresh #testing by allowing unit testing of Fresh components, middleware and route handling. It is a library that every #denofresh dev should use.
The blog post is accompanied by over two dozen fresh-testing-library example test files. Check it out here: https://deno-blog.com/Testing_Fresh_Components,_Middleware_and_Handlers_with_fresh-testing-library.2023-10-15
The requirements are:
- needs to work offline in #docker
- user scripts can load additional dependencies, that also need to work offline the next launch
- user can access script dir and write scripts with vscode. Version of reactive-home needs to match the current docker image version
- should be available on #jsr
I have an idea of how I can achieve this, but it is annoying to refactor and test because, at the end of the day, it needs to work again since it powers my #SmartHome haha
#deno
I really want to refactor parts of my reactive home project. But before I do that, I need to refactor the release flow and the packaging. I tried this once a few months ago, but failed miserably and reverted all commits. It is a #deno project which loads user defined scripts. And everything needs to run inside #docker. Currently, I just use http imports for that, but the image should work offline. This should be easy, right?
One reason I like #Deno (@deno_land) more than #Bun.
I love #Deno (@deno_land) because it turned me from a #JavaScript hater into a JavaScript programmer, or more precisely, a #TypeScript programmer.
Version 0.5.0 of #LogTape, the zero-dependency #logging library for #Deno, #Node.js, #Bun, edge functions, and browsers, has been released! The main additions include:
• Contexts
• ANSI color formatter
• Comprehensive docs
• A few API conveniences
LogTape v0.5.0 is available from JSR and npm:
• JSR: https://jsr.io/@logtape/logtape@0.5.0
• npm: https://www.npmjs.com/package/@logtape/logtape/v/0.5.0
In addition, a new website with documentation has been launched, so please check it out!
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?
Yes little Deno, look up!
Hosting on Deno Deploy just got more performant with beta Web Cache API support:
🚀 sub-millisecond read latency
🚅 multi Gbps write throughput
💾 unbounded storage
https://deno.com/blog/deploy-cache-api
#deno #node #javascript #typescript #webdevelopment #serverless
Deno 1.46 is not only the last 1.x release, but also one of the biggest:
- Simpler CLI
- Multi-threaded web servers
- HTML, CSS, YAML support in `deno fmt`
- Better Node/npm compat (support for playwright, google-cloud, etc.)
and much more 👇️
I just published a post to my Craig's Deno Diary blog on the Ultra v2 framework which allows full-stack React apps to run in a Deno environment.
Ultra supports many React libraries and features including Tailwind, React Router and React Query. Version 2 works with React 18 which includes suspense for async rendering.
The blog post focuses on creating, developing and deploying a full-stack Ultra app.
https://deno-blog.com/Building_Fullstack_React_Apps_with_Ultra.2022-12-04
The latest post to my blog Craig's Deno Diary has been published: "A Comprehensive Guide to Deno KV"
Consider this article as a one-stop location for Deno KV info. The post includes sections on pagination, tracking record version history and sorting KV records.
Associated with the article is a repo containing 12 code examples demonstrating all the concepts and tech used in the blog post.
#deno #denokv
https://deno-blog.com/A_Comprehensive_Guide_to_Deno_KV.2023-06-30
#LogTape is a logging library for #JavaScript and #TypeScript. It provides a simple and flexible logging system that is easy to use and easy to extend. The highlights of LogTape are:
• Zero dependencies
• Designed to be used in libraries as well as apps
• Supports virtually every runtime: #Node.js, #Deno, #Bun, edge functions, and browsers
• Structured logging
• Logger categories (names) are hierarchical
• Dead simple sink (destination) interface
I'm unsure whether to adopt an emerging JavaScript runtime like #Bun or #Deno for #Fedify's tutorial, or stick with traditional #Node.js. 🤔
If I choose Bun/Deno, it comes with built-in #TypeScript support, hot reloading, and a fetch-style HTTP server, so I don't have to explain much about it, but I need to deal with installing Bun/Deno itself.
On the other hand, Node.js can be assumed to be already installed on the reader's system, but they will need to set up TypeScript, hot reloading, etc.
- Bun0 (0%)
- Deno0 (0%)
- Node.js0 (0%)
Deno is known for its HTTP imports, but we've found it's insufficient for larger projects. This post explains the situation and how we've improved it.
std/data-structures, common data structures including red-black trees and binary heaps, is now stabilized at v1 on JSR
#Deno and #Bun people are putting an incredible amount of work modernizing server side js.
The energy is reminding me of early day #Python - 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 #jupyter!
🚀 Deno 1.45 is released!
‣ Workspace and monorepo support
‣ Node.js compat improvements
‣ Updates to deno install
‣ deno init --lib
‣ deno vendor deprecation
‣ Standard Library stabilization
‣ V8 12.7 and TypeScript 5.5
Release notes: https://deno.com/blog/v1.45
we improved our core web vitals drastically with one simple trick💡
not using client-side rendering
(we moved our docs from docusaurus to http://lume.land)
std/crypto, extensions and utilities to the Web Crypto API, is now stabilized at v1.0.0 on JSR
I was planning to play around with #fedify but got sidetracked into learning #deno #fresh #preact #tailwindcss ...
#LogTape is a logging library for #JavaScript and #TypeScript. It provides a simple and flexible logging system that is easy to use and easy to extend. The highlights of LogTape are:
• Zero dependencies
• Designed to be used in libraries as well as apps
• Supports virtually every runtime: #Node.js, #Deno, #Bun, edge functions, and browsers
• Structured logging
• Logger categories (names) are hierarchical
• Dead simple sink (destination) interface
💖 now can't sleep cause saw https://github.com/dahlia/fedify/
#fediverse #framework which is wonderful.
@hongminhee : we do also start to build anything #ActivityPub with #deno (incl. journalistic CMS client, public broadcaster thing, taxiteam client) and so, I work on a UI system with #fresh for all the `type`s …
PS Confs https://redaktor.me/#home
#Fedify is an #ActivityPub server framework in #TypeScript & #JavaScript. It aims to eliminate the complexity and redundant boilerplate code when building a federated server app, so that you can focus on your business logic and user experience.
The key features it provides currently are:
• Type-safe objects for Activity Vocabulary (including some vendor-specific extensions)
• #WebFinger client and server
• HTTP Signatures
• Middleware for handling webhooks
• #NodeInfo protocol
• #Node.js, #Deno, and #Bun support
• CLI toolchain for testing and debugging
If you're curious, take a look at the Fedify website! There's comprehensive docs, a demo, a tutorial, example code, and more:
Fedify is an #ActivityPub server framework in #TypeScript & #JavaScript. It aims to eliminate the complexity and redundant boilerplate code when building a federated server app, so that you can focus on your business logic and user experience.
The key features it provides currently are:
- Type-safe objects for Activity Vocabulary (including some vendor-specific extensions)
- #WebFinger client and server
- HTTP Signatures & Linked Data Signatures & Object Integrity Proofs
- Middleware for handling webhooks
- #NodeInfo protocol
- #Node.js, #Deno, and #Bun support
- CLI toolchain for testing and debugging
If you're curious, take a look at the #Fedify website! There's comprehensive docs, a demo, a tutorial, example code, and more:
When it comes to learning #TypeScript, one of my favorite tools is Deno's #Jupyter kernel (https://lnkd.in/g2GPc_gM). It makes writing quick examples easy and accessible. I'll need to eventually write up how this all works, but the combination of #Deno, Jupyter, #Tailscale, and Juno Connect (an iOS/iPadOS Jupyter client) have given me the ability to play around on the go.
From: @deno_land
https://fosstodon.org/@deno_land/112689533676963032
curious about TypeScript, but haven't had time to learn?
check out our new #Deno Bites series — short, digestible lessons to learn #TypeScript 👇️
When one of our customers reported that the #Deno language server was slow, we launched an investigation that resulted in a 10x speed improvement.
Here's what happened 👇️
Today I found a bug in #Deno's node:crypto compatibility layer…
Accessing the #deno V8 Inspector via #WSL 2 with Google Chrome running on Windows was a bit of a challenge.
In Linux:
```
deno run --inspect-brk=0.0.0.0:9229 --allow-net ...
```
In Windows, via Admin mode #PowerShell :
```
netsh interface portproxy add v4tov4 listenport=9229 listenaddress=0.0.0.0 connectport=9229 connectaddress=(wsl hostname -I)
```





























