Contributing
NoteGen is an open-source and free community project. We continue building it with passion and welcome contributions in any form.
Hi! Thank you so much for contributing to NoteGen! Before you begin, please take a moment to read the following:
How to Contribute
Whether you are contributing code or reporting issues, please start by creating an Issue.
Issues
Always create new issues via Issues. Please describe the problem in as much detail as possible, including reproduction steps, expected behavior, and actual behavior.
Discussions
If you’d like to start a discussion, you can use Discussions, or join the community group.
Pull Request
- Before fixing a bug, please check Issues to see if the same issue already exists.
- If you plan to develop a new feature, please first submit an Issue to discuss with maintainers whether the feature is needed. This helps save time for both maintainers and contributors.
Tech Stack
NoteGen mainly uses the following technologies:
-
See frontend dependencies in package.json.
-
See Rust dependencies in src-tauri/Cargo.toml.
If your contribution needs to update or add dependencies, please mention the changes to package.json
or src-tauri/Cargo.toml
in the issue.
Development Environment
Please read the Tauri 2 prerequisites and configure your environment accordingly.
Once your environment is ready, fork the repository to your GitHub account, then clone it locally:
# 1. Fork to your GitHub account
# 2. Clone locally
git clone https://github.com/your-username/note-gen.git
Then enter the project directory and install dependencies:
# 3. Enter project directory & install dependencies
cd note-gen
pnpm install
# 4. Start local development; if you see a blank screen, try right-clicking to reload.
pnpm tauri dev
Project Structure
src
: Frontend application directory.apps
: Frontend application modules.core
: Core features of the main app.article
: Writing.image
: Image hosting management.record
: Recording.search
: Search.setting
: Settings.
screenshot
: Screenshot window.
components
: Component library, including shadcn and common components.lib
: Utility libraries (e.g., AI, GitHub requests).db
: SQLite database.store
: State management (zustand).
src-tauri
: Rust code.messages
: i18n configuration.
Pull Request Guidelines
NoteGen does not use the master or main branches. All development happens on the dev
branch. Releasing is triggered by merging into the release
branch, which runs GitHub Actions to build and publish versions.
After forking the repository, create a new branch from dev
and name it according to your contribution, such as fix/123
or feat/121
.
You can push multiple commits until all changes are complete. When submitting a Pull Request, we will use Squash and Merge
to squash them into a single commit.
Please use fix(#xxx): ***
or feat(#xxx): ***
in the PR title, where #xxx
is the issue number, e.g., NoteGen Roadmap #46.
Before submitting the PR, ensure pnpm tauri build
can build and run successfully on your local machine.
Development Guide
This section will guide you through the development of NoteGen.
DeepWiki
You can quickly learn about NoteGen's development through AI-generated documentation at DeepWiki.
Project Environment Setup
Please read the Tauri 2 prerequisites documentation and configure your development environment accordingly.
Start local development with pnpm tauri dev
. If you encounter a blank screen, try right-clicking and selecting reload.
Project Building
Desktop
Build the desktop application with pnpm tauri build
. Note that this will create an installation package for your current system.
By default, builds are automated via GitHub Actions, triggered when merging to the release
branch. This typically involves updating the version number in src-tauri/tauri.conf.json
.
Android
To build the Android application, first run pnpm tauri android init
.
Then, follow the Tauri 2 Android Signing documentation to create a signing key.
Create a keystore.properties
file in the src-tauri/gen/android
directory with the following content:
storePassword=**
keyPassword=**
keyAlias=**
storeFile=/**/Downloads/upload-keystore.jks
Add the following code to src-tauri/gen/android/app/build.gradle.kts
:
import java.io.FileInputStream
android {
signingConfigs {
create("release") {
val keystorePropertiesFile = rootProject.file("keystore.properties")
val keystoreProperties = Properties()
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(FileInputStream(keystorePropertiesFile))
}
keyAlias = keystoreProperties["keyAlias"] as String
keyPassword = keystoreProperties["keyPassword"] as String
storeFile = file(keystoreProperties["storeFile"] as String)
storePassword = keystoreProperties["storePassword"] as String
}
}
}
Finally, you can build APKs for different Android architectures using:
pnpm tauri android build --apk --split-per-abi