> ## Documentation Index
> Fetch the complete documentation index at: https://help.memoryplugin.com/llms.txt
> Use this file to discover all available pages before exploring further.

# TypingMind

> Use MemoryPlugin with TypingMind

export const ArticleInfo = ({author, lastUpdated}) => {
  const authorAvatar = author === 'Alara' ? '/images/author-alara.jpg' : author === 'asad' ? '/images/author-alara.jpg' : null;
  const formatDate = dateInput => {
    if (!dateInput) return '';
    if (typeof dateInput === 'string' && !dateInput.match(/^\d{4}-\d{2}-\d{2}/)) {
      return dateInput;
    }
    try {
      const date = new Date(dateInput);
      const now = new Date();
      const diffTime = Math.abs(now - date);
      const diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24));
      if (diffDays === 0) return 'today';
      if (diffDays === 1) return '1 day ago';
      if (diffDays < 7) return `${diffDays} days ago`;
      if (diffDays < 30) return `${Math.ceil(diffDays / 7)} week${Math.ceil(diffDays / 7) > 1 ? 's' : ''} ago`;
      if (diffDays < 365) return `${Math.ceil(diffDays / 30)} month${Math.ceil(diffDays / 30) > 1 ? 's' : ''} ago`;
      return `${Math.ceil(diffDays / 365)} year${Math.ceil(diffDays / 365) > 1 ? 's' : ''} ago`;
    } catch {
      return dateInput;
    }
  };
  return <div style={{
    display: "flex",
    alignItems: "center",
    gap: "8px",
    marginBottom: "16px",
    padding: "8px 12px",
    backgroundColor: "var(--ifm-color-emphasis-100)",
    borderRadius: "6px",
    fontSize: "14px",
    color: "var(--ifm-color-content-secondary)",
    border: "1px solid var(--ifm-color-emphasis-200)",
    opacity: "0.8"
  }}>
      <div style={{
    width: "40px",
    height: "40px",
    borderRadius: "50%",
    background: authorAvatar || "linear-gradient(45deg, #4F46E5, #7C3AED)",
    display: "flex",
    alignItems: "center",
    justifyContent: "center",
    color: "white",
    fontWeight: "bold",
    fontSize: "18px"
  }}>
        {authorAvatar ? <img src={authorAvatar} alt={author} style={{
    width: "100%",
    height: "100%",
    borderRadius: "50%"
  }} /> : author?.[0]?.toUpperCase()}
      </div>
      <div>
        <div style={{
    fontWeight: "400",
    fontSize: "14px"
  }}>Written by <span style={{
    fontWeight: "600"
  }}>{author}</span></div>
        <div style={{
    fontSize: "14px"
  }}>Last updated <span style={{
    fontWeight: "600"
  }}>{formatDate(lastUpdated)}</span></div>
      </div>
    </div>;
};

<ArticleInfo author="Alara" lastUpdated="2026-07-04" />

<img src="https://mintcdn.com/memoryplugin/0D7zqA9Ak-TR54pG/images/logos/typingmind.png?fit=max&auto=format&n=0D7zqA9Ak-TR54pG&q=85&s=58e9ca41b819183b08dff5f9c89784da" alt="TypingMind" width="56" height="56" noZoom style={{ background: "#fff", borderRadius: "14px", padding: "10px", boxShadow: "0 1px 2px rgba(0,0,0,0.12)", boxSizing: "border-box" }} data-path="images/logos/typingmind.png" />

TypingMind is a front end that runs many AI models through your own API keys, at [typingmind.com](https://typingmind.com). MemoryPlugin connects two ways here: a native plugin that gives the AI direct access to your memories, chat history, and files, and the browser extension.

## Set up

The plugin is the better fit for TypingMind because the AI can call your memory directly rather than relying on injected text.

<Steps>
  <Step title="Install the plugin">
    Install the [TypingMind plugin](/integrations/typingmind-plugin) and paste your MemoryPlugin Auth Token into its settings. See that guide for the functions it exposes.
  </Step>

  <Step title="Or add the extension">
    Alternatively, install the [browser extension](/integrations/browser-extension), open [typingmind.com](https://typingmind.com), and click the floating MemoryPlugin button to inject memories into a chat.
  </Step>
</Steps>

## What works here

* **Memory recall and save.** Through the plugin the AI searches and saves memories directly; through the extension you inject them into the composer.
* **Chat history sync.** TypingMind is one of the six platforms the extension can sync directly, or you can upload a TypingMind export file.
* **Extract memory pill.** With the extension, select text in a chat and click **Extract memory** to save that snippet.

## Limitations

* The plugin and the extension are separate paths. The plugin is the primary integration; add the extension only if you also want the in-page button and chat history sync.

## Next steps

<CardGroup cols={2}>
  <Card title="TypingMind Plugin" icon="keyboard" href="/integrations/typingmind-plugin">
    Setup and available functions
  </Card>

  <Card title="Browser Extension" icon="browser" href="/integrations/browser-extension">
    In-page button and sync
  </Card>
</CardGroup>
