洪 民憙 (Hong Minhee)'s avatar

洪 民憙 (Hong Minhee)

@hongminhee@hollo.social · 923 following · 1194 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にも興味が多いです。日本語、英語、韓国語で話しかけてください。(または、漢文でも!)

just small circles 🕊's avatar
just small circles 🕊

@smallcircles@social.coop

@maxd @hongminhee

What may be interesting is which is like but then oriented towards event-driven architectures. More appropriate for message passing protocols like .

asyncapi.com/en

just small circles 🕊's avatar
just small circles 🕊

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

@hongminhee @thisismissem @PuercoPop

For your information, I recently opened an issue to track current C2S implementations.

This is the list thus far:



.pub






codeberg.org/fediverse/delight

Client-side is a well-known attempt to implement it:

github.com/andstatus/andstatus

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

@hongminhee@hollo.social

@maxd Thank you for sharing these important concerns and that article. You've raised valid points about GraphQL that definitely deserve careful consideration.

I completely agree that authorization and rate limiting present significant challenges in GraphQL implementations. The article you shared highlights these pain points well, and they're issues I've also witnessed in production environments.

That said, I'm still drawn to GraphQL + Relay because of the tremendous productivity benefits they offer on the client side. In my experience, features like declarative data fetching, automatic request batching, optimistic UI updates, and built-in pagination handling can dramatically reduce client-side complexity for certain applications.

Marc-Andre Giroux's thoughtful response article Why, after 8 years, I still like GraphQL sometimes in the right context acknowledges these challenges while offering a more nuanced view. As he points out, persisted queries are practically essential for addressing security and performance concerns - they transform GraphQL from “hard mode” into something much more manageable.

You're absolutely right that for open public APIs with untrusted clients, the challenges you mentioned become significantly harder to overcome. There's a reason we see fewer public GraphQL APIs compared to REST/OpenAPI ones.

I'm still learning and exploring this space myself, so I really appreciate your perspective. I think ultimately it comes down to carefully weighing these tradeoffs based on the specific context—the nature of the clients, team expertise, and data access patterns all factor into whether GraphQL's client-side benefits justify the server-side complexity for any given project.

Thanks again for adding this important dimension to the conversation!

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

@hongminhee@hollo.social

大器晩成(대기만성)」이란 旣得權層(기득권층)에게나 許容(허용)되는 스토리이다.

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

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

@PossiblyMax What a coincidence! When prototyping what became Fedify (codenamed FediKit then), I actually tried implementing ActivityPub in C# too, alongside TypeScript and Python.

C# posed challenges with ActivityPub's dynamic nature—the strongly typed system was harder to align with ActivityPub's flexible object structures. That's partly why I settled on TypeScript.

Thanks for the kind words!

배시클's avatar
배시클

@baesicle.bsky.social@bsky.brid.gy

민주당이 성공적으로 극우를 밀어내고 보수 자리를 차지하기를 바란다. 근데 진보 사람들한테 욕먹고 비판받는 건 걍 좀 당연하게 생각하고 감수하시길. 맨날 현실을 못 보는 이상주의자들이라고 억울해 하는데 어차피 한줌 아닌가? 한줌이라 생각하니까 전략적으로 다른 방식을 취한 게 아닌가? 한줌 사람들은 이상을 추구하게 냅두시고 전략대로 정치 무관심층 공략이나 콘크리트 부수는 데 에너지를 쓰기 바람.

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

@hongminhee@hollo.social

@maxd Here's why:

https://hollo.social/@hongminhee/0196cdba-8ce9-711c-80c0-d0b64c1ffa99

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

@hongminhee@hollo.social

@twilliability @thisismissem That's a fair point about implementation complexity! GraphQL backends can indeed get complex, especially with deeply nested queries.

Regarding REST standardization—it's actually a great question. We could certainly create a more standardized REST API with OpenAPI/Swagger specs for code generation and type safety. This would be simpler to implement on the server side and still provide many benefits.

The reason I'm drawn to GraphQL + Relay is the client-side developer experience, particularly:

  1. Declarative data fetching—components specify exactly what data they need
  2. Automatic request batching and deduplication
  3. Optimistic UI updates and client-side cache management
  4. Built-in pagination handling with cursor-based connections

