Skip to content

Repository Data

The data on this page consists of data points that are derived from the plugin repositories and releases. This includes data that is not directly available from the community plugin list, such as the programming languages used, the size of the release files, and more. This data is collected by analyzing the plugin repositories and release files using various heuristics and techniques. You can read more about them here.

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 next chart shows the number of plugins that use a specific programming language, sorted by the number of plugins that use it.

Lines of Code

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 distribution of the total lines of code per plugin. The average plugin has 3.7K lines of code while the median plugin has only 810 lines of code.

Files

The following chart shows the total number of files per file extension, summed over all plugins. Only source code file extensions are included. Common configuration files like json, yaml, and tool specific extensions like prettierignore are excluded.

The next chart shows the distribution of the number of code files per plugin. The average plugin has 26 code files while the median plugin has only 10 code files.

Release Builds

Release Size Distribution

The following chart shows the distribution of latest release main.js sizes per plugin. The average scanned release has a main.js size of 987 KB, while the median is 71.9 KB.

Top 10 largest plugins

ES Version

The next chart shows the estimated ECMAScript target version used by plugin releases. Estimates are based on the syntax used in the release's main.js file.

Plugins targeting ES5 (55)

Minification

This chart shows whether the latest release main.js appears to be minified. Detection is heuristic and based on source formatting and symbol patterns. It is recommended to minify release builds of plugins to reduce file size and improve load times for users, especially for plugins with a lot of code. Additionally, since the end of 2023, the build script of the sample plugin minifies release builds.

This chart shows the distribution of the minification score for the same heuristic, where 0 means least likely and 1 means most likely to be minified.

Source Map Comments

This chart shows whether the latest release main.js includes a sourceMappingURL comment. Source maps are very useful for debugging during development, but for release builds they can be a double-edged sword. On one hand, they can help with debugging and provide better error stack traces for users. On the other hand, if the source map is included in the release, it can significantly increase the size of the release files, which can lead to longer load times for users.

Embedded Base64 Blobs

This chart shows whether the latest release main.js contains large base64-like blobs. This can indicate embedded assets or WebAssembly usage.

Worker Usage

The next chart shows whether plugin releases reference Worker APIs in their latest main.js.

WebAssembly Usage

The next chart shows whether plugin releases reference WebAssembly APIs in their latest main.js.

Dependencies

Package Managers

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.

18.0% of plugins have no lockfile.

Code Bundlers

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.

4.9% of plugins use no code bundler.

Developer Tooling

Plugin developers like to use tooling to make their jobs easier. The chart below shows the usage percentage of common developer tooling.

Testing Frameworks

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.

74.9% of plugins use no testing framework.

Frontend Frameworks

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.

Translations

Some plugins include translations for multiple languages. This is usually done by including translation files in the repository. Plugins have three different ways to apply translations: by using Obsidian's i18n instance, by including a translation library, such as i18next, or by hand rolling their own solution. The chart below shows how many plugins use translations.

A total of 225 plugins (7.7%) use translations.

List of plugins using translations

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.

List of most used dependencies
Name Usage Percentage
obsidian 91.0%
typescript 89.4%
@types/node 87.1%
tslib 86.0%
esbuild 76.7%
builtin-modules 74.5%
@typescript-eslint/parser 70.5%
@typescript-eslint/eslint-plugin 70.3%
eslint 20.4%
prettier 15.1%
jest 11.9%
rollup 11.1%
@types/jest 11.1%
@rollup/plugin-node-resolve 11.0%
ts-jest 10.9%
@rollup/plugin-commonjs 10.8%
@rollup/plugin-typescript 10.6%
@codemirror/view 8.2%
react 7.8%
@types/react-dom 7.8%
react-dom 7.8%
@types/react 7.5%
@codemirror/state 7.0%
@codemirror/language 6.7%
@eslint/js 6.4%
typescript-eslint 6.2%
svelte 5.3%
vitest 5.2%
eslint-config-prettier 4.9%
globals 4.8%
husky 4.8%
svelte-preprocess 4.8%
@tsconfig/svelte 4.4%
@popperjs/core 4.3%
dotenv 4.2%
monkey-around 3.9%
esbuild-svelte 3.7%
ts-node 3.6%
eslint-plugin-obsidianmd 3.1%
@biomejs/biome 3.1%
eslint-plugin-import 3.0%
jest-environment-jsdom 3.0%
uuid 2.9%
svelte-check 2.8%
moment 2.8%
lodash 2.8%
vite 2.7%
@types/lodash 2.7%
obsidian-daily-notes-interface 2.7%
eslint-plugin-prettier 2.6%
obsidian-typings 2.6%
sass 2.6%
openai 2.6%
lint-staged 2.4%
jsdom 2.4%
obsidian-dataview 2.4%
rollup-plugin-copy 2.2%
esbuild-sass-plugin 2.2%
standard-version 2.1%
axios 2.0%
@types/uuid 1.9%
postcss 1.9%
@vitest/coverage-v8 1.9%
electron 1.8%
yaml 1.8%
codemirror 1.6%
@commitlint/config-conventional 1.6%
zod 1.6%
i18next 1.6%
@babel/preset-env 1.6%
cross-env 1.6%
@commitlint/cli 1.6%
@types/luxon 1.6%
tailwindcss 1.5%
esbuild-plugin-copy 1.5%
@rollup/plugin-json 1.5%
luxon 1.5%
lucide-react 1.5%
@codemirror/commands 1.5%
js-yaml 1.5%
@types/js-yaml 1.5%
tsx 1.4%
jiti 1.4%
@babel/preset-typescript 1.4%
@babel/core 1.4%
eslint-plugin-react 1.3%
prettier-plugin-svelte 1.3%
@codemirror/search 1.3%
eslint-plugin-svelte 1.3%
cz-conventional-changelog 1.3%
nanoid 1.3%
date-fns 1.2%
babel-jest 1.2%
semver 1.2%
fs-extra 1.1%
@lezer/common 1.1%
eslint-plugin-react-hooks 1.1%
jszip 1.1%
@types/bun 1.1%
autoprefixer 1.0%
crypto-js 1.0%
mocha 1.0%
ts-loader 1.0%
@eslint/eslintrc 1.0%