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

# Plan limits

> The complete entitlement matrix for Vowen's Free and Pro plans, generated from code.

Everything on this page is read from `src/shared/plan-limits.js`.

## Quotas

| Quota                      | Free      | Pro       | Kind                 |
| -------------------------- | --------- | --------- | -------------------- |
| Manual file transcriptions | 10        | Unlimited | Effectively lifetime |
| Saved notes                | 10        | Unlimited | Concurrent cap       |
| Command Mode calls         | 5         | Unlimited | Per day              |
| Custom workflows           | 3         | Unlimited | Concurrent cap       |
| Memory items               | 3         | Unlimited | Concurrent cap       |
| Custom expansions          | 1         | Unlimited | Concurrent cap       |
| Tones                      | 1         | Unlimited | Concurrent cap       |
| Custom utilities           | 1         | Unlimited | Concurrent cap       |
| Dictation transcriptions   | Unlimited | Unlimited | No cap               |
| Dictionary words           | Unlimited | Unlimited | No cap               |
| Threads                    | Unlimited | Unlimited | No cap               |

### What each kind means

<AccordionGroup>
  <Accordion title="Effectively lifetime: manual file transcriptions">
    The limit is checked against the number of manual transcriptions currently stored. It is
    not a counter that only goes up. But free users cannot delete transcriptions, so in
    practice nothing ever recycles a slot and the cap behaves as a lifetime total of 10.

    Enforced in the main process, in three places: the IPC handler that starts a manual
    transcription, the local CLI API server, and the watch-folder importer. There is no way
    to route around it from the UI, the CLI or a watched folder.
  </Accordion>

  <Accordion title="Per day: Command Mode calls">
    The counter stores the current date alongside the count and resets when the date rolls
    over. Enforced in the main process before each Command Mode call.

    The counter is stored in plaintext `settings.json` today.
  </Accordion>

  <Accordion title="Concurrent cap: workflows, memory, expansions, tones, utilities">
    These cap how many items you may have at once, not how many you may ever create. Deleting
    one frees a slot.

    They are enforced twice. Creating an item past the cap is refused up front by the main
    process with a paywall message. Separately, at the point each list is actually used, the
    list is trimmed to the cap and **the extra items are silently suppressed** rather than
    producing an error. The oldest items survive, sorted by creation time; built-in expansions
    and default tones are exempt and never count against the cap.

    That second layer is what you notice if a settings file arrives from another machine, or
    from a period when you had Pro: the items are still listed, but only the first few work.
  </Accordion>

  <Accordion title="Concurrent cap: saved notes">
    Ten stored notes. This one is checked **only in the renderer**: the Notes page disables the
    Start Taking Notes button once you hit ten. There is no matching check in the main process,
    so paths that do not go through that button are not covered by it.
  </Accordion>
</AccordionGroup>

<Warning>
  **No hour-based cap applies to meeting recording**, on either plan. You may see a 5-hour figure
  quoted elsewhere. It is not a limit you can hit: a 5-hour value exists in `plan-limits.js` and a
  checker sums `durationSeconds` across your stored notes, but nothing in the app ever writes
  `durationSeconds`, so the sum is always zero and the check never fires. It is deliberately left
  out of the table above. The real meeting-notes limit on the Free plan is **10 saved notes**.
</Warning>

## Features

Yes means available on that tier.

