Plugins & Integrations

Synaplan is more than a chat platform — it's a base you can extend. Plugins add whole new workflows inside the app (marketing campaigns, document merging, voice output), and cloud integrations connect Synaplan to where your files already live (Nextcloud, OpenCloud, and ownCloud.online).

Everything here is open source and self-hostable. The two flagship plugins — Synaads and Synaform — are maintained by the Synaplan team and live in their own public repositories.

How plugins work, in one sentence: drop a plugin into the plugins/ folder, run a one-line install command, and it appears in the Synaplan sidebar — no changes to Synaplan's core code. The developer details are at the bottom of this page.


At a glance

Plugin What it does for you Status Repository
Synaads Turn one campaign brief into landing pages, Google Ads, ad copy, and social media graphics Available metadist/Synaads
Synaform (4.x) Extract data from uploaded files and auto-fill your Word / standard form templates Available metadist/Synaform
TTS Read AI answers aloud with a natural voice Available metadist/synaplan-tts
Synasort Sort and classify large local document folders with AI Experimental (consulting only) Coming end of 2026
Cloud integration What it does for you Repository
Nextcloud Summarize, translate, index, and research-chat over Nextcloud files metadist/synaplan-nextcloud
OpenCloud Same RAG pipeline for the OpenCloud / ownCloud Infinite Scale (oCIS) ecosystem metadist/synaplan-opencloud
ownCloud.online Same AI actions inside BW-Tech ownCloud.online (classic PHP stack) metadist/synaplan-owncloud-online

Branding note: ownCloud.online (BW-Tech managed cloud / classic PHP stack) is a different product from OpenCloud / ownCloud Infinite Scale (oCIS). Always write the full name ownCloud.online — do not shorten it to “ownCloud” alone.


Synaads — AI marketing campaigns

Repository: github.com/metadist/Synaads

Describe a product or offer once, and Synaads builds the marketing material around it. From a single campaign brief it can generate:

  • Landing pages — ready-to-publish, multilingual HTML pages with SEO metadata and a publishable public URL.
  • Google Ads plans — keyword lists, negative keywords, and ad groups, exportable for Google Ads Editor.
  • Ad copy — wording tailored to Google, LinkedIn, Facebook, and Instagram.
  • Social graphics & video — images for LinkedIn/Instagram and short promo clips.
  • Built-in compliance — automatic cookie consent, privacy-policy, and imprint checks so pages are GDPR-ready before they go live.
  • One-click export — download the whole campaign (pages, media, keywords, ad data) as a ZIP.

Who it's for: marketers and small teams who want a complete first draft of a campaign in minutes instead of days, then refine it by hand.

For developers — installing & API

Synaads installs like any Synaplan plugin (full steps in the plugin architecture section below):

git clone https://github.com/metadist/Synaads.git
cp -r Synaads/synaads-plugin /path/to/synaplan/plugins/synaads
cd /path/to/synaplan
docker compose exec backend php bin/console cache:clear
docker compose exec backend php bin/console app:plugin:install <userId> synaads

Open Plugins → SynaAds in the sidebar, or visit /plugins/synaads.

All endpoints live under /api/v1/user/{userId}/plugins/synaads/. Key routes:

Method Path Description
POST /plan AI-generate a campaign plan from an idea
GET/POST /campaigns List or create campaigns
POST /campaigns/{id}/generate Generate the landing page
POST /campaigns/{id}/generate-ad-copy Generate platform-specific ad copy
POST /campaigns/{id}/generate-keywords Generate a keyword list
POST /campaigns/{id}/generate-image · /generate-video Generate marketing media
POST /campaigns/{id}/pages/{language}/publish Publish a page at a public slug
GET /campaigns/{id}/compliance Quick GDPR compliance check
GET /campaigns/{id}/download Download the campaign as a ZIP

Per-user settings (brand name, accent color, CTA URL, privacy/imprint URLs, Google Tag Manager and Ads conversion IDs) are configured in the plugin's Settings tab. See the Synaads README for the full route list and config reference.


Synaform 4.x — fill Word templates & standard forms with AI

Repository: github.com/metadist/Synaform · Current version: 4.x (e.g. 4.3.1)

Synaform turns any repeatable "collect data → fill a document" task into a reusable Collection. You define the fields you need, upload your Word templates with {{placeholders}}, and let the AI read source files (PDFs, documents, even a web URL) to fill them in — into standard forms your organisation already uses.

