How getknit/knit works
Knit is an Android offline mesh messenger. A user composes a Nearby, direct, or group message; the mesh carries it between phones, and the receiving app processes and stores it for conversation display. Direct and group content is end-to-end encrypted, while Nearby is public. The repository also includes calls, attachments and transfers, moderation, link previews, and a Wear OS status companion. The README documents the product flow; source excerpts and index references support selected internal links, so unsampled implementation details are not expanded into guessed call chains.
Main entry points: InboundPipeline.kt Inbound pipeline · MeshService.kt Mesh service · KnitDatabase.kt Encrypted database · MainActivity.kt App entry
Components 22
Android app
- App entry
app/src/main/java/app/getknit/knit/MainActivity.kt - Encrypted database
app/src/main/java/app/getknit/knit/data/KnitDatabase.kt - Message repository
app/src/main/java/app/getknit/knit/data/MessageRepository.kt - Conversation model
app/src/main/java/app/getknit/knit/data/message/Conversations.kt - Settings
app/src/main/java/app/getknit/knit/data/settings/SettingsStore.kt
Mesh messaging
- Mesh service
app/src/main/java/app/getknit/knit/mesh/MeshService.kt - Inbound pipeline
app/src/main/java/app/getknit/knit/mesh/InboundPipeline.kt - Store and forward
app/src/main/java/app/getknit/knit/data/forward/ForwardRepository.kt - Message ratchets
app/src/main/java/app/getknit/knit/mesh/crypto/ratchet/RatchetEngine.kt
Content services
- Attachment storage
app/src/main/java/app/getknit/knit/data/AttachmentStore.kt - File transfers
app/src/main/java/app/getknit/knit/transfer/TransferManager.kt - Image screening
app/src/main/java/app/getknit/knit/moderation/ImageScreeningService.kt - Link previews
app/src/main/java/app/getknit/knit/linkpreview/LinkPreviewService.kt
Voice calls
- Call manager
app/src/main/java/app/getknit/knit/call/CallManager.kt - Call service
app/src/main/java/app/getknit/knit/ui/call/CallService.kt
Wear OS companion
- Watch status app
wear/src/main/java/app/getknit/knit/wear/StatusActivity.kt - Phone status reader
wear/src/main/java/app/getknit/knit/wear/PhoneStatusReader.kt - Status refresh
wear/src/main/java/app/getknit/knit/wear/StatusRefresh.kt - Watch tile
wear/src/main/java/app/getknit/knit/wear/MeshTileService.kt - Watch complications
wear/src/main/java/app/getknit/knit/wear/StatusComplicationService.kt
Other components
- Phone user
- Phone mesh
Connections 21
- Phone user → App entry: uses
README.md - App entry → Mesh service: starts mesh
app/src/main/java/app/getknit/knit/mesh/MeshService.kt - Mesh service → Settings: reads settings
app/src/main/java/app/getknit/knit/mesh/MeshService.kt - Phone mesh → Mesh service: connects over radios
README.md - Mesh service → Phone mesh: relays messages
README.md - Inbound pipeline → Message repository: delivers messages
app/src/main/java/app/getknit/knit/mesh/InboundPipeline.kt - Inbound pipeline → Store and forward: uses custody
app/src/main/java/app/getknit/knit/mesh/InboundPipeline.kt - Inbound pipeline → Attachment storage: handles blobs
app/src/main/java/app/getknit/knit/mesh/InboundPipeline.kt - Inbound pipeline → Encrypted database: uses database
app/src/main/java/app/getknit/knit/mesh/InboundPipeline.kt - Message ratchets → Encrypted database: persists ratchet state
- Message repository → Encrypted database: stores messages
- App entry → Conversation model: shows conversations
README.md - Phone user → Call manager: starts calls
README.md - Call service → Call manager: observes call state
app/src/main/java/app/getknit/knit/ui/call/CallService.kt - Phone user → File transfers: sends files
README.md - Phone user → Link previews: requests preview
README.md - Image screening → Encrypted database: stores verdicts
- Watch status app → Status refresh: requests refresh
wear/src/main/java/app/getknit/knit/wear/StatusActivity.kt - Watch tile → Status refresh: kicks refresh
wear/src/main/java/app/getknit/knit/wear/MeshTileService.kt - Status refresh → Phone status reader: reads phone status
wear/src/main/java/app/getknit/knit/wear/StatusRefresh.kt - Watch complications → Phone status reader: reads cached status
wear/src/main/java/app/getknit/knit/wear/StatusComplicationService.kt