We welcome both code and non-code contributions β from adding new features or fixing bugs to improving documentation and testing. Your contributions can ship directly in official LabVIEW releases.
- Ways to Contribute
- Getting Started
- Reporting Bugs
- Suggesting Features
- Joining Discussions
- Testing
- Contributing Code
- Coding Standards
- CI/CD Pipeline
- Review Process
- Repository Structure
- Governance
- Communication Channels
You don't need to write code to make a meaningful contribution. Here are all the ways you can participate:
| Contribution | Description |
|---|---|
| Report a bug | Found something broken? Start a discussion describing the problem |
| Suggest a feature | Have an idea? Post in New Features discussions |
| Join discussions | Share your expertise in GitHub Discussions or on Discord |
| Test changes | Install pre-release packages from CI and report your findings |
| Improve documentation | Fix typos, clarify instructions, or update the docs site |
| Tackle a good first issue | Check issues labeled Good first issue β great for new contributors |
| Write code | Fix bugs, implement features, or improve performance |
- Explore the repo β Browse the README and docs to understand the project
- Check open issues β Look for issues labeled
Workflow: Open to ContributionorGood first issue - Join the conversation β Introduce yourself on Discord or GitHub Discussions
- LabVIEW 2020 (20.0) or newer (LabVIEW 2025+ recommended for development)
- VIPM (VI Package Manager) for installing packages and dependencies
- LUnit (installed via VIPM) for running unit tests
- A GitHub account
Before opening a new report, search the issues list and open discussions to check if it's already reported.
If not, start a new discussion with:
- A clear, concise title
- Detailed description β what happens vs. what you expected
- Steps to reproduce (include a VI or sequence of actions if possible)
- Environment info β OS, LabVIEW version (e.g., 2021 64-bit)
- Screenshots or error messages if applicable
Have an idea for a new feature or significant change?
- Start a discussion in the New Features category β always get buy-in before investing time in implementation
- Describe the problem your idea would solve or the use case it would enable
- The Steering Committee and community provide feedback and determine alignment with project goals
- If accepted, repo owners label an issue and create a feature branch for implementation
GitHub Discussions is the place for design proposals, Q&A, and community conversation:
- Share use cases and real-world experience
- Provide feedback on planned features
- Ask questions about the editor
- Help other community members
Visit the Discussions tab to get started.
Testing is one of the most valuable contributions you can make:
- Test pre-release packages β CI builds a
.vipartifact for every PR; download and install it to validate changes - Test open PRs β Install packages built from contributor branches to verify fixes
- Report regressions β If something that used to work is now broken, let us know
External contributors must sign NI's Contributor License Agreement once per GitHub account before a PR can be merged. A bot will prompt you automatically on your first pull request. The CLA ensures NI has rights to distribute your code under MIT, and you retain rights to your contributions. The CLA is required for code contributions intended to ship with LabVIEW β it is not needed for issues, discussions, or testing.
- Fork the labview-icon-editor repository to your GitHub account
- Clone your fork locally
- Install LabVIEW 2020+ (2025+ recommended) and VIPM
- Install dependencies by applying
icon-editor-developer.vipcvia VIPM - Run
Tooling\Prepare LV to Use Icon Editor Source.vi(or use the PowerShell scripts for dev mode) to set up your environment - Open
lv_icon_editor.lvprojin LabVIEW to start developing
Note: You can run
lv_icon.vifrom the project for testing, but it won't be the active icon editor in the IDE. To test in the IDE, build the PPL and VI Package, then install the package.
For detailed setup instructions, see manual-instructions.md or the script-driven automated-setup.md.
The repository uses a multi-tier branching model aligned with the LabVIEW release cycle:
Your Fork Upstream (ni/labview-icon-editor)
ββββββββ βββββββββββββββββββββββββββββββββ
your-branch βββΊ PR βββΊ feature/<issue#>-<description>
β
βΌ
develop (accepts contributions year-round)
β
β March & September
β (~ 3 months before LabVIEW release)
βΌ
release-rc (pre-release validation)
β
βΌ
main (release-ready, final artifacts built here)
β
βΌ
LabVIEW Release
| Branch | Purpose | Who Merges |
|---|---|---|
main |
Release branch β final .vip packages are built from here. Only updated during release windows. |
Repo Owners / NI |
release-rc |
Pre-release validation branch β release candidates are tested here before promotion to main. |
Repo Owners |
develop |
Integration branch β accepts community contributions year-round. This is where approved features land. | Repo Owners |
feature/<issue#>-<desc> |
Feature branches β created by repo owners for approved issues. Your PRs target these. | Contributors |
experiment/<name> |
Long-running experimental branches for major features (see below). | Repo Owners + Contributors |
Changes from develop are promoted through release-rc to main twice a year, approximately three months before each LabVIEW release:
| Integration Window | LabVIEW Release | What Happens |
|---|---|---|
| March | Q3 release (June/July) | Feature freeze on develop; approved changes flow through release-rc to main; final artifacts built and validated |
| September | Q1 release (next year) | Feature freeze on develop; approved changes flow through release-rc to main; final artifacts built and validated |
What this means for contributors: You can submit PRs to feature branches at any time. Your changes will be reviewed, merged into
develop, and then included in the next integration window.
-
Propose & discuss
- Start by proposing your idea via GitHub Discussions or by opening an issue
- Discussing first helps refine the idea and get feedback
-
Issue approval & assignment
- Once approved, repo owners label the issue
Workflow: Open to Contribution - Comment on the issue to volunteer β a repo owner will assign it to you
- Repo owners create a branch named
feature/<issue number>-<short-description>and mark the issue status asIn Progress(CI only runs when this gate passes)
- Once approved, repo owners label the issue
-
Develop
- Fork the repo, clone your fork, and check out the feature branch
- Apply dependencies and set up dev mode (see Development Setup)
- Make your changes in LabVIEW following the coding standards
-
Test
- Test the editor manually in LabVIEW to verify your changes work
- Run unit tests via LUnit (see
Test/folder) - Build the PPL and VI Package, install it, and test in the IDE
-
Submit a Pull Request
- Push your branch to your fork and open a PR targeting the feature branch in the upstream repo
- Link the issue in the PR description (e.g., "Closes #123")
- Apply exactly one release label (
major,minor, orpatch) β CI will fail without it - Fill out the PR template completely (see PR Guidelines)
-
CI builds & review
- CI automatically builds a
.vippackage with your changes - Repo owners and the community can install this package to test your contribution
- Respond to review feedback and push updates
- CI automatically builds a
-
Merge & release
- After approval, your PR is merged into
develop - During the next integration window,
developflows throughrelease-rctomain - Your contribution ships in the corresponding LabVIEW release
- After approval, your PR is merged into
For very large or long-term contributions, NI may use an experiment/<feature-name> branch:
- The experiment branch lives in the main repository (not a fork) so CI can run on it
- Multiple collaborators can work in parallel on the feature
- Regular merges from
developkeep the experiment branch up-to-date - Automated code scanning (Docker-based VI Analyzer, GitHub CodeQL) runs on every commit/PR
- Manual approval for builds β publishing a
.vipfrom an experiment branch requires an NI repo owner to manually trigger theapprove-experimentworkflow - Optional sub-branches β teams can create
alpha,beta, orrcsub-branches for staged testing - When complete, the experiment branch is reviewed and merged into
developfollowing Steering Committee approval
See EXPERIMENTS.md for full guidelines.
Every PR must include:
- Purpose β why this change is needed
- Changes made β what was added, modified, or fixed
- Issue reference β link the issue number (e.g., "Closes #123")
- Testing β how you tested the changes, steps for reviewers to reproduce
- Visual aids β screenshots or diagrams if applicable
- Release label β apply exactly one:
major,minor, orpatch
PR Checklist:
- Commits are signed off (
git commit -s) - Changes are based on the appropriate feature branch
- PR targets the correct branch in the upstream repo
- Exactly one release label is applied
- Built and tested the VI Package locally
- NI has your CLA on file
- Follow NI LabVIEW style guidelines and Icon Editor design patterns
- Keep block diagrams clean and readable β use proper wire routing, avoid overlapping wires, and maintain left-to-right data flow
- Use descriptive VI and class names β names should clearly communicate purpose
- Add inline documentation β use free labels and VI descriptions to explain non-obvious logic
- Keep VIs small and focused β each VI should do one thing well
- Use type definitions for clusters and enums that may change
- Maintain backward compatibility β source is saved in LabVIEW 2020 (20.0) format
- Write or update tests when adding or changing functionality (see
Test/folder)
- Set up dev mode β Run
Tooling\Prepare LV to Use Icon Editor Source.vior use the PowerShell scripts - Open the project β Load
lv_icon_editor.lvprojin LabVIEW - Locate the VI β Navigate the project tree. Key directories:
resource/plugins/β Icon Editor plugin VIsvi.lib/LabVIEW Icon API/β Icon API libraryTest/β Unit tests (LUnit)Tooling/β Build and automation utilities
- Edit the block diagram β Follow the style guidelines above
- Save for the correct version β Always save VIs in LabVIEW 2020 (20.0) format
- Test locally β Run unit tests via LUnit, build the package, and install to test in the IDE
Important: LabVIEW files are binary, so standard text-based diffs don't work. Use clear PR descriptions and screenshots/visual aids to help reviewers understand your changes.
- Write clear, descriptive commit messages
- Sign off every commit β use
git commit -sto add aSigned-off-by:line (Developer Certificate of Origin) - Ensure each commit builds and passes tests
- Keep commits self-contained so the branch history can be cleanly merged or squashed
The CI pipeline runs VI Analyzer (VIA) tests to enforce code quality. The configuration is defined in lv_icon_editor.viancfg at the repo root.
What VI Analyzer checks:
- Block diagram cleanliness and style compliance
- Proper error handling
- Unused code and dead code
- Naming conventions
- Performance issues
- Documentation completeness
Running VI Analyzer locally before submitting a PR:
- Open LabVIEW and go to Tools β VI Analyzer β Analyze VIs...
- Load the configuration file:
lv_icon_editor.viancfg - Select the VIs you've modified
- Run the analysis and fix any reported issues
Tip: Running VI Analyzer locally before pushing saves CI time and avoids review delays.
The repository uses GitHub Actions for continuous integration. CI is orchestrated through composite workflows:
| Workflow | Purpose |
|---|---|
ci.yml |
Main CI pipeline β builds, tests, and validates PRs |
build-lvlibp-linux-container.yml |
Builds LVLIBP in a Linux LabVIEW Docker container |
build-lvlibp-windows-container.yml |
Builds LVLIBP in a Windows container |
build-lvlibp-windows-github-hosted.yml |
Builds LVLIBP on GitHub-hosted Windows runners |
Delete Old Workflow Runs.yml |
Cleanup old CI runs |
refresh-readme.yml |
Updates coding hours badge |
Key CI behaviors:
- CI builds a
.vipartifact for every PR β download it to test changes - The issue-status gate checks that the linked issue is marked
In Progressβ CI jobs skip if this gate fails - PRs require exactly one release label (
major,minor, orpatch) β CI fails without it - External contributors do not need their own LabVIEW runner β CI handles building on NI's self-hosted runners
Your PR must pass all CI checks before it can be reviewed and merged.
For detailed CI documentation, see CI Workflows and Composite Actions.
Pull Requests are reviewed by repo owners and the Steering Committee:
- Initial review within 5β10 business days
- Follow-up reviews within 3β5 business days after revisions
- Once approved, PRs are merged promptly and queued for the next release cycle
labview-icon-editor/
βββ .github/ # CI workflows and GitHub config
β βββ workflows/ # GitHub Actions CI/CD pipelines
βββ .vscode/ # VS Code tasks (dev mode integration)
βββ Test/ # Unit tests (LUnit)
βββ Tooling/ # Build scripts, PowerShell automation, dev mode setup
βββ docs/ # Documentation, setup guides, CI docs
β βββ ci/ # CI-specific docs (actions, experiments, troubleshooting)
βββ resource/plugins/ # Icon Editor plugin VIs
βββ vi.lib/LabVIEW Icon API/ # Icon API library
βββ AGENTS.md # AI agent instructions
βββ CODE_OF_CONDUCT.md # Community code of conduct
βββ CONTRIBUTING.md # This file
βββ GOVERNANCE.md # Project governance model
βββ INSTALL.md # Installation guide
βββ LICENSE # MIT License
βββ README.md # Project overview
βββ icon-editor-developer.vipc # VIPM dependency config for development
βββ lv_icon_editor.lvproj # Main LabVIEW project file
βββ lv_icon_editor.viancfg # VI Analyzer configuration
The Icon Editor is maintained under an open-governance model:
- Technical Steering Committee (SteerCo) β NI staff and community members who oversee the project's direction, approve significant changes, and label issues for contribution
- Repo Owners β Handle code review, CI validation, merge approvals, and release tagging
- NI retains final decision authority for major direction and architecture changes
For full details, see GOVERNANCE.md.
All participants must follow the Code of Conduct.
| Channel | Purpose |
|---|---|
| GitHub Issues | Bug reports and feature tracking |
| GitHub Discussions | Design proposals, Q&A, feature ideas |
| Discord | Real-time community collaboration |
| Docs Site | Documentation and guides |
The LabVIEW Icon Editor is licensed under the MIT License. By contributing, you agree that your contributions can be distributed under the same MIT license and included in official LabVIEW releases.