What's new in 4.x: stronger document reading and extraction (Tika + multi-model AI), AI-assisted field definitions (enhance-fields, import-from-docx / pasted text), editable prompt sections, and a Collection-first UX that keeps variables, templates, and datasets in one place.

It was originally built for an HR team turning candidate CVs and interview notes into standardised profile documents — but it fits any workflow where several inputs become one templated output: customer onboarding, incident reports, intake forms, case files, and more.

How it flows:

  1. Create a Collection — give it a purpose and language.
  2. Define variables — list the fields you need, or let AI suggest / import them from a pasted definition or a draft .docx.
  3. Upload Word templates.docx files using {{variable}} placeholders; Synaform auto-detects them.
  4. Add datasets — upload the source documents for each real case; the AI extracts the rest, with an optional second-pass "LLM-as-judge" accuracy review.
  5. Generate & export — produce a filled .docx per case, and bulk-export every dataset as CSV.

The interface ships in English, German, Spanish, and Turkish.

Who it's for: any team doing the same "read these files, fill this standard form / document" job over and over and wanting to stop copy-pasting.

For developers — installing & API
git clone https://github.com/metadist/Synaform.git
cp -r Synaform/synaform-plugin /path/to/synaplan/plugins/synaform
cd /path/to/synaplan
docker compose exec backend php bin/console cache:clear
docker compose exec backend php bin/console app:plugin:install <userId> synaform

Open Plugins → Synaform in the sidebar, or visit /plugins/synaform.

Endpoints live under /api/v1/user/{userId}/plugins/synaform/. In the backend the resources keep their original names — forms are Collections and candidates are datasets:

Area Endpoints Description
Config / prompts GET/PUT /config · GET/PUT /prompts Plugin settings and editable AI prompt sections
Forms (Collections) GET/POST/PUT/DELETE /forms Variables, language, attached templates
Field assist POST /forms/{id}/enhance-fields · POST /forms/import-parse AI field suggestions; import fields from text or DOCX
Candidates (Datasets) GET/POST/PUT/DELETE /candidates One record per real case
Sources POST /candidates/{id}/upload-cv · /upload-doc · /urls Attach PDFs, docs, or a web URL
Extraction POST /candidates/{id}/extract Run AI extraction over the sources
Templates GET/POST/DELETE /templates Upload .docx; AI can suggest variables from a draft
Generation POST /candidates/{id}/generate/{templateId} Produce the filled document
Downloads GET /candidates/{id}/documents/{docId}/download · /pdf Download DOCX or rendered PDF

The full route list, template-authoring guide, and config options are in the Synaform README.


TTS — Text-to-Speech

Repository: github.com/metadist/synaplan-tts

Adds a natural-sounding voice to AI responses. It's an optional companion service — Synaplan runs perfectly without it, and switches voice output on automatically when it detects the service.

For developers — running the service
git clone https://github.com/metadist/synaplan-tts.git
cd synaplan-tts
docker compose up -d

