Licensing
VCAL Server v0.5+ uses mandatory file-based licensing.
Each instance validates a signed license file at startup.
The server will not start without a valid license.
License Tiers
| Tier | Description | Duration | Notes |
|---|---|---|---|
| Trial | Free evaluation | 30 days | All features enabled, time-limited |
| Growth | Commercial license | 1 year | Production use, support & updates |
| Enterprise | Custom agreement | Multi-year | Multi-tenant, RBAC, SSO, SLAs |
The Trial license is intended for full technical evaluation in your own environment.
There are no artificial feature restrictions — only a time limit.
License Files
VCAL Server validates a vendor-signed license file using an Ed25519 public key.
Default paths
| Variable | Default | Purpose |
|---|---|---|
VCAL_LICENSE_PATH | /etc/vcal/license.json | Signed license file |
VCAL_LICENSE_PUBKEY_FILE | (bundled) | Vendor public key (advanced / override only) |
Example filesystem layout:
/etc/vcal/
└── license.json
For Trial licenses, the vendor public key is bundled with the binary / container.
VCAL_LICENSE_PUBKEY_FILEis only required for advanced or enterprise setups.
Example License File
{
"license_id": "lic_0a7efb91",
"holder": "Example Labs",
"tier": "Growth",
"issued": "2025-10-20",
"exp": "2026-10-20",
"sig": "base64signature..."
}
Validation Flow
At startup:
- VCAL loads the vendor public key.
- The license file is read from
VCAL_LICENSE_PATH. - The Ed25519 signature is verified.
- License metadata (tier, holder, expiration) is cached in memory.
If the license is missing, invalid, or expired, VCAL Server exits with a clear diagnostic message.
Trial License Issuance
Trial licenses are self-served via the CLI.
vcal-server license trial <your_email>
vcal-server license verify <code>
This writes a signed license file to:
/etc/vcal/license.json
(Use sudo if required, or override the path via VCAL_LICENSE_PATH.)
Renewal
To renew or upgrade a license:
- Obtain a new
license.jsonfile from the VCAL team - Replace the existing file
- Restart the server
sudo systemctl restart vcal-server
The old license remains valid until its expiration timestamp.
Live License Reload (Enterprise / Admin)
Enterprise deployments may reload a license without restarting the server.
curl -X POST \
-H "X-VCAL-Key: <admin_key>" \
http://localhost:8080/admin/license/reload
Behavior:
- The license file is reread immediately
- A valid new license becomes active instantly
- An invalid license is rejected and logged
This endpoint is disabled unless admin APIs are explicitly enabled.
Environment Variables (Minimal)
VCAL_LICENSE_PATH=/etc/vcal/license.json
Advanced / enterprise only:
VCAL_LICENSE_PUBKEY_FILE=/etc/vcal/ed25519.pk.b64
Multiple licenses for the same instance
If multiple licenses are issued for the same VCAL Server instance, the most recently installed license file takes precedence. VCAL Server always enforces exactly one license at a time.
Roadmap: License Server Integration
Planned enterprise capabilities include:
- Online activation & renewal
- Organization-wide license management
- Floating / multi-instance licenses
- Usage telemetry and compliance checks