A comprehensive command-line interface for the Informatica Intelligent Cloud Services (IICS) platform REST API v3. Manage assets, users, connections, export/import packages, and more - from your terminal or CI/CD pipelines.
The demo shows profiles, asset listing, Secure Agents and their services, per-agent service
properties with a dry-run change, JSON output for scripts, the interactive property editor and the
main menu. Host names, user names and the organization name are masked. To replay it in a terminal,
run asciinema play docs/demo/iics-demo.cast; to record it again, see
scripts/demo.
- Full API v3 coverage - objects, connections, schedules, export/import, users, roles, permissions, runtime environments, agents, tags, source control, and more
- Interactive setup - guided profile wizard on first run, or via
iics profile add - Multi-profile configuration - switch between dev/staging/prod orgs with
--profile - Session caching - reuses sessions across invocations (30-min window) to avoid repeated logins
- Automatic session refresh - transparent 401 retry with re-authentication
- Flexible output - human-readable tables (default) or JSON (
--output json) - CI/CD friendly - environment variable overrides,
--yesflag for non-interactive use, JSON output for scripting - Cross-platform - builds for Linux, macOS, and Windows (amd64 & arm64)
Requires Go 1.25 or later.
go install github.com/jbrazda/iics-cli/cmd/iics@latestDownload the pre-built binary for your platform from the Releases page.
git clone https://github.com/jbrazda/iics-cli.git
cd iics-cli
make buildRun iics without arguments in a terminal to open the interactive
main menu: pick a task (edit a role, create a
user, change permissions, ...), and the menu runs the matching command and
returns. Scripts and pipes still get the plain CLI.
iics profile addThe wizard prompts for your username, password, and region, then saves the profile to
~/.iics/config.yaml. You can also set up multiple named profiles:
iics profile add dev
iics profile add prod
iics profile set-default devAlternatively, create the config file manually - see the Configuration section.
# Uses default profile; prompts for password if not in config
iics login
# Use a specific profile
iics login --profile prod
# Override credentials via environment
IICS_USERNAME=user@company.com IICS_PASSWORD=secret iics login# List objects
iics objects list --type MTT
iics objects list # all objects, auto-paginated
iics objects list --type MTT # all mappings, auto-paginated
iics objects list --type MTT --limit 50 # first 50 only
iics objects list --limit 50 --skip 100 # results 101-150
# List objects as JSON
iics objects list --type DTEMPLATE --output json
# List connections
iics connection list
# Get a specific connection
iics connection get --id <connection-id>
# Export assets
iics export create --name "my-export" --ids <asset-id-1>,<asset-id-2>
iics export status --id <job-id>
iics export download --id <job-id> --output export.zip
# Import assets
iics import upload --file export.zip
iics import start --id <job-id>
iics import status --id <job-id>
# List users
iics user list
# Logout
iics logoutdefaultProfile: dev
httpTimeout: 120 # seconds; per-HTTP-request timeout (default 120)
newUser: # global defaults for "user create --interactive" (optional; iics config edit)
domain: "company.com"
userNamePattern: "{firstName}.{lastName}.{profileName}@{domain}"
emailPattern: "{firstName}.{lastName}@{domain}"
ui:
menu: true # false = bare "iics" prints help instead of opening the menu
style:
theme: default # default | minimal | compact | plain | markdown | gh
noColor: false # true = disable color permanently (same as --no-color)
headerColor: "" # lipgloss color: "6"=cyan, "244"=gray, "#FF0000"=hex (empty = theme default)
responsiveTables: true # false = never drop/truncate/wrap columns to fit (same as --wide)
profiles:
dev:
name: "Development Org"
region: "USE4"
username: "user@company.com"
password: ""
loginUrl: "https://use4.dm-us.informaticacloud.com/saas/public/core/v3/login"
baseApiUrl: "https://use4.dm-us.informaticacloud.com/saas"
caiUrl: "https://use4-cai.dm-us.informaticacloud.com"
newUser: # overrides the global newUser for this profile (optional)
emailPattern: "{firstInitial}{lastName}@{domain}"
prod:
name: "Production Org"
production: true # menu marks it and asks before changes
region: "EMEA"
username: "admin@company.com"
password: "@keyring" # real password stored in OS keychain
loginUrl: "https://dm-em.informaticacloud.com/saas/public/core/v3/login"
baseApiUrl: "https://dm-em.informaticacloud.com/saas"
caiUrl: "https://dm-em-cai.informaticacloud.com"The loginUrl, baseApiUrl, and caiUrl fields are populated automatically after the first
iics login - you do not need to set them manually. Profiles are edited with
iics profile add / iics profile edit, global settings with iics config edit
(see config).
The style section controls table output appearance. Available themes:
| Theme | Description |
|---|---|
default |
Unicode rounded borders, cyan bold headers (TTY only) |
minimal |
No borders, colored bold headers with unicode underline |
compact |
No borders, gray bold headers, 1-space column gap (TTY only) |
plain |
ASCII borders, no color - used automatically when a non-default theme is set but output is non-TTY |
markdown |
GitHub-flavored markdown table, no color, always rendered regardless of TTY |
gh |
GitHub CLI-style: no borders, no separator, plain headers, no color, always rendered regardless of TTY |
Non-TTY output (piped, redirected) with no theme configured uses markdown by default, since it
is already colorless and safe to read or parse without a terminal. If you explicitly configure a
different theme (--theme compact, style.theme: minimal, etc.), non-TTY output falls back to
plain instead of forcing that theme's formatting. The markdown and gh themes are exceptions -
they always render as-is even when output is piped, since they are already colorless.
The NO_COLOR environment variable is also respected and always forces plain.
The style.headerColor field accepts a lipgloss color string ("6" for cyan, "244" for
gray, "#FF0000" for hex) and overrides the built-in header color for default and minimal
themes. Leave empty to use the theme default.
See docs/documentation/output.md for the full column-priority
and width-detection reference. On a TTY, table output adapts to the terminal width: columns are ranked by priority and, when
a table is too wide to fit, opaque ID columns are dropped first, free-text columns (like
description or message) wrap, and secondary columns truncate with an ellipsis - in that
order - before the essential columns are ever touched. If a hidden or truncated column would
help, a hint is printed to stderr naming what was hidden. This never applies to non-TTY output,
--output csv|json|yaml, or the markdown/gh themes, which always render in full.
| Flag/setting | Description |
|---|---|
--width |
Terminal width to adapt to; 0 (default) auto-detects |
--wide |
Never drop, truncate, or wrap columns, regardless of terminal width |
style.responsiveTables: false |
Config equivalent of --wide |
IICS_WIDTH |
Override the auto-detected width (same precedence as --width) |
Width resolution order: --width flag > IICS_WIDTH env > detected terminal size > $COLUMNS
env > 80.
| Variable | Description |
|---|---|
IICS_PROFILE |
Override default profile |
IICS_USERNAME |
Override profile username |
IICS_PASSWORD |
Override profile password (takes precedence over keychain) |
IICS_REGION |
Override profile region |
IICS_LOGIN_URL |
Override computed login URL |
IICS_CAI_URL |
Override profile caiUrl |
IICS_OUTPUT |
Override default output format |
IICS_THEME |
Override table theme (same values as --theme flag) |
IICS_WIDTH |
Override auto-detected terminal width for responsive table output |
IICS_ACCESSIBLE |
Set to 1 for screen-reader friendly line-by-line prompts (interactive prompts) |
IICS_NO_MENU |
Set to 1 so bare iics prints help instead of opening the menu |
IICS_HTTP_TIMEOUT |
Override per-HTTP-request timeout in seconds (default 120; --http-timeout flag wins if set) |
IICS_VALID_DEPLOY_TARGETS |
Override valid target allowlist for iics release commands (comma-separated) |
IICS_TARGET_PROFILE_MAP |
Override target to profile mapping for iics release plan (format TARGET=profile,...) |
IICS_USER_<TARGET> |
CI target username fallback for iics release plan when profile is not configured |
IICS_PWD_<TARGET> |
CI target password fallback for iics release plan when profile is not configured |
IICS_REGION_<TARGET> |
Optional CI target region for iics release plan |
IICS_LOGIN_URL_<TARGET> |
Optional CI target login URL for iics release plan |
Environment variables take precedence over config file values.
| Region | ssLogin Host |
|---|---|
| US, USW1, USE2, USW3, USE4, USW5, USE6 | dm-us.informaticacloud.com |
| USW1-1, USW3-1 | dm1-us.informaticacloud.com |
| USW1-2 | dm2-us.informaticacloud.com |
| CAC1 | dm-na.informaticacloud.com |
| APSE1, APJ | dm-ap.informaticacloud.com |
| APNE1 | dm1-ap.informaticacloud.com |
| EMEA, EMWE1 | dm-em.informaticacloud.com |
Passwords stored in ~/.iics/config.yaml can be protected using the OS keychain instead of
keeping them in plaintext. When you add or edit a profile interactively, iics-cli offers to
store the password in the OS keychain and writes the sentinel value @keyring in the config
file instead of the real password.
Supported backends:
| Platform | Backend |
|---|---|
| macOS | macOS Keychain (security framework) |
| Linux | D-Bus Secret Service (e.g. GNOME Keyring, KWallet) |
| Windows | Windows Credential Manager |
To store a password for an existing profile:
iics profile set-password <profile-name>To move a profile's password into the keychain after manual config edits:
iics profile set-password devIICS_PASSWORD always takes precedence over both the keychain and plaintext config, making
it easy to override credentials in CI pipelines without touching the config file.
| Command | Alias | Subcommands | Description |
|---|---|---|---|
| activitylog | list, get |
Query activity logs for completed jobs | |
| agent | list, get, details, delete, start, stop, restart, installer-info, installer-download, configs, rename |
Manage Secure Agents | |
| auditlog | list |
Query organization audit log (V2 API) | |
| completion | bash, zsh, fish, powershell |
Generate shell completion scripts | |
| config | edit |
Edit global settings (new user defaults, theme, timeout, menu) | |
| connection | conn |
list, get, create, update, delete, test, search, objects, metadata |
Manage connections |
| connector | list, metadata |
List connectors and their connection attributes | |
| export | run, start, status, download, create |
Export asset packages | |
| folder | list, create, update, delete |
Manage folders | |
| import | imp |
run, upload, start, status, download-log |
Import asset packages |
| login | Authenticate and cache session | ||
| logout | Invalidate session | ||
| lookup | Resolve object IDs, names, and paths | ||
| metering | get, download |
Query usage and metering data | |
| objects | list, dependencies |
List/search assets, find dependencies | |
| package | expand, create, dependencies |
Extract, assemble, or inspect dependencies of IICS export packages | |
| menu | tui |
- | Interactive main menu (bare iics in a terminal) |
| permission | perm |
get, add, update, delete, set, check, edit |
Manage object-level permissions |
| privilege | list |
List available privileges | |
| profile | add, edit, list, delete, set-default, set-password, show |
Manage connection profiles | |
| project | list, create, update, delete |
Manage projects | |
| publish | start, status, run |
Publish CAI assets to the runtime | |
| release | manifest, validate, plan |
Generate multi-format release manifests and per-environment plans | |
| role | list, get, create, edit, add-privileges, remove-privileges, delete |
Manage roles | |
| environment | runtime, rt, env |
list, get, create, update, delete, configs |
Manage runtime environments (Secure Agent groups) |
| schedule | list, get, create, update, delete |
Manage schedules | |
| securitylog | list |
Query security audit log | |
| sourcecontrol | sc |
checkout, checkin, pull, commit |
Source control operations |
| state | fetch, load |
Fetch/load object state snapshots | |
| tag | assign, remove |
Assign/remove tags on objects | |
| unpublish | start, status, run |
Unpublish CAI assets from the runtime | |
| user | list, get, create, edit, update-roles, update-groups, delete |
Manage users | |
| group | usergroup, ug |
list, get, create, update, delete |
Manage user groups |
Keeping completions up to date: After adding or changing any command or flag, regenerate the shell completion scripts by running
make completions. The pre-generated scripts live in thecompletions/directory and must be committed together with the code change.
| Flag | Short | Description |
|---|---|---|
--profile |
-p |
Profile to use (overrides default) |
--output |
-o |
Output format: table (default), json, csv, yaml |
--verbose |
-v |
Enable verbose output |
--no-color |
Disable colored output and force plain table theme |
|
--theme |
Table theme: default, minimal, compact, plain, markdown, gh (overrides config) |
|
--width |
Terminal width to adapt table output to; 0 (default) auto-detects | |
--wide |
Never drop, truncate, or wrap table columns to fit the terminal width | |
--config |
Config file path (default ~/.iics/config.yaml) |
|
--debug |
Print full HTTP request/response trace to stderr | |
--http-timeout |
Per-HTTP-request timeout in seconds (default 120; overrides config httpTimeout / IICS_HTTP_TIMEOUT env var). Independent of export/import --max-wait-time, which only bounds job polling. |
- Go 1.25+
- Make
# Build
make build
# Run tests
make test
# Run linter
make lint
# Run all checks
make allmake installCompiles the binary and installs it to $GOPATH/bin (typically ~/go/bin), making iics available system-wide without specifying a path. The build injects the current git tag or commit SHA as the version string via -ldflags, and strips debug symbols (-s -w) to reduce binary size.
See docs/DESIGN.md for the full design document.
See CONTRIBUTING.md for guidelines.
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
