Creating Plot Twists
    Preparing search index...

    Type Alias LinkTypeConfig

    Describes a link type that a connector creates. Used for display in the UI (icons, labels).

    type LinkTypeConfig = {
        type: string;
        label: string;
        noteLabel?: string;
        composePlaceholder?: string;
        composeVerb?: string;
        replyPlaceholder?: string;
        replyVerb?: string;
        logo?: string;
        logoDark?: string;
        logoMono?: string;
        statuses?: {
            status: string;
            label: string;
            done?: boolean;
            active?: boolean;
            todo?: boolean;
        }[];
        supportsAssignee?: boolean;
        includesSchedules?: boolean;
        defaultCreateThreads?: string;
        compose?: ComposeConfig;
        contactRoles?: ContactRoleConfig[];
        supportsContactChanges?: boolean;
        supportsLinks?: boolean;
        supportsFileAttachments?: boolean;
        sharingModel?: "thread"
        | "channel"
        | "message"
        | "none";
    }
    Index

    Properties

    type: string

    Machine-readable type identifier (e.g., "issue", "pull_request")

    label: string

    Human-readable label (e.g., "Issue", "Pull Request")

    noteLabel?: string

    Connector'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").

    composePlaceholder?: string

    Placeholder 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()}".

    composeVerb?: string

    Label for the Send button on NewThreadPage when this link type is the target. Example: "Send". If unset, defaults to "Create".

    replyPlaceholder?: string

    Placeholder 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".

    replyVerb?: string

    Label for the Send button in the in-thread editor. Example: "Send" (Gmail), "Comment" (Linear). If unset, defaults to "Send".

    logo?: string

    URL to an icon for this link type (light mode). Prefer Iconify logos/* URLs.

    logoDark?: string

    URL to an icon for dark mode. Use when the default logo is invisible on dark backgrounds (e.g., Iconify simple-icons/* with ?color=).

    logoMono?: string

    URL to a monochrome icon (uses currentColor). Prefer Iconify simple-icons/* URLs without a ?color= param.

    statuses?: {
        status: string;
        label: string;
        done?: boolean;
        active?: boolean;
        todo?: boolean;
    }[]

    Possible status values for this type

    Type Declaration

    • status: string

      Machine-readable status (e.g., "open", "done")

    • label: string

      Human-readable label (e.g., "Open", "Done")

    • Optionaldone?: boolean

      Whether this status represents completion (done, closed, merged, cancelled, etc.)

    • Optionalactive?: boolean

      Mark 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?: boolean

      Marks 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.

    supportsAssignee?: boolean

    Whether this link type supports displaying and changing the assignee

    includesSchedules?: boolean

    Whether 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.

    defaultCreateThreads?: string

    Default thread creation mode for this link type: 'all' | 'actionable' | 'manual'

    compose?: ComposeConfig

    Opt-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.

    contactRoles?: ContactRoleConfig[]

    Per-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.

    supportsContactChanges?: boolean

    Whether 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.

    supportsLinks?: boolean

    Whether 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.

    supportsFileAttachments?: boolean

    Whether 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.

    sharingModel?: "thread" | "channel" | "message" | "none"

    Declares 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).