Hello, I'm an open source software engineer in my late 30s living in #Seoul, #Korea, and an avid advocate of #FLOSS and the #fediverse.
I'm the creator of @fedify, an #ActivityPub server framework in #TypeScript, @hollo, an ActivityPub-enabled microblogging software for single users, and @botkit, a simple ActivityPub bot framework.
We're pleased to announce the release of Upyo 0.2.0. Upyo is a cross-runtime email library that provides a unified, type-safe API for sending emails across Node.js, Deno, Bun, and edge functions. With support for multiple email providers through interchangeable transports—including SMTP, Mailgun, SendGrid, and now Amazon SES—Upyo enables seamless switching between email services without code changes.
This release introduces two significant additions: Amazon SES transport support and comprehensive OpenTelemetry integration. These features expand transport options and add production-ready observability capabilities to the library.
Amazon SES Transport
Upyo now includes support for Amazon SES through the new @upyo/ses package. This transport provides AWS Signature v4 authentication with zero external dependencies, maintaining Upyo's commitment to cross-runtime compatibility. The implementation supports both AWS access key credentials and session-based authentication for temporary credentials.
import { SesTransport } from "@upyo/ses";import { createMessage } from "@upyo/core";const transport = new SesTransport({ authentication: { type: "credentials", accessKeyId: process.env.AWS_ACCESS_KEY_ID!, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!, }, region: "us-east-1",});const receipt = await transport.send(createMessage({ from: "sender@example.com", to: "recipient@example.com", subject: "Hello from SES", content: { text: "Sent via Amazon SES!" },}));
The SES transport includes regional configuration support, comprehensive IAM role integration through external credential providers, and efficient bulk sending capabilities. Like other Upyo transports, it provides the same consistent interface while leveraging Amazon's proven email infrastructure for reliable delivery at scale.
Configuration sets, message tagging, and rich content features are fully supported, allowing teams to take advantage of SES's advanced tracking and analytics capabilities. The transport handles AWS authentication complexity while maintaining the simple, unified API that Upyo users expect.
import { createOpenTelemetryTransport } from "@upyo/opentelemetry";import { SmtpTransport } from "@upyo/smtp";// Wrap any existing transport with observabilityconst transport = createOpenTelemetryTransport( new SmtpTransport({ host: "smtp.example.com" }), { serviceName: "email-service", metrics: { enabled: true }, tracing: { enabled: true }, });// Use exactly as before - observability is automaticawait transport.send(message);
The OpenTelemetry transport automatically instruments email operations with traces and metrics, tracking delivery rates, latency distributions, and categorizing failures by type. It integrates seamlessly with existing OpenTelemetry infrastructure, supporting both global providers and custom configurations for different deployment scenarios.
Performance optimization features include configurable sampling rates for traces and metrics, ensuring minimal overhead in high-throughput environments. The transport provides automatic resource management through Disposable/AsyncDisposable support and includes specialized monitoring capabilities for bulk email operations, making it suitable for production workloads of any scale.
Getting Involved
We're continuously working to improve Upyo and would love to hear from the community. Whether you're trying out the new Amazon SES transport, implementing observability with OpenTelemetry, or using any of our existing transports, your feedback helps shape the library's future.
If you encounter issues, have feature requests, or want to contribute, please visit our GitHub repository. We also welcome discussions about new transport implementations, documentation improvements, and integration experiences across different runtime environments.
We're pleased to announce the release of Upyo 0.2.0. Upyo is a cross-runtime email library that provides a unified, type-safe API for sending emails across Node.js, Deno, Bun, and edge functions. With support for multiple email providers through interchangeable transports—including SMTP, Mailgun, SendGrid, and now Amazon SES—Upyo enables seamless switching between email services without code changes.
This release introduces two significant additions: Amazon SES transport support and comprehensive OpenTelemetry integration. These features expand transport options and add production-ready observability capabilities to the library.
Amazon SES Transport
Upyo now includes support for Amazon SES through the new @upyo/ses package. This transport provides AWS Signature v4 authentication with zero external dependencies, maintaining Upyo's commitment to cross-runtime compatibility. The implementation supports both AWS access key credentials and session-based authentication for temporary credentials.
import { SesTransport } from "@upyo/ses";import { createMessage } from "@upyo/core";const transport = new SesTransport({ authentication: { type: "credentials", accessKeyId: process.env.AWS_ACCESS_KEY_ID!, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!, }, region: "us-east-1",});const receipt = await transport.send(createMessage({ from: "sender@example.com", to: "recipient@example.com", subject: "Hello from SES", content: { text: "Sent via Amazon SES!" },}));
The SES transport includes regional configuration support, comprehensive IAM role integration through external credential providers, and efficient bulk sending capabilities. Like other Upyo transports, it provides the same consistent interface while leveraging Amazon's proven email infrastructure for reliable delivery at scale.
Configuration sets, message tagging, and rich content features are fully supported, allowing teams to take advantage of SES's advanced tracking and analytics capabilities. The transport handles AWS authentication complexity while maintaining the simple, unified API that Upyo users expect.
import { createOpenTelemetryTransport } from "@upyo/opentelemetry";import { SmtpTransport } from "@upyo/smtp";// Wrap any existing transport with observabilityconst transport = createOpenTelemetryTransport( new SmtpTransport({ host: "smtp.example.com" }), { serviceName: "email-service", metrics: { enabled: true }, tracing: { enabled: true }, });// Use exactly as before - observability is automaticawait transport.send(message);
The OpenTelemetry transport automatically instruments email operations with traces and metrics, tracking delivery rates, latency distributions, and categorizing failures by type. It integrates seamlessly with existing OpenTelemetry infrastructure, supporting both global providers and custom configurations for different deployment scenarios.
Performance optimization features include configurable sampling rates for traces and metrics, ensuring minimal overhead in high-throughput environments. The transport provides automatic resource management through Disposable/AsyncDisposable support and includes specialized monitoring capabilities for bulk email operations, making it suitable for production workloads of any scale.
Getting Involved
We're continuously working to improve Upyo and would love to hear from the community. Whether you're trying out the new Amazon SES transport, implementing observability with OpenTelemetry, or using any of our existing transports, your feedback helps shape the library's future.
If you encounter issues, have feature requests, or want to contribute, please visit our GitHub repository. We also welcome discussions about new transport implementations, documentation improvements, and integration experiences across different runtime environments.
사실 ARPANET 이전에도 미국 전역은 물리적인 회선으로 연결되어 있었고, 터미널을 통한 소셜 네트워킹이 활발했다. 나도 ARPANET을 미국 지도 위에 그려진 그래프로 처음 접했고, 최초로 컴퓨터를 연결한 기술이라고만 생각했다. 이 글에서 가장 인상적인 대목: "초기 시분할 네트워크를 무시하면 지난 50년간 미국의 디지털 문화가 어떻게 발전했는가에 대한 이해가 빈곤해지며, 모든 업적을 건국의 아버지들이 가진 천재성으로 돌리는 '실리콘 밸리 신화'에 여지를 준다" https://twobithistory.org/2021/02/07/arpanet.html
Sun 17 August, the final day of PyCon Korea at Dongguk University! Brilliant sessions, fun tutorials, and the Python community awaits you. Long live Python 🐍
잘 알려지지 않은 사실이지만, 애플의 앱 스토어는 스토어프론트 UI는 꽤 많이 변했지만 그 안쪽은 그렇게 변하지 않았습니다. 여전히 앱스토어의 결제 관리를 위해 맥에서는 Music 앱을 사용할 필요가 있는 것이 이를 여실히 드러냅니다. 사실 사태는 좀 더 심각해서, 앱을 다운로드 받거나 업데이트하는 것을 '구입'으로 처리하던 WebObject 기반의 iTunes Music Store 시절의 시스템을 수선해 사용하던 초창기 앱 스토어 때와 달라진 게 없습니다. …
Been reading up on the #ActivityPub spec as I design my plan out. There's a lot of really nice proposals out there I'm interested in considering implementing. Also been pretty happy with the @fedify library it's pretty awesome for hitting the ground running.
@andypiper I'm not a server-side person, so there's really not much there - I started with the #fedify tutorial, enough to create one account, and an instance with a nodeinfo, added the mastodon api instance info that's in the screenshot, and web pages that display links and a resume from hardcoded data and embedded static json. I'm just dabbling, but I'd like to see a fediverse portfolio/resume site, like linkedin but not linkedin.
@paul I should also just point you at https://browser.pub/ and mention that fedify (npm install fedify) has a great CLI for some of the testing too. Good luck!
@paul I should also just point you at https://browser.pub/ and mention that fedify (npm install fedify) has a great CLI for some of the testing too. Good luck!
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.
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.