Community

Apps

Ditto

Ditto is Soapbox's colorful Nostr social platform: part client, part community surface, part self-hostable playground for themes, comments, Lightning, mobile apps and odd new event kinds.

Ditto icon
Apps The product layer Clients, signers, publishing tools, wallets and protocol utilities.
Back to Nostr
Apps

Apps shelf

Apps pages collect clients, signers, tools, developer libraries and product research without turning the app into the whole network.

Apps All Apps pages App routeProduct profiles, categories, tools and source links Browse appsClose shelf

App orientation

App categories

App profiles

0xchatadvanced-nostr-searchAegisAlbyAlby GoAlby HubAlby HubAlby SDKAmberAmberAmethystAmethystApp and product researchApplication-specific dataBlossomBlossom spec NIP-B7BookstrBorisBouquetCalendar by FormstrChachiNostr Apps DirectoryCoracleCoracleCorny ChatCreatrDamusDamusDeveloper stack researchDittoDittodiVineDocstrDTANEmojitoFlotillaFlycatFormstrFountainFreeFromFundstrfutrGIF BuddyGittrgo-nostrGossipGossipGrimoireGroups NIP-29HablaHablaHello Nostr — ResourcesHighlighterHiveTalkhomebrew-nostrHORNET StorageHugo2NostrHyperNoteIrisIrisJumblekanbanstrKeys BandListrLNBits NostrmarketLumeLumilumiLUMINAMapstrMarmot Protocolmatrix-nostr-bridgeMeetstrMemestrMindsmonstrmostardMostronaknak — Nostr Army KnifeNalgorithmNarrnashboardNDKNegentropyngitNofluxNosNos Socialnos2xnosbinnosclNostorg Feature MatrixNostr App ManagerNostr Apps Directory GuideNostr clients feature listNostr Compass — ProjectsNostr Developer GuideNostr Development KitNostr Events MonitorNostr MCP ServerNostr NestsNostr PlaygroundNostr Service ProvidersNostr Writernostr-post-checkernostr-protocol/nostrnostr-rubynostr-sdknostr-sdk-ffinostr-sdk-flutternostr-to-rssnostr-toolsNostr.bandnostr.buildnostr.co.uk ClientsNostr.how — Clientsnostr.hsNostrabilityNostrAppsNostrApps category — AudioNostrApps category — CareerNostrApps category — CommunityNostrApps category — CurationNostrApps category — Direct MessageNostrApps category — DiscoveryNostrApps category — File SharingNostrApps category — Group ChatNostrApps category — MeatspaceNostrApps category — OnboardingNostrApps category — SignersNostrApps category — Toolsnostrchecknostrdbnostrdb-rsNostreeNostreonNostriaNostridNostrium / read.nostr.comNostrmoNostrubenoStrudelnoStrudelNostterNosturNosturNotedeckNpub.proNpub.worldnsec.appnsiteNsiteNstart.meObsidian Nostr WriterOlasOpenvibeOracoloOstrich WorkOwn Your PostsP2P BandPazPeridotPhoenixPlebeian MarketPostizPostr / write.nostr.comPrimalPrimalPrimal Article Editor / Reads authoringPrimal Studiopynostrpython-nostrRecommended Application HandlersRelay Toolsrsslayrust-nostrrust-nostr docsSatelliteSatellite EarthSatlantisSatShootShakespeareShopstrSlidestrSnortSnortStemstrswift-nostr-clientTreasuresWavlakeWavlakeWikifreediaWikistrYakiHonneYakiHonneYakiHonne mobile/web app directoryYondar

App pages

Deep dives

Field guides

Awesome Nostr branches

Research and library

Source inventory