| Feature                                                 | Free | Pro | Where it is enforced                                                           |
| ------------------------------------------------------- | ---- | --- | ------------------------------------------------------------------------------ |
| Custom AI instructions (dictation)                      | Yes  | Yes | Main, on the enable toggle                                                     |
| Custom tone modes                                       | Yes  | Yes | Flag is never consulted                                                        |
| Real-time transcription preview (dictation)             | No   | Yes | Main, on the toggle. Also in the UI                                            |
| Speaker diarization                                     | No   | Yes | Main, including a strip that removes `diarize` at request time. Also in the UI |
| Multiple / alternative shortcuts                        | No   | Yes | Main and UI                                                                    |
| Import / Export data                                    | No   | Yes | Main and UI                                                                    |
| Mute or pause background audio                          | No   | Yes | Main, on the toggle. Also in the UI                                            |
| Delete transcriptions and notes                         | No   | Yes | Main, on every delete handler including the CLI. Also in the UI                |
| Export a note as PDF, TXT, MD, SRT or VTT               | No   | Yes | Main                                                                           |
| Bulk export of notes or transcriptions                  | No   | Yes | Main                                                                           |
| Real-time preview inside a note                         | No   | Yes | Main                                                                           |
| Auto-detect meetings                                    | No   | Yes | Main, on the toggle                                                            |
| Auto-stop notes when the meeting ends                   | No   | Yes | Main, on the toggle                                                            |
| Chat with notes and transcripts (Ask AI)                | No   | Yes | Main                                                                           |
| Auto-add corrections to Dictionary                      | No   | Yes | Main, on the toggle                                                            |
| Auto-translate to English                               | No   | Yes | Main, on the toggle                                                            |
| Custom summary templates                                | No   | Yes | Main                                                                           |
| Custom instructions for note summaries                  | No   | Yes | Main, on the toggle                                                            |
| Summary citations                                       | No   | Yes | Main, on the toggle                                                            |
| Obsidian integration                                    | No   | Yes | Main                                                                           |
| Cloud Sync                                              | No   | Yes | Main, on the nested `sync.enabled` toggle. Also in the UI                      |
| Import notes                                            | No   | Yes | Main                                                                           |
| Queue transcriptions in parallel                        | No   | Yes | Main, and the UI                                                               |
| Custom API providers                                    | No   | Yes | Main                                                                           |
| Connectors (MCP)                                        | No   | Yes | Main, on every connector handler                                               |
| Webhooks and scripts in workflows                       | No   | Yes | Main                                                                           |
| Cursor / Windsurf file tagging                          | No   | Yes | Main, on the toggle                                                            |
| Watch folders                                           | No   | Yes | Main, and the UI                                                               |
| Public share links                                      | No   | Yes | Main, and the UI                                                               |
| Notes integrations (`notesIntegrations`)                | No   | Yes | Flag is never consulted                                                        |
| MCP / webhooks legacy alias (`integrationsMcpWebhooks`) | No   | Yes | Flag is never consulted                                                        |
| Pause / unpause legacy alias (`pauseUnpause`)           | No   | Yes | Flag is never consulted                                                        |
| Custom utilities (`customUtility`)                      | No   | Yes | Flag is never consulted; the quota governs instead                             |

<Note>
  **Custom AI instructions for dictation are free on both plans.** The comment in the source is
  explicit: "Unlocked for everyone". The separate custom-instructions field for meeting-note
  summaries is a different flag, and that one is Pro.
</Note>

<Warning>
  **Free users cannot delete.** `deleteHistory` is Pro-only, deliberately, so that quota slots
  cannot be recycled. It is enforced in the main process on the delete handlers for
  transcriptions, notes and the CLI, so there is no back door. If you are on the Free plan and
  hit the 10-transcription or 10-note wall, deleting will not clear it.
</Warning>

### Flags that exist but are never checked

Four flags are declared in `plan-limits.js` and are never passed to a feature check anywhere in
the app: `notesIntegrations`, `integrationsMcpWebhooks`, `pauseUnpause` and `customUtility`.
They are listed above for completeness. The behavior they look like they describe is actually
governed by other flags or by a quota:

| Dead flag                 | What actually governs the behavior          |
| ------------------------- | ------------------------------------------- |
| `notesIntegrations`       | `obsidianIntegration` and `webhooksScripts` |
| `integrationsMcpWebhooks` | `connectors` and `webhooksScripts`          |
| `pauseUnpause`            | `muteBackgroundAudio`                       |
| `customUtility`           | The `maxCustomUtility` quota                |

## Main process versus UI

Two different mechanisms, with different guarantees.

<AccordionGroup>
  <Accordion title="Main-process enforcement">
    The main process resolves your plan from the licence state, then answers three kinds of
    question: is this feature allowed, is this count under the quota, and what does this list
    look like after trimming.

    On top of that, every settings write passes through a gate that refuses to *enable* a
    Pro-only boolean on the Free plan and replies with a paywall message. Turning one off is
    always allowed. A separate pass masks Pro-only booleans out of the settings object
    broadcast to the renderer, so a hand-edited `settings.json` full of `true` values does not
    make the UI look unlocked.

    This is the layer that cannot be bypassed by the CLI, by IPC, or by editing the settings
    file.
  </Accordion>

  <Accordion title="UI-only enforcement">
    Some gates exist only in the renderer, as a disabled button or a Pro badge. The
    **10 saved notes** cap is the clearest example: the Notes page disables Start Taking Notes,
    and there is no matching check in the main process.

    Renderer gates are a good user experience but not a security boundary.
  </Accordion>
</AccordionGroup>

## Licence and devices

| Item                | Value                                          | Source                     |
| ------------------- | ---------------------------------------------- | -------------------------- |
| Price               | \$49                                           | `src/shared/constants.js`  |
| Billing             | One-time, lifetime licence, all future updates | `src/shared/constants.js`  |
| Devices per licence | Stated as 3 in the app's own copy              | In-app pricing string only |

<Note>
  The device limit is enforced by the payment provider during activation, not by Vowen. This
  repository sends an activation request and reads the answer, so the number of activation slots
  cannot be verified from the code here. The figure of three comes from the in-app copy.
</Note>

## Related

<CardGroup cols={2}>
  <Card title="Settings reference" href="/reference/settings">
    Which settings rows sit behind each of these gates.
  </Card>

  <Card title="Shortcuts" href="/reference/shortcuts">
    Alternative and multiple bindings are a Pro feature.
  </Card>
</CardGroup>
