Documentation
Plugin System
Knosys has a powerful plugin system that lets you extend the app with new features. Plugins can add routes, sidebar items, widgets, and settings panels — and they look and feel just like built-in features.
A clean canvas, by design
Knosys ships with no default plugins. The base app is everything you need — notes, calendar, reminders, spotlight, sync, dashboard. Anything beyond that is a deliberate choice you make. Browse community plugins from inside the app (Settings → Plugins), or build your own with the Plugin API below.
How Plugins Work
Plugins are JavaScript bundles that run inside Knosys. Each plugin has:
- A
manifest.jsondescribing the plugin - A
main.jsentry point - Optional
styles.cssfor custom styling
When Knosys loads a plugin, it provides two objects:
api— Access to storage, UI registration, core data, and API keysshared— Access to React, shadcn components, and utility libraries
Plugin API
UI Registration
Plugins can register:
- Routes — Add new pages to the app (
api.ui.registerRoute) - Sidebar items — Add navigation entries (
api.ui.registerSidebarItem) - Settings panels — Add configuration UI (
api.ui.registerSettingsPanel)
Storage
Each plugin gets its own scoped key-value storage:
// Store data
await api.storage.set('myKey', { some: 'value' });
// Retrieve data
const data = await api.storage.get('myKey');Core Access
Plugins can access core Knosys data:
- Locations —
api.core.getLocations() - Vault path —
api.core.getVaultPath() - API keys —
api.core.getApiKey('key-name')
Creating a Plugin
To create your own plugin:
- Create a new directory for your plugin
- Add a
manifest.jsonwith name, version, and description - Write your
main.jswith anactivatefunction - Place the plugin in the Knosys plugins directory
manifest.json
{
"name": "my-plugin",
"version": "1.0.0",
"description": "My custom Knosys plugin",
"main": "main.js"
}main.js
exports.activate = (api, shared) => {
const { React } = shared;
const MyPage = () => {
return React.createElement("div", null, "Hello from my plugin!");
};
api.ui.registerRoute({
path: "/my-plugin",
component: MyPage,
});
api.ui.registerSidebarItem({
id: "my-plugin",
title: "My Plugin",
icon: "Puzzle",
route: "/my-plugin",
order: 100,
});
};