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:
- Create a Collection — give it a purpose and language.
- Define variables — list the fields you need, or let AI suggest / import them from a
pasted definition or a draft
.docx. - Upload Word templates —
.docxfiles using{{variable}}placeholders; Synaform auto-detects them. - 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.
- Generate & export — produce a filled
.docxper 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·/vidwhen 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):
- Install the app in Nextcloud (Apps → Synaplan Integration, or from metadist/synaplan-nextcloud).
- Open Admin Settings → Synaplan Integration and enter your Synaplan server URL and API key (see Environments & API keys below).
- 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):
- Generate an API token or app password in your OpenCloud instance.
- Configure the connection in Synaplan's admin panel.
- 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·/vidwith 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):
- Install the app (
oco_synaplan) from source or a release tarball into the ownCloud.onlineapps/directory and enable it (occ app:enable oco_synaplan). - Open Settings → Admin → Synaplan, pick Live or Local, enter the Synaplan URL and API key, then Test connection.
- 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
- Boot —
Kernel::getPlugins()scansplugins/*/manifest.jsonfor plugin metadata. - Autoloading — PSR-4 mapping is registered (e.g.
Plugin\SynaAds\*→plugins/synaads/backend/*). - Services — every class under
backend/is autowired into Symfony's DI container. - Routes — controller attributes in
backend/Controller/are auto-imported. - Per-user gate — every API call checks
BCONFIG {group}.enabled = 1for 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
BCONFIGfor key-value config (groupP_{pluginName}) and the genericplugin_datatable for structured data viaPluginDataService. - 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.