Contributing
Set up NoteGen, understand the repository, and submit a maintainable pull request.
NoteGen is an open-source community project. Before fixing or building a feature, search Issues and Discussions. Open an Issue first for larger behavior changes.
Stack
- Tauri 2 for Windows, macOS, Linux, Android, iOS, and native capabilities;
- Next.js 15, React 19, and TypeScript;
- Tiptap 3 Markdown editor;
- Zustand, SQLite, and Tauri Store;
- Tailwind CSS 4 and shadcn/ui;
- OpenAI-compatible models, RAG, MCP, Skills, and local OCR.
Set up
Complete the Tauri 2 prerequisites and install Node.js and pnpm.
git clone https://github.com/your-username/note-gen.git
cd note-gen
git switch dev
pnpm install
pnpm tauri devThe frontend runs at http://localhost:3456. For a blank window, inspect terminal and developer-tool errors before reloading.
Repository structure
src/
├── app/core/ Desktop UI, editor, records, chat, and settings
├── app/mobile/ Mobile record, writing, chat, and settings
├── components/ Shared and shadcn/ui components
├── config/ Shortcuts, sync exclusions, and configuration
├── db/ SQLite access
├── hooks/ React hooks
├── i18n/ Internationalization runtime
├── lib/ AI, Agent, MCP, Skills, sync, OCR, and core logic
├── stores/ Zustand stores
└── types/ Shared types
src-tauri/ Rust commands, platform features, capabilities, packaging
messages/ Interface translations
.github/workflows/ Release automationCommon commands
pnpm dev # Next.js only
pnpm tauri dev # Desktop application
pnpm build # Static frontend export
pnpm tauri build # Current desktop platform package
pnpm tauri android dev # Android development
pnpm tauri android build # Android build
pnpm tauri ios dev # iOS development (macOS/Xcode required)
pnpm tauri ios build # iOS build
pnpm sync-version # Sync Tauri version into the iOS projectSome modules use Node's built-in test runner or colocated specifications. Search for nearby *.test.*, *.spec.*, and scripts, then run the relevant checks.
Development conventions
- Branch from
devusingfix/...orfeat/...; do not develop directly ondev. - Client components need
'use client'; keep TypeScript strict. - When adding interface copy, add the same keys to every language file under
messages/. - Update the website docs when changing models, sync, privacy, or user workflows.
- Never commit API keys, tokens, signing files, personal paths, or real user data.
Core feature or plugin
Before deciding where code belongs, separate three kinds of work:
- the NoteGen host, plugin runtime, permission broker, and current official built-in plugin source live in
note-gen; note-gen-plugin-sdkmaintains the public plugin API contract and its npm releases; after the first release, the host will implement and verify an exact published version of that contract;note-gen-pluginsmaintains official plugin source, behavior tests, signed-index generation, and static-release workflows; the first remote artifacts have not been published and community submissions are not open yet;- community authors maintain plugin source in their own repositories and will register versions and immutable release artifacts once the marketplace opens.
A capability that is required for application startup, editor saving, data migration, or safety recovery should remain in core. A workflow that can be independently enabled, disabled, and rolled back through public APIs is a better plugin candidate. Official plugins must not call private NoteGen modules unavailable to community authors.
Before proposing a plugin, read the plugin system overview and Build your first plugin.
Pull requests
Use fix(#issue): description or feat(#issue): description. Explain the problem, solution, affected platforms, validation, and UI screenshots. Run the relevant build, type checks, or tests first.
Development happens on dev. Pushing release triggers GitHub Actions to build and publish desktop and Android artifacts. Do not change release versions or signing configuration in an ordinary feature PR unless explicitly required.
Mobile
Android and iOS require their own Tauri, SDK, signing, and device setup. Never commit local signing keys or keystore.properties. Mobile does not support every desktop feature, including stdio MCP and the system tray, so check both desktop and mobile routes for new features.