docs(perplexica): rename to "Perplexica / Vane" across user-facing surfaces

Background: the open-source self-hosted repo (ItzCrazyKns/Perplexica)
was renamed to Vane on 2026-03-09 by its maintainer (commit
'feat(app): rename to vane'). The hosted service at perplexica.io
remains live under the Perplexica brand — that's a separate hosted
product, not what users self-install for this plugin. The local API
surface (/api/search, focus modes, optimization modes) is unchanged
across the rename.

Updates "Perplexica" to "Perplexica / Vane" wherever a user can see
the string — command palette, modals, notice toasts, editor-injected
callouts, settings tab, README. Internal references (class names,
method names, CSS classes, command IDs, settings field names) are
left bare to avoid breaking compatibility or requiring migration.

main.ts
- Command names: 'Ask Perplexica' / 'Update Perplexica URL' /
  'Show Perplexica Settings' all gain '/ Vane'.
- Notice toasts (service not initialized, failed to open modal,
  current URL display) updated.
- Settings tab section heading 'Perplexica (Self-Hosted)' →
  'Perplexica / Vane (self-hosted)'; all 9 endpoint/model/template/
  prompt/placeholder labels and descriptions in that section
  updated to read 'Perplexica / Vane'.
- URLUpdateModal config (title + label) for the Update URL command
  updated to match the new command name.
- Default Perplexica query placeholder updated.

src/modals/PerplexicaModal.ts
- Header title, subtitle, submit button all read 'Ask Perplexica / Vane'.

src/services/perplexicaService.ts
- Editor-injected callout '**Perplexica Query**' / '### **Response
  from Perplexica**' both updated.
- Error notice prefix 'Perplexica Error:' → 'Perplexica / Vane Error:'.

README.md
- Top blurb, features bullet, network-use table row, "Using" section
  heading + TOC anchor (slug regenerated), full Commands table.
- Install section rewrite: heading marks the local-install
  requirement explicit; new rename callout points users at
  github.com/ItzCrazyKns/Vane for docs while explaining what got
  renamed and what didn't (perplexica.io is still a separate
  hosted brand).

Intentionally bare (justified):
- Example JSON content '"What is Perplexica's architecture?"'
  (sample content, not a UI label).
- Internal Error throws + console logs (dev-only surface).
- Code comments.
- Lines 98-102 of README, inside the rename callout itself —
  those sentences distinguish the two names by design.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
mpstaton 2026-05-02 21:27:40 -05:00
parent 14962edde1
commit 49168823f1
4 changed files with 66 additions and 45 deletions

View file

