Thank you for your interest in contributing to FlowForge!
If you find a bug or have a suggestion:
- Check if the issue already exists
- Create a new issue with:
- Clear description
- Steps to reproduce (for bugs)
- Expected vs actual behavior
- Environment details (OS, browser, versions)
Feature suggestions are welcome! Please:
- Describe the use case
- Explain why this feature would be valuable
- Consider implementation complexity
- Discuss in issues before starting work
This project follows industry-standard development practices:
- GitFlow for branch management
- Conventional Commits for commit messages
- Automated validation via git hooks
We use GitFlow branching model for structured development:
Main Branches:
main- Production-ready code, tagged releases onlydevelop- Integration branch for features, always deployable
Supporting Branches:
feature/*- New features (branch fromdevelop, merge todevelop)bugfix/*- Bug fixes for develop (branch fromdevelop, merge todevelop)release/*- Release preparation (branch fromdevelop, merge tomainanddevelop)hotfix/*- Critical production fixes (branch frommain, merge tomainanddevelop)
Branch Naming Convention:
feature/short-description
bugfix/issue-number-description
release/version-number
hotfix/critical-fix-description
Examples:
feature/visual-timer-nodebugfix/123-connection-validationrelease/0.1.0hotfix/plc-deploy-crash
-
Clone the repository:
git clone <repository-url> cd FlowForge
-
Run the development setup script (configures git hooks, commitlint, commit template):
# Linux/macOS: ./scripts/setup-dev.sh # Windows (PowerShell): .\scripts\setup-dev.ps1
-
Create appropriate branch following GitFlow:
# For new feature git checkout develop git checkout -b feature/your-feature-name # For bug fix git checkout develop git checkout -b bugfix/issue-123-description
-
Make your changes following coding standards
-
Commit using Conventional Commits (see below)
-
Push to your fork:
git push origin feature/your-feature-name
-
Create a Pull Request to the appropriate branch (
developfor features/bugfixes)
All commit messages MUST follow the Conventional Commits specification.
Format:
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
Types:
feat- New featurefix- Bug fixdocs- Documentation changesstyle- Code style changes (formatting, no code change)refactor- Code refactoring (no feature/fix)perf- Performance improvementstest- Adding or updating testsbuild- Build system or dependenciesci- CI/CD configurationchore- Other changes (maintenance, tooling)revert- Revert previous commit
Scopes (optional but recommended):
frontend- Visual editor changesbackend- API server changesbuild-server- PLC build server changesmonitor-server- Monitor server changesdocs- Documentationconfig- Configuration filesdeps- Dependencies
Examples:
# Simple feature
git commit -m "feat(frontend): add timer node to node library"
# Bug fix with scope
git commit -m "fix(backend): resolve project save error on special characters"
# With body and footer
git commit -m "feat(build-server): add support for structured text generation
Implement ST code generation for basic logic nodes including
AND, OR, NOT gates with proper IEC 61131-3 syntax.
Closes #45"
# Breaking change
git commit -m "feat(frontend)!: change project format to JSON
BREAKING CHANGE: Projects now use JSON instead of XML.
Migration tool provided in scripts/migrate-xml-to-json.js"
# Documentation
git commit -m "docs: add gitflow workflow to contributing guide"
# Chore
git commit -m "chore(deps): update react to v18.2.0"Breaking Changes:
- Add
!after type/scope:feat!:orfeat(scope)!: - Include
BREAKING CHANGE:in footer with description
Commit Message Validation:
Commit messages are validated automatically using git hooks. Invalid commits will be rejected.
To test your commit message before committing:
# Message validation will run on commit
git commit -m "your message"
# If invalid, you'll see an error like:
# ❌ Commit message does not follow Conventional Commits formatGood Practices:
- Use present tense: "add feature" not "added feature"
- Use imperative mood: "fix bug" not "fixes bug"
- Keep first line under 72 characters
- Reference issues:
Closes #123,Fixes #456,Relates to #789 - Write descriptive body for complex changes
Once technology stack is finalized, we'll establish:
- Code formatting rules (ESLint, Prettier, etc.)
- Naming conventions
- Documentation requirements
- Testing requirements
Current Standards:
- Use meaningful variable and function names
- Comment complex logic
- Follow SOLID principles
- Write testable code
- Update relevant documentation
Typical Feature Development:
- Create feature branch from
develop - Implement changes with frequent, atomic commits
- Write/update tests
- Update documentation
- Push and create PR to
develop - Address review comments
- Merge after approval
Release Process:
- Create
release/x.y.zbranch fromdevelop - Update version numbers and changelog
- Test thoroughly
- Merge to
mainand tag with version - Merge back to
develop - Deploy from
main
Documentation improvements are always welcome:
- Fix typos or unclear explanations
- Add examples in
samples/directory - Improve API documentation in
doc/ - Translate documentation (future)
Tests should be placed in the test/ directory:
- Unit tests for individual components
- Integration tests for end-to-end workflows
- Example projects for validation
Detailed testing guidelines will be added once testing framework is set up
If you have opinions on pending technology choices:
- Review DECISION_LOG.md
- Share your experience/reasoning in discussions
- Consider trade-offs for this project's specific needs
- Issues: For bugs and feature requests
- Discussions: For questions and general conversation
- Pull Requests: For code contributions
Be respectful and professional:
- Constructive feedback
- Inclusive language
- Focus on ideas, not individuals
- Help newcomers
This project is dual-licensed (AGPL-3.0 + Commercial). All contributors must agree to the Contributor License Agreement before their contributions can be accepted.
The CLA grants Qubernetic the right to sublicense contributions under the commercial license while ensuring your contributions remain available under AGPL-3.0 for the open source community.
First-time contributors will be prompted to sign the CLA electronically via a comment on their pull request.
This project is licensed under the GNU Affero General Public License v3.0. A commercial license is also available — see NOTICE for details.
Thank you for helping make visual PLC programming accessible to everyone!