These features dramatically reduce client-side boilerplate and edge cases when building complex social UIs.

I think the real question is whether the implementation complexity is worth the developer experience gains. For large-scale applications with many different views of the same data, I believe it often is. But for smaller instances or simpler clients, maybe not.

I'm actually not wedded to GraphQL specifically—I'm more interested in finding a standardized client API that's both ergonomic and has good tooling support. What do you think would be the most pragmatic approach?

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

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

@PuercoPop @thisismissem You raise a really good point. You're right that different types of applications have different needs, and a one-size-fits-all approach probably isn't ideal.

I think this actually aligns with what I was considering—not a universal API for the entire fediverse, but rather domain-specific standardized APIs that share common patterns where it makes sense.

For example, we might have:

  • A standardized GraphQL API for microblogging platforms (Mastodon, Pleroma, Misskey)
  • A different standardized API for discussion/forum platforms (Lemmy, Mbin, PieFed)
  • Yet another for media-centric platforms (PeerTube, Pixelfed)

Each domain would have APIs optimized for their specific use cases, but they could share common patterns, authentication methods, and even some base types.

This approach would still give us the benefits of standardization within each domain (better tooling, consistent developer experience) while acknowledging the fundamental differences between these application types.

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

@hongminhee@hollo.social

@twilliability @thisismissem That's a fair point about implementation complexity! GraphQL backends can indeed get complex, especially with deeply nested queries.

Regarding REST standardization—it's actually a great question. We could certainly create a more standardized REST API with OpenAPI/Swagger specs for code generation and type safety. This would be simpler to implement on the server side and still provide many benefits.

The reason I'm drawn to GraphQL + Relay is the client-side developer experience, particularly:

  1. Declarative data fetching—components specify exactly what data they need
  2. Automatic request batching and deduplication
  3. Optimistic UI updates and client-side cache management
  4. Built-in pagination handling with cursor-based connections

These features dramatically reduce client-side boilerplate and edge cases when building complex social UIs.

I think the real question is whether the implementation complexity is worth the developer experience gains. For large-scale applications with many different views of the same data, I believe it often is. But for smaller instances or simpler clients, maybe not.

I'm actually not wedded to GraphQL specifically—I'm more interested in finding a standardized client API that's both ergonomic and has good tooling support. What do you think would be the most pragmatic approach?

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

@hongminhee@hollo.social · Reply to Emelia 👸🏻's post

@thisismissem You're right that C2S doesn't provide efficient ways to fetch common app views like chronological feeds or pending follow requests. That's exactly why I think we need something better designed for client use cases.

Regarding GraphQL complexity—that's a valid concern. I've also worked with GraphQL in production, and security, performance, and complexity management are real challenges. However:

  1. We could define a standard schema with best practices built-in
  2. Many of these challenges have established patterns now (depth limiting, persisted queries, etc.)
  3. Server implementations could share common GraphQL middleware for security

The key advantage would be that clients wouldn't need to implement the heavy processing themselves, as the server would handle the data shaping via resolvers.

As for SPARQL—interesting alternative! It does have performance challenges as you mentioned. My thinking is that GraphQL has much wider adoption and tooling, which might make it easier for developers to work with.

What I'm really seeking is something that combines ActivityPub's federation capabilities with a more client-friendly query interface. Do you have other ideas that might achieve this balance?

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

@hongminhee@hollo.social · Reply to bgl gwyng's post

@bgl 흠, 그렇군요… 그래도 일단 요주의 인물인 것 같긴 해요.

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

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

신청서 양식 마지막에 빈 입력란이 있는데 실수로 추가된 것입니다. 이벤터스에서 한 번 신청 양식을 정하면 수정할 수가 없다고 하네요. 그냥 아무 글자나 넣고 신청하시면 됩니다.

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

@hongminhee@hackers.pub

5월 24일(土) 한국 연합우주 개발자 모임(FediDev KR)에서 두 번째 스프린트 모임을 개최합니다! 장소는 뚝섬역 5번 출구쪽에 위치한 튜링의 사과(@TuringAppleDev)입니다.