Deep Research: Clients, apps and product surfacesDeep Research: Developer stack and toolingResearch Map: nostrapps.comResearch Source: 0xchatResearch Source: 0xchat — NostrApps pageResearch Source: advanced-nostr-searchResearch Source: Aegis — NostrApps pageResearch Source: AlbyResearch Source: Alby — NostrApps pageResearch Source: Alby GoResearch Source: Alby HubResearch Source: Alby Hub GitHubResearch Source: Alby SDKResearch Source: AmberResearch Source: Amber — NostrApps pageResearch Source: AmethystResearch Source: Amethyst GitHubResearch Source: Awesome Nostr ResourcesResearch Source: BookstrResearch Source: BorisResearch Source: Boris — NostrApps pageResearch Source: BouquetResearch Source: Bouquet — NostrApps pageResearch Source: Calendar by FormstrResearch Source: ChachiResearch Source: Chachi — NostrApps pageResearch Source: CoracleResearch Source: Coracle — NostrApps pageResearch Source: Corny ChatResearch Source: DamusResearch Source: Damus — NostrApps pageResearch Source: DittoResearch Source: Ditto — NostrApps pageResearch Source: DocstrResearch Source: DTANResearch Source: DTAN — NostrApps pageResearch Source: EmojitoResearch Source: Emojito — NostrApps pageResearch Source: Flotilla — NostrApps pageResearch Source: FlycatResearch Source: FormstrResearch Source: Formstr — NostrApps pageResearch Source: FountainResearch Source: FreeFromResearch Source: FreeFrom — NostrApps pageResearch Source: FundstrResearch Source: futrResearch Source: futr — NostrApps pageResearch Source: GIF BuddyResearch Source: GIF Buddy — NostrApps pageResearch Source: GittrResearch Source: go-nostr GitHubResearch Source: GossipResearch Source: Gossip — NostrApps pageResearch Source: GrimoireResearch Source: Grimoire — NostrApps pageResearch Source: HablaResearch Source: Habla — NostrApps pageResearch Source: Hello Nostr — ResourcesResearch Source: HighlighterResearch Source: HiveTalkResearch Source: HORNET Storage — NostrCompassResearch Source: IrisResearch Source: Iris — NostrApps pageResearch Source: JumbleResearch Source: Jumble — NostrApps pageResearch Source: Keys BandResearch Source: Keys Band — NostrApps pageResearch Source: ListrResearch Source: LNBits NostrmarketResearch Source: LumeResearch Source: LumilumiResearch Source: LUMINAResearch Source: MapstrResearch Source: Marmot ProtocolResearch Source: MeetstrResearch Source: MemestrResearch Source: MindsResearch Source: monstr GitHubResearch Source: mostardResearch Source: MostroResearch Source: my.nostr.comResearch Source: nak — Nostr Army KnifeResearch Source: nak GitHubResearch Source: NalgorithmResearch Source: Narr — NostrApps pageResearch Source: nashboardResearch Source: NDK GitHubResearch Source: NDK NPMResearch Source: NegentropyResearch Source: Noflux — NostrApps pageResearch Source: Nos SocialResearch Source: Nos Social — NostrApps pageResearch Source: nos2xResearch Source: nos2x — NostrApps pageResearch Source: nosbinResearch Source: noscl GitHubResearch Source: Nostorg Feature MatrixResearch Source: Nostr App ManagerResearch Source: Nostr Book — KindsResearch Source: Nostr DesignResearch Source: Nostr Developer GuideResearch Source: Nostr NestsResearch Source: Nostr Nests — NostrApps pageResearch Source: Nostr PlaygroundResearch Source: nostr-post-checkerResearch Source: nostr-protocol/nostr GitHubResearch Source: nostr-sdk crates.ioResearch Source: nostr-sdk-ffi GitHubResearch Source: nostr-tools GitHubResearch Source: nostr-tools NPMResearch Source: Nostr.BandResearch Source: nostr.buildResearch Source: nostr.co.uk ClientsResearch Source: Nostr.howResearch Source: Nostr.how — ClientsResearch Source: Nostr.how — ProtocolResearch Source: Nostr.how — What is Nostr?Research Source: Nostr.orgResearch Source: NostrabilityResearch Source: NostrAppsResearch Source: NostrApps category — AudioResearch Source: NostrApps category — CareerResearch Source: NostrApps category — CommunityResearch Source: NostrApps category — CurationResearch Source: NostrApps category — Direct MessageResearch Source: NostrApps category — DiscoveryResearch Source: NostrApps category — File SharingResearch Source: NostrApps category — Group ChatResearch Source: NostrApps category — MeatspaceResearch Source: NostrApps category — OnboardingResearch Source: NostrApps category — SignersResearch Source: NostrApps category — ToolsResearch Source: nostrcheckResearch Source: nostrdb GitHubResearch Source: NostreeResearch Source: Nostree — NostrApps pageResearch Source: NostriaResearch Source: Nostria — NostrApps pageResearch Source: NostridResearch Source: Nostrmo — NostrApps pageResearch Source: Nostrmo GitHubResearch Source: NostrubeResearch Source: noStrudelResearch Source: noStrudel — NostrApps pageResearch Source: NostterResearch Source: NosturResearch Source: Nostur — NostrApps pageResearch Source: NotedeckResearch Source: Npub.proResearch Source: Npub.worldResearch Source: nsec.appResearch Source: NsiteResearch Source: Nstart.meResearch Source: Nstart.me — NostrApps pageResearch Source: Obsidian Nostr Writer — NostrApps pageResearch Source: OlasResearch Source: Olas — NostrApps pageResearch Source: OpenvibeResearch Source: OracoloResearch Source: Oracolo — NostrApps pageResearch Source: Ostrich WorkResearch Source: P2P BandResearch Source: PazResearch Source: PeridotResearch Source: Peridot — NostrApps pageResearch Source: PhoenixResearch Source: Phoenix — NostrApps pageResearch Source: Plebeian MarketResearch Source: Plebeian Market — NostrApps pageResearch Source: PrimalResearch Source: Primal — NostrApps pageResearch Source: Primal Article Editor / Reads authoringResearch Source: Primal StudioResearch Source: pynostr GitHubResearch Source: python-nostr GitHubResearch Source: Registry of KindsResearch Source: Relay Tools — NostrApps pageResearch Source: rsslayResearch Source: rust-nostr docsResearch Source: rust-nostr GitHubResearch Source: SatelliteResearch Source: SatShootResearch Source: ShakespeareResearch Source: Shakespeare — NostrApps pageResearch Source: ShopstrResearch Source: Shopstr — NostrApps pageResearch Source: SlidestrResearch Source: SnortResearch Source: start.nostr.netResearch Source: StemstrResearch Source: TreasuresResearch Source: WavlakeResearch Source: WikifreediaResearch Source: Wikifreedia — NostrApps pageResearch Source: WikistrResearch Source: Wikistr — NostrApps pageResearch Source: YakiHonne mobile/web app directoryResearch Source: YondarResearch Source: Yondar — NostrApps page
Apps18 min readcustom Nostr social platform

