Skip to main content

Ditto

A social media server bridging Nostr and the Fediverse. Post once, reach both networks. Built by Soapbox.

Overview

Ditto is more than a bridge — it's a full social media server built on Nostr that speaks ActivityPub. It implements the Mastodon API, meaning 50+ existing Mastodon apps work with it out of the box.

Architecture

┌─────────────────────────────────────────────────────────┐
│ Ditto │
├─────────────────────────────────────────────────────────┤
│ Mastodon API │ Nostr Relay │ Mostr Bridge │
│ (compatibility) │ (built-in) │ (AP ↔ Nostr) │
├─────────────────────────────────────────────────────────┤
│ Nostr Protocol │
└─────────────────────────────────────────────────────────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ Nostr Network │ │ Fediverse │
│ (relays) │ │ (AP servers) │
└─────────────────┘ └─────────────────┘

Key Features

Built-in Nostr Relay

Ditto includes a full Nostr relay. Your community's posts are stored locally and replicated to the broader Nostr network.

Mastodon API Compatible

Since Ditto implements the Mastodon API, you can use:

  • Tusky (Android)
  • Ice Cubes (iOS)
  • Pinafore (Web)
  • Elk (Web)
  • And 50+ other Mastodon clients

Mostr Bridge

The Mostr bridge translates between protocols:

DirectionWhat Happens
Nostr → FediverseYour Nostr posts appear on Mastodon, Pleroma, Misskey
Fediverse → NostrFollow Fediverse users from Nostr clients
RepliesComments bridge both ways
ReactionsLikes translate to reactions

Additional Bridges

  • Bluesky — Via Bridgy Fed integration
  • More coming — Extensible bridge architecture

Self-Service NIP-05

Users can claim username@yourdomain.com identifiers directly, no admin intervention needed.

Bitcoin Lightning

Built-in support for Lightning payments and zaps.

Custom Branding

Customize themes, logos, and styling for your community.

Why Use Ditto?

For Community Builders

  • Host your own social network
  • Your community, your rules
  • No ads, no tracking
  • Data portability via Nostr

For Users

  • One account, multiple networks
  • Use familiar Mastodon apps
  • Keep your Nostr identity
  • Censorship-resistant foundation

For Developers

  • Open source (AGPL-3.0)
  • Modular architecture
  • Well-documented APIs
  • Active development

Quick Start

# Clone the repository
git clone https://github.com/soapbox-pub/ditto.git
cd ditto

# Configure
cp .env.example .env
# Edit .env with your settings

# Start
docker-compose up -d

Using Deno

# Install Deno
curl -fsSL https://deno.land/install.sh | sh

# Clone and run
git clone https://github.com/soapbox-pub/ditto.git
cd ditto
deno task start

Configuration

Key configuration options:

# Domain settings
DITTO_DOMAIN=social.example.com

# Database
DATABASE_URL=postgres://user:pass@localhost/ditto

# Nostr settings
DITTO_NSEC=nsec1... # Server's Nostr identity

# Bridge settings
MOSTR_ENABLED=true

Recent Updates (Ditto 1.3+)

  • Explore Tab — Discover people and posts across Nostr
  • Improved Search — Find users and content more easily
  • Event Fetching — Better relay coordination
  • Cashu Nutzaps — Coming soon: wallet integration

Comparison

FeatureMastodonDitto
ProtocolActivityPub onlyNostr + ActivityPub
IdentityServer-boundPortable (Nostr keys)
Censorship resistanceModerateHigh
App compatibilityNativeVia Mastodon API
Self-hostingComplexSimpler

See Also