Tumblr DMs is a self-hosted Beeper bridge for Tumblr direct messages. It runs locally, signs in with your Tumblr web session, and brings Tumblr DM conversations into Beeper.
This is not an official Tumblr API integration. Tumblr web changes may require bridge updates.
- Tumblr login through Beeper Desktop.
- Existing Tumblr DM history backfill.
- Live incoming message sync.
- Text send and receive.
- Basic media send and receive.
- Replies in existing Tumblr conversations from Beeper.
- Read receipts, redactions, contact names, and avatars.
- Backfill that preserves unread state.
- Starting brand-new Tumblr chats from Beeper may depend on deeper Desktop support.
- Group DMs may be incomplete.
- Windows release binaries are not currently published.
Install and log in to bbctl:
bbctl loginCreate a runtime directory:
export BRIDGE_DIR="$HOME/.local/share/tumblr-dms"
mkdir -p "$BRIDGE_DIR"
cd "$BRIDGE_DIR"Register the bridge with Beeper:
bbctl config --type bridgev2 -o config.yaml sh-tumblrdms
bbctl register -g -o registration.yaml sh-tumblrdmsDownload the bridge binary:
curl -L -o tumblr-dms \
https://github.com/beeper/tumblr-dms/releases/latest/download/tumblr-dms-<os-arch>
chmod +x tumblr-dmsUse one of:
darwin-arm64linux-amd64linux-arm64
Start the bridge:
./tumblr-dms -c config.yaml -r registration.yaml >> bridge.log 2>&1 &Check that it is running:
bbctl whoami | grep tumblrdmsBefore Tumblr login, the bridge should show as running. After login, it should show a connected remote.
Open Beeper Desktop, go to Settings -> Bridges -> Self-hosted Bridges, find
sh-tumblrdms, and add an account. Complete the Tumblr login flow when Beeper
opens it.
If you are using an AI coding assistant, it can do most of the setup for you. The only step you need to do yourself is the Tumblr login inside Beeper Desktop.
Suggested opening:
This connects your Tumblr DMs to Beeper. Once it is running, your Tumblr conversations show up in Beeper like your other chats, and replies you send from Beeper go back through Tumblr.
What the assistant should do:
-
Confirm Beeper Desktop is installed.
-
Confirm
bbctlis installed and logged in. If not, install it from beeper/bridge-manager and runbbctl login. -
Detect the user's OS and CPU:
- macOS Apple Silicon:
darwin-arm64 - Linux x86_64:
linux-amd64 - Linux ARM64:
linux-arm64
- macOS Apple Silicon:
-
Create the runtime directory:
export BRIDGE_DIR="$HOME/.local/share/tumblr-dms" mkdir -p "$BRIDGE_DIR" cd "$BRIDGE_DIR"
-
Register the bridge with Beeper:
bbctl config --type bridgev2 -o config.yaml sh-tumblrdms bbctl register -g -o registration.yaml sh-tumblrdms
-
Download the matching binary:
curl -L -o tumblr-dms \ https://github.com/beeper/tumblr-dms/releases/latest/download/tumblr-dms-<os-arch> chmod +x tumblr-dms
-
Start the bridge:
./tumblr-dms -c config.yaml -r registration.yaml >> bridge.log 2>&1 &
-
Confirm Beeper can see it:
bbctl whoami | grep tumblrdms
What the user should do:
- Open Beeper Desktop.
- Go to Settings -> Bridges.
- Find
sh-tumblrdmsunder Self-hosted Bridges. - Add an account.
- Complete the Tumblr login flow when Beeper opens it.
After login, the assistant can run this again:
bbctl whoami | grep tumblrdmsThe bridge should show a connected remote.
What the assistant should not do without asking:
- Delete or reset the bridge.
- Delete local runtime files.
- Share logs, configs, registrations, databases, cookies, tokens, or browser captures.
- Push commits or rewrite git history.
The runtime directory contains local state for the bridge:
config.yamlregistration.yamlsh-tumblrdms.dbbridge.log
Do not share these files publicly. They may contain account or connection details.
If the bridge does not appear in Beeper, check that it is running:
bbctl whoami | grep tumblrdmsIf login fails, re-run the account login from Beeper Desktop.
If messages are not syncing, confirm the bridge shows a connected remote and
check bridge.log for recent errors.
If the bridge was deleted and re-added, start from a clean runtime directory. Mixing old local state with a new Beeper registration can cause stale room or delivery issues.
Requirements:
- Go 1.25 or newer.
- libolm development headers.
On macOS:
brew install libolmOn Debian/Ubuntu:
sudo apt-get install libolm-dev libolm3Build:
go build ./...
./build.shThe ld: warning: ignoring duplicate libraries: '-lc++', '-lolm' linker
warning on macOS is harmless.
Build the container:
docker build -t tumblr-dms .Run it with a data directory:
mkdir -p ./data
docker run --rm -v "$PWD/data:/data" tumblr-dmscmd/tumblr-dms/main.go Bridge binary entrypoint
pkg/connector/ Beeper bridge connector
pkg/msgconv/ Message conversion
pkg/tumblr/ Tumblr web client and models
pkg/tumblrid/ Identifier helpers
GitHub Actions builds release binaries when a v* tag is pushed:
tumblr-dms-linux-amd64tumblr-dms-linux-arm64tumblr-dms-darwin-arm64sha256sums.txt
Tumblr DMs is licensed under GNU AGPLv3 or later, with the Beeper and Element
exceptions in LICENSE.exceptions.