Ditto

Ditto is what happens when a Nostr client stops trying to look serious and starts asking what social software would feel like if people could skin it, fork it, self-host it and teach it new kinds of things.

The quick readDitto is Soapbox's open-source Nostr social platform. The current app is a React/Vite/TypeScript client that can be served as static files, packaged for mobile with Capacitor and customized through themes and config. The older Ditto server lineage matters too: it explains the Mastodon API compatibility, NIP-05 community idea, moderation focus and relay thinking behind the product.

The carnival door

Ditto does not enter the Nostr room wearing a lab coat. It enters with themes, profile colors, background images, strange content types, comments on almost anything and a homepage that says the quiet part out loud: this is for people who want to have fun, not feed the Big Tech machine. That line could have become empty slogan material. In Ditto, it is at least backed by product decisions. The app wants profiles to have taste. It wants feeds to hold more than short text notes. It wants communities to feel like places, not just database filters.

The first thing to understand is that Ditto is not a minimalist Nostr client. If Damus is the iPhone front door and Coracle is the thoughtful protocol workbench, Ditto is the loud social room where somebody is changing the wallpaper, commenting on a book, following a live stream, zapping a profile, posting a short video and wondering why all social apps were forced to become the same grey rectangle. It treats Nostr's full name seriously: Notes and Other Stuff Transmitted by Relays. The other stuff is where Ditto spends its energy.

The official About page lists the shape plainly. Ditto lets you customize profile and theme with color palettes, background images and fonts. It advertises many content types: posts, articles, photos, vines, videos, streams, events, Webxdc, magic decks, treasures, polls, follow packs, color moments, music, podcasts, books, emoji packs and more. It also says you can comment on posts, countries, links, profiles, books and treasures. That is not normal social-app language. It is Ditto's thesis: if Nostr events can describe many objects, a client should not behave as if only one timeline object exists.

There is a practical side under the playfulness. Ditto runs at ditto.pub, has an About and docs site at about.ditto.pub, and the mobile app is real. Apple's lookup API shows "Ditto: Fun Social Media" from Soapbox Technology LLC, first released on April 15, 2026, current version 2.19.0 on June 6, 2026, free, 17+, and described as an open-source Nostr client for games, treasure hunts, magic decks, live streams, color moments and more. The latest iOS release notes are telling: Ditto now works offline, saving your profile, follows and feed locally so the app does not flash empty when the network is unreachable. That is the kind of small UX repair that makes a playful client usable.

From server to client

