Versiona CuboPlus

Connecting to Git: app guide

For whoever administers the organization on GitHub or the group on GitLab. It is done once and serves the whole team.

Versiona writes the load script to your company's Git, under the name of whoever changed it. For that, each person needs to connect to Git through the extension. There are two ways, and the recommended one is the app.

With an app, recommendedWith a personal token
Who sets it upThe organization's administrator, onceEach person, their own
How the person signs inWith their own Git accountCreates a token, copies it and pastes it into the extension
What it reachesOnly the repositories the administrator choseWhatever each person selects when creating the token
To cut off accessThe administrator revokes everyone's at onceEach person revokes their own
ExpirationHandled by the appThe token expires, and the extension warns 15 days in advance
Either way, the token stays only in each person's browser and goes only to your company's Git. Cubotimize receives no token, no script and no data at all, and the extension does not use the app's "secret": it does not need to be generated. See the privacy policy.

GitHub: create the GitHub App

It has to be a GitHub App, not an OAuth App: a GitHub App only sees the repositories it is installed on. An OAuth App would reach every private repository of each person.

  1. In the organization, open Settings, Developer settings, GitHub Apps, New GitHub App.
  2. GitHub App name: a name the team will recognize, for example "Versiona" followed by the company name.
  3. Homepage URL and Callback URL: GitHub requires both, and the Versiona login uses neither. You can use the address of the organization itself on GitHub.
  4. Check Enable Device Flow. This is the login by code, which Versiona uses.
  5. Leave Expire user authorization tokens checked. The token then lasts 8 hours, and Versiona renews it by itself, from v1.13.0 on. A stolen token stops being valid forever.
  6. Under Webhook, uncheck Active. Versiona does not use it, and if checked GitHub requires an address.
  7. Under Repository permissions, grant Contents: Read and write. "Metadata: Read-only" is added automatically. Everything else stays at "No access".
  8. Under "Where can this GitHub App be installed?", leave Only on this account.
  9. Click Create GitHub App.

Check, copy the Client ID and install

  1. Under Optional features, the "User-to-server token expiration" row should show the Opt-out button. That means the 8-hour expiration is on. If it shows "Opt-in", click it.
  2. Under General, copy the Client ID, which starts with Iv. It is not the "App ID", which is only digits.
  3. Do not generate a "client secret" or a "private key": Versiona uses neither. The yellow notice asking for the key can be ignored.
  4. Under Install App, install it on the organization with Only select repositories, selecting only the scripts repository.

The installation screen should show two permissions and no others: "Read access to metadata" and "Read and write access to code".

In the extension

  1. In the server setup, choose GitHub and paste the Client ID into "Client ID of the app".
  2. Enter the repository address and save.
  3. When connecting, the extension shows a code. Each person types that code at github.com/login/device, with their own account, and authorizes.

Each person only reaches what their account already reaches: someone without write permission on the repository still cannot write.

GitLab: create the Application

  1. In the group, open Settings, Applications. Someone who does not administer the group has the same form under Edit profile, Applications, and the instance administrator has it in the admin area.
  2. Redirect URI: the address the extension shows in the server setup, under "How to get the Application ID", with the copy button. For the extension installed from the Chrome Web Store, it is:
    https://fhfhemfocaiigoakdnbafeoeibgemfag.chromiumapp.org/gitlab
  3. Uncheck Confidential. The extension does not keep a secret.
  4. Select only the api scope.
  5. Save and copy the Application ID. The "Secret" is not used.

In the extension, choose GitLab in the server setup and paste the Application ID. Each person signs in with their own GitLab login, and the extension renews the access by itself.

Do you also want automatic versioning overnight? See the nightly routine guide.

Without an app: personal token

Security recommendation. The personal token is the least protected option: each person chooses the scope and the expiration of their own, and it stays valid until it expires. If you use one, create it just for Versiona, with only the scripts repository, only the permission to write to it and an expiration of 90 days or less. Do not reuse a token from another purpose. The extension shows this same warning to whoever chooses the token.

It works, and it suits someone who uses Versiona alone or wants to try it before involving the administrator. Leave the app field blank in the setup, and each person creates their own token:

The repository

For IT: distributing by policy (GPO)

Versiona reads a browser policy, which IT distributes by GPO, Intune or the registry. With it, nobody needs to set up a server: the person installs the extension (or receives it installed) and only connects to Git with their own account. It is also how the company enforces the security rules.

The example below is a .reg file for Chrome. It installs the extension for everyone, requires the app and registers one server. Replace the addresses, the Application ID and the project with yours. In Edge, the path starts with SOFTWARE\Policies\Microsoft\Edge instead of SOFTWARE\Policies\Google\Chrome.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\ExtensionInstallForcelist]
"1"="fhfhemfocaiigoakdnbafeoeibgemfag;https://clients2.google.com/service/update2/crx"

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\3rdparty\extensions\fhfhemfocaiigoakdnbafeoeibgemfag\policy]
"exigir_aplicativo"=dword:00000001
"exigir_trava"=dword:00000001
"itens_mestres"=dword:00000001
"servidores"="[{\"nome\":\"Qlik\",\"hosts_qlik\":[\"qlik.example.com\"],\"provedor\":\"gitlab\",\"origem_git\":\"https://git.example.com\",\"application_id\":\"APPLICATION_ID\",\"projeto\":\"grupo/scripts-qlik\",\"rotina_noturna\":false}]"

Protect the token with PIN or biometrics (highly recommended)

