XMTP Room Mirror Storage Contract
Copy MarkdownThis package includes reusable room, membership, and message mirror schemas for Phoenix room wrappers. The host app owns the actual database tables.
Contract Version
Current contract: xmtp_room_mirror_v1
The matching migration template is:
priv/templates/xmtp_room_mirror_v1_migration.exsCopy that file into the host app's own migration folder, rename the module, and run it from the host app. This package does not run migrations for the host app.
Ownership Rules
- Host apps own the database, migrations, backups, retention policy, and deletes.
- Host apps own product room meaning, membership rules, moderation rules, and who can publish or read a room.
- This package owns only the shared mirror shape used by
Xmtp.RoomServer. - XMTP message history is not product workflow truth.
- Product-specific fields belong in product-owned tables that reference
room_key,conversation_id, or the host app's room row.
Tables
xmtp_rooms stores the room mirror row. room_key is the host app's stable
product key, and conversation_id is the XMTP conversation ID.
xmtp_room_memberships stores mirrored wallet and inbox membership rows. It is
not entitlement truth.
xmtp_message_logs stores the visible public message mirror used by the room
panel. Only use it for product-approved rooms where storing visible message body
text is intended by the host app.
Product Data
Do not add product workflow fields to this shared template. For example:
- Techtree publish, review, or paid payload state belongs in Techtree tables.
- Autolaunch launch, auction, subject, or trust follow-up state belongs in Autolaunch tables.
- Platform company room display choices belong in Platform tables.
If a product needs extra room data, create a product-owned table and link it to the mirror by the stable room key or XMTP conversation ID.