We welcome both code and non-code contributions — everything from bug reports and testing to documentation improvements and feature development.
- 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? Open a bug report issue |
| Suggest a feature | Have an idea? Submit a feature request or start a discussion |
| Join discussions | Share your expertise in GitHub Discussions or on Discord |
| Test changes | Install pre-release packages and validate fixes in your environment |
| Improve documentation | Fix typos, clarify instructions, add examples, or improve the Wiki |
| Write code | Fix bugs, implement features, improve performance, or submit tweaks |
- Explore the repo — Browse the README to understand the project
- Check open issues — Look at Issues for things to work on, especially those labeled
Workflow: Open to Contribution - Join the conversation — Introduce yourself on Discord or GitHub Discussions
- LabVIEW 2020 SP1 or later (32-bit or 64-bit)
- VIPM (VI Package Manager) for installing and building
.vippackages - A GitHub account
If you find a bug, please open a bug report:
- Use a clear, descriptive title
- Describe the steps to reproduce the issue
- Include the LabVIEW version, OS, and Actor Framework version you're using
- Attach screenshots or code snippets if applicable
- Describe what you expected to happen vs. what actually happened
Have an idea for an improvement?
- Check existing issues and discussions first — your idea may already be proposed
- Open a feature request or start a GitHub Discussion
- Describe the problem your feature would solve, your proposed solution, and any alternatives you've considered
The Steering Committee reviews feature proposals and labels approved ones as Workflow: Open to Contribution.
GitHub Discussions is the place for design proposals, Q&A, and community conversation:
- Share use cases and real-world experience
- Provide feedback on proposed changes
- Ask questions about the framework
- 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 — Install
.vipbuilds from Releases and validate in your projects - Test open PRs — Build and install packages from contributor forks to verify fixes
- Submit test reports — Use the manual test report template to document your findings
- Report regressions — If something that used to work is now broken, let us know
See the Test Actor Framework 2.0 discussion for current testing priorities.
You must sign NI's Contributor License Agreement once per GitHub account before your code can be merged. A bot will prompt you on your first pull request; if not, NI staff will reach out directly. The CLA is required for code contributions intended to ship with LabVIEW — it is not needed for issues, discussions, or testing.
- Fork the actor-framework repository to your GitHub account
- Clone your fork locally
- Install LabVIEW 2020 SP1+ and VIPM
- If you need a self-hosted runner for CI, follow the steps in docs/self-hosted-runner.md (guide in progress)
The repository uses a three-tier branching model aligned with the LabVIEW release cycle:
Your Fork Upstream (ni/actor-framework)
──────── ────────────────────────────
your-branch ──► PR ──► develop (accepts contributions year-round)
│
│ March & September
│ (~ 3 months before LabVIEW release)
▼
main (release-ready, final artifacts built here)
│
▼
LabVIEW Release
| Branch | Purpose | Who Merges |
|---|---|---|
main |
Release branch — final VIPM artifacts and distribution packages are built from here. Only updated twice a year. | Repo Owners / NI |
develop |
Integration branch — accepts community contributions year-round. This is where your PRs should target. | Repo Owners |
| Your fork branch | Your working branch — create feature/bugfix branches on your fork and submit PRs to develop. |
You |
Changes from develop are promoted 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 merged to main; final artifacts built and validated |
| September | Q1 release (next year) | Feature freeze on develop; approved changes merged to main; final artifacts built and validated |
What this means for contributors: You can submit PRs to
developat any time. Your changes will be reviewed, merged intodevelop, and then included in the next integration window whendevelopis promoted tomain.
-
Find or create an issue
- Check for issues labeled
Workflow: Open to Contribution - Or discuss your idea on Discord / GitHub Discussions first
- Check for issues labeled
-
Get assigned
- Comment on the issue to let repo owners know you'd like to work on it
- A repo owner will assign you and NI creates a feature branch in the upstream repo
-
Develop
- Implement your changes on the
developbranch of your fork - Follow the coding standards below
- Implement your changes on the
-
Build
- Build a VI Package using the PowerShell build tool
- CI will also build a
.vipand post it as a pre-release on your fork's Releases page - Note: the package from your fork will show your fork owner's name instead of "NI"
-
Test
- Install the pre-release package in LabVIEW and verify your changes
- Run existing unit tests to check for regressions
- Document your test results
-
Submit a Pull Request
- Open a PR targeting the feature branch in the upstream repo (not
mainordevelopdirectly) - Fill out the PR template completely (see PR Guidelines)
- Sign the CLA if prompted
- Open a PR targeting the feature branch in the upstream repo (not
-
Review & iterate
- Repo owners and the Steering Committee review, test, and may request changes
- Address feedback and push updates to your branch
-
Merge & release
- After approval, your PR is merged into
develop - During the next integration window (March or September), approved changes in
developare promoted tomain - Final artifacts are built from
mainand ship in the corresponding LabVIEW release
- After approval, your PR is merged into
Every PR must include:
- Linked GitHub Issue — reference the issue number
- Summary of changes — what was added, modified, or fixed
- Reason for change — the problem or need being addressed
- Testing evidence — manual and/or automated test results
- Visual aids — screenshots or diagrams if applicable
Use the appropriate PR template:
| Template | Use When |
|---|---|
bug_fix.md |
Fixing a bug |
feature_request.md |
Adding a new feature |
documentation.md |
Documentation-only changes |
infrastructure_change.md |
CI, build, or tooling changes |
empty_pull_request.md |
Anything that doesn't fit the above |
PR Checklist (from the template):
- Changes are based on the appropriate NI-repo feature branch
- PR targets the correct feature branch
- Built a VI Package using the PowerShell build tool
- Installed and tested the VI Package locally
- NI has your CLA on file
- Follow NI LabVIEW style guidelines and Actor Framework 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 (e.g.,
Send Message.vi,Handle Reply.vi) - 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 — this ensures updates propagate automatically
- Avoid global variables and shared state — prefer message-based decoupling between actors
- Ensure deterministic actor lifecycle behavior — actors must start up and shut down predictably
- Enforce explicit message interfaces — avoid circular actor dependencies
- Use LabVIEW 2020 SP1 as the minimum save version to ensure backward compatibility
Since LabVIEW code is graphical (G code), the workflow differs from text-based languages:
-
Open the project — Load the relevant
.lvprojfile in LabVIEW:Core/Actor Framework Core.lvproj— for core framework changesTooling/CI CD.lvproj— for build and test tooling changes
-
Locate the VI — Navigate the project tree to find the VI you need to modify. The core framework lives under:
Core/ActorFramework/— main Actor Framework libraryCore/AFDebug/— debug and trace utilitiesCore/Testing/— test support VIsCore/Menus/— LabVIEW menu integrationsCore/Install Support/— install-time utilities
-
Edit the block diagram — Make your changes following the style guidelines above
-
Save for the correct LabVIEW version — Always save VIs in a format compatible with LabVIEW 2020 SP1+
-
Test locally — Build and install the package using the PowerShell build tool in
Tooling/deployment/before submitting a PR
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.
Keep a clear separation between modules:
| Module | Location | Purpose |
|---|---|---|
| Core | Core/ActorFramework/ |
Core Actor Framework library — actors, messages, enqueuer |
| Debug | Core/AFDebug/ |
DETT tracing and debug utilities |
| Testing | Core/Testing/ |
Test support VIs (Launch Actor, Init Actor Queues, etc.) |
| Menus | Core/Menus/ |
LabVIEW palette and menu integration |
| Tooling | Tooling/ |
Build scripts, unit test runners, deployment utilities |
| Providers | Providers/ |
Extension providers |
| Documentation | Documentation/ & docs/ |
Guides and documentation |
⚠️ Do not introduce cross-module dependencies without approval from the Steering Committee.
The CI pipeline runs VI Analyzer (VIA) tests on every PR to enforce code quality standards. The configuration is defined in .github/via_config/Actor_Framework.viancfg.
How VI Analyzer runs in CI:
- VI Analyzer runs in a Docker container with LabVIEW (Linux) via the
ni/open-source/via-lv-docker@actionsGitHub Action - It analyzes only the files changed in your PR by comparing against the base branch (
develop) - On manual dispatch, it can analyze the full codebase using the
.viancfgconfiguration - Results are uploaded as an artifact (
vi-analyzer-report.htm) you can download and review
What VI Analyzer checks (typical rules):
- Block diagram cleanliness and style compliance
- Proper error handling (unwired error clusters, missing error cases)
- Unused code (dead code, unreachable frames)
- Naming conventions for controls, indicators, and VIs
- Performance issues (unnecessary coercions, inefficient patterns)
- Documentation completeness (VI descriptions, connector pane usage)
Running VI Analyzer locally before submitting a PR:
- Open LabVIEW and go to Tools → VI Analyzer → Analyze VIs...
- Load the configuration file:
.github/via_config/Actor_Framework.viancfg - Select the VIs you've modified
- Run the analysis and fix any reported issues
- Re-run until your VIs pass cleanly
Tip: Running VI Analyzer locally before pushing saves CI time and avoids review delays. Fix all warnings and errors before submitting your PR.
The CI pipeline also performs a mass compilation step to verify that all Actor Framework VIs compile successfully in a clean LabVIEW environment:
- A distribution artifact is built and overlaid into a LabVIEW Docker container
vi.lib/ActorFrameworkis mass compiled using LabVIEW CLI- Any compilation errors will fail the pipeline
This ensures your changes don't break the build for other users.
The repository uses GitHub Actions for continuous integration:
| Workflow | Purpose |
|---|---|
ci.yml |
Runs on PRs — validates builds and tests |
build-vi-package.yml |
Builds the VIPM package |
run-unit-tests.yml |
Executes unit tests |
run-via-tests.yml |
Runs VI Analyzer tests |
release.yml |
Creates tagged releases |
create-distribution-artifact.yml |
Generates distribution artifacts for LabVIEW integration |
Your PR must pass all CI checks before it can be reviewed and merged.
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
actor-framework/
├── .github/ # CI workflows, issue & PR templates
│ ├── ISSUE_TEMPLATE/ # Bug report, feature request, manual test report
│ ├── PULL_REQUEST_TEMPLATE/ # PR templates by type
│ ├── via_config/ # VI Analyzer configuration
│ └── workflows/ # GitHub Actions CI/CD pipelines
├── Builds/ # VIPM package build configuration
├── Core/ # Core Actor Framework libraries
├── Documentation/ # Framework documentation
├── Providers/ # Extension providers
├── Tooling/ # Developer tooling and build utilities (PowerShell)
├── docs/ # Additional guides (e.g., self-hosted runner setup)
├── pipeline/ # Release pipeline scripts
├── reports/ # Community metrics and reports
├── LICENSE.txt # MIT License
└── README.md # Project overview and getting started
Actor Framework is maintained under an open-governance model:
- Technical Steering Committee (SteerCo) — NI staff and community architects who oversee the roadmap, review architectural changes, and approve feature directions
- Repo Owners — Handle code review, CI validation, merge approvals, and release tagging
- NI retains final decision authority for major direction and architecture changes
| Channel | Purpose |
|---|---|
| GitHub Issues | Bug reports and feature requests |
| GitHub Discussions | Design proposals, Q&A, community conversation |
| Discord | Real-time community collaboration |
Actor Framework is licensed under the MIT License. By contributing, you agree to license your work under these terms so NI and the LabVIEW community can incorporate it into future LabVIEW distributions.