Repository Data
Manifest
The community plugin list and the plugin manifest share some common fields, such as the name
, author
, and description
. This can lead to mismatched data, when only one of the two sources is updated. The following chart shows the percentage of plugins that have mismatched
data in their manifest.
Some fields in the manifest are optional, such as authorUrl
and fundingUrl
. Additionally, some plugin authors add extra,
non-standard fields to the manifest, such as helpUrl
. The following chart shows the percentage of plugins that have these fields set.
Plugins can specify that they only work on the desktop version of Obsidian, which is useful for plugins that use features not available on mobile.
Programming Languages
The below chart shows the lines of code per programming language, summed over all plugins. Only languages with more than 10,000 lines of code are shown.
The next chart shows the number of plugins that use a specific programming language, sorted by the number of plugins that use it.
Dependencies
Package Manager Usage
Plugins may bundle additional dependencies into when building a release. There are several package managers that can be used to manage these dependencies, such as npm, yarn, and pnpm. These package managers create a lockfile in the repository, which can be used to determine which package manager was used.
The below chart shows the distribution of package managers used in plugins.
17.8% of plugins have no lockfile.
Code Bundler Usage
The vast majority of plugins consist of more than just a single JavaScript file. Since Obsidian can only load a single JavaScript file, plugins need to
bundle their code into a single file. This is done using a code bundler, such as Esbuild. Usually, the bundler is listed as a dependency in the plugin's package.json
file.
3.9% of plugins use no code bundler.
Developer Tooling Usage
Plugin developers like to use tooling to make their jobs easier. The chart below shows the usage percentage of common developer tooling.
Testing Framework Usage
When building a plugin, it is important to test it to ensure that it works as expected. There are several testing frameworks that can automatically test
small parts of plugins, so called unit tests. The chart below shows the usage percentage of common testing frameworks. The data is extracted from the package.json
file of the plugin.
76.3% of plugins use no testing framework.
Frontend Framework Usage
For complex user interfaces, plugins may use a frontend framework to make development easier. The chart below shows the usage percentage of common frontend
frameworks. The data is extracted from the package.json
file of the plugin.
Most Used Dependencies
This table shows direct dependencies of all plugins, sorted by how many plugins use them. Dependencies with less than one percent usage are not shown.
Name | Usage Percentage |
---|---|
obsidian | 90.1% |
typescript | 88.7% |
@types/node | 86.7% |
tslib | 86.1% |
esbuild | 77.3% |
builtin-modules | 76.5% |
@typescript-eslint/eslint-plugin | 73.4% |
@typescript-eslint/parser | 73.2% |
eslint | 17.0% |
prettier | 14.0% |
jest | 11.5% |
ts-jest | 10.5% |
@types/jest | 10.5% |
rollup | 10.3% |
@rollup/plugin-node-resolve | 10.3% |
@rollup/plugin-commonjs | 10.2% |
@rollup/plugin-typescript | 10.1% |
@types/react-dom | 7.8% |
react | 7.8% |
react-dom | 7.8% |
@types/react | 7.5% |
@codemirror/view | 7.4% |
@codemirror/language | 6.5% |
@codemirror/state | 6.3% |
svelte | 5.1% |
eslint-config-prettier | 4.8% |
svelte-preprocess | 4.8% |
@popperjs/core | 4.7% |
@tsconfig/svelte | 4.4% |
dotenv | 4.4% |
monkey-around | 4.3% |
@eslint/js | 3.8% |
esbuild-svelte | 3.8% |
ts-node | 3.7% |
typescript-eslint | 3.7% |
husky | 3.7% |
eslint-plugin-import | 3.3% |
lodash | 3.1% |
vitest | 3.1% |
moment | 3.0% |
@types/lodash | 3.0% |
uuid | 2.9% |
eslint-plugin-prettier | 2.7% |
sass | 2.7% |
obsidian-dataview | 2.6% |
openai | 2.6% |
jest-environment-jsdom | 2.6% |
obsidian-daily-notes-interface | 2.6% |
@biomejs/biome | 2.6% |
obsidian-typings | 2.5% |
svelte-check | 2.4% |
esbuild-sass-plugin | 2.3% |
axios | 2.2% |
globals | 2.2% |
@types/uuid | 2.1% |
lint-staged | 2.0% |
vite | 2.0% |
standard-version | 1.9% |
rollup-plugin-copy | 1.9% |
electron | 1.8% |
codemirror | 1.7% |
@babel/preset-env | 1.7% |
postcss | 1.6% |
@types/luxon | 1.6% |
yaml | 1.6% |
lucide-react | 1.6% |
luxon | 1.6% |
@rollup/plugin-json | 1.5% |
esbuild-plugin-copy | 1.5% |
js-yaml | 1.5% |
@codemirror/commands | 1.4% |
@babel/core | 1.4% |
@babel/preset-typescript | 1.4% |
jsdom | 1.4% |
eslint-plugin-react | 1.4% |
@types/js-yaml | 1.4% |
cross-env | 1.4% |
babel-jest | 1.3% |
tailwindcss | 1.3% |
zod | 1.3% |
nanoid | 1.3% |
i18next | 1.3% |
@codemirror/search | 1.2% |
prettier-plugin-svelte | 1.2% |
crypto-js | 1.1% |
eslint-plugin-react-hooks | 1.1% |
@lezer/common | 1.1% |
fs-extra | 1.1% |
semver | 1.1% |
eslint-plugin-svelte | 1.1% |
tsx | 1.0% |
date-fns | 1.0% |
jszip | 1.0% |
autoprefixer | 1.0% |
ts-loader | 1.0% |