Thank you for your interest in contributing to NeoStation! This document will help you get started.
- Use the issue search to verify the bug has not been reported before.
- If it is new, open an issue using the Bug Report template.
- Include:
- NeoStation version
- Platform (Windows, Linux, macOS, Android)
- Steps to reproduce
- Expected vs. actual behavior
- Logs or screenshots if applicable
- Open an issue using the Feature Request template.
- Clearly describe the problem the feature solves.
- If possible, include mockups or usage examples.
- Fork the repository.
- Create a branch from
main. Use the following naming convention:feature/your-feature-namefix/bug-descriptiondocs/topic-namerefactor/what-changed
git checkout -b feature/your-feature-name
- Make your changes following the code conventions and commit format.
- Ensure
flutter analyzereports no errors. - If possible, add tests for your change.
- Update documentation if necessary.
- Open a Pull Request using the provided template.
- Files and folders:
snake_case - Variables and functions:
camelCase - Classes and widgets:
PascalCase - Constants:
camelCaseorSCREAMING_SNAKE_CASEdepending on context - Use
Color.withValues(alpha: …)instead ofwithOpacity()(deprecated). - Always check
mountedbefore usingBuildContextafter anawait. - Use
flutter_screenutilfor sizing and spacing. - Write comments in English and UI text must use the localization system (
AppLocale).
We follow the Conventional Commits specification:
feat: A new feature.fix: A bug fix.docs: Documentation only changes.style: Changes that do not affect the meaning of the code (white-space, formatting, etc).refactor: A code change that neither fixes a bug nor adds a feature.perf: A code change that improves performance.test: Adding missing tests or correcting existing tests.chore: Changes to the build process or auxiliary tools and libraries.
Example: feat(ui): add support for custom wallpapers
lib/screens/: UI pages.lib/widgets/: Reusable UI blocks and shared widgets.lib/providers/: State withChangeNotifier(consumed by screens via Provider).lib/services/: Business logic and external APIs. Never access SQLite directly — use repositories.lib/repositories/: Data access abstraction. The only layer that may call data sources.lib/data/datasources/: Direct SQLite access, migrations, and raw queries.lib/models/: Immutable data models.lib/utils/: Helpers and utilities.
- Add unit tests for business logic in
test/. - Use
flutter_testfor widget tests. - Run all tests before submitting a PR:
flutter test
By contributing to NeoStation, you agree that your contributions will be licensed under the GNU General Public License v3.0 (GPL-3.0).