Machine-readable type identifier (e.g., "issue", "pull_request")
Human-readable label (e.g., "Issue", "Pull Request")
OptionalsourceDisplay name of the specific product/source this link type belongs to.
Used in place of the connector's display name when building
"{source} {label}" copy (the thread type name, the "Create new …" picker
entry, compose chips). Only needed for aggregate connectors that bundle
several products under one display name: the Google connector's display
name is "Gmail & Calendar", but its event link type should read
"Google Calendar event", its email link type "Gmail thread", and its
task link type "Google Tasks task". Set it to the standalone product
name (e.g. "Gmail", "Google Calendar", "Google Tasks"). Single-product
connectors can omit it — Plot falls back to the connector display name.
OptionalnoteConnector's word for a note on a linked item of this type — used by the Flutter app to adapt note/composer copy ("Add a comment" on Linear, "Add a message" on Slack, "Add a reply" on Gmail). Defaults to "note" when omitted. Use the singular noun in title case (e.g. "Comment").
OptionalcomposePlaceholder shown in the editor when this link type is the target of a new thread (NewThreadPage). Example: "Send a Gmail email". If unset, Plot derives "Create a new {connector} {label.toLowerCase()}".
OptionalcomposeLabel for the Send button on NewThreadPage when this link type is the target. Example: "Send". If unset, defaults to "Create".
OptionalreplyPlaceholder shown in the in-thread editor for the default reply mode. Example: "Reply" (Gmail), "Add a comment" (Linear). If unset, Plot derives "Add a {noteLabel.toLowerCase()}" or "Add a note".
OptionalreplyLabel for the Send button in the in-thread editor. Example: "Send" (Gmail), "Comment" (Linear). If unset, defaults to "Send".
OptionallogoURL to an icon for this link type (light mode). Prefer Iconify logos/* URLs.
OptionallogoURL to an icon for dark mode. Use when the default logo is invisible on dark backgrounds (e.g., Iconify simple-icons/* with ?color=).
OptionallogoURL to a monochrome icon (uses currentColor). Prefer Iconify simple-icons/* URLs without a ?color= param.
OptionalstatusesPossible status values for this type
Machine-readable status (e.g., "open", "done")
Human-readable label (e.g., "Open", "Done")
Curated icon for this status (required so the UI always has a glyph).
OptionalhiddenDefault?: booleanSuppress this status's icon on the feed row (ThreadWidget) while still showing it in the ThreadPage header. Use for a "resting" default state that would otherwise clutter the feed (e.g. calendar "Confirmed").
Optionaldone?: booleanWhether this status represents completion (done, closed, merged, cancelled, etc.)
Optionalactive?: booleanMark the thread active=true in Plot when a link enters this status.
Use for messaging-style flags where the user has indicated they want
to act on the thread now — Gmail's "starred", Slack's "later", etc.
The Plot user can later un-flag the thread without breaking the
connector relationship.
Optionaltodo?: booleanMarks this status as the connector's "to-do" / active state. When a
user brings a done thread back into Plot's agenda, done-status links
are flipped to the status marked todo: true (e.g. Gmail's "starred",
Linear's "unstarted"); connectors that don't mark one fall back to the
first non-done status.
OptionalsupportsWhether this link type supports displaying and changing the assignee
OptionalincludesWhether this link type produces time-anchored schedule/agenda items
(i.e. calendar events). The Plot app shows the agenda (the bottom-nav
tab on mobile and the left-sidebar agenda on desktop) only when the
user has at least one active connection whose link types include one
with includesSchedules: true. Calendar connectors (Google / Apple /
Outlook Calendar) set this on their event link type. Defaults to
false — non-calendar link types (messages, issues, tasks, docs) omit it.
OptionalkindWhat this link type is (see LinkKind). Declare it on every link
type — Plot groups connectors by it and uses it to decide which channels
a workspace can enable. Omitting it makes Plot assume team-task.
OptionaldefaultDefault thread creation mode for this link type: 'all' | 'actionable' | 'manual'
OptionalcomposeOpt-in: declares this link type is composable from Plot via
Connector.onCreateLink. Omit to make the link type sync-only (no
"Create new …" picker entry).
Connectors that need multiple compose modes for what users perceive as the same kind of thing (e.g. Slack channel post vs DM) should declare separate linkTypes, one per user-facing thread type. That keeps each linkType isomorphic to one filter chip.
OptionalcontactPer-connector contact roles. Examples: email → [{id:"to",label:"To",default:true},{id:"cc",label:"CC"},{id:"bcc",label:"BCC",hidden:true}] calendar → [{id:"required",label:"Required",default:true},{id:"optional",label:"Optional"}]
Plot uses this list to render a role picker on each contact chip in the
composer and to label non-default roles on existing threads. Exactly one
role should be marked default: true. Connectors that don't distinguish
roles (Slack, Linear) omit this field entirely.
OptionalsupportsWhether contacts on an existing thread can be added, removed, or have their role changed (email-style mid-thread recipient changes). When false, the thread's contact list is fixed after creation. Defaults to false when omitted.
OptionalsupportsWhether a note/reply on this link type can carry a link (a pasted URL or connector-created item) that Plot forwards to the source. When false (the default), the "Add link" button is hidden for threads of this link type. Only set true if the connector's reply path actually forwards the link action to the source. Private Plot notes (no link type) always allow links.
OptionalsupportsWhether a note/reply on this link type can carry an uploaded file that Plot forwards to the source as an attachment. When false (the default), the "Attach file" button is hidden for threads of this link type. Only set true if the connector's reply path actually uploads file actions to the source. Private Plot notes (no link type) always allow attachments.
OptionalsupportsWhether a note on this link type can be forwarded to new recipients using
the source system's native forwarding (e.g. an email forward that carries
the original message and its attachments). When false (the default), Plot
forwards by creating a new item on the target whose body is the user's
message followed by the blockquoted original ("fallback" forward). Only set
true if the connector's onCreateLink handles a CreateLinkDraft.forward
reference and builds a real upstream forward.
OptionalsharingDeclares how sharing on threads of this link type is scoped:
"thread" (default): one roster shared across all notes in the
thread. Native Plot threads, Slack DMs, calendar events."channel": visibility is the external channel's membership;
the per-thread contacts array is ignored for sharing UI.
Slack channels, Linear projects."message": each note carries its own recipient set via
note.access_contacts; the thread roster is the union across
all messages. Email."none": the link type has no recipient roster at all. No
contacts/sharing UI is shown for these threads. Use for purely
personal destinations with no sharing concept (e.g. Google
Tasks). The per-thread contacts array is ignored for sharing UI.Omit to default to "thread". When set to "message", every
note this connector ingests must populate access_contacts
explicitly (never NULL).
OptionalreactionPer-link-type reaction capabilities. Overrides the connector-level Connector.reactionCapabilities for threads of this link type — used when one connector has link types with different reaction vocabularies (e.g. LinkedIn DMs' 7-emoji set vs. posts' fixed post-reaction set). Omit to inherit the connector-level value.
Describes a link type that a connector creates. Used for display in the UI (icons, labels).