No hierarchy. No root. No single path. Just connections.
From Deleuze & Guattari's "A Thousand Plateaus" (1980):
"A rhizome has no beginning or end; it is always in the middle, between things, interbeing, intermezzo. The tree is filiation, but the rhizome is alliance, uniquely alliance."
Traditional social networks are arborescent (tree-like): one post, one thread, one conversation. Break one link, and the thread dies.
Rhizome is rhizomatic: any node can connect to any other. Posts reference multiple concepts, works, places, and other posts simultaneously. Conversations emerge organically from these connections, not from imposed structure.
Instead of linear threading (Post A → Comment B → Comment C), we use multi-dimensional referencing:
Post/Comment Event:
- in_reply_to: [post_uri] (direct conversation thread)
- references: [
"akashic://cultural/movement/surf-movies-1960s",
"akashic://cultural/album/pet-sounds-1966",
"akashic://place/tower-of-london",
"https://example.com/article-123" (external references)
]
COMMENT Event:
{
"event_type": "COMMENT",
"payload": {
"content": "This reminds me of surf movies...",
"target_uri": "https://rhizome.example/post/123", // Direct reply
"references": [ // Additional references
"akashic://cultural/movement/surf-movies-1960s",
"akashic://cultural/album/pet-sounds-1966",
"akashic://place/tower-of-london"
]
}
}
POST Event:
{
"event_type": "POST",
"payload": {
"content": "Thinking about the Tower of London...",
"visibility": "public",
"references": [
"akashic://place/tower-of-london",
"akashic://cultural/book/author-title"
]
}
}
# Get all posts referencing a cultural movement
events = RhizomeEvent.query.filter(
RhizomeEvent.payload['references'].contains(['akashic://cultural/movement/surf-movies-1960s'])
).all()
# Get conversation around a post (direct replies)
events = RhizomeEvent.query.filter(
RhizomeEvent.payload['target_uri'] == post_uri
).all()
# Get all conversations about Pet Sounds
events = RhizomeEvent.query.filter(
RhizomeEvent.payload['references'].contains(['akashic://cultural/album/pet-sounds-1966'])
).all()
RhizomeEvent Model:
- Keep existing payload JSON field
- References stored in payload.references array
- No schema change needed—just extend JSON structure
PostgreSQL JSONB + GIN Index:
- jsonb_path_ops index provides ~1000x speedup for containment queries
- Sub-millisecond queries for "find all posts referencing X"
- Efficient graph traversal
Multi-References → ActivityPub:
- Use context property for semantic references
- Custom rhizome:references property for lossless round-trip
- Compatible with Mastodon and other ActivityPub implementations
✅ Multi-Dimensional Conversations: Reference concepts, works, places, and posts simultaneously
✅ No Broken Threads: Each node is independent—missing posts don't break the graph
✅ Graph Visualization: See connections across dimensions
✅ Semantic Discovery: Find conversations by concept, not just by thread
✅ Cultural Integration: Books, movies, music become first-class conversation participants
✅ Emergent Patterns: Conversations reveal themselves through graph visualization
This is Roam Research meets ActivityPub—bidirectional semantic linking for social conversations. No other federated social platform does this.
We're combining:
- Roam's multi-reference linking (networked thought)
- ActivityPub federation (decentralized social)
- Semantic web principles (canonical URIs)
- Event sourcing (tamper-proof, exportable)
Welcome to the rhizome. 🌿
← Back to Splash