3.1 KiB
Contributing to Ignis
Thanks for your interest in contributing. Here are some ways you can help.
Reporting Plugin Compatibility Issues
Testing plugins and reporting what works (or doesn't) is one of the most valuable contributions right now. When a plugin doesn't work, the browser console usually contains the information needed to diagnose the problem.
How to file a useful compatibility report
- Open the browser dev tools (F12 or Ctrl+Shift+I)
- Go to the Console tab
- Enable the plugin or trigger the failing action
- Look for errors, especially lines starting with:
[ignis] Unshimmed require: <module>- a Node.js module the plugin needs that Ignis doesn't provide yet[shim:MISS] <module>.<property>- a property or method on a shimmed module that isn't implementedPlugin failure: <plugin-id>- Obsidian caught a crash from the plugin
- Copy the full error including the stack trace
What to include in the issue
- Plugin name and version
- What you tried to do
- What happened (error, crash, nothing, partial functionality)
- The console output (errors and shim warnings)
- Whether the plugin loads at all or fails immediately
Example of a useful report
Plugin: Templater v1.18.4 Status: Broken on load
Console shows:
[ignis] Unshimmed require: util [shim:MISS] UNKNOWN(util).promisify - property not found on shim Plugin failure: templater-obsidian TypeError: t is not a functionThe plugin needs
util.promisifywhich isn't shimmed yet.
This kind of report makes it straightforward to add the missing shim.
Code Contributions
If you want to contribute code:
- Fork the repo and create a branch for your change
- Run
npm installonce at the repo root (npm workspaces) - Run
npm run devto build and start the server - Test your change in the browser with at least one vault open
- Run
npm testand make sure the whole suite passes - Keep PRs focused - one fix or feature per PR
Changes to deliberate behavior (the fs shim's caching and write model, the proxy's request handling, anything documented as a design decision) start as an issue, not a PR. Open the issue first so the approach can be discussed; a patch against an undiscussed design change will be closed on this basis.
Project structure
packages/shim/- Browser shims for Node.js and Electron APIspackages/ui/- Svelte UI components (vault manager, dialogs)packages/bridge/- The ignis-bridge Obsidian plugin (settings, file actions)packages/server-core/- Shared server helpers (path guards, watcher, WebSocket)apps/ignis-server/- Express server, Docker image, demo modeapps/ignis-server/server/plugins/- Server plugin packages (e.g., headless-sync)
See ARCHITECTURE.md for more detail.
Adding a new shim
If a plugin needs a Node.js module that isn't shimmed:
- Create the shim in
packages/shim/src/node/<module>.js - Export the functions the plugin needs (stub what you can't implement)
- Register it in
packages/shim/src/require.js(import + add torawRegistry) - Build and test with the plugin that needed it