Profound Logic package registry
CoderFlow's npm packages are published to Profound Logic's own npm registry,
https://npm.profoundlogic.com/, instead of the public npm registry. This page
explains the move, the one npm setting a self-hosted server needs, and the
one-time manual upgrade for servers running CoderFlow 0.16.0 or earlier.
:::tip Hosted by Profound Logic If your CoderFlow instance is hosted by Profound Logic on coderflow.ai, you need do nothing. Profound Logic manages its updates. :::
What changed
Publishing to the public npm registry, registry.npmjs.org, is suspended for
Profound Logic's account pending review, so new CoderFlow versions cannot be
published there. Profound Logic now hosts the whole @profoundlogic scope itself,
at npm.profoundlogic.com:
- New versions of
@profoundlogicpackages, including@profoundlogic/coderflow-serverand@profoundlogic/coderflow-cli, are published only to npm.profoundlogic.com. - Every version published before the move was copied from registry.npmjs.org with identical integrity values, so existing installations and lockfiles stay valid.
- registry.npmjs.org keeps the versions published before the move but receives no new ones. The newest official CoderFlow server release there is 0.16.0.
- Packages outside the
@profoundlogicscope, including every third-party dependency, still come from registry.npmjs.org. npm.profoundlogic.com does not serve or proxy them.
For a self-hosted server this means:
- CoderFlow 0.16.0 and earlier check registry.npmjs.org for updates. They keep reporting that the server is up to date and cannot offer later versions. Upgrade such a server once by hand; see First upgrade.
- Later versions check npm.profoundlogic.com, and their built-in update command installs from it directly. After the first upgrade, Check for Updates and Update Server on Server Administration → Health work as before.
- npm commands you run yourself need the scope setting below. Without it, npm keeps installing the old versions from registry.npmjs.org.
Configure npm
Run this as the account that runs CoderFlow (the service account), not as root or as your personal account:
npm config set @profoundlogic:registry https://npm.profoundlogic.com/
It adds one line to that account's ~/.npmrc:
@profoundlogic:registry=https://npm.profoundlogic.com/
The line affects only @profoundlogic packages. Downloads need no account, token
or other credentials.
Set it wherever npm installs @profoundlogic packages:
- On the server, for the CoderFlow service account. Manual
npm install -gcommands and a custom Update Command rely on it. - On developer machines that install the CLI.
- In Dockerfiles, configuration management, CI jobs and other scripts that install CoderFlow; see Custom update commands and operator-managed installs.
CoderFlow's own update check, its built-in Update Command and Install from file… do not need the line, because they pass the registry explicitly (see What CoderFlow does itself). Set it on the server anyway, so that manual commands there do not install old versions.
Check the setting
As the same account:
npm config get @profoundlogic:registry
npm view @profoundlogic/coderflow-server dist-tags
The first command prints https://npm.profoundlogic.com/, or your mirror (see
Mirrors and air-gapped sites). undefined means
the line is missing. The second command reads the release channels through that
setting: latest is the current official release and dev the prerelease
channel. If latest is 0.16.0 although the release notes list a
later version, npm is still reading registry.npmjs.org.
On CoderFlow versions after 0.16.0, also open Server Administration → Health
and click Check for Updates. It reads npm.profoundlogic.com, or your
override, and reports the same latest. If the
registry cannot be reached, the error names the registry host.
Pin the version
Every install command on this page names a version. Replace <version> with the
version to install, for example the latest version that npm view prints or the
version Check for Updates shows.
An unpinned npm install -g @profoundlogic/coderflow-server on an account without
the scope line silently installs 0.16.0 from registry.npmjs.org, which downgrades a
newer server. A pinned version that exists only on npm.profoundlogic.com fails
with ETARGET (no matching version) instead, which shows that the scope line is
missing. Do not reuse unpinned commands from older notes, scripts or
documentation.
First upgrade from 0.16.0 or earlier
CoderFlow 0.16.0 and earlier read registry.npmjs.org for updates, and that copy
stops at 0.16.0. On those versions Check for Updates reports no newer version,
and Update Server cannot install one. Install the first later version by hand
once. From then on, Health reads npm.profoundlogic.com, and later updates work
from Server Administration → Health as before, even without ~/.npmrc.
Use the SSH steps for your installation type. Use
Install from file only when you cannot sign in to the host.
Plan a short maintenance window: the restart briefly disconnects signed-in users.
The server needs outbound HTTPS to both npm.profoundlogic.com and
registry.npmjs.org (see Server Requirements).
Installer-based servers (systemd)
The installer creates the account coderflow unless you chose another name with
--user. Replace coderflow below if you did.
-
Switch to the service account:
sudo -iu coderflow -
Check that
npmis the account's NVS installation:command -v npmIt should print the full path of
~/.nvs/default/bin/npm, for example/home/coderflow/.nvs/default/bin/npm. If it prints another path or nothing, runexport PATH="$HOME/.nvs/default/bin:$PATH", the path the service uses, and check again. -
Set the scope line:
npm config set @profoundlogic:registry https://npm.profoundlogic.com/ -
Install the new version, replacing
<version>:npm install -g @profoundlogic/coderflow-server@<version>npm 11 may print
install scripts not yet covered by allowScripts; see Install the Server. -
Return to your own account and restart the service:
exitsudo systemctl restart coderflow -
Check the installation as the service account:
sudo -iu coderflowcoder-server doctorexit
Then open Server Administration → Health. Server Version shows the new version, and Check for Updates now reads npm.profoundlogic.com.
Older servers managed with PM2
Older manual installations often run under the account coder with PM2. Replace
coder with your account name:
sudo -iu coder
command -v npm
npm config set @profoundlogic:registry https://npm.profoundlogic.com/
npm install -g @profoundlogic/coderflow-server@<version>
pm2 restart coderflow --update-env
exit
Check the command -v npm output as in step 2 above. PM2 runs under the service
account, so restart it before exit. If the server uses the built-in daemon mode
instead of PM2, run coder-server restart in place of the pm2 command. Then run
coder-server doctor as the account and check Server Version on Health.
Without SSH: Install from file
:::caution Secondary path Use the SSH steps above when you can. Install from file runs npm inside the running server and is harder to repair if it fails. If anything goes wrong, recover with the SSH steps. :::
You need CoderFlow 0.15.1 or later, Server Admin access, and both Enable Web Updates and Allow local package installation turned on in Server Settings → Update Management.
-
On a machine with internet access, download the package. It is public; no sign-in is needed.
curl --fail --location --proto '=https' -o coderflow-server-<version>.tgz \https://npm.profoundlogic.com/@profoundlogic/coderflow-server/-/coderflow-server-<version>.tgz -
Check its SHA-512 against the integrity value the registry publishes. Both commands must print the same
sha512-…value:npm view --@profoundlogic:registry=https://npm.profoundlogic.com/ @profoundlogic/coderflow-server@<version> dist.integrityecho "sha512-$(openssl dgst -sha512 -binary coderflow-server-<version>.tgz | openssl base64 -A)"If they differ, delete the file and do not install it.
-
Open Server Administration → Health, choose Install from file…, select the file and click Upload and inspect. Check that the uploaded package is
@profoundlogic/coderflow-serverat the version you downloaded, and that its package SHA-256 equals the SHA-256 of the file you checked in step 2:sha256sum coderflow-server-<version>.tgzOn macOS, use
shasum -a 256instead. A registry download has no deployment checksum attachment; this comparison takes its place. Then click Install inspected package. See Install a downloaded server package for each screen. -
When the restart confirmation opens, choose Restart Now. Keep the page open until it confirms the new version is running.
The installation runs npm on your current version, which installs the package's
dependencies with the service account's npm settings. If it fails with ETARGET
or E404 for an @profoundlogic package, that account needs the scope line: use
the SSH steps.
After this upgrade, later updates from Health need no SSH. Set the scope line the next time you are on the host anyway, for manual commands.
:::note How to recover
If the installation fails, or the server does not come back after the restart,
sign in to the host and follow the SSH steps for your installation type.
Installing the pinned version again with npm usually repairs a partial
installation. The service log shows why the server did not start; on an
installer-based server, run sudo journalctl -u coderflow.service --since today.
:::
Custom update commands and operator-managed installs
CoderFlow adds the registry only to its built-in Update Command: the default, saved copies of it, and the older default without install flags. It runs any other command exactly as entered. If you use a custom Update Command, or install CoderFlow with Docker, Ansible or other tooling, add the scope line for the account where that npm runs, or pass the registry on the command line:
npm install -g --@profoundlogic:registry=https://npm.profoundlogic.com/ @profoundlogic/coderflow-server@<version>
In a custom Update Command, keep {version} where this example has <version>.
A Dockerfile does not see the host's ~/.npmrc: set the registry in the image
before installing, for example with
RUN npm config set --location=global @profoundlogic:registry https://npm.profoundlogic.com/,
or pass the flag. Pin the version in every case.
New installations
The current installer downloads
CoderFlow from registry.npmjs.org. It therefore installs 0.16.0, and --version
cannot select a later release. After installing, upgrade once with the
steps for installer-based servers. Do not pass
--registry https://npm.profoundlogic.com/: --registry replaces npm's registry
for every dependency, and npm.profoundlogic.com serves only the @profoundlogic
scope.
For a manual installation, set the scope line before installing and pin the version.
What CoderFlow does itself
CoderFlow releases after 0.16.0 use the registry as follows:
- Check for Updates, on Health and in the About dialog, reads the release channels from npm.profoundlogic.com. It does not fall back to registry.npmjs.org, which would report old versions as current. If the registry cannot be reached, the error names its host.
- The install command shown with an available update includes the registry, so
it also works on a host without the scope line:
npm install -g --@profoundlogic:registry=https://npm.profoundlogic.com/ @profoundlogic/coderflow-server@<version>. - The built-in Update Command, Install from file…, and installs of a server
package from a deployment task pass
--@profoundlogic:registry=with the registry, so they do not depend on~/.npmrc. - When an update is available, the About dialog's Release notes link opens the CoderFlow release notes.
The environment variable CODERFLOW_PROFOUNDLOGIC_REGISTRY replaces
npm.profoundlogic.com in all of these; see
Mirrors and air-gapped sites. It is set only in
the server process's environment; there is no Settings field for it. Other npm
commands use the service account's npm settings.
Mirrors and air-gapped sites
If your servers get npm packages through an internal mirror, such as Artifactory, Nexus Repository or Verdaccio:
-
Proxy the scope. Add a proxy (remote) npm repository for
https://npm.profoundlogic.com/, and make sure@profoundlogicpackages resolve only from it, not from your registry.npmjs.org proxy. Everything else keeps coming from registry.npmjs.org through your existing proxy. In Verdaccio, for example:uplinks:npmjs:url: https://registry.npmjs.org/profoundlogic:url: https://npm.profoundlogic.com/packages:'@profoundlogic/*':access: $allproxy: profoundlogic'**':access: $allproxy: npmjsList
'@profoundlogic/*'before any'@*/*'or'**'entry. If your mirror combines several upstreams in one group or virtual repository, check thatnpm view @profoundlogic/coderflow-server dist-tagsthrough the mirror shows the samelatestas npm.profoundlogic.com. -
Point CoderFlow at the mirror. Set
CODERFLOW_PROFOUNDLOGIC_REGISTRYin the server process's environment to the mirror URL that serves the scope. It must be anhttps://URL without credentials, query or fragment. If the value is not valid, CoderFlow logs a warning and useshttps://npm.profoundlogic.com/. On an installer-based server, add a systemd drop-in:sudo systemctl edit coderflow[Service]Environment=CODERFLOW_PROFOUNDLOGIC_REGISTRY=https://npm-mirror.example.com/repository/profoundlogic/Then run
sudo systemctl restart coderflow. A drop-in leaves the installer's unit file unchanged. With PM2, export the variable in the service account's shell, then runpm2 restart coderflow --update-envandpm2 save.CoderFlow's update check reads the mirror without credentials, so the mirror must allow anonymous reads of the package's metadata. Click Check for Updates to confirm: errors name the mirror's host.
-
Point the account's npm at the mirror. For manual commands, set the service account's scope line to the same URL:
npm config set @profoundlogic:registry https://npm-mirror.example.com/repository/profoundlogic/If your mirror needs credentials for npm, configure them as its documentation describes. They belong in
~/.npmrc, never inCODERFLOW_PROFOUNDLOGIC_REGISTRY.
:::warning A mirror in ~/.npmrc alone is bypassed
CoderFlow's own update commands pass the registry with an explicit
--@profoundlogic:registry= flag, which takes precedence over ~/.npmrc. If you
configure the mirror only in ~/.npmrc, CoderFlow's updates still go directly to
npm.profoundlogic.com. Set CODERFLOW_PROFOUNDLOGIC_REGISTRY as well.
:::
Air-gapped sites. A host with no route to npm.profoundlogic.com can be updated with Install from file…. Download and check the package on a connected machine as in Install from file, transfer it, and install it from Health. Installation still runs npm for the package's dependencies, so the host needs an internal mirror that has all of them:
- For
@profoundlogicdependencies, pointCODERFLOW_PROFOUNDLOGIC_REGISTRYand the service account's scope line at the mirror, as above. These two settings cover only the@profoundlogicscope. - For third-party dependencies, also point the service account's default npm
registryat the mirror's proxy of registry.npmjs.org, for examplenpm config set registry https://npm-mirror.example.com/repository/npm/.
Keep the scope line as a separate setting. Never replace it with a default
registry that points at npm.profoundlogic.com, which serves only the
@profoundlogic scope.
Security FAQ
What is npm.profoundlogic.com?
It is Profound Logic's own npm package registry. It serves the
@profoundlogic-scoped packages that make up CoderFlow: the server, CLI, aitool,
codermake and the RAS client. It also serves the other packages under that scope.
Profound Logic owns and operates it in a dedicated AWS account, under its own
domain.
Why did CoderFlow move?
Publishing to the public npm registry under Profound Logic's account is suspended pending review, so new CoderFlow releases could not be published there. Hosting the scope itself removes that dependency.
How is it hosted?
Downloads are static files in Amazon S3, served through Amazon CloudFront over HTTPS; plain HTTP requests are redirected to HTTPS. The certificate is issued by Amazon. When checked in November 2026, the registry accepted TLS 1.2 and TLS 1.3 and refused older TLS versions. Downloads need no account or credentials. Package metadata and tarballs use npm's own format, and every version carries the same SHA-512 integrity value that npm records.
Who can publish?
Only Profound Logic. Publishing goes through a separate service that requires a restricted API key, which is rotated every 90 days. Profound Logic is notified by email of every publish, dist-tag change and deprecation. Releases are built by Profound Logic's release pipeline, which runs the product's tests before publishing.
Are packages signed?
No. npm.profoundlogic.com does not provide npm provenance attestations or registry signatures. npm checks every download against the package's SHA-512 integrity value, and lockfiles record those values. To check a downloaded package by hand, see step 2 of Install from file.
What about dependencies?
Only @profoundlogic packages come from npm.profoundlogic.com. Every third-party
dependency still comes from registry.npmjs.org, with npm's security advisories,
npm audit and npm's malware scanning unchanged. npm.profoundlogic.com does not
proxy or cache third-party packages.
Are existing versions the same?
Yes. Every @profoundlogic version published before the move was copied from
registry.npmjs.org, and the shasums and integrity values match. Lockfiles keep
their integrity values, and npm verifies every download against them, whichever
registry served it.
What do we need to allow?
Outbound HTTPS to npm.profoundlogic.com, in addition to registry.npmjs.org.
The only npm setting is @profoundlogic:registry=https://npm.profoundlogic.com/,
which affects only the @profoundlogic scope.
Can we mirror it?
Yes. Proxy the @profoundlogic scope from npm.profoundlogic.com in your
Artifactory, Nexus or Verdaccio instance, then set CoderFlow's registry override,
CODERFLOW_PROFOUNDLOGIC_REGISTRY, to your mirror. See
Mirrors and air-gapped sites.