Contributing
July 21, 2026 ยท View on GitHub
Thanks for helping improve Markra. Contributions can be product polish, Markdown editing fixes, AI provider work, cross-platform desktop fixes, documentation, tests, or issue triage.
Development Setup
Use pnpm for all JavaScript workflows.
pnpm install
pnpm dev
Common commands:
pnpm devstarts the desktop app development workflow.pnpm testruns package tests.pnpm buildbuilds all packages that define a build script.pnpm tauri ...forwards Tauri commands to the desktop app.
Project Layout
apps/desktopcontains the Tauri desktop shell.apps/webcontains the browser-hosted editor.packages/appcontains the shared React app surface and product UI.packages/editorcontains the framework-agnostic CodeMirror editor core and extensions.packages/editor-reactcontains the React bindings for the editor core.packages/aicontains agent runtime, tools, and AI document flows.packages/providerscontains provider catalogs, settings, and request shaping.packages/markdowncontains Markdown parsing and asset/path helpers.packages/sharedcontains cross-cutting types, i18n, and small pure utilities.packages/uicontains reusable UI primitives.
Keep reusable code inside the package that owns the responsibility. Avoid putting desktop-only bridge code in shared packages.
Testing
Add focused tests when changing product behavior, editor behavior, AI flows, file reliability, provider request handling, or platform integration.
Text-only documentation, copy, comment, and static help text changes do not need unit tests. For configuration or packaging changes, use the smallest relevant build or integration check instead of adding tests just for the config file.
Before opening a pull request, run the smallest useful verification for your change. Common checks are:
pnpm test
pnpm build
Code Style
- Keep changes small and focused.
- Prefer existing patterns and local helpers over new abstractions.
- Use Tailwind CSS for app styling where practical.
- Prefer
lucide-reacticons for UI controls. - Do not add a new dependency unless the current stack cannot reasonably handle the job.
- Do not use the TypeScript
voidkeyword or operator. - Keep Markdown files portable and avoid proprietary document formats.
Pull Requests
Good pull requests usually include:
- A short summary of the user-facing change.
- The files or packages affected.
- The verification command you ran and its result.
- Screenshots or video for visible UI changes.
- Any follow-up work or known limitations.
If your change touches both desktop and web behavior, call out the difference explicitly.
Releases And Changelog
Release versions are bumped through:
pnpm release
The release bump config updates package versions, syncs desktop metadata, updates the Cargo lockfile, and runs conventional-changelog so CHANGELOG.md is included in the release changes.
To regenerate the full changelog history from tags:
pnpm changelog:all
Use Conventional Commit subjects such as feat(app): add quick open or fix(editor): preserve selection so the changelog generator can classify entries correctly.