
SailPoint IdentityIQ for Visual Studio Code
Manage SailPoint IdentityIQ objects (Rules, Workflows, Tasks, Applications...) directly from VS Code.
This extension connects VS Code to one or several IdentityIQ environments
through a companion REST plugin, and lets you browse, edit, export, import,
refresh and compare IIQ objects without leaving your editor.
⚠️ This extension is not developed, funded or endorsed by SailPoint.
Requirements
- Visual Studio Code
>= 1.125.
- The iiq-devtools companion plugin installed in your IdentityIQ instance
(see plugin).
- An IIQ account allowed to use the plugin endpoints.
Getting started
- Open the IdentityIQ view in the activity bar.
- Click + and enter the display name, base URL
(e.g.
http://localhost:8080/identityiq), login and password.
- The connection is tested automatically; the first environment becomes active.
- Expand the environment and start browsing — or use
IIQ: Open object...
from the command palette.
Features
Environments
- Multiple environments (dev, test, prod...) organized in folders
(drag & drop), listed in a dedicated IdentityIQ view.
- Add an environment with a guided wizard: display name, base URL, login,
password. The configuration is validated with an API call (including
plugin API version vs extension version).
- Passwords are stored securely in the VS Code Secret Storage — never on disk.
- Active environment shown in the status bar; switch it from the status
bar, the command palette (with a None option) or the tree view.
- Connection test with optional SSL verification
(
iiq.connection.rejectUnauthorized) for self-signed certificates.
Browse & edit objects
- Tree view of objects per environment: Applications, Bundles, Forms,
Identities, ObjectConfigs, QuickLinks, Rules, Tasks, Workflows.
- Paginated lists (
iiq.pagination.pageSize, default 200) with
Load more..., sorted by name or by last modification date (global
setting + per-node override).
- Objects open in a virtual file system (
iiq://.../<Env>/<Type>/<name>.xml
— the environment display name is part of the path). Saving the editor
saves the object back to IdentityIQ.
- Get object...: generic access to every object type supported by
IdentityIQ (~130 types, mirror of
ClassLists.MajorClasses — Configuration,
Custom, WorkflowCase, TaskResult...), beyond the types shown in the tree.
Export / import
- Export objects...: pick an environment, one or several object types, then
the objects; export to one file per object or to a single
<sailpoint> file.
- Export object... (object leaf context menu): tenant and object are taken
from the selection; opens a save dialog with cleaned XML.
- Copy name (object leaf context menu): copies the object name to the
clipboard, one name per line for a multiple selection.
- Open in IdentityIQ... (object leaf context menu): opens the object in
the IdentityIQ desktop UI in the system browser, for types that have a
direct page (Applications, Roles, Identities, Tasks, Workflows, Workgroups).
- Exported XML is cleaned for source control (configurable): internal ids,
created/modified timestamps, reference ids,
significantModified... removed,
CDATA preserved.
- Import file(s)... from the editor (Ctrl+Alt+S), from an
environment's context menu in the tree view (file picker), or from the file
explorer (multi-selection, folders imported recursively), with a success/error report.
- Log4j2 configuration: listed under each environment; click to edit it
through the same virtual file system as objects
(
iiq://…/config/log4j2.properties). Save writes the file on the server
and reconfigures logging immediately — unlike Configure logging..., the
change survives a restart. A configuration Log4j2 rejects is rolled back
server-side. Download / Upload commands copy it to or from a local
file (upload also reconfigures).
- Refresh file from IdentityIQ...: re-fetch the object of the current XML file.
- Compare with IdentityIQ...: diff the current XML file with its version
in an environment.
Run rules & tasks
- Run rule... from the tree view (play button on a Rule), from a Rule XML
file or from the command palette, with optional JSON arguments; the result
and execution time are shown in the IdentityIQ output channel.
- Run task... from the tree view (play button on a Task) or from the
command palette: a progress notification stays visible while the task runs,
the outcome (success or failure) is reported, and the final TaskResult
opens as a read-only XML preview.
BeanShell language assistance
- Completion, hover and signature help inside the
<Source> sections of
Rules and workflow <Script>s — in objects opened from an environment
(iiq://) and in local XML files (SSB projects).
- Member completion after
variable. with lightweight type inference:
declared types, new constructions, casts, call chains
(context.getObjectByName(...).), inherited members included.
- Predefined rule variables:
context and log everywhere, plus the
arguments of the rule type (identity, application, account...). The
<Signature> of the rule wins when present; workflow scripts get
workflow, wfcontext...
- Import completion (
import sailpoint.) walking the package tree, and
class-name completion with automatic insertion of the missing import.
- Java metadata is read locally from the jars configured in
iiq.beanshell.classpath (point it at the WEB-INF/lib folder of an
IdentityIQ installation — exact for your version, patches, connectors and
custom jars). Core JDK classes (java.lang, java.util...) are bundled.
- No BeanShell code is sent anywhere; jars are indexed lazily and read
entry-by-entry (no memory blow-up on a full
WEB-INF/lib).
Tail server logs
- Tail server logs... from an environment's context menu or the command
palette: the server log files (the targets of its file-backed Log4j2
appenders —
sailpoint.log, etc.) stream into a colorized output channel,
tail -f style, no SSH needed. A single log file is tailed directly;
the first chunk shows the recent history. A status bar indicator shows
the active tails; Stop tailing server logs... ends them.
Extension settings
| Setting |
Default |
Description |
iiq.pagination.pageSize |
200 |
Number of objects per page in lists |
iiq.objectList.sort |
name |
Default sort order (name or lastModified) |
iiq.connection.rejectUnauthorized |
true |
Verify SSL certificates |
iiq.export.singleResource.filename |
%x/%S.xml |
Save-dialog path when exporting a single object |
iiq.export.singleFile.filename |
%x/export.xml |
Save-dialog path when exporting several objects to one file |
iiq.export.multipleFiles.folder |
%x |
Folder proposed when exporting one file per object |
iiq.export.multipleFiles.filename |
%o/%S.xml |
Relative path of each file under the chosen folder |
iiq.export.withDependencies.filename |
%x/%S-with-deps.xml |
Save-dialog path when exporting an object with its dependencies |
iiq.export.bulkExport.filename |
%x/%o/%S.xml |
Output pattern for IIQ: Export objects in bulk |
iiq.export.bulkExport.classNames |
default |
CSV of exported classes; supports default and Class:property:value |
iiq.export.bulkExport.regexFilter |
empty |
Full-match regular expression on object names |
iiq.export.bulkExport.fromDate |
empty |
Optional ISO date filtering created or modified |
iiq.export.bulkExport.bundleFilter / bundleTypeFilter |
empty |
Bundle hierarchy and type filters |
iiq.export.bulkExport.stripMetadata |
true |
Strip task/application environment metadata |
iiq.export.bulkExport.stripProfiles / stripRoleMetadata |
false |
Strip Bundle profiles and runtime metadata |
iiq.export.bulkExport.targetPropsFile / simplePropsFile |
empty |
Reverse-tokenization properties files |
iiq.export.bulkExport.mergeCompareDirPath |
empty |
Baseline XML directory for SSB merge exports |
iiq.export.bulkExport.ignoreDirPath / modelDirPath |
empty |
Objects to skip / paths to mirror |
iiq.export.removeIds |
true |
Remove internal ids on export |
iiq.export.removeCreatedTimestamp |
true |
Remove created timestamps on export |
iiq.export.removeModifiedTimestamp |
true |
Remove modified timestamps on export |
iiq.export.removeReferenceIds |
true |
Remove ids on <Reference> elements on export |
iiq.export.removeSignificantModified |
true |
Remove significantModified on export |
iiq.export.cleanForSourceControl |
true |
Remove volatile attributes, normalize whitespace |
iiq.beanshell.enabled |
true |
BeanShell completion/hover/signature help in <Source> sections |
iiq.beanshell.classpath |
[] |
Jars or folders (typically WEB-INF/lib) providing Java metadata |
iiq.beanshell.maxCompletionItems |
500 |
Cap on class-name completion items |
Export path patterns use the following tokens:
| Token |
Meaning |
%u |
User home directory |
%w |
Workspace folder |
%x |
Workspace folder if defined, otherwise home directory |
%d / %M / %y |
Day, month, year (UTC) |
%h / %m / %s |
Hour, minute, second (UTC) |
%t / %T |
Environment display name |
%o |
Object type (e.g. Rule, Application) |
%S |
Object name |
%k |
Object type attribute (e.g. BeforeProvisioning); available to bulk export patterns |
All iiq.export.bulkExport.* settings are used by IIQ: Export objects in
bulk. Additional options are visible in VS Code Settings, including CDATA,
TaskDefinition email metadata, custom ignored keys, ObjectConfig sorting, and
ID-to-name resolution. The regular export wizard continues to use the
iiq.export.single* and iiq.export.multipleFiles.* patterns.
Commands
All commands are available under the IIQ: prefix in the command palette;
most are also reachable from context menus in the view, the editor and the
file explorer. See docs/use-cases.md for the full list
and detailed flows.
Release Notes
See CHANGELOG.md.
Documentation
Contributing
Issues and pull requests are welcome. To run the extension locally:
npm install
npm run watch # then press F5 in VS Code
npm test # unit + integration tests (mock plugin server);
# live tests run automatically if an IdentityIQ instance with
# the iiq-devtools plugin answers on http://localhost:8080/identityiq
Install IdentityIQ libraries
In order to compile plugins, you will need IdentityIQ libraries.
To install them, execute the following command
For shells:
IIQ_PATH="/home/..."
VERSION=8.5
mvn install:install-file -Dfile=$IIQ_PATH\identityiq.jar -DgroupId=sailpoint -DartifactId=iiq -Dversion=$VERSION -Dpackaging=jar
mvn install:install-file -Dfile=$IIQ_PATH\connector-bundle-identityiq.jar -DgroupId=sailpoint -DartifactId=connector-bundle-identityiq -Dversion=$VERSION -Dpackaging=jar
For PowerShell:
$IIQ_PATH="C:\..."
$VERSION="8.5"
& mvn install:install-file -Dfile="$IIQ_PATH\identityiq.jar" -DgroupId=sailpoint -DartifactId=identityiq -Dversion=$VERSION -Dpackaging=jar
& mvn install:install-file -Dfile="$IIQ_PATH\connector-bundle-identityiq.jar" -DgroupId=sailpoint -DartifactId=connector-bundle-identityiq -Dversion=$VERSION -Dpackaging=jar
Contributing
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag enhancement.
Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature)
- Commit your Changes (
git commit -m 'Add some AmazingFeature')
- Push to the Branch (
git push origin feature/AmazingFeature)
- Open a Pull Request
License
Distributed under the MIT License. See LICENSE.txt for more information.
Discuss
Click Here to discuss this tool with other users.
| |