{
  "name": "gmail",
  "kind": "registry",
  "title": "Gmail",
  "description": "Your Gmail inbox in the panel: read, search with Gmail's own syntax, browse labels and mark messages read, with the unread count on the bar. Each account is its own instance, and sending stays off until you turn it on.",
  "version": "0.1.0",
  "icon": {
    "tile": {
      "svg": "M24 5.457v13.909c0 .904-.732 1.636-1.636 1.636h-3.819V11.73L12 16.64l-6.545-4.91v9.273H1.636A1.636 1.636 0 0 1 0 19.366V5.457c0-2.023 2.309-3.178 3.927-1.964L5.455 4.64 12 9.548l6.545-4.91 1.528-1.145C21.69 2.28 24 3.434 24 5.457z",
      "box": 24,
      "bg": "#EA4335"
    }
  },
  "author": "pal",
  "spec": "github:zcag/pal/extensions/gmail@v0.9.1",
  "source": "https://github.com/zcag/pal/tree/HEAD/extensions/gmail",
  "commit": "63287e180ce349dac3aa87c68ce4c80bc42ad409",
  "manifest": {
    "name": "gmail",
    "title": "Gmail",
    "description": "Your Gmail inbox in the panel: read, search with Gmail's own syntax, browse labels and mark messages read, with the unread count on the bar. Each account is its own instance, and sending stays off until you turn it on.",
    "keywords": [
      "mail",
      "email"
    ],
    "version": "0.1.0",
    "multi": true,
    "icon": {
      "tile": {
        "svg": "M24 5.457v13.909c0 .904-.732 1.636-1.636 1.636h-3.819V11.73L12 16.64l-6.545-4.91v9.273H1.636A1.636 1.636 0 0 1 0 19.366V5.457c0-2.023 2.309-3.178 3.927-1.964L5.455 4.64 12 9.548l6.545-4.91 1.528-1.145C21.69 2.28 24 3.434 24 5.457z",
        "box": 24,
        "bg": "#EA4335"
      }
    },
    "author": "pal",
    "repo": "bundled",
    "license": "MIT",
    "settings": [
      {
        "kind": "text",
        "id": "token_command",
        "scope": "instance",
        "label": "Token command",
        "description": "A shell command that prints an access token for the Gmail API: a bare token, or the JSON an OAuth endpoint answers (access_token, expires_in). The command owns the secret; pal keeps the token in memory until it expires and never writes it anywhere. gcloud auth application-default print-access-token, a helper, a broker behind ssh.",
        "placeholder": "gcloud auth application-default print-access-token",
        "default": ""
      },
      {
        "kind": "text",
        "id": "address",
        "scope": "instance",
        "label": "Address",
        "description": "The account's address, for the links into Gmail and the bar tooltip; read from the API when empty.",
        "placeholder": "you@gmail.com",
        "default": ""
      },
      {
        "kind": "list",
        "id": "labels",
        "label": "Labels",
        "description": "Labels whose unread mail the Inbox palette lists besides the inbox, one per line by name (a filter that skips the inbox, a list you follow).",
        "placeholder": "GitHub",
        "default": []
      },
      {
        "kind": "boolean",
        "id": "send",
        "scope": "instance",
        "label": "Send and change mail",
        "text": "Compose, reply, drafts, archive and star for this account",
        "description": "Off (the default) leaves the account read and mark-read only: no compose, no reply, no drafts, no archive, no star, whatever the token could do. Never inherited by another instance.",
        "default": false
      },
      {
        "kind": "text",
        "id": "signature",
        "label": "Signature",
        "description": "Appended under the body of a message composed or replied here, after a blank line.",
        "placeholder": "Cagdas",
        "default": ""
      }
    ],
    "palettes": {
      "inbox": {
        "title": "Inbox ({instance})",
        "description": "The inbox, unread first then recent, with the sender's avatar, the subject, the snippet, the labels, an attachment mark and the date; the pane is the message as text with the quoted replies folded.",
        "kind": "live",
        "lazy": true,
        "rank": 10,
        "keys": [
          {
            "keys": "enter",
            "title": "Open the message in Gmail"
          },
          {
            "keys": "cmd+enter",
            "title": "Mark as read (Mark as unread on a read row)"
          },
          {
            "keys": "cmd+e",
            "title": "Archive (send on)"
          },
          {
            "keys": "cmd+s",
            "title": "Star or unstar (send on)"
          },
          {
            "keys": "cmd+shift+r",
            "title": "Reply with the text typed in the bar (send on)"
          },
          {
            "keys": "cmd+c",
            "title": "Copy the link"
          }
        ]
      },
      "search": {
        "title": "Search Mail ({instance})",
        "description": "Gmail's search as you type, its syntax passed through (from:, to:, subject:, has:attachment, newer_than:7d, label:), sectioned by label.",
        "kind": "input",
        "keys": [
          {
            "keys": "enter",
            "title": "Open the message in Gmail"
          },
          {
            "keys": "cmd+enter",
            "title": "Mark as read (Mark as unread on a read row)"
          },
          {
            "keys": "cmd+e",
            "title": "Archive (send on)"
          },
          {
            "keys": "cmd+s",
            "title": "Star or unstar (send on)"
          },
          {
            "keys": "cmd+shift+r",
            "title": "Reply with the text typed in the bar (send on)"
          },
          {
            "keys": "cmd+c",
            "title": "Copy the link"
          }
        ]
      },
      "labels": {
        "title": "Labels ({instance})",
        "description": "Every label of the account, yours and Gmail's; a row opens the label in Gmail or searches it here.",
        "kind": "list",
        "lazy": true,
        "ttl": 3600,
        "tier": "catalog",
        "keys": [
          {
            "keys": "enter",
            "title": "Open the label in Gmail"
          },
          {
            "keys": "cmd+enter",
            "title": "Search the label here"
          },
          {
            "keys": "cmd+c",
            "title": "Copy the label name"
          }
        ]
      },
      "compose": {
        "title": "Compose ({instance})",
        "description": "A new message as a form: to, cc, subject, body; the signature under it. Only with send on for the account.",
        "kind": "list",
        "keys": [
          {
            "keys": "enter",
            "title": "Open the form; on the form, send"
          }
        ]
      },
      "drafts": {
        "title": "Drafts ({instance})",
        "description": "The drafts of the account with the recipient and the subject; open one in Gmail, send it, or discard it. Only with send on for the account.",
        "kind": "live",
        "lazy": true,
        "keys": [
          {
            "keys": "enter",
            "title": "Open the draft in Gmail"
          },
          {
            "keys": "cmd+enter",
            "title": "Send the draft, after a confirmation"
          },
          {
            "keys": "cmd+d",
            "title": "Discard the draft, after a confirmation"
          }
        ]
      }
    },
    "bar": {
      "unread": {
        "title": "Unread",
        "description": "The unread count of the inbox as a badge, hidden at zero, the account's title beside the glyph when it has one; the popover lists every unread as a row (the sender's mark, who wrote it, the subject and its snippet, the time, a star or a paperclip) with a cursor the arrows move and a click sets.",
        "refresh": {
          "every": 120,
          "on": [
            "show",
            "wake",
            "network"
          ]
        },
        "mocks": {
          "unread": {
            "title": "Unread mail",
            "item": {
              "icon": "󰇮",
              "badge": 3,
              "tooltip": "3 unread messages in you@example.com"
            }
          },
          "one": {
            "title": "One unread message",
            "item": {
              "icon": "󰇮",
              "badge": 1,
              "tooltip": "1 unread message in you@example.com"
            }
          },
          "named": {
            "title": "A named account",
            "item": {
              "icon": "󰇮",
              "title": "Work",
              "badge": 7,
              "tooltip": "7 unread messages in you@work.example"
            }
          },
          "clear": {
            "title": "Nothing unread",
            "item": {
              "hidden": true,
              "empty": {
                "icon": "󰇮",
                "tooltip": "No unread mail in you@example.com"
              }
            }
          },
          "out": {
            "title": "Signed out",
            "item": {
              "hidden": true
            }
          }
        },
        "keys": [
          {
            "keys": "enter",
            "title": "Open the focused message in Gmail"
          },
          {
            "keys": "m",
            "title": "Mark the focused message read"
          },
          {
            "keys": "s",
            "title": "Star the focused message, or take its star off"
          },
          {
            "keys": "a",
            "title": "Mark every listed message read"
          },
          {
            "keys": "o",
            "title": "Open Gmail"
          },
          {
            "keys": "p",
            "title": "Open the Inbox palette in pal"
          },
          {
            "keys": "cmd+c",
            "title": "Copy a link to the focused message"
          },
          {
            "keys": "up, down",
            "title": "Move between the rows; a click on a row focuses it"
          }
        ]
      }
    },
    "store": {
      "tagline": "Your inbox in the panel, its count on the bar, per account",
      "category": "integration",
      "features": [
        "The inbox, unread first: sender, subject, snippet, labels and attachments at a glance",
        "`enter` opens the thread in Gmail, `cmd+enter` marks it read; the side pane shows the message as text",
        "Search with Gmail's own syntax (`from:`, `has:attachment`, `newer_than:7d`) and browse every label",
        "An unread count on the bar, hidden at zero; its popover lists the unread messages",
        "Several accounts side by side, each with its own tile badge, token and bar item",
        "Compose, reply, drafts, archive and star, only on accounts where you turn sending on"
      ],
      "permissions": [
        "network",
        "token"
      ],
      "platforms": [
        "macos",
        "linux"
      ],
      "screenshots": [
        {
          "file": "1-inbox.png",
          "caption": "Inbox: unread first, the sender, the subject and the snippet, a star or a paperclip, the time"
        },
        {
          "file": "2-detail.png",
          "caption": "The pane: the message as text with the quote folded, who and when, the labels, the attachment and its size"
        },
        {
          "file": "3-search.png",
          "caption": "Search Mail: Gmail's own syntax typed into the panel, the hits sectioned by label"
        },
        {
          "file": "4-labels.png",
          "caption": "Labels: yours and Gmail's, Enter opens one in Gmail, cmd+Enter searches it here"
        },
        {
          "file": "5-compose.png",
          "caption": "Compose: to, cc, subject and body, the signature already under it; only with send on"
        },
        {
          "file": "6-drafts.png",
          "caption": "Drafts: the recipient and the subject; send or discard, each after asking"
        },
        {
          "file": "bar-menubar.png",
          "caption": "On the menu bar: the envelope with the unread count, the account's title beside it",
          "kind": "bar"
        },
        {
          "file": "bar-popover.png",
          "caption": "A click opens the popover: every unread message with the sender, subject and time, a star or a paperclip; m marks one read, a marks them all",
          "kind": "bar",
          "box": [
            378,
            64,
            840,
            740
          ]
        },
        {
          "file": "bar-sketchybar.png",
          "caption": "On sketchybar: the envelope, the account's title and the count",
          "kind": "bar"
        }
      ],
      "actions": [
        {
          "title": "Open in Gmail",
          "description": "The thread in the browser, in the account's own Gmail.",
          "keys": "enter"
        },
        {
          "title": "Mark as read",
          "description": "On an unread row; Mark as unread on a read one. Mark several rows (cmd-click, shift-click) to do them at once.",
          "keys": "cmd+enter"
        },
        {
          "title": "Archive",
          "description": "Out of the inbox; send on only.",
          "keys": "cmd+e"
        },
        {
          "title": "Star",
          "description": "Star or unstar; send on only.",
          "keys": "cmd+s"
        },
        {
          "title": "Reply",
          "description": "The text typed in the bar goes to the sender under the Re: subject, the original quoted under it; a form with to, cc, subject and body when picked without it; send on only.",
          "keys": "cmd+shift+r"
        },
        {
          "title": "Copy link",
          "keys": "cmd+c"
        },
        {
          "title": "Search label",
          "description": "On a label row: the search palette with label:\u003cname\u003e typed.",
          "keys": "cmd+enter"
        },
        {
          "title": "Copy name",
          "description": "On a label row.",
          "keys": "cmd+c"
        },
        {
          "title": "Compose",
          "description": "The form, then the message from the account.",
          "keys": "enter"
        },
        {
          "title": "Send draft",
          "description": "Asks first.",
          "keys": "cmd+enter"
        },
        {
          "title": "Discard draft",
          "description": "Asks first.",
          "keys": "cmd+d"
        },
        {
          "title": "Open Gmail settings",
          "description": "On a hint row: the extension's settings."
        }
      ]
    }
  },
  "playable": false,
  "updated_at": "2026-09-30T01:45:08Z",
  "url": "https://pal.cagdas.io/extensions/gmail",
  "tagline": "Your inbox in the panel, its count on the bar, per account",
  "category": "integration",
  "screenshots": [
    "https://pal.cagdas.io/extensions/gmail/screenshots/1-inbox-dark.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/1-inbox.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/2-detail-dark.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/2-detail.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/3-search-dark.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/3-search.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/4-labels-dark.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/4-labels.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/5-compose-dark.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/5-compose.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/6-drafts-dark.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/6-drafts.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/bar-menubar-dark.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/bar-menubar.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/bar-popover-dark.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/bar-popover.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/bar-sketchybar-dark.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/bar-sketchybar.png"
  ],
  "panel_screenshots": [
    "https://pal.cagdas.io/extensions/gmail/screenshots/1-inbox.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/2-detail.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/3-search.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/4-labels.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/5-compose.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/6-drafts.png"
  ],
  "bar_screenshots": [
    "https://pal.cagdas.io/extensions/gmail/screenshots/bar-menubar.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/bar-popover.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/bar-sketchybar.png"
  ],
  "panel_screenshots_dark": [
    "https://pal.cagdas.io/extensions/gmail/screenshots/1-inbox-dark.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/2-detail-dark.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/3-search-dark.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/4-labels-dark.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/5-compose-dark.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/6-drafts-dark.png"
  ],
  "bar_screenshots_dark": [
    "https://pal.cagdas.io/extensions/gmail/screenshots/bar-menubar-dark.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/bar-popover-dark.png",
    "https://pal.cagdas.io/extensions/gmail/screenshots/bar-sketchybar-dark.png"
  ],
  "has_bar": true,
  "bar_items": [
    {
      "id": "unread",
      "title": "Unread",
      "description": "The unread count of the inbox as a badge, hidden at zero, the account's title beside the glyph when it has one; the popover lists every unread as a row (the sender's mark, who wrote it, the subject and its snippet, the time, a star or a paperclip) with a cursor the arrows move and a click sets.",
      "refresh": {
        "every": 120,
        "on": [
          "show",
          "wake",
          "network"
        ]
      },
      "refresh_words": "every 2 min, when the panel shows, on wake, when the network is back"
    }
  ],
  "has_links": false,
  "links": [],
  "multi": true,
  "has_readme": true
}