Ditto has a slightly confusing history, and the honest reading should not flatten it. In 2024, Alex Gleason announced Ditto as a Nostr community server. That version had a built-in Nostr relay, a web UI and a Mastodon-compatible REST API. It was built in Deno with TypeScript, used Postgres, leaned on Nostrify, offered NIP-05 self-service, moderation, spam filters, quote posts, emoji reactions, zaps, trends, full-text search, media attachments and remote signing through NIP-46. In other words: it tried to take the shape of a fediverse community server and swap ActivityPub for Nostr.

That origin still matters. It explains why Soapbox's tooling page calls Ditto a decentralized social server for building communities on Nostr. It talks about a built-in relay, NIP-05 username self-service, Lightning zaps, advanced search and discovery, customization and TypeScript moderation policy plugins. It lists flagship or example communities such as Ditto.pub, Henhouse.social, Cobrafuma.com, Gleasonator.dev, Seewaan.com and Cvrkut.com. If you come from Mastodon, this is the part of Ditto that will feel familiar: a domain can be a social home, with local moderation, usernames, community identity and admins who care about the tone of the place.

By 2026, the public Ditto positioning had broadened. Soapbox announced Ditto at Bitcoin 2026 as a customizable social hub that connects Nostr, Bluesky and Mastodon, with Bitcoin Lightning payments built in and apps available on iOS, Android, Zapstore and web. OpenSats describes the same evolution: Soapbox started as an alternative Mastodon frontend, moved on to the Mostr bridge, and Ditto evolved from a Nostr-native community server into a full social platform where users can customize profiles, publish many kinds of content and stay connected to followers on Bluesky and Mastodon through built-in bridges.

So what is Ditto today? It is both a product and a lineage. The current GitLab README describes Ditto as an open-source decentralized social media client built on Nostr. The stack is React 18, Vite, TypeScript, TailwindCSS 3, shadcn/ui, React Router 6, TanStack Query, Nostrify, nostr-tools, Capacitor and Vitest. The project is AGPL-3.0. GitLab shows the current repository under soapbox-pub/ditto, public, on the main branch, with activity on June 6, 2026. The code is mostly TSX and TypeScript, with small Java, CSS and Swift shares because mobile packaging sits beside the web app.

What Ditto does with Nostr

Ditto's most interesting document is not the landing page. It is the Nostr reference. That page lists the event kinds Ditto supports and shows what the app is really trying to make visible. Of course it supports the basics: profile metadata, short text notes, follow lists, deletions, reactions, reports, mute lists, bookmarks, relay lists and zap receipts. But the list quickly gets stranger in a good way: photos, videos, short videos, polls, file metadata, comments, voice messages, live chat, Git patches, pull requests, weather readings, found logs, on-chain zap attestations, encrypted letters, Blossom server lists, read books and custom themes.

That matters because many Nostr clients still treat interoperability as "can I see a kind 1 note?" Ditto is betting on a larger answer. A client can be interoperable because it respects Nostr event structures, but still have its own imagination. If Ditto publishes a custom theme as kind 36767, with color tags, font tags, background tags, title, description, alt text and a discoverability tag, that event is not just an app setting. It is a portable social object. Other clients can ignore it, render it, remix it or build competing theme browsers. That is the Nostr bargain at its best: local creativity, public data.

The theme system is the clearest example. The reference describes an active theme event and shareable theme events. Colors live in tags. Fonts can be declared. Background media can be stored with imeta-style details. The settings page uses NIP-78 application-specific data with NIP-44 encrypted JSON. That is far more interesting than "the app has skins." Ditto is trying to make interface personality into something users can publish, carry and attribute.

Comments are the second clue. Ditto leans on NIP-22 comments, which is why the site keeps saying you can comment on anything. That is a very different mental model from a single app-owned reply tree. A URL, book, profile, post or object can become a discussion target. For Crays, this matters because venues, profiles, products and field notes are all potential social objects. A Ditto-like approach says the conversation does not have to belong to a platform feed. It can attach to whatever the community is actually looking at.

Payments sit in the same product philosophy. Ditto supports zaps on posts and profiles, and the README says Lightning payments can use Nostr Wallet Connect or WebLN. The reference also includes NIP-57 zap receipts and a Ditto-linked on-chain zap attestation kind. That does not make Ditto a wallet. It makes it a social surface where payment events can sit beside profiles, posts, media and custom content. For creators and communities, that is the interesting part: not "there is a tip button," but "money, identity and social context can travel through the same open protocol layer."

The build path

