Language support for OpenVox 8 and 9 and Puppet manifests (.pp) and Embedded Puppet templates (.epp) in IntelliJ Platform IDEs, including IntelliJ IDEA, PhpStorm, RubyMine, and GoLand. Requires IDE build 252 (2025.2) or newer. OpenVox 9 support is provisional, checked against 9.0.0-rc1; see version compatibility. CI checks recommended stable and EAP IDE releases.
- Syntax highlighting, brace matching, folding, live templates, and a manifest structure view.
- Manifest formatting with two-space indentation and configurable alignment of resource, hash, and selector arrows.
- Declaration navigation, find usages, and rename for classes, defined types, functions, type aliases, parameters, and local variables.
- Completion for resource attributes and values, data types, facts, project declarations, and variables in scope, plus quick documentation.
- Inspections for unknown functions and attributes, unresolved variables, unused parameters, and legacy facts, with a structured-fact quick fix.
- Navigation to module templates and files, including from inside a module repository such as
puppetlabs-apache, and Hiera gutter links for matching class parameter keys indata/orhieradata/YAML files, including subdirectories.
Optional puppet parser validate, puppet epp validate (for templates) and puppet-lint checks run when their executables are available on PATH. puppet-lint runs with --relative from the nearest directory holding a .puppet-lint.rc, so project settings apply. Configure paths or disable the checks under Settings → Tools → OpenVox / Puppet. Point validation at your target OpenVox installation; the editor supports both versions without a language switch.
If you installed an early build named OpenVox and Puppet Language (net.blendbyte.openvox), uninstall it and restart the IDE before installing OpenVox Language (net.blendbyte.openvox-intellij). The plugin ID changed, so the IDE treats these as separate plugins.
Requires JDK 21. Use the included Gradle wrapper:
./gradlew build # compile, test, and package
./gradlew runIde # launch a sandbox IDE
./gradlew verifyPlugin # check IDE binary compatibility
python3 -m unittest discover -s tools -p 'test_*.py'Releases are manual: run the checks above and upload the ZIP from build/distributions/ to JetBrains Marketplace. GitHub Actions builds and verifies but does not publish.
To test an external manifest/template corpus:
./gradlew test --tests '*CorpusTest*' -Dopenvox.corpus=/path/to/modules:/path/to/control-repoUse your operating system's path separator between corpus roots. Corpus tests are skipped when no roots are supplied.
- Heredoc bodies are highlighted, but references inside them are not parsed.
- Hiera links match qualified keys in data files; they do not evaluate
hiera.yamlhierarchies. - Puppetfile support and parameter information popups are not implemented.
The shared grammar and built-in data use OpenVox 8 as the baseline, checked against OpenVox 9 RC1, with version differences noted in quick documentation. Fact paths are curated. To refresh generated data:
git clone --depth 1 --branch 8.x https://github.com/OpenVoxProject/openvox.git /tmp/openvox
python3 tools/generate-openvox-data.py /tmp/openvoxGrammar sources are in src/main/grammar, Kotlin implementation in src/main/kotlin, and bundled data in src/main/resources/openvox. Generated lexer and parser code stays under build/.
Apache 2.0; see LICENSE and NOTICE for attribution. This community plugin is independent of Perforce and Vox Pupuli. Puppet is a Perforce trademark; OpenVox is a Vox Pupuli project.