Synaplan auto-detects the service via SYNAPLAN_TTS_URL (default http://host.docker.internal:10200). Prefer a cloud voice? Set ELEVENLABS_API_KEY to use ElevenLabs instead of the local Piper engine.


Synasort — AI document sorting (experimental)

Status: Synasort is an experimental plugin. Right now it is offered through consulting engagements only and is not yet a general release. A public release is planned for end of 2026.

Synasort watches a local folder, reads each document, and automatically files it into the right categories — extracting useful metadata like amounts, dates, and parties along the way. Think of it as an AI assistant for the piles of PDFs and scans that would otherwise need manual sorting.

It combines fast local rules (regex on filenames) with Synaplan's AI for anything the rules can't confidently classify, and a full-file analysis fallback for tricky documents.

Interested? Synasort is currently delivered as part of a consulting engagement while we harden it for general availability. Get in touch if you'd like to pilot it before the public release.


Cloud Storage Integrations

Connect Synaplan to the files you already store in a self-hosted or managed cloud, so they become searchable knowledge sources for AI chat. All three integrations run through the same OCR and text-extraction pipeline as the rest of the platform, and re-index when files change.

Treat these as three separate products:

Product Stack Integration repo
Nextcloud Nextcloud Hub 30–34 synaplan-nextcloud
OpenCloud / oCIS OpenCloud / ownCloud Infinite Scale synaplan-opencloud
ownCloud.online BW-Tech ownCloud.online 11.x (classic PHP) synaplan-owncloud-online

Nextcloud

Repository: github.com/metadist/synaplan-nextcloud · App id: synaplan_integration · Requires: Nextcloud 30–34

Bring Synaplan's RAG, chat, translations, and summaries into Nextcloud. The app installs inside Nextcloud (App Store name: Synaplan Integration) and talks to a Synaplan server that you run.

What you get:

  • Add to AI Knowledge, Summarize, Translate and Chat about this file actions in the Files app
  • A full-page Research Chat plus a floating chat launcher — streaming answers, knowledge-group / model pickers, optional personal memories, and /pic · /vid when those models are configured
  • Requests run through Synaplan's multi-task (DAG) routing on the connected instance
  • In-place knowledge updates with a "changed since indexed" indicator, and one-click removal from the knowledge base
  • Full text extraction (PDF, Word, Excel, images with OCR) through Synaplan
  • Optional per-user accounts: every Nextcloud user gets their own isolated Synaplan account, knowledge base and usage — or share a single install-wide key
  • Admin language controls: default answer language, optionally follow each user's Nextcloud interface language

Setup (overview):

  1. Install the app in Nextcloud (Apps → Synaplan Integration, or from metadist/synaplan-nextcloud).
  2. Open Admin Settings → Synaplan Integration and enter your Synaplan server URL and API key (see Environments & API keys below).
  3. Choose shared-key or per-user accounts mode, then use the Files actions and Research Chat.

Environments & API keys

The app can point at two independent Synaplan backends, each with its own URL and its own API key:

Environment Typical URL Purpose
Live https://web.synaplan.com (or your production server) Day-to-day use
Local http://localhost:8000 Development against a local Synaplan stack

An Active environment switch decides which backend the whole app uses. The single most important thing to understand:

API keys and accounts belong to one specific Synaplan server. A key issued by the Local server does not exist on the Live server, and vice versa.

  • In shared-key mode, each environment uses its own configured key (the API key for Live, the Local API key for Local).
  • In per-user mode, each Nextcloud user's Synaplan account and key are minted on the currently active server and cached in that user's Nextcloud preferences.

What goes wrong when you switch environments: if you flip the Active environment (e.g. Local → Live) without configuring the target environment, the app sends the old environment's key to the new server, which correctly rejects it:

POST https://web.synaplan.com/api/v1/summary/generate
401 Unauthorized  {"error":"Authentication required","code":"UNAUTHENTICATED"}

This is expected behaviour, not a bug — it means "this server has never seen that key." Configure the target environment's URL + key, and in per-user mode let each user re-activate AI so a key is minted on the new server.

Recommended practice: pick one environment per Nextcloud install for real use. The Local switch is a developer convenience, not a per-session toggle for end users.

Switching environments (clean reset)

Before moving an install from Local to Live (or back), clear the previous environment's saved settings and any cached per-user keys, then configure the target environment. Run on the Nextcloud server:

# 1. Point the app at Live and drop the Local dev settings
sudo -u www-data php occ config:app:set    synaplan_integration active_env --value live
sudo -u www-data php occ config:app:delete synaplan_integration api_key_local
sudo -u www-data php occ config:app:delete synaplan_integration synaplan_url_local

# 2. Per-user mode only: drop cached Synaplan keys/accounts that were minted on the
#    old server, so they are re-minted against the new one on next use
for uid in $(sudo -u www-data php occ user:list --output=json | jq -r 'keys[]'); do
  sudo -u www-data php occ user:setting "$uid" synaplan_integration synaplan_user_api_key --delete 2>/dev/null || true
  sudo -u www-data php occ user:setting "$uid" synaplan_integration synaplan_user_id     --delete 2>/dev/null || true
done

Then set the Live server URL and API key in Admin Settings → Synaplan Integration.

OpenCloud (ownCloud Infinite Scale / oCIS)

Repository: github.com/metadist/synaplan-opencloud

Full support for the OpenCloud / oCIS WebDAV and Graph API. This is the Infinite Scale lineage — not the same product as BW-Tech ownCloud.online (see next section).

What you get:

  • WebDAV and Graph API support for file access
  • Spaces-aware document indexing
  • Automatic sync and re-indexing
  • The same text-extraction and RAG pipeline as the Nextcloud integration

Setup (overview):

  1. Generate an API token or app password in your OpenCloud instance.
  2. Configure the connection in Synaplan's admin panel.
  3. Select the spaces and folders to index.

ownCloud.online

Repository: github.com/metadist/synaplan-owncloud-online · App id: oco_synaplan · Requires: BW-Tech ownCloud.online 11.0.10 (PHP 8.4)

AI summarize, translate, knowledge-base indexing, and research chat — inside ownCloud.online. Always use the brand name ownCloud.online in full (not “ownCloud” alone). This integration targets the classic PHP stack operated by BW-Tech; it is separate from the OpenCloud / oCIS integration above.

What you get:

  • Summarize and Translate from the Files context menu
  • Add to Knowledge — upload into Synaplan RAG groups, with in-place updates
  • Research Chat — full-page assistant and floating launcher; streaming answers; optional personal memories; /pic · /vid with one-click “Save to Files”
  • Configurable default answer language (optionally follow each user's ownCloud.online interface language)
  • Optional per-user Synaplan accounts with a consent gate

Setup (overview):

  1. Install the app (oco_synaplan) from source or a release tarball into the ownCloud.online apps/ directory and enable it (occ app:enable oco_synaplan).
  2. Open Settings → Admin → Synaplan, pick Live or Local, enter the Synaplan URL and API key, then Test connection.
  3. Optionally enable memories / per-user accounts, then use the Files actions and Research Chat.

Full build and packaging steps: synaplan-owncloud-online README.


For developers: the plugin architecture

Synaplan uses a non-invasive plugin architecture with automatic discovery. Plugins are self-contained under plugins/{name}/, store data in generic shared tables, and expose their own API endpoints — no modifications to Synaplan's core code are required.

How auto-discovery works

  1. BootKernel::getPlugins() scans plugins/*/manifest.json for plugin metadata.
  2. Autoloading — PSR-4 mapping is registered (e.g. Plugin\SynaAds\*plugins/synaads/backend/*).
  3. Services — every class under backend/ is autowired into Symfony's DI container.
  4. Routes — controller attributes in backend/Controller/ are auto-imported.
  5. Per-user gate — every API call checks BCONFIG {group}.enabled = 1 for the requesting user.

Plugin structure

my-plugin/
├── manifest.json           # Metadata, capabilities, routes, config schema
├── backend/
│   ├── Controller/         # API endpoints (Symfony controllers)
│   └── Service/            # Business logic
├── frontend/               # Plugin UI (vanilla JS or Vue)
└── migrations/
    └── 001_setup.sql       # Per-user config setup (BCONFIG entries)

Key rules

  • No custom database tables — use BCONFIG for key-value config (group P_{pluginName}) and the generic plugin_data table for structured data via PluginDataService.
  • No core code changes — plugins are fully self-contained under plugins/{name}/.
  • API namespacing — all endpoints live under /api/v1/user/{userId}/plugins/{name}/....
  • Reuse core services — use Synaplan's AiFacade, ModelConfigService, PluginDataService, etc. through dependency injection.

manifest.json example

{
  "id": "my-plugin",
  "name": "my-plugin",
  "namespace": "Plugin\\MyPlugin",
  "version": "1.0.0",
  "displayName": "My Plugin",
  "description": "Short description of what the plugin does",
  "author": "Your Name",
  "capabilities": ["api", "frontend", "migrations"],
  "config": { "group": "P_myplugin" }
}

Installing a plugin

# Copy the plugin directory into Synaplan
cp -r my-plugin/ /path/to/synaplan/plugins/my-plugin/

# Clear the Symfony cache so the new plugin is discovered
docker compose exec backend php bin/console cache:clear

# Install for a specific user (use the user's ID, e.g. 1 for the first admin)
docker compose exec backend php bin/console app:plugin:install <userId> my-plugin

To enable a plugin for all verified users, or automatically for new users, see the app:plugin:install-verified-users command and the DEFAULT_USER_PLUGINS env variable documented in the Synaads README.


Related Repositories

Repository Description Link
synaplan Main platform (backend + frontend + widget) github.com/metadist/synaplan
Synaads AI marketing campaign plugin github.com/metadist/Synaads
Synaform AI document-merge plugin github.com/metadist/Synaform
synaplan-tts Text-to-Speech voice service github.com/metadist/synaplan-tts
synaplan-nextcloud Nextcloud integration github.com/metadist/synaplan-nextcloud
synaplan-opencloud OpenCloud / oCIS integration github.com/metadist/synaplan-opencloud
synaplan-owncloud-online ownCloud.online integration github.com/metadist/synaplan-owncloud-online
Synamail Outlook add-in github.com/metadist/Synamail
synaplan-charts Helm charts for Kubernetes github.com/metadist/synaplan-charts

See all open repositories at github.com/orgs/metadist/repositories.