@ -1,7 +1,7 @@
![Perplexed: An Obsidian Plugin for Perplexity and Perplexica](https://i.imgur.com/MVOK3rk.png)
![Perplexed: An Obsidian Plugin for Perplexity and Perplexica / Vane](https://i.imgur.com/MVOK3rk.png)
# Perplexed: AI Content Generation for Obsidian
**Perplexed** is an Obsidian plugin that enables AI-powered content generation with source citations using [Perplexity](https://www.perplexity.ai/) and [Perplexica](https://perplexica.io/). This plugin brings research-grade AI capabilities directly into your Obsidian workspace, allowing you to generate well-cited content for your notes.
**Perplexed** is an Obsidian plugin that enables AI-powered content generation with source citations using [Perplexity](https://www.perplexity.ai/), [Anthropic Claude](https://www.anthropic.com/), and [Perplexica / Vane](https://github.com/ItzCrazyKns/Vane) (self-hosted). This plugin brings research-grade AI capabilities directly into your Obsidian workspace, allowing you to generate well-cited content for your notes.
## 🎯 Key Features
@ -15,7 +15,7 @@ ## 🎯 Key Features
[2]: 2025, Jun 16. [Governance, risk and compliance (GRC): Definitions and resources](https://www.diligent.com/resources/guides/grc). Published: 2025-05-27 | Updated: 2025-06-16
> ```
- **Multiple AI Providers**: Support for Perplexity, Anthropic Claude, Perplexica (self-hosted), and LM Studio (local)
- **Multiple AI Providers**: Support for Perplexity, Anthropic Claude, Perplexica / Vane (self-hosted), and LM Studio (local)
- **Streaming Responses**: Real-time streaming of AI responses for better UX
- **Flexible Configuration**: Customizable endpoints, models, and parameters
- **Deep Research Mode**: Comprehensive research across hundreds of sources
@ -32,7 +32,7 @@ ## Network use and accounts
|---|---|---|---|
| Perplexity | `https://api.perplexity.ai/chat/completions` | Required | Required (paid) |
| Anthropic Claude | `https://api.anthropic.com/v1/messages` | Required | Required (paid) |
| Perplexica | `http://localhost:3030/api/search` (default; user-configurable) | Not required | Not required (self-hosted) |
| Perplexica / Vane ([install required](https://github.com/ItzCrazyKns/Vane)) | `http://localhost:3030/api/search` (default; user-configurable) | Not required | Not required (self-hosted, runs locally) |
| LM Studio | `http://localhost:1234/v1/chat/completions` (default; user-configurable) | Not required | Not required (runs locally) |
The plugin does not collect telemetry, ship vault content anywhere else,
@ -45,7 +45,7 @@ ## 📋 Table of Contents
- [Installation](#installation)
- [Initial Setup](#initial-setup)
- [Using Perplexity](#using-perplexity)
- [Using Perplexica](#using-perplexica)
- [Using Perplexica / Vane](#using-perplexica--vane)
- [Using LM Studio](#using-lm-studio)
- [Command Reference](#command-reference)
- [Developer Onboarding](#developer-onboarding)
@ -87,18 +87,39 @@ ### 1. Configure Perplexity (Recommended for most users)
- Enter your Perplexity API key
- The default endpoint should work: `https://api.perplexity.ai/chat/completions`
### 2. Configure Perplexica (Self-hosted alternative)
### 2. Configure Perplexica / Vane (self-hosted — requires local install)
Perplexica is a free, open-source alternative that you can host yourself.
Perplexica / Vane is a free, open-source AI search engine that you run
**locally on your own machine**. This plugin does not bundle the server
or proxy to a hosted instance — you must install and run it yourself
before the "Ask Perplexica / Vane" command will work.
1. **Set up Perplexica Server**:
- Follow the [Perplexica setup guide](https://perplexica.io/)
- Ensure your server is running and accessible
> **Note on naming:** The maintainer (`ItzCrazyKns`) renamed the
> open-source self-hosted repo from **Perplexica** to **Vane** on
> 2026-03-09 (commit `feat(app): rename to 'vane'`). The old GitHub URL
> `ItzCrazyKns/Perplexica` redirects to `ItzCrazyKns/Vane`. A hosted
> service at [perplexica.io](https://perplexica.io/) remains live under
> the Perplexica name — that's a separate hosted product, not what you
> self-install for use with this plugin. The local API surface this
> plugin talks to (`/api/search`, focus modes, optimization modes) is
> unchanged across the rename.
2. **Configure in Plugin**:
- Open plugin settings
- Set the Perplexica endpoint (e.g., `http://localhost:3030/api/search`)
- Configure your preferred model and settings
1. **Install Perplexica / Vane locally**:
- Repo and full installation docs:
[github.com/ItzCrazyKns/Vane](https://github.com/ItzCrazyKns/Vane)
- Docker is the recommended install path; the repo's README walks
through `docker-compose` setup, configuring SearXNG, and choosing
your local LLM provider (Ollama, LM Studio, OpenAI-compatible
endpoints, etc.).
- Confirm the server is running and reachable, e.g.:
`curl http://localhost:3030/api/search`
2. **Configure in this plugin**:
- Open Obsidian Settings → Community Plugins → Perplexed
- Set the Perplexica / Vane endpoint to where your local server is
listening (default: `http://localhost:3030/api/search`)
- Pick a focus mode, optimization mode, and the local model you've
configured the server to use
### 3. Configure LM Studio (Optional)
@ -195,12 +216,12 @@ #### Example Usage
Artificial Intelligence (AI) is fundamentally transforming how we work across various industries and sectors. From automating routine tasks to enabling more sophisticated decision-making processes, AI technologies are reshaping traditional workflows and creating new opportunities for productivity and innovation.
```
## Using Perplexica
## Using Perplexica / Vane
### Quick Start
1. **Open Command Palette**: `Ctrl/Cmd + Shift + P`
2. **Run Command**: Type "Ask Perplexica" and select it
2. **Run Command**: Type "Ask Perplexica / Vane" and select it
3. **Enter Your Question**: Type your research question
4. **Configure Options**:
- **Focus Mode**: Choose search specialization
@ -280,13 +301,13 @@ ### Perplexity Commands
| `Update Perplexity URL` | Change Perplexity API endpoint | Settings command |
| `Show Perplexity Settings` | Display current Perplexity configuration | Debug command |
### Perplexica Commands
### Perplexica / Vane Commands
| Command | Description | Usage |
|---------|-------------|-------|
| `Ask Perplexica` | Query Perplexica with focus and optimization modes | Editor command with modal interface |
| `Update Perplexica URL` | Change Perplexica API endpoint | Settings command |
| `Show Perplexica Settings` | Display current Perplexica configuration | Debug command |
| `Ask Perplexica / Vane` | Query Perplexica / Vane with focus and optimization modes | Editor command with modal interface |
| `Update Perplexica / Vane URL` | Change Perplexica / Vane API endpoint | Settings command |
| `Show Perplexica / Vane Settings` | Display current Perplexica / Vane configuration | Debug command |
### LM Studio Commands

40
main.ts
View file

@ -158,7 +158,7 @@ const DEFAULT_SETTINGS: PerplexedPluginSettings = {
// Placeholder text
perplexityQueryPlaceholder: "What would you like to ask Perplexity?",
perplexicaQueryPlaceholder: "What would you like to ask Perplexica?",
perplexicaQueryPlaceholder: "What would you like to ask Perplexica / Vane?",
lmStudioQueryPlaceholder: "What would you like to ask?",
lmStudioSystemPromptPlaceholder: "You are a helpful AI assistant...",
articleTermPlaceholder: "e.g., AI Copilots, AI Studios, Machine Learning, etc.",
@ -549,11 +549,11 @@ export default class PerplexedPlugin extends Plugin {
// Command to update Perplexica URL
this.addCommand({
id: 'update-perplexica-url',
name: 'Update Perplexica URL',
name: 'Update Perplexica / Vane URL',
callback: () => {
const modal = new URLUpdateModal(this.app, {
title: 'Update Perplexica API URL',
label: 'Perplexica API URL',
title: 'Update Perplexica / Vane API URL',
label: 'Perplexica / Vane API URL',
placeholder: 'http://localhost:3030/api/search',
currentValue: this.settings.perplexicaEndpoint,
onSave: async (newUrl: string) => {
@ -568,9 +568,9 @@ export default class PerplexedPlugin extends Plugin {
// Command to show current settings
this.addCommand({
id: 'show-perplexica-settings',
name: 'Show Perplexica Settings',
name: 'Show Perplexica / Vane Settings',
callback: () => {
new Notice(`Current Perplexica URL: ${this.settings.perplexicaEndpoint}`);
new Notice(`Current Perplexica / Vane URL: ${this.settings.perplexicaEndpoint}`);
console.log('Perplexica Settings:', this.settings);
}
});
@ -578,11 +578,11 @@ export default class PerplexedPlugin extends Plugin {
// Command to ask Perplexica
this.addCommand({
id: 'ask-perplexica',
name: 'Ask Perplexica',
name: 'Ask Perplexica / Vane',
editorCallback: (editor: Editor) => {
try {
if (!this.perplexicaService) {
new Notice('Perplexica service not initialized. Please check console for errors and try the debug command.');
new Notice('Perplexica / Vane service not initialized. Please check console for errors and try the debug command.');
console.error('Perplexica service is not initialized');
return;
}
@ -595,7 +595,7 @@ export default class PerplexedPlugin extends Plugin {
modal.open();
} catch (error) {
console.error('Error opening Perplexica modal:', error);
new Notice('Failed to open Perplexica modal. Check console for details.');
new Notice('Failed to open Perplexica / Vane modal. Check console for details.');
}
}
});
@ -1135,17 +1135,17 @@ class PerplexedSettingTab extends PluginSettingTab {
await this.plugin.saveSettings();
}));
// Perplexica Section
const perplexicaHeader = containerEl.createEl('h3', { text: 'Perplexica (Self-Hosted)' });
// Perplexica / Vane Section
const perplexicaHeader = containerEl.createEl('h3', { text: 'Perplexica / Vane (self-hosted)' });
perplexicaHeader.style.color = 'var(--text-accent)';
containerEl.createEl('p', {
text: 'Configure settings for your local Perplexica installation',
text: 'Configure settings for your local Perplexica / Vane installation',
cls: 'setting-item-description'
});
new Setting(containerEl)
.setName('Endpoint')
.setDesc('API endpoint for your local Perplexica instance')
.setDesc('API endpoint for your local Perplexica / Vane instance')
.addText(text => text
.setPlaceholder('http://localhost:3030/api/search')
.setValue(this.plugin.settings.perplexicaEndpoint)
@ -1169,7 +1169,7 @@ class PerplexedSettingTab extends PluginSettingTab {
new Setting(containerEl)
.setName('Default Model')
.setDesc('Default AI model for Perplexica to use')
.setDesc('Default AI model for Perplexica / Vane to use')
.addText(text => text
.setPlaceholder('llama3.2:latest')
.setValue(this.plugin.settings.defaultModel)
@ -1182,7 +1182,7 @@ class PerplexedSettingTab extends PluginSettingTab {
// Perplexica Request Template
const perplexicaJsonSetting = new Setting(containerEl)
.setName('Request Body Template')
.setDesc('JSON template for Perplexica API requests');
.setDesc('JSON template for Perplexica / Vane API requests');
// Create a textarea element for Perplexica
const perplexicaTextArea = document.createElement('textarea');
@ -1307,10 +1307,10 @@ class PerplexedSettingTab extends PluginSettingTab {
);
new Setting(containerEl)
.setName('Perplexica System Prompt')
.setDesc('System prompt used for Perplexica requests')
.setName('Perplexica / Vane System Prompt')
.setDesc('System prompt used for Perplexica / Vane requests')
.addTextArea(text => text
.setPlaceholder('Enter system prompt for Perplexica...')
.setPlaceholder('Enter system prompt for Perplexica / Vane...')
.setValue(this.plugin.settings.prompts.perplexicaSystemPrompt)
.onChange(async (value: string) => {
this.plugin.settings.prompts.perplexicaSystemPrompt = value;
@ -1358,8 +1358,8 @@ class PerplexedSettingTab extends PluginSettingTab {
);
new Setting(containerEl)
.setName('Perplexica Query Placeholder')
.setDesc('Placeholder text for Perplexica query input')
.setName('Perplexica / Vane Query Placeholder')
.setDesc('Placeholder text for Perplexica / Vane query input')
.addText(text => text
.setPlaceholder('Enter placeholder text...')
.setValue(this.plugin.settings.prompts.perplexicaQueryPlaceholder)

View file

@ -57,10 +57,10 @@ export class PerplexicaModal extends Modal {
// ----- Header -----
const header = contentEl.createDiv({ cls: 'perplexica-modal__header' });
header.createEl('h2', { text: 'Ask Perplexica', cls: 'perplexica-modal__title' });
header.createEl('h2', { text: 'Ask Perplexica / Vane', cls: 'perplexica-modal__title' });
header.createEl('p', {
cls: 'perplexica-modal__subtitle',
text: 'Self-hosted, source-grounded answers via your local Perplexica instance. Streams into the active note at the cursor.',
text: 'Self-hosted, source-grounded answers via your local Perplexica / Vane instance. Streams into the active note at the cursor.',
});
// ----- Question -----
@ -151,7 +151,7 @@ export class PerplexicaModal extends Modal {
cancelBtn.addEventListener('click', () => this.close());
const askBtn = footer.createEl('button', {
text: 'Ask Perplexica',
text: 'Ask Perplexica / Vane',
cls: 'perplexica-modal__button mod-cta',
});
askBtn.addEventListener('click', () => void this.onSubmit());

View file

@ -91,7 +91,7 @@ export class PerplexicaService {
// Process query to handle multi-line content in callout
const processedQuery = query.split('\n').map(line => `> ${line}`).join('\n');
editor.replaceRange(`\n\n***\n> [!info] **Perplexica Query** (${timestamp})\n> **Question:**\n${processedQuery}\n> **Focus:** ${focusMode}\n> **Optimization:** ${optimizationMode}\n> \n> ### **Response from Perplexica**:\n\n`, cursor);
editor.replaceRange(`\n\n***\n> [!info] **Perplexica / Vane Query** (${timestamp})\n> **Question:**\n${processedQuery}\n> **Focus:** ${focusMode}\n> **Optimization:** ${optimizationMode}\n> \n> ### **Response from Perplexica / Vane**:\n\n`, cursor);
// Get cursor position after header for response content
const responseCursor = editor.getCursor();
@ -210,7 +210,7 @@ export class PerplexicaService {
} catch (error) {
const errorMsg = error instanceof Error ? error.message : String(error);
new Notice(`Perplexica Error: ${errorMsg}`);
new Notice(`Perplexica / Vane Error: ${errorMsg}`);
editor.replaceRange(`\n**Error:** ${errorMsg}\n\n***\n`, editor.getCursor());
}
}