How to plan an OpenCTI upgrade without guessing which release to run
A self-hosting team facing an OpenCTI version decision is choosing between the licensed LTS line and rolling releases, and the upgrade path depends on that choice. Settle it before anyone schedules a change window, because the two lines differ in how often you will upgrade and what you receive between upgrades. The Community Edition is licensed under Apache License 2.0, while the Enterprise Edition uses a proprietary license. LTS releases are distributed as container images but require a specific LTS license key, and after a one-month stabilization they receive only critical bug and security fixes. Regular releases ship from daily to weekly, so a team on rolling releases takes more upgrades over a year, each smaller but more frequent.
An OpenCTI upgrade is a platform change, not only an image swap. The platform combines the web application, the GraphQL API that your analysts and integrations call, and Python workers that consume RabbitMQ messages for asynchronous writes. A worker on a different release from the platform can disagree with it about what data and messages look like, so the platform and workers must move together. Connectors for import, enrichment, file extraction, export and stream consumption are separate services with their own versions, and each one needs a check against the target release. Underneath sit Elasticsearch or OpenSearch, Redis, RabbitMQ and S3-compatible storage, each with minimum versions that the target release must meet.
The supported path is the upgrade route the vendor documents for your current version and your target version. It can include data migrations that run automatically when the platform starts, so a step you skip may not be undone by rolling back the image. Confirm with the vendor's life cycle and upgrade documentation whether a direct jump is supported, and do not plan intermediate stops until you have checked. Also read the release notes for changes that touch authentication. Since OpenCTI 7.260224.0, defining and using authentication strategies, including SSO, is an Enterprise Edition feature, so a team that relies on SSO under Community Edition must confirm its license position before it upgrades.
The rest of this page covers what changes between releases, the preparation that keeps an upgrade reversible, the sequence of steps, how to test the target version against your connectors and workflows, and the effort to expect. Use it as a planning checklist. Before you read further, write down three things: which line you run today, which line you intend to run over the next year, and who owns the version of each connector. Those answers decide which release you move to and how many people the change needs.
What changes between OpenCTI versions and what each change asks of you
This table compares the change types you meet across OpenCTI releases, from version numbering and LTS support windows to licensing and edition requirements, and what each one asks of your team. Read each row as a question to answer for your own deployment before you pick a release track. The main takeaway is that an LTS line trades newer features for a fixed support window and a license key, so your upgrade calendar depends on which line you run.
| Change | What it means for your environment | What to confirm in release notes |
|---|---|---|
| Version numbering | Regular releases use x.YYMMDD.z, so the date segment shows when the release or LTS branch was created. Example: 7.261016.0, published October 16, 2026. | The release date segment, whether the build is a regular release, and the version you will pin in your deployment manifests. |
| LTS version labels | LTS builds use x.YYMMDD.z-lts.n, where lts.n counts hotfixes on one branch. Example: the 7.260309.0 line had reached lts.8 by October 2026. | Which lts.n build is current for your branch, and whether your target hotfix is listed among the fixes in that build. |
| Release cadence | Non-LTS releases ship when ready, from daily to weekly. LTS releases occur every 6 months, so a rolling track changes often and needs regular change windows. | The release frequency you expect on your track and the date of the next LTS branch so you can schedule a move. |
| Support window | Each LTS line is supported for 1 year, and consecutive LTS versions overlap by 6 months. You need a successor line in place before your current line ends support. | The end-of-support date for your current LTS line and the date the next line is available for testing. |
| Stabilization period | After one month, an LTS line receives only critical bug and security fixes. Feature work continues on non-LTS releases, so new capabilities arrive later on the LTS track. | Which fixes are in each hotfix, and whether any feature you need is scheduled for a later LTS branch. |
| LTS license key | LTS releases are distributed as container images but need a specific LTS license key. Your deployment pipeline must hold the key and renew it before it expires. | Key scope, expiry, renewal process and whether the key covers your target LTS branch and deployment count. |
| Edition and SSO | Since 7.260224.0, defining and using authentication strategies, including SSO, requires the Enterprise Edition. Confirm the edition before you plan identity changes. | The edition required for each authentication strategy in your target version, and any change to login behavior during the upgrade. |
| Database migrations | Some upgrades run data migrations automatically at startup. Plan a tested backup of Elasticsearch or OpenSearch data and the other stores before each upgrade. | Whether the version runs migrations on startup, whether they can be reversed, and the expected order of platform and worker restarts. |
| Connector alignment | Connectors run as separate components, so their versions must work with your platform version. Upgrade the platform and connectors in a planned order and test them together. | The connector versions listed as compatible with your target platform release and any connector that needs a change to its configuration. |
When an LTS line fits production and when rolling releases fit
The LTS line suits teams that need a stable target for longer periods and can plan changes around a fixed calendar. LTS releases are branched on a date and use the x.YYMMDD.z-lts.n version format. They are distributed as container images, but a specific LTS license key is required to run them. Under the published life cycle, a new LTS line starts every 6 months and each line is supported for 1 year, so consecutive lines overlap by 6 months. That overlap is the window in which you move from one line to the next, and it is the main planning tool for this path.
- Support window: each LTS line receives support for 1 year, which gives you a known end date to plan against.
- Fix types: after a one-month stabilization period, the line receives only critical bug and security fixes, so new features and most non-critical changes stop arriving.
- Release frequency: hotfixes arrive as numbered lts.n builds on the same line. The 7.260309.0 line had reached lts.8 by October 2026.
- License requirement: the LTS key must be in place before the first deployment and kept current through renewals, or the line cannot run.
- Operations load: upgrades happen about twice a year, so each one needs a scheduled window, change approval, a tested backup and a rollback plan.
Before committing, confirm current license terms, entitlements and whether an LTS key covers every environment you plan to run, including test and disaster recovery, with Filigran.
Rolling releases suit teams that want new features, connector support and fixes as soon as they are ready, and that can absorb frequent change. Regular releases use the x.YYMMDD.z version format and ship when ready, from daily to weekly. The Community Edition is licensed under the Apache License 2.0, while the Enterprise Edition is licensed under the proprietary OpenCTI Enterprise Edition License. Teams on this path follow the product forward without waiting for a branch date, so the platform version changes more often and the team has to keep pace with it.
- Release frequency: new builds arrive from daily to weekly, so you need an intake process that can test and approve them quickly.
- Fix types: bug fixes, security fixes and feature changes all land on the current line, which keeps your platform on the newest code.
- License scope: the Community Edition needs no LTS key. Enterprise features such as SSO, playbooks and audit logs depend on the Enterprise license, which is a separate agreement.
- Operations load: frequent upgrades mean more regression testing, more maintenance windows and closer reading of the database migrations included in each version.
- Connector alignment: connector versions must match the platform version after each upgrade, so every platform change also needs a connector check.
Before committing, confirm with Filigran which Enterprise entitlements apply to the edition you run, and check whether your team has the capacity to test and deploy changes at the release pace.
Breaking changes and deprecations to check before moving to a new OpenCTI line
The one licensing change supplied for this topic affects authentication. Since OpenCTI 7.260224.0, defining and using authentication strategies, including SSO, is an Enterprise Edition feature. Teams running Community Edition with SAML, OpenID Connect or another SSO strategy must decide before upgrading across that boundary whether they will hold an Enterprise Edition license or move sign-in to another mechanism. Start by listing every authentication strategy in use, recording which users depend on each one, and confirming with Filigran which strategies remain available under Community Edition on your target line.
Treat the license decision as a workstream with a named owner, a budget line and a go or no-go gate before the upgrade window. Ask Filigran for a written quote covering the Enterprise Edition license your target line requires. LTS lines also need a specific LTS license key, so an LTS plan may involve two license questions rather than one. Ask whether trial or free licenses apply to your organization, since the vendor documents those for development, research and non-governmental organizations. If approval arrives late, the fallback is to stay on a release before the boundary, which means accepting that release's support window, so check the life cycle documentation for its end dates first.
Other breaking changes and deprecations are not covered by the facts supplied for this topic, so the checklist must come from primary sources. Read the release notes for every regular and LTS release between your current version and your target on the OpenCTI releases page, and read the product life cycle documentation for support windows and LTS rules. Build a register with one row per change. Record the release, the change, the component it touches (platform, workers, connectors, dependencies or configuration), whether it removes or renames a setting, and the person who decides. Mark each row as no action, configuration change, connector change or blocker.
Then check the dependency floor and connectors against the target. The deployment overview lists minimums of Elasticsearch 8.0 or OpenSearch 2.9 or later, Redis 7.1 or later and RabbitMQ 3.11 or later, plus S3-compatible storage, so confirm that each running version meets the requirements of the target release, since its notes may have raised them. Confirm that each connector version works with the target platform, because connectors are separate components that must stay aligned with the platform. Finally, rehearse the upgrade on a staging copy of production data, watch the automatic migrations run to completion, and tie the rollback plan to the register so every blocker has an agreed resolution before production begins.
Backups, inventory and test environment before an OpenCTI upgrade
Before any OpenCTI upgrade, five things need to be in place: restorable backups, an accurate connector list, a record of authentication and Enterprise Edition use, a staging environment that meets documented minimums, and a license position that matches the target release. Each card is a check that makes the migration rehearsal meaningful.
Backups of dependent data stores
OpenCTI depends on Elasticsearch or OpenSearch, Redis, RabbitMQ and S3-compatible storage such as MinIO, and each holds state the platform needs after an upgrade. Take backups of every store at the same point in time, then restore them into the staging environment before the change window. Confirm that the search cluster's snapshot repository is reachable from the restore target, and record who is authorized to run the restore. A backup that has never been restored is still an untested assumption.
Connector inventory and versions
Connectors for import, enrichment, file extraction, export and stream consumption run beside the platform and carry their own versions. List every connector deployed, its image or version, its configuration owner and the platform version it currently runs against. Check each one against the target release and the connector repository before scheduling the upgrade, and flag any that need a newer build. Connectors left on old versions can stop importing or enriching once the platform moves.
Configuration and authentication inventory
Record how the platform is configured, including local users, LDAP, SAML, OpenID Connect and any other authentication strategies, plus proxy headers and client certificates in use. Since OpenCTI 7.260224.0, defining and using authentication strategies, including SSO, is an Enterprise Edition feature, so confirm your license covers every SSO strategy you run. List other Enterprise Edition features in use, such as audit logs, playbooks, organization-based data segregation and AI features, because each one needs its own license check and may carry configuration to migrate.
Staging sized to documented minimums
Build a staging environment that matches the production topology and meets the documented minimums: platform nodes with 2 cores and at least 8 GB RAM, and Elasticsearch or OpenSearch with 2 cores, 8 GB RAM and 16 GB SSD. Keep at least one platform node for every 3 workers. Confirm the dependency versions, Elasticsearch 8.0 or OpenSearch 2.9 or later, Redis 7.1 or later and RabbitMQ 3.11 or later, against the target release notes. Load a recent copy of production data so the migration runs at production-like volume.
Confirmed LTS license key
LTS releases are distributed as container images but require a specific LTS license key to use, so the key belongs in the upgrade plan from the start. Confirm with Filigran that the key covers the target LTS line before the change window, and load it into staging first. If the target is a rolling release, no LTS key applies, so record that decision and the reason for it. Store the key in your secrets management system and record its expiry alongside the upgrade plan.
Keeping connector versions aligned with the OpenCTI platform
Connector versions must be checked against the platform version during every OpenCTI upgrade, because connectors run alongside the platform and depend on its messages. An OpenCTI deployment includes the platform (UI and GraphQL API), Python workers that consume RabbitMQ messages for asynchronous writes, and connectors for import, enrichment, file extraction, export and stream consumption. Connectors read from and write to the platform through this messaging path, so a change in how the platform handles messages or data can affect a connector even when the platform starts cleanly. Treat connector versions as part of the platform change from the first planning meeting.
Start with an inventory of every connector: its name, the image or package version it runs, the host or cluster where it runs, the team that owns it, and the platform version it was last tested against. Then confirm which connector releases support your target platform release. Check the OpenCTI connectors repository and the release notes for both the platform and each connector. The material available for this page does not include a compatibility matrix, so do not assume that a connector release supports a platform release because the version numbers look close. Ask the platform owner to confirm in writing which connector releases they have verified with the target version.
Plan connector upgrades in the same change window as the platform upgrade. Running an upgraded platform with older connectors, or the reverse, creates a mixed state that is harder to diagnose during an incident. Read the release notes for any required order of operations, and confirm that the shared services connectors depend on, including RabbitMQ, Redis and Elasticsearch or OpenSearch, still meet the platform's documented minimum versions. Custom or in-house connectors need their own test cycle, so identify them early and allow time for them to be rebuilt and tested against the target platform.
After the window, verify each connector before closing the change. Confirm that each connector registers with the platform, consumes its queue without a growing backlog, and writes the objects you expect. Watch RabbitMQ queues and worker logs for errors for a period you agree in advance. Keep the previous connector versions and their configuration available so you can roll back a single connector without reverting the platform. When you request a quote for connector work, ask for the connector count, the number of custom connectors, the test environments included and the verification steps in the written scope.
How to sequence an OpenCTI upgrade with checks and rollback points
This sequence moves an OpenCTI upgrade from a confirmed target version to a verified production state. Each step has a check and a decision point, so the team knows when to continue, when to stop, and when to roll back to a recorded point.
Confirm the target line and license
The platform owner confirms whether the target is a regular release (x.YYMMDD.z) or an LTS release (x.YYMMDD.z-lts.n), then reads the product life cycle page for its support window. For an LTS target, confirm the license key covers that specific LTS line, since LTS images require one. Confirm that any Enterprise Edition features in use, such as SSO, are licensed for the target. Done when the target version, license entitlement and support end date are written in the change ticket.
Back up and verify each dependency
Before any change, the platform team takes a backup of each dependency: Elasticsearch 8.0 or later or OpenSearch 2.9 or later, Redis 7.1 or later, RabbitMQ 3.11 or later, and the S3-compatible storage that holds uploaded files. Restore a sample of each backup into an isolated environment to prove it is usable. Record the versions currently running, since the dependency minimums set the floor for the upgrade. Done when every backup has a successful test restore and a documented version inventory exists.
Upgrade staging and run the test set
The team rebuilds a staging copy with the same dependency versions, connector set and a representative data sample, then upgrades it to the target version. They run the test set: sign-in through each configured authentication strategy, GraphQL queries, an import, an enrichment run, and checks against known objects and relationships. Results are recorded pass or fail. Done when the test set passes on staging and the results are saved. A failed test stops the sequence: fix the cause, restore staging from backup, and repeat the upgrade.
Record the rollback point and schedule the change
Immediately before the production change, the team takes a final backup and labels it with the current version and the time. They write the rollback procedure, covering restoration of the previous platform version, restoration of dependency snapshots and the named owner who makes the rollback call. The release notes for the target version are checked to confirm what migrations run on startup and whether the previous version can run against data the new version has migrated. Done when the rollback procedure has been reviewed and the change window is approved by connected tool owners.
Upgrade the platform and confirm startup migrations
The team stops writes from workers and connectors if the runbook requires it, deploys the target platform version and starts it. They watch startup logs for each migration step described in the release notes and confirm it completes before users are admitted. They check that the UI and GraphQL API respond and that the displayed version matches the target. Done when startup migrations complete without errors. If a migration fails or stalls, the platform stays closed to users and the rollback procedure starts.
Verify workers and RabbitMQ consumption
The team starts the Python workers at the new version and confirms each one connects to RabbitMQ and consumes messages. They watch queue depths, which should drain steadily after startup, and review worker logs for repeated consumer errors. The documented sizing guidance is at least one platform node for every three workers, so the team confirms the node count matches the worker count before going live. Done when queues drain and worker logs show no repeated errors across the observation window set in the runbook.
Upgrade connectors to aligned versions
The team upgrades each import, enrichment, file extraction, export and stream connector to a version that matches the new platform release, following each connector's documented compatibility. Connectors that feed core data are upgraded before those that depend on it. The team confirms each connector registers with the platform and reports healthy. Any connector that cannot be aligned yet is listed, and running it on an older version requires a named approval. Done when every connector reports healthy and the exception list is signed off.
Confirm ingestion and API health
The team repeats the staging test set against production: a scheduled import creates objects, an enrichment job completes, and a known indicator returns its expected relationships through the GraphQL API. They check authentication, error rates and worker queues over the runbook's observation window and compare results with the staging record. Done when production results match staging, and the change is closed with the backups, rollback record and connector versions attached. If checks fail, the team rolls back to the recorded point and reopens the review.
Testing an OpenCTI upgrade and deciding when to roll back
Define the test set before the upgrade window opens, and treat a passing run as the entry condition for the change. The set should show that the functions your team depends on still work on the target version. Start with login, using the strategy your team actually runs: local users, LDAP, or SSO. If you use SSO, confirm that your license covers it, because since OpenCTI 7.260224.0, defining and using authentication strategies is an Enterprise Edition feature. Test an administrator account, a standard analyst account and a service account, since integrations often authenticate with the last of these.
Next, cover the work your integrations and pipelines do every day. Run the GraphQL API calls that your scripts, dashboards and connectors make, and compare the responses with output recorded before the upgrade, paying attention to field names, pagination and error formats. Push a known sample file through an import connector and confirm that the expected objects and relationships appear. Run one enrichment job and one export, then check the results inside the platform. Finally, check worker health: RabbitMQ queues should drain, workers should keep consuming messages, and backlog should not grow. Confirm that Elasticsearch or OpenSearch, Redis and your S3-compatible storage respond normally too, because workers depend on all of them.
A rollback is only as good as the restore you tested before the change. Take a backup of the database, the search index and object storage, then restore it into a separate environment and run the full test set against the restored copy. Ask Filigran, and confirm in your own environment, whether a database schema change made by an automatic migration can be reversed by restoring a backup. If the answer is no, or you cannot confirm it, treat the pre-upgrade backup as the only rollback path. Record the exact versions and backup timestamps, and keep the database and search index from the same point in time so the restore can be repeated under pressure.
Decide rollback triggers in writing before the change starts, and name an owner for each. Useful triggers include a login failure that affects a defined group of users, a GraphQL call that an integration depends on returning errors, a sample import that does not finish, or a worker backlog that does not drain within a window your team agrees in advance. Also decide in advance whether a defect will be handled by a hotfix or by a rollback. If you run an LTS line, note that after its one-month stabilization it receives only critical bug and security fixes, so a non-critical defect may have to wait for a later release.
Finally, plan the decision itself. Name the person who can call a rollback and the person who executes it, and agree how users and connector owners will be told. Keep the test results, backup records and trigger log together so the decision can be reviewed afterward. If the target version falls outside the release line your team chose, record which tests you could not run and why, so the next window starts with those gaps closed. Confirm with Filigran which release line and license key apply to your target version before scheduling the window, since LTS releases require a specific key.
What makes an OpenCTI upgrade take longer
This table lists the factors that lengthen an OpenCTI upgrade, what each one changes in the work, and what to request in a written quote. Check each row against your own inventory before comparing an LTS path with a rolling release path. The main takeaway is that connector versions, Enterprise Edition configuration and the number of environments often add more work than the platform upgrade itself.
| Driver | Effect on effort | What to ask for in a quote |
|---|---|---|
| Number of connectors and their versions | Each connector is checked against the target platform release, and custom or third-party connectors need separate testing. | Connector inventory with versions, custom-code owners and the connectors each upgrade step touches. |
| Data volume in Elasticsearch or OpenSearch | Larger indices lengthen backup, restore and post-upgrade verification, and raise the cost of a rollback. | Index sizes, shard counts, and whether backup, restore and reindex checks are included in scope. |
| Platform nodes relative to workers | The deployment overview recommends at least one platform node for every 3 workers. Fewer nodes make rolling order and downtime planning harder. | Current platform node and worker counts, plus the planned order for restarting nodes and workers. |
| Enterprise Edition features and SSO | Authentication strategies, including SSO, need Enterprise Edition from 7.260224.0. Identity provider settings need retesting after the change. | Which Enterprise Edition features are in use, license status per environment, and SSO test cases. |
| MISP or TheHive integrations | Each integration has its own configuration and API expectations, which must be confirmed again after the platform moves. | Integration list, the owner of each external system, and test data for end-to-end checks. |
| Number of environments | Each environment repeats the same steps, checks and evidence, so effort grows with the number of environments. | Whether each environment is priced and scheduled separately, and what work is reused between them. |
| Staging environment availability | Without a staging copy, checks run against production data, which adds rollback planning and change approval work. | Whether staging matches production versions, connectors and data, and who maintains it. |
What buyers ask before paying for help with an OpenCTI upgrade
Should we run OpenCTI on the LTS line or a rolling release?
For most production teams in regulated sectors, the LTS line is the better default because it receives only critical bug and security fixes after its one-month stabilization period, which gives you a predictable upgrade cadence. Non-LTS releases ship when ready, from daily to weekly, which suits test environments and teams that need new features quickly. The choice also depends on how much change your team can absorb and whether you hold the specific LTS license key, since LTS releases are distributed as container images but require that key. Each LTS line is supported for one year, with a six-month overlap between consecutive lines, so plan each move inside that window. Before deciding, have your architect map your connector inventory against the target release, because connector versions must stay aligned with the platform.
What does an OpenCTI upgrade engagement cost and what drives the fee?
No price list is published, and a quote follows from a written scope, so the fee depends on what the work contains. The main cost components are the assessment of your current version, the connector and integration inventory, preparation of backups and environments, the upgrade and any migration rehearsal, validation, and handover documentation. Costs rise with the number of deployed connectors, custom integrations, the size of your data and search indexes, the number of environments to validate, and whether Enterprise Edition features such as SSO, playbooks or audit logging need checking after the change. Upgrade work is usually one-time, while license fees and any retainer for ongoing support recur. Ask for a quote that lists each deliverable, the environments covered, what you must provide, and what is excluded.
How long does an OpenCTI upgrade take and what changes the timeline?
The timeline is set in the written scope, and no standard duration applies because the size of each platform and its integrations varies widely. The main drivers are the number of versions between your current and target release, how many connectors must be updated or replaced, and the volume of data an automatic migration must process. Dependency upgrades also add time, including Elasticsearch or OpenSearch, Redis, RabbitMQ and S3-compatible storage, as do the number of non-production environments that must be validated before production. Scheduling often sets the pace more than the software does, since change windows, approval cycles and access to your infrastructure are common constraints. Ask for a plan that separates rehearsal, production cutover and post-upgrade validation, and ask what would trigger a delay.
What must our team provide before an OpenCTI upgrade starts?
Your team should provide administrative access to the target infrastructure, a backup of the platform and its data stores that has been restored successfully in a separate environment, a current connector inventory, and a valid license key for the release you plan to run. Access should cover the platform, the search and queue tiers, object storage, and the hosts or cluster where connectors run. The connector inventory should list each connector with its source tool, version, configuration location and named owner. You also need change approval, a maintenance window agreed in advance, and a decision-maker who can authorize a rollback. Confirm license entitlement for any LTS release with Filigran or your reseller before the rehearsal begins, not after.
Can an internal team upgrade OpenCTI without outside help?
Yes, an internal team can upgrade OpenCTI if it has the skills, time and access to rehearse the change, and many teams do. The real test is whether the team can cover the platform, the search and queue dependencies, the connectors and the security settings within the same change window. Teams running one platform with few connectors and a tested rollback plan usually have the least to add from outside. Outside help tends to pay off when the connector estate is large, when custom integrations or SSO settings must be checked, when several environments need the same procedure, or when people who know the platform are unavailable. A fixed-scope engagement can buy specific deliverables, such as a rehearsed runbook, while your team keeps operating the platform afterward.
What happens if an automatic OpenCTI migration fails during the upgrade?
The outcome depends on where the failure occurs and on the rollback plan agreed before the change, so no single answer applies to every platform. The safest approach is to rehearse the migration on a copy of production data, record how each step behaves, and keep a backup that you have already restored successfully. If a migration stops partway, the team should halt writes, assess the state of the platform and its data stores, and either resume from a documented step or restore the backup to the prior version. Check the vendor documentation to learn which migration steps are reversible. Your written scope should name who decides to roll back, the criteria for that decision, and how incident support is handled during the event.
What does a fixed-scope OpenCTI upgrade engagement include?
A fixed-scope engagement covers the work, deliverables, environments and timeline agreed in writing before work starts, and nothing outside that document is assumed. Typical items include a current-state assessment, a connector and integration compatibility review, a target version plan, a rehearsal in a non-production environment, the production upgrade, validation of platform and connector behavior, and handover documentation. The scope should also state what is excluded, such as new connectors, custom development, or work on other platforms in your estate. Ask for each deliverable to name its acceptance criteria and the person who signs it off. Ongoing support, upgrades and continuous testing are available as separate retainers, so the quote should show them as distinct items.
How DeployOpen scopes, delivers and supports an OpenCTI upgrade
DeployOpen treats the choice between OpenCTI's rolling releases and the LTS line as an operating decision. Each upgrade is scoped in writing, built inside your infrastructure, and handed over with documentation your team can run. Licensing, connector alignment and the automatic migrations are reviewed before any change reaches production.
How we scope
- The written scope names your current OpenCTI version, target line, and every connector that must be upgraded with it.
- Licensing is confirmed up front, including whether your team needs an LTS license key for the LTS line.
- Engagements are fixed-scope, with deliverables and timelines agreed in writing before work starts.
How we build
- Dependency versions for Elasticsearch or OpenSearch, Redis, RabbitMQ and S3-compatible storage are checked against the target release.
- Upgrades run first in a non-production copy, with automatic migrations observed and logged before any cutover.
- Platform, Python workers and connectors are moved in a planned order, with rollback steps written for each stage.
How we hand over
- Runbooks record the chosen LTS or rolling line, the license key location, and the support window for that line.
- Test evidence covers login, connector ingestion, enrichment and the GraphQL API after each stage.
- Your team receives a written calendar of upcoming LTS and connector updates to plan the next upgrade.
How we support
- Ongoing support, upgrades and testing can run under a retainer once the initial upgrade is complete.
- Support tracks which fixes reach your LTS line, so your team knows when critical and security patches apply.
- Each planned move to a newer line is scoped as a new piece of work, with its own written agreement.