Ditto is unusually explicit about self-hosting. The self-hosting guide says the current app is a static web application: HTML, CSS and JavaScript, with no backend, no database and no Docker required for the basic version. You can download a prebuilt zip, upload it to a web server and make sure the server routes all paths back to index.html. If you want to customize from source, you need Node.js 22+, install dependencies, run the build and upload the dist/ directory.

Configuration lives in ditto.json. That file can set a theme, custom colors, font, background, default relays, whether to use app relays, and Blossom upload servers. The README explains three layers of configuration: user settings in localStorage, build config from ditto.json, and hardcoded defaults. That hierarchy is important. It means an operator can ship a community default without erasing the user's ability to personalize the app.

The same guide names optional infrastructure for people who want more control. You can run a Ditto Relay alongside the app for fuller sovereignty. You can use Ditto Server for rich link previews, dynamic OG images, SEO meta tags and a CORS proxy. You can build an Android app with Capacitor, and the guide points to Zapstore and GitLab release artifacts for Android packages. In other words, Ditto scales down to static hosting and scales up toward a branded community app.

That is why Shakespeare appears so often in Ditto materials. Soapbox presents Shakespeare as a tool for editing and building small apps that can work with Ditto. You do not have to buy that entire vision to see the connection. Ditto wants to be a social canvas. Shakespeare wants to let people alter or create the things that appear on that canvas. Together, they point at a Nostr pattern that is bigger than microblogging: a social network where interface, mini-apps, media and identity can be changed by the community instead of waiting for one platform roadmap.

The people behind it are public. Soapbox is the organization. Alex Gleason is named by Soapbox as founder and by OpenSats as a maintainer in the broader Soapbox ecosystem. OpenSats says Soapbox has been supported since the first wave of Nostr grants in July 2023 and that Alex later received long-term support in August 2024. The same OpenSats profile ties Soapbox to Mostr, Ditto, Shakespeare, Nostrify and MKStack. Ditto is not an isolated experiment; it is one product in a wider Soapbox attempt to make Nostr feel like a broad open-web toolkit.

Where to be careful

Ditto is exciting precisely because it refuses to stay small. That is also the caution. The more event kinds a client renders, the more you should ask which ones are standardized, which ones are Ditto-created, which ones other clients understand and which ones are mostly useful inside the Ditto world. Custom event kinds are not bad. They are how Nostr grows. But a user should know the difference between portable identity, broadly understood posts and experimental social objects.

The bridge story deserves the same mature reading. Ditto says it connects to Bluesky, Mastodon and a growing universe of Nostr apps. That is powerful for people who are tired of managing separate accounts and audiences. But bridges also introduce trust, delay, mapping and moderation questions. A Nostr key gives you a durable identity inside Nostr. It does not magically make every external protocol behave the same way. If you use Ditto as your open-web homebase, test what travels to each network and what remains local.

Self-hosting is simple only at the static layer. Serving a client is easy. Running a healthy community is not. The earlier Ditto server work understood this, which is why moderation, spam filters, NIP-05 approval, trends, search and policy plugins were central. If your goal is a serious community, do not stop at "we deployed the files." Think about relays, upload servers, names, moderation, backups, abuse reports, legal boundaries and who has the boring job when something breaks.

Still, Ditto deserves real attention. It brings a rare emotional note to Nostr: not just sovereignty, not just censorship resistance, not just "own your data," but taste, color and the joy of making a place feel like yours. That might sound less serious than cryptography until you remember why people joined the early web in the first place. They wanted a corner, a style, a name, a scene. Ditto is trying to give that feeling back without handing the keys to a platform landlord.

Sources worth opening

Ditto has several public trails because the project changed shape over time. Read the current About/docs pages, then the Soapbox and OpenSats material to see the older server lineage and the broader organization behind it.

Back to the Crays Nostr page
Apps route visual cue 1
Apps route visual cue 2
Apps route visual cue 3
Apps route visual cue 4
Apps route visual cue 5

How to use this page

Find the product surface first.

Search clients, signers, product categories or developer tools when you need a specific app, source file or comparison clue.

AppsKeep exploring AppsApp routeProduct profiles, categories, signer guides and source links.Browse apps
Apps route visual cue 1
Apps route visual cue 2
Apps route visual cue 3
Apps route visual cue 4
Apps route visual cue 5

Bring something back

Ask, suggest, submit or nominate.

Use these links when something is missing, a source is stale, or a public Nostr builder belongs in the map.