洪 民憙 (Hong Minhee)'s avatar

洪 民憙 (Hong Minhee)

@hongminhee@hollo.social · 955 following · 1271 followers

An intersectionalist, feminist, and socialist guy living in Seoul (UTC+09:00). @tokolovesme's spouse. Who's behind @fedify, @hollo, and @botkit. Write some free software in , , , & . They/them.

서울에 사는 交叉女性主義者이자 社會主義者. 金剛兔(@tokolovesme)의 配偶者. @fedify, @hollo, @botkit 메인테이너. , , , 等으로 自由 소프트웨어 만듦.

()

洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@hongminhee@hollo.social

Hello, I'm an open source software engineer in my late 30s living in , , and an avid advocate of and the .

I'm the creator of @fedify, an server framework in , @hollo, an ActivityPub-enabled microblogging software for single users, and @botkit, a simple ActivityPub bot framework.

I'm also very interested in East Asian languages (so-called ) and . Feel free to talk to me in , (), or (), or even in Literary Chinese (, )!

洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@hongminhee@hollo.social · Reply to 洪 民憙 (Hong Minhee)'s post

安寧(안녕)하세요, 저는 서울에 살고 있는 30() 後半(후반) 오픈 소스 소프트웨어 엔지니어이며, 自由(자유)·오픈 소스 소프트웨어와 聯合宇宙(연합우주)(fediverse)의 熱烈(열렬)支持者(지지자)입니다.

저는 TypeScript() ActivityPub 서버 프레임워크인 @fedify 프로젝트와 싱글 유저() ActivityPub 마이크로블로그인 @hollo 프로젝트와 ActivityPub 봇 프레임워크인 @botkit 프로젝트의 製作者(제작자)이기도 합니다.

저는 ()아시아 言語(언어)(이른바 )와 유니코드에도 關心(관심)이 많습니다. 聯合宇宙(연합우주)에서는 國漢文混用體(국한문 혼용체)를 쓰고 있어요! 제게 韓國語(한국어)英語(영어), 日本語(일본어)로 말을 걸어주세요. (아니면, 漢文(한문)으로도!)

洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@hongminhee@hollo.social · Reply to 洪 民憙 (Hong Minhee)'s post

こんにちは、私はソウルに住んでいる30代後半のオープンソースソフトウェアエンジニアで、自由・オープンソースソフトウェアとフェディバースの熱烈な支持者です。名前は洪 民憙ホン・ミンヒです。

私はTypeScript用のActivityPubサーバーフレームワークである「@fedify」と、ActivityPubをサポートする1人用マイクロブログである 「@hollo」と、ActivityPubのボットを作成する為のシンプルなフレームワークである「@botkit」の作者でもあります。

私は東アジア言語(いわゆるCJK)とUnicodeにも興味が多いです。日本語、英語、韓国語で話しかけてください。(または、漢文でも!)

Open Web Advocacy's avatar
Open Web Advocacy

@owa@mastodon.social

🇯🇵 Japan has officially banned Apple’s iOS browser engine restrictions.

Starting Dec 2025, iPhones must allow real Firefox, Chrome, Opera, Brave, Vivaldi and others to run their own engines, just like on desktop.

This is a major step forward for browser competition.

Full analysis here:

/1
open-web-advocacy.org/blog/jap

Fedify: ActivityPub server framework's avatar
Fedify: ActivityPub server framework

@fedify@hollo.social

We're thrilled to announce Fedify 1.8.1, a mega release made possible through the incredible efforts of contributors from South Korea's (Open Source Contribution Academy). This release marks a significant milestone in 's development, bringing major architectural changes, new packages, and numerous enhancements across the board.

Note: Version 1.8.0 was skipped due to a versioning error.

🎉 Major Milestone: Monorepo Architecture

Fedify has been restructured as a , consolidating all packages into a single repository with unified versioning. This change streamlines development and ensures all packages are released together with consistent version numbers.

