docs/mintlify/docs-mintlify-mig-tmp/teams.mdx
teams let admins push pipe configurations and recording filters to all members. everything is end-to-end encrypted using AES-256-GCM — the screenpipe server never sees your configs in plaintext.
teams use AES-256-GCM encryption. the encryption key is generated on the admin's device and never sent to our server. members receive the key through the invite link (shared out-of-band via a secure channel like slack DM or signal).
<Steps> <Step title="admin creates a team"> a 256-bit AES-GCM key is generated locally using the Web Crypto API. this key is stored in the Tauri secure store (`~/.screenpipe/store.bin`) — not in localStorage or anywhere web-accessible. </Step> <Step title="admin shares invite link"> the invite link contains the team ID and the base64-encoded encryption key: `screenpipe://join-team?team_id=...&key=...`. this is the only time the key is transmitted — via the link itself, not through our server. </Step> <Step title="members join and store the key"> when a member opens the invite link, the key is imported and stored in their local Tauri secure store. our server only records the membership — it never sees the key. </Step> <Step title="configs are encrypted before upload"> when an admin pushes a pipe or filter config, it's encrypted locally with AES-256-GCM using a random 12-byte nonce. only the encrypted blob and nonce are sent to the server. </Step> <Step title="members decrypt locally"> team members download the encrypted configs and decrypt them on-device using the shared key. decrypted configs are applied to local settings automatically. </Step> </Steps>| data | stored on server | readable by server |
|---|---|---|
| team name & member list | yes | yes |
| encrypted config blobs | yes | no |
| encryption nonces | yes | yes (but useless without key) |
| encryption key | no | no |
| decrypted pipe configs | no | no |
| decrypted filter lists | no | no |
pushed filters appear under the team tab and are automatically synced to all members.
when a member visits the team tab, shared filters are automatically merged into their local recording settings:
| action | admin | member |
|---|---|---|
| create/delete team | yes | no |
| invite members | yes | no |
| remove members | yes | no |
| push configs (pipes, filters) | yes | no |
| delete shared configs | yes | no |
| receive shared configs | yes | yes |
| leave team | yes | yes |
~/.screenpipe/store.bin), not localStoragepipe, window_filter, url_filter (extensible)useTeamSync hookwhat happens if i lose the invite link? the admin can always copy it again from settings > team. the encryption key is stored locally on the admin's device.
can the screenpipe team read my configs? no. the server only stores encrypted blobs. the encryption key is never transmitted to our server.
what if two admins push the same pipe name? last push wins. the newer version overwrites the older one. there's no merge or conflict resolution — the pipe is treated as a single document.
what happens when i leave a team? all team-sourced filters are removed from your local settings. your personal filters remain unchanged.
is the encryption key rotated? not currently. if you suspect the key is compromised, delete the team and create a new one with a fresh key.
questions? join our discord.