FxEmbed/FxEmbed
Fix X/Twitter and Bluesky embeds! Use multiple images, videos, polls, translations and more on Discord, Telegram and others
About FxEmbed/FxEmbed
FxEmbed/FxEmbed is an open-source project on GitHub, mainly written in TypeScript. Fix X/Twitter and Bluesky embeds! Use multiple images, videos, polls, translations and more on Discord, Telegram and others It currently holds 5,336 stars and 247 forks with 73 open issues, and was last pushed on 2026-09-24 (repository created 2022-07-13).
Project Overview
Git Homed tracks it on the Today's Trending board, currently at rank #27 with 160 new stars today.
GitHub Repository Details
README
FxEmbed 
Home of FxTwitter, FixupX, and FxBluesky
Embed videos, polls, quotes, translations, & more on Discord, Telegram, and others!
[![Crowdin][crowdinbadge]][crowdin] [![esbuild][buildbadge]][build] [![Tests][testsbadge]][tests] [![Status][statusbadge]][status] [![License][licensebadge]][license]
[build]: https://github.com/FxEmbed/FxEmbed/actions/workflows/build.yml [buildbadge]: https://github.com/FxEmbed/FxEmbed/actions/workflows/build.yml/badge.svg [tests]: https://github.com/FxEmbed/FxEmbed/actions/workflows/tests.yml [testsbadge]: https://github.com/FxEmbed/FxEmbed/actions/workflows/tests.yml/badge.svg [license]: https://github.com/FxEmbed/FxEmbed/blob/main/LICENSE.md [licensebadge]: https://img.shields.io/github/license/FxEmbed/FxEmbed [status]: https://status.fxtwitter.com [statusbadge]: https://status.fxtwitter.com/api/badge/8/uptime/720?label=Uptime%2030d [crowdinbadge]: https://badges.crowdin.net/fxtwitter/localized.svg [crowdin]: https://crowdin.com/project/fxtwitter
twitter.com: Add fx before your twitter.com link
x.com: Add fixup before your x.com link
bsky.app: Add fx before your bsky.app link
Documentation
API Reference
Self-Hosting Guide
Docker
FxEmbed is a Cloudflare Worker, so the Docker image runs the local Workers runtime through Wrangler rather than starting a plain Node.js server. The image uses node:24-bookworm-slim because Wrangler's workerd binary is glibc-linked and does not run reliably on Alpine/musl.
Before building, copy and edit the local configuration files if you need custom domains, branding, or credentials:
cp .env.example .env
cp wrangler.example.toml wrangler.toml
cp branding.example.json branding.json
Build and run with Docker Compose:
docker compose up -d --build
The worker listens on http://localhost:8787. Because FxEmbed routes by the Host header, test a specific realm like this:
curl -H "Host: fxtwitter.com" -H "User-Agent: Discordbot/2.0" "http://localhost:8787/user/status/123"
You can also open http://localhost:8787/ without a Host header to see the local realm prefixes.
Environment variables from .env are bundled during the Docker build, so rebuild the image after changing domain lists or other build-time configuration:
docker compose up -d --build
Runtime secrets such as CREDENTIAL_KEY and EXCEPTION_DISCORD_WEBHOOK can be supplied through your shell or Compose .env file. Stop the service with:
docker compose down
Licensed under the permissive MIT license. Feel free to send a pull request!
Star History
Bugs or issues?
Feel free to open an issue
Additional Credits
Mosaic Multi-image combiner by Antonio32A and improved by Syfaro, Deer Spangle, and dangered wolf
Everyone else who has contributed to the main project!
Disclaimer
Twitter, Tweet, and X are trademarks of X Corp. This project is not affiliated in any way with X Corp or Twitter.