Consolidated Packages

All existing Fedify packages now live under one roof:

  • @fedify/fedify — Main library
  • @fedify/cli — CLI toolchain
  • @fedify/amqp — AMQP/RabbitMQ driver
  • @fedify/express — Express integration
  • @fedify/h3 — h3 framework integration
  • @fedify/postgres — PostgreSQL drivers
  • @fedify/redis — Redis drivers

🆕 New Packages

This release introduces four new packages to the Fedify ecosystem:

  • @fedify/elysiaElysia integration for Bun-powered applications
  • @fedify/nestjsNestJS integration for enterprise Node.js apps
  • @fedify/sqlite — SQLite driver compatible with Bun, Deno, and Node.js
  • @fedify/testing — Testing utilities with mock Federation and Context classes

@fedify/fedify

Custom Collection Dispatchers

A powerful new feature that allows you to create custom collections beyond the standard ActivityPub collections. This enables implementation of domain-specific collections while maintaining federation compatibility.

Contributors: ChanHaeng Lee [#310, #332]

  • Added comprehensive types and interfaces for custom collection handling
  • New methods on Federatable interface: setCollectionDispatcher() and setOrderedCollectionDispatcher()
  • Added getCollectionUri() method to the Context interface
  • Full support for paginated custom collections

Compare-and-Swap (CAS) Support for KV Stores

Key–value stores now optionally support CAS operations for atomic updates, enabling optimistic locking and preventing lost updates in concurrent environments.

  • Added optional KvStore.cas() method
  • Implemented in MemoryKvStore and DenoKvStore
  • Useful for implementing distributed locks and counters

Fediverse Handle Utilities

New utility functions make working with handles more convenient.

Contributors: ChanHaeng Lee [#278]

  • parseFediverseHandle() — Parse handles into components
  • isFediverseHandle() — Validate handle format
  • toAcctUrl() — Convert handles to URLs
  • FediverseHandle interface for type safety

Enhanced HTTP Request APIs

Contributors: Lee ByeongJun [#248, #281], Hyunchae Kim [#51, #315]

  • Added LookupWebFingerOptions.maxRedirection option for controlling redirect behavior
  • APIs now support AbortSignal for request cancellation
  • New DocumentLoaderOptions interface
  • Added signal options to LookupObjectOptions, LookupWebFingerOptions, and DoubleKnockOptions

@fedify/cli

New Commands and Enhancements

The CLI has received significant improvements thanks to our OSSCA contributors:

fedify webfinger Command

Contributors: ChanHaeng Lee [#260, #278], KeunHyeong Park [#311, #328]

Look up WebFinger information for any fediverse resource:

  • Supports handles (@user@server) and URLs
  • --user-agent option for custom User-Agent headers
  • --allow-private-address for local testing
  • --max-redirection to control redirect following

fedify nodeinfo Command

Contributors: Hyeonseo Kim [#267, #331, #168, #282, #304]

Replaces the deprecated fedify node command with improved terminal rendering.

Enhanced fedify lookup Command

Contributors: Jiwon Kwon [#169, #348, #261, #321]

  • Terminal-specific image display for Kitty, WezTerm, Konsole, Warp, Wayst, st, and iTerm
  • -o/--output option to save results to files

Improved fedify inbox Command

Contributors: Hasang Cho [#262, #285], Jang Hanarae [#191, #342]

  • --actor-name and --actor-summary options for customizing temporary actors
  • Now displays object types contained in activities

fedify init --dry-run

Contributors: Lee ByeongJun [#263, #298]

Preview project initialization without creating files.

Better Terminal Support

Contributors: Cho Hasang [#257, #341]

Correctly handles color output based on TTY detection and NO_COLOR environment variable.

@fedify/elysia

Contributors: Hyeonseo Kim [#286, #339]

New Elysia integration brings Fedify to Bun-powered applications with a simple plugin interface:

import { Elysia } from "elysia";
import { fedify } from "@fedify/elysia";

const app = new Elysia()
  .use(fedify(federation, { /* options */ }))
  .listen(3000);

@fedify/nestjs

Contributors: Jaeyeol Lee [#269, #309]

Enterprise-ready NestJS integration with dependency injection support:

import { FedifyModule } from "@fedify/nestjs";

@Module({
  imports: [
    FedifyModule.forRoot({
      kv: new MemoryKvStore(),
      queue: new InProcessMessageQueue(),
      origin: "https://example.com",
    }),
  ],
})
export class AppModule {}

@fedify/sqlite

Contributors: An Subin [#274, #318]

SqliteKvStore implementation compatible across all major JavaScript runtimes:

import { SqliteKvStore } from "@fedify/sqlite";

const kv = new SqliteKvStore("./fedify.db");

@fedify/testing

Contributors: Lee ByeongJun [#197, #283]

Comprehensive testing utilities with mocking support for Fedify applications:

import { MockFederation, MockContext } from "@fedify/testing";

const mockFederation = new MockFederation();
const mockContext = new MockContext();

// Track sent activities with full metadata
// Support custom path registration
// Multiple activity type listeners

🙏 Acknowledgments

This release represents an extraordinary community effort, particularly from the participants of South Korea's OSSCA (Open Source Contribution Academy) (Note: page in Korean). We extend our heartfelt thanks to all contributors:

Core Contributors

  • ChanHaeng Lee (@2chanhaeng) — Custom collections, fediverse handles, WebFinger command
  • Lee ByeongJun (@joonnot) — WebFinger redirections, dry-run, testing utilities
  • Hyunchae Kim (@r4bb1t) — AbortSignal support
  • Hyeonseo Kim (@gaebalgom) — Elysia integration, nodeinfo command
  • Jaeyeol Lee (@kodingwarrior) — NestJS integration
  • An Subin (@nyeong) — SQLite driver
  • Jiwon Kwon (@z9mb1) — Terminal image display, output options
  • Hasang Cho (@crohasang) — Color output handling, actor customization
  • Jang Hanarae (@menele) — Activity object type display
  • KeunHyeong Park (@w8385) — WebFinger redirect options

Test Infrastructure Contributors

Your contributions have made Fedify stronger and more versatile than ever. The OSSCA program's support has been instrumental in achieving this milestone release.

Migration Guide

Updating from Previous Versions

If you're using separate Fedify packages, update all packages to version 1.8.1:

{
  "dependencies": {
    "@fedify/fedify": "^1.8.1",
    "@fedify/cli": "^1.8.1",
    "@fedify/express": "^1.8.1"
  }
}

All packages now share the same version number, simplifying dependency management.

Breaking Changes

There are no breaking changes in this release. All existing code should continue to work without modifications.

What's Next

With the monorepo structure in place and new integrations available, we're excited to continue improving Fedify's developer experience and expanding its capabilities. Stay tuned for more updates, and thank you for being part of the Fedify community!

For detailed technical information about all changes, please refer to the full changelog.


Fedify is an open-source project that helps developers build federated server applications powered by ActivityPub. Join us on GitHub or Discord to contribute or get help!

robin's avatar
robin

@robin@hackers.pub

오늘의 디버그 일기 자꾸 액펍아카데미랑 플래닛에서 요청을 보내도 씹었다 근데 액티비티 워크샵에서 수동요청 만드니까 잘 받아줬다 알고보니 액터 디스패쳐에서 inbox를 http로 던져줘서 그런 거였다...

"inbox": "http://~
ALT text details"inbox": "http://~
洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@hongminhee@hackers.pub

그나저나 Hackers' Pub 마스코트 고양이에 아직 이름이 없는데, 어떤 이름을 지어 주면 좋을까요? 🤔

네 가지 표정의 Hackers' Pub 마스코트 고양이
ALT text details네 가지 표정의 Hackers' Pub 마스코트 고양이
Evan Prodromou's avatar
Evan Prodromou

@evan@cosocial.ca · Reply to 洪 民憙 (Hong Minhee)'s post

@hongminhee We have the TPAC event in November. A lot of people interested in ActivityPub will be there.

w3.org/events/tpac/2025/tpac-2

洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@hongminhee@hollo.social · Reply to 洪 民憙 (Hong Minhee)'s post

東アジアのフェディバースカンファレンスを実現するなら、以下のドメインを全部登録したい:

  • fedicon.asia
  • 聯合宇宙會議.asia
  • 연합우주회의.asia
  • フェディバース会議.asia
  • 聯邦宇宙會議.asia
  • 联邦宇宙会议.asia

https://mstdn.y-zu.org/@Yohei_Zuho/114979530344820491

もちもちずきん :teto_zuho: 🍆's avatar
もちもちずきん :teto_zuho: 🍆

@Yohei_Zuho@mstdn.y-zu.org

FediCon.Asiaみたいにやったら面白そう

Jeff Sikes's avatar
Jeff Sikes

@box464@mastodon.social

Lots of talk about Ghost today, and rightly so, but don’t forget that a little open source framework @fedify made the ActivityPub plugin possible.

Support open source!

ghost.org/changelog/6/

Fedify: ActivityPub server framework's avatar
Fedify: ActivityPub server framework

@fedify@hollo.social

We'd like to recognize some excellent contributions from our (Open Source Contribution Academy) participants who have been working on .

@gaebalgom contributed PR #339, which introduces the @fedify/elysia package to provide Elysia integration for Fedify. This work addresses issue #286 by creating a plugin that enables developers using and to integrate Fedify's capabilities into their applications. The contribution includes the core integration module, documentation, examples, and proper monorepo configuration, making Fedify accessible to the Elysia community.

@r4bb1t submitted PR #315, implementing comprehensive AbortSignal support across multiple APIs to resolve issue #51. This contribution adds request cancellation capabilities not only to lookupWebFinger() but also to lookupObject(), DocumentLoader, and the HTTP signature authentication flow (doubleKnock()), allowing developers to properly handle timeouts and abort ongoing requests throughout the entire request chain. The implementation includes extensive test coverage for cancellation scenarios across all affected components and lays the groundwork for adding --timeout options to various CLI commands like fedify lookup, fedify webfinger, and fedify nodeinfo, making federated applications more robust and responsive.

@ooheunda addressed a testing infrastructure issue with PR #350, fixing a race condition in PostgreSQL message queue tests that was causing intermittent failures (issue #346). By adding explicit initialization before concurrent message queue listeners, this fix prevents table creation conflicts that were affecting test reliability, ensuring more consistent PR testing for all contributors.

@songbirds provided two test stability improvements with PR #344 and PR #347. The first PR adds skip guards to RedisKvStore tests as a workaround for a known Bun runtime issue, keeping the test suite functional while awaiting an upstream fix. The second PR resolves a race condition in the code generation process by randomizing output filenames, preventing conflicts during parallel test execution. These contributions help maintain a stable testing environment for the project.

Thank you all for your contributions to Fedify. Your work helps make federated social networking more accessible to developers.

洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@hongminhee@hollo.social · Reply to 洪 民憙 (Hong Minhee)'s post

이름은 「聯合宇宙會議(연합우주회의)」 어떨까?

洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@hongminhee@hollo.social · Reply to 洪 民憙 (Hong Minhee)'s post

来年あたり、日本、韓国、中国、台湾、香港とかのフェディバース(fediverse)開発者とサーバー運営者を集めてカンファレンス開いたら面白そう。カナダのFediConを見て羨ましくなったんだ。

洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@hongminhee@hollo.social

來年(내년) 즈음에 韓國(한국)·中國(중국)·日本(일본)·臺灣(타이완)·香港(샹강) ()聯合宇宙(연합우주)(fediverse) 開發者(개발자) 및 서버 運營陣(운영진)들 모아서 컨퍼런스 하나 해도 좋을 것 같다. 캐나다의 FediCon 보고 부러워서 든 생각.

Building ActivityPub's avatar
Building ActivityPub

@index@activitypub.ghost.org

It's finally here!

Ghost 6.0 is the biggest update we've ever made — and it includes federated publishing for everyone, with ActivityPub ❤️

We also shipped a brand new native analytics sweet, and passed a pretty cool milestone. Independent publishers have now earned over $100M using Ghost.

https://ghost.org/6/

洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@hongminhee@hollo.social · Reply to Esurio's post

@esurio1673 ありがとうございます!🥳

洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@hongminhee@hollo.social · Reply to wwj's post

@z9mb1 Thanks! 🥰

洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@hongminhee@hollo.social · Reply to Juntai Park's post

@arkjun @tokolovesme 감사합니다…!!

洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@hongminhee@hollo.social · Reply to 十八子's post

@eighteen_child 感謝(감사)합니다…!

洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@hongminhee@hollo.social · Reply to 월퍄's post

@wolffia 感謝(감사)합니다!

洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@hongminhee@hollo.social · Reply to 땡상어 :spinny_cat_gay:'s post

@thx 謝謝你!

洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@hongminhee@hollo.social

生日(생일) 膳物(선물)金剛兔(금강토)(@tokolovesme)한테 Nintendo Switch 2 받았다!

洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@hongminhee@hackers.pub

서울에서 10–15명 정도 모여서 회의 겸 작업할 만한 공간 어디 없을까요? 토즈를 이용해 볼까 했는데 8시간 정도 예약하려면 너무 비싸더라고요.

유리🏴🌱🍕 :heart_nb: :heart_trans:'s avatar
유리🏴🌱🍕 :heart_nb: :heart_trans:

@DemigirlA@planet.moe

docs.google.com/forms/d/e/1FAI

하남시 "오소리" 유해동물 지정 건의에
대한 반대 시민 청원 캠페인입니다

오브젝티프's avatar
오브젝티프

@objectif@mitir.social

TIL: '시조'의 '시'는 '시'가 아니다.

시조는 한국/한국어에서 제법 전통 있는 정형시의 양식이다. 그런데…

## 詩가 아님

시조의 한자 표기는 時調이다. 노래 시(詩)가 아니라 때 시(時).

문헌에는 신광수(1712-1775)의 문집에 時調로 처음 등장, 이후로도 時調로 표기된다.

## 정확한 어원은 모름

시조가 시절가조(時節歌調)의 준말이라고 당당하게 주장하는 사람이 많다. 엉터리다.

첫째, 풀이 자체가 아무 근거가 없다. 時節歌調 자체가 조선 시대에 전혀 문증되지 않는다. 한국고전종합DB 전체를 뒤져도 없다. 수두룩해야 하지 않나? 시조는 당대의 케이팝이었는데?

둘째, 설령 그렇게 풀이할 수 있더라도 그게 '준말'이라는 근거는 전혀 되지 못한다. 예를 들어 '대왕'을 '위대한 제왕'으로 풀이할 수 있다고 해서, '세종대왕'은 '세종위대제왕'의 '준말'이라고 할 수 있는가? 누가 그런 주장을 받아들이겠는가?

진짜 준말이라면 시절가조와 시조를 병기한 예 하나쯤은 있을 것 아닌가? 왜 시절가조 자체가 문헌에 없는가?

있는 건 '시절가' 표기 한 건뿐이다. 정조 때 문인 이학규의 글을 엮은 〈낙하생집〉의 주석 한 줄이다. "시조의 또다른 이름은 시절가."(旹調。亦名旹節歌。) [1] '시절가조'가 아니라 '시절가'다.

심지어 중앙 일간지 기사에서도, 석북집에 나온다며 "시절가조라는 말은 이세춘이 만들었다" 같은 대담한 주장을 한다. [2] 석북은 '시조의 장단을 배열한 것은 이세춘'(一般時調排長短。來自長安李世春。 [3])이라고 했지, 시절가조라는 용어나 시조라는 용어를 창시했다고 한 적이 없다.

결론: 시조는 연원이 불분명하다. 누가 만든 말인지도 모른다. 그러나 많은 사람들에게 오랫동안 사랑받아서 장르가 되었다. 그러니까 멋있는 것임.

[1]
https://db.itkc.or.kr/dir/item?itemId=MO#/dir/node?dataId=ITKC_MO_0604A_0180_010_0010
[2]
https://www.khan.co.kr/article/201407011026461
[3]
https://db.itkc.or.kr/dir/item?itemId=MO#/dir/node?dataId=ITKC_MO_0537A_0110_010_0350

なかやばし's avatar
なかやばし

@eniehack@mstdn.sublimer.me

マルコフ連鎖bot、botkitに載せるでもいいな

momoseijin🍑's avatar
momoseijin🍑

@momoseijin@real-escape.jp

botKitよさげ

洪 民憙 (Hong Minhee)'s avatar
洪 民憙 (Hong Minhee)

@hongminhee@hollo.social · Reply to 洪 民憙 (Hong Minhee)'s post

BotKit by Fedify:誰でも簡単に作れるActivityPubボット

本日OSC 2025京都で開催された「Fediverseのつくりかた 〜開発者・管理者たちの現場から〜」セミナーで発表した「BotKit by Fedify:誰でも簡単に作れるActivityPubボット」の発表資料を共有します。ご清聴ありがとうございました。

もちもちずきん :teto_zuho: 🍆's avatar
もちもちずきん :teto_zuho: 🍆

@Yohei_Zuho@mstdn.y-zu.org

【OSC京都で :fediverse: に関連したセミナーを開催します!】
2025年8月3日(日)の13:00〜 オープンソースカンファレンス京都 で「分散型SNSユーザー有志」として、

「Fediverseのつくりかた 〜開発者・管理者たちの現場から〜」

と題してセミナー講演を行います!
登壇者として私のほか、
:fedibird1: 運営者の @noellabo さん
:fedify: :hollo: 等の開発者である @hongminhee さん
京都のMastodon地域サーバー 管理人の @7_nana さん
をお呼びして開催します。
ActivityPubを中心としたFediverseの今が知れるセミナーです。ぜひご参加ください!

会場:KRP ルーム2B(2階)
日時:2025年8月3日(日)13:00〜
参加費:無料
セミナー詳細:
event.ospn.jp/osc2025-kyoto/se

****'s avatar
****

@4sterisk@mi.tomadoi.com

botほしい→なに作るー?→なにも思いつかない​:blobcatpnd_miage:

🥞 おかゆりぞっと :blobcatdroolreach:'s avatar
🥞 おかゆりぞっと :blobcatdroolreach:

@okayurisotto@misskey.okayurisotto.net

👀

BotKitを使ってActivityPubボットを作ってみよう
https://zenn.dev/hongminhee/articles/6e4c5ab155305f

:trash_kur0den:くろでん:irai_houki_tyuu:'s avatar
:trash_kur0den:くろでん:irai_houki_tyuu:

@kur0den0010@chpk.kur0den.net

そんなあなたにBotKit

RE:
https://misskey.okayurisotto.net/notes/aayr3wkxus

🥞 おかゆりぞっと :blobcatdroolreach:'s avatar
🥞 おかゆりぞっと :blobcatdroolreach:

@okayurisotto@misskey.okayurisotto.net

Botを動かすためだけにMisskeyやらMastodonを建てるの、オーバースペックな感じがしないでもないので、ActivityPubを直接喋るようなBotを作ってみたい(と思ってから数年が経過している)

← Newer
Older →