참고로 스프린트 모임이란 함께 모여서 오픈 소스 코딩을 하는 자리인데, 한국 연합우주 개발자 모임의 스프린트에서는 새로운 연합우주 서비스나 앱을 개발하거나, 번역이나 문서에 기여하는 등 연합우주와 관련된 다양한 오픈 소스 활동을 모여서 함께 합니다. 지난 스프린트 모임의 기록을 스프린트 블로그(@sprints.fedidev.kr)에서 살펴보실 수 있습니다.

저는 그날 Fedify, Hollo, Hackers' Pub에 기여하시고자 하는 분들을 옆에서 도와드릴 예정입니다. Fedify, Hollo, Hackers' Pub에 기여해보고 싶었던 분들이 계시다면 모임에 참가하여 저와 함께 스프린트를 해보는 것도 좋을 것 같습니다.

이번 모임에 관심이 있으신 분은 행사 신청 페이지를 참고하시기 바랍니다.

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

@hongminhee@hollo.social

於此彼(어차피) 元來(원래) OpenAI(라고는 하지만 事實上(사실상) ClosedAI) 製品(제품)은 안 썼지만, 앞으로도 쓰지 말아야겠다.

https://www.hankyung.com/article/2025010964607

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

@hongminhee@hollo.social · Reply to Sean Tilley's post

@deadsuperhero That's a creative application idea! The concept of vehicles as actors with maintenance timelines is quite elegant.

While Fedify's current vocabulary extension capabilities are somewhat limited, the core ActivityPub concepts could still provide a useful starting point for your system.

Good luck with your project—it's the kind of innovative thinking the fediverse needs!

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

@hongminhee@hollo.social · Reply to @reiver ⊼ (Charles) :batman:'s post

@reiver Yeah, of course! The major back-end platforms have their own GraphQL sever frameworks.

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

@hongminhee@hollo.social · Reply to @reiver ⊼ (Charles) :batman:'s post

@reiver I believe it's quite common in client app programming, e.g., Flutter, Swift.

Jaeyeol Lee (a.k.a. kodingwarrior) :vim:'s avatar
Jaeyeol Lee (a.k.a. kodingwarrior) :vim:

@kodingwarrior@silicon.moe · Reply to Jaeyeol Lee (a.k.a. kodingwarrior) :vim:'s post

음. 이거 페디버스 소개하는 발표 장표에 넣어야겠다

Jaeyeol Lee (a.k.a. kodingwarrior) :vim:'s avatar
Jaeyeol Lee (a.k.a. kodingwarrior) :vim:

@kodingwarrior@silicon.moe

인간이 일개 기업에서 의도적으로 방치하고 있는 추천알고리즘에 프로그래밍되지 않으려면 탈중앙화를 해야한다...

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

@hongminhee@hollo.social

I've been thinking about client-server interactions in the . isn't widely used, and most clients rely on Mastodon-compatible APIs instead.

What if we created a new standardized API based on GraphQL + Relay for client-server communication, while keeping ActivityPub for server-to-server federation?

The Mastodon-compatible API lacks formal schema definitions for code generation and type checking, which hurts developer productivity. And ActivityPub C2S is honestly too cumbersome to use directly from client apps.

would give us type safety, efficient data fetching (only get what you need), and the ability to evolve the API without breaking clients. 's features for pagination, caching, and optimistic updates seem perfect for social apps.

Would this be valuable to our community? What challenges do you see? How might we handle backward compatibility? And should this be formalized as an FEP?

Curious what others think about this approach.

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

@hongminhee@hollo.social · Reply to Aslak Raanes's post

@aslakr That's a great suggestion! Headless CMS platforms like Sanity would be excellent candidates for ActivityPub integration. I'll definitely add Sanity to my outreach list.

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

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

@mrtoto That's actually a brilliant use case! Location check-ins and POIs map really well to ActivityPub's social model. The Place object in AS2 vocabulary was designed with this in mind.

If you ever decide to pursue this idea, I'd be happy to provide guidance on implementing it with Fedify. It's exactly the kind of specialized federation that could benefit from a structured approach.

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

@hongminhee@hollo.social · Reply to Symfony Station 🇺🇦🇨🇦🇬🇱's post

@SymfonyStation Sorry, could you elaborate your ideas? I'd like to hear!

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

@hongminhee@hollo.social · Reply to Dan Sugalski's post

@wordshaper That's an interesting idea! Actually, if you're looking to integrate with Discord, BotKit might be a better fit than Fedify directly. BotKit sits on top of Fedify but provides a much simpler API specifically designed for creating fediverse bots.

With BotKit, you could create a Discord bridge with just a few dozen lines of code—handling events like mentions and messages becomes really straightforward. The event-based model would pair nicely with Discord's bot framework.

I wouldn't call it a “horrible idea” at all! For certain communities (gaming servers, developer groups), having a Discord-fediverse bridge could be quite valuable. Though I agree it shouldn't be obligatory—more like an optional plugin for those who want that cross-platform connection.

Curious to hear if you've worked with ActivityPub before or if this would be your first foray into the fediverse world?

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

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

@sef That's an intriguing perspective! While ActivityPub was designed primarily for social networking, I appreciate you thinking outside the conventional use cases.

I do have some reservations about how well it would map to accounting needs. ActivityPub's semantics are optimized for social interactions rather than financial transactions, which have stricter requirements for consistency, atomicity, and compliance.

That said, there are some interesting parallels in the bilateral nature of transactions you mentioned. The “your asset is my liability” relationship does mirror certain social interactions.

For specialized business domains like accounting, a purpose-built protocol might ultimately serve better than adapting ActivityPub. But I wonder if there might be value in a hybrid approach—perhaps using federation for notifications and approvals around financial activities, while keeping the core transaction logic in systems designed specifically for accounting.

Have you explored any specific aspects of how ActivityPub's vocabulary might be extended to handle accounting concepts? I'd be curious to hear more about where you see the strongest fit.

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

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

@PossiblyMax Thanks for the thoughtful feedback!

The sidecar container idea is intriguing. I've considered similar approaches but haven't prioritized it yet. Fedify's core is tightly coupled with TypeScript's type system, which helps prevent many common ActivityPub implementation errors. A containerized version would need a well-defined API surface that maintains these safety guarantees while being language-agnostic.

It's definitely on my radar now though. Are you working with a specific language/framework where you'd want to use this?

As for unusual fediverse use cases—those examples are actually spot-on! Blog comments via ActivityPub is a perfect use case (similar to how Mastodon threads can function as comments). And publishing notifications about new content is exactly what Ghost is doing with their Fedify integration.

Other interesting examples include:

  • Event RSVPs that work across platforms
  • Reading lists that can be shared and followed
  • Federated webmentions for cross-site interactions

I'd love to hear if you have other specific scenarios in mind!

meissa-team's avatar
meissa-team

@meissa@social.meissa-gmbh.de

The new upcoming federation feature in forgejo will allow to follow user-activities accross the fediverse 🙂

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

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

@mariusor Hmm, yeah, Node.js (or Deno or Bun) is less straightforward to deploy to bare metals than Go or Rust, but I believe nowadays it's getting easier as now we have LXCs and some container formats they offer (e.g., Deno allows you to pack your application into a single executable).

Actually, choosing TypeScript was quite strategic for me, because I'd never written any serious software in TypeScript before Fedify—my go-to languages were Haskell and Python at that time. However, I wanted Fedify to reach out wider audience, so I decided to write it in TypeScript, which is very popular for building web applications today. It might be a wrong decision though, haha.

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

@hongminhee@hollo.social · Reply to bgl gwyng's post

@bgl Yeah, that's because we don't have things like POP3 or SMTP for fediverse. Hmm, technically we may have few similar ones, like ActivityPub C2S and Mastodon-compatible APIs, but they are quite limited (e.g., you can't quote posts using Mastodon APIs) or not adopted enough. I hope we will have C2S adopted someday though. 🤔

bgl gwyng's avatar
bgl gwyng

@bgl@hackers.pub · Reply to 洪 民憙 (Hong Minhee)'s post

@hongminhee As a developer building a service that is planned to join the fediverse, I'm still uncertain about what the timeline should look like in the fediverse app. Why do users need multiple apps with each timeline sharing some of their content? When you have multiple email accounts, then you might need a single email client that supports all of them at the same time. In which aspect fediverse differs from this situation?

← Newer
Older →