From v1.17.0 on, Versiona can require Windows Hello to use the Git token. With it on, the token only opens on this computer, after you confirm with your PIN or biometrics. Malware that copies the browser profile takes a token that opens nowhere. We highly recommend turning it on on every computer with Windows Hello set up. Without Windows Hello, a security key (USB) or your phone will do, from v1.21.0 on. The security key is still experimental.

  1. Click the Versiona icon and open Servers.
  2. At the bottom of the screen, under "Require PIN or biometrics to use the token", click Turn on.
  3. Choose where the passkey is kept: Windows Hello (recommended), Security key (USB) or Phone.
  4. With Windows Hello, the Windows Security window appears saying "This will be saved to your Windows device": that is Windows Hello, and the passkey stays only on this computer. If the browser offers Google Password Manager before it, choose Save another way and then Windows Hello.
  5. Confirm with your PIN or biometrics. Windows asks twice when turning it on: once to create the passkey, once to use it.
What it needs: Windows Hello set up on this computer (PIN, fingerprint or face), or a security key, or your phone, and a current Chrome. Windows Hello was tested in Chrome on Windows 11; the security key and the phone were not yet. If the computer does not have what the feature needs, turning it on is refused, nothing is changed, and the screen says why.

If the token is stolen: what your Git host can block

The token Versiona uses stays in each person's browser. Since v1.12.0 it is written to disk encrypted, with a key created in that browser profile that cannot be exported. This keeps the token out of reach of common malware that sweeps the browser for plain-text credentials.

It is not a guarantee: someone who copies the whole browser profile, or has a program running in the person's session, can still get to the token. What stops a stolen token from working elsewhere is the configuration of the Git host, and that depends on the plan. The tables below show what each plan offers.

GitHub

ProtectionFreeProTeamEnterprise CloudEnterprise Server
IP allow listblocks the token outside the company networknononoyesno
Conditional access through the identity providerchecks the IP on each use; only with managed users and Microsoft Entra IDnononoyesno
Protected branch on a private repositorythe stolen token cannot delete the branch or rewrite historynoyesyesyesyes
Rules for personal access tokensapproval by the organization owner and maximum lifetimenot confirmeddoes not applynot confirmedyesyes
Audit log with the IP of whoever used ithelps to discover misuse, not to prevent itnononoyesnot confirmed
Revoke the accessthe person revokes the app in their own account settingsyesyesyesyesyes

GitLab

ProtectionFree (GitLab.com)PremiumUltimateSelf-managed, no paid license
GitLab only on the internal network or VPNblocks the token outside the network; it is network configuration, not a GitLab featuredoes not applyyesyesyes
Group access restricted by IPblocks the token outside the listed IPs, including through the APInoyesyesno
The token from the application sign-in lasts 2 hoursand the refresh token is replaced on each useyesyesyesyes
Mandatory expiration on new tokensup to 365 days by defaultyesyesyesyes
Protected branchno force push; deleting through the API still depends on the person's roleyesyesyesyes
Last IPs that used the token, and revokingthe person sees and revokes; the administrator revokes through the APIyesyesyesyes
Audit of token usehelps to discover, not to preventnoyesyesno
Credentials inventorythe administrator lists and revokes everyone's tokensnonoyesno

Checked in the official documentation on October 6, 2026: GitHub.com and GitHub Enterprise Cloud (no version number), GitHub Enterprise Server 3.22, GitLab 19.5. Plans change: check the link in each row before deciding. "Not confirmed" means the documentation we read does not say on which plan the feature exists.

What to do, in order of effect

  1. Restrict the network. It is the only measure that stops the token from working elsewhere. On a self-managed GitLab, make it reachable only from the internal network or the VPN: this works on any license. On GitLab.com, IP restriction requires the Premium plan. On GitHub, the IP allow list requires Enterprise Cloud.
  2. Require PIN or biometrics in the extension. It is what stops the token from opening outside the person's computer, on any Git plan. See how to turn it on.
  3. Encrypt the computer's disk. On Windows Pro and Enterprise that is BitLocker; on Home, "Device encryption". It covers the lost or stolen laptop and the disk taken out of the machine: without it, whoever has the disk reads the whole browser profile. It does not protect against a program running in the person's session. IT usually turns it on, and also keeps the recovery key.
  4. Use the app, not a personal token. With the GitHub App, access reaches only the repositories chosen at installation. With expiration on, its token lasts 8 hours. With the GitLab Application, the token lasts 2 hours.
  5. Grant the minimum scope. One repository just for the scripts, and each person with only the role they need to write to it.
  6. Protect the branch. No force push and no deletion: a stolen token can write, but it cannot destroy the history. On GitHub, a protected private repository requires Pro or Team.
  7. Know how to revoke. If in doubt, revoke: the person removes the authorized app in their own account and connects again through Versiona.

What does not block a token that was already stolen: two-factor authentication, which protects the sign-in and not the token (GitLab says so); the IP allow list of the GitHub App itself, which applies to the app and not to the person's token; and GitLab's certificate or smart card sign-in, which the documentation describes for access through the screen, not through the API.

If something goes wrong

What you seeWhat it usually is
The extension says "Enable Device Flow" is missingThe option was left unchecked in the GitHub App. Check it under General and save.
It connects, but does not find the repositoryThe GitHub App was not installed on the organization, or the repository was not selected in the installation.
It asks to connect again every dayThe extension is older than v1.13.0, which did not renew the GitHub token. Update the extension and connect again once.
GitLab rejects the redirect addressThe Application's Redirect URI is different from the one the extension shows in the setup.
It reads, but does not writeThe person's account has no write access to the repository, or the branch is protected and only accepts Maintainers.

Questions, suggestions or problems: [email protected]. Do not send tokens, passwords or load scripts by email.

Install Versiona CuboPlus