Only the Desktop and Server editions require installation. The Cloud edition needs no setup — sign up and log in.
| Component | Requirement |
|---|---|
| OS | Windows 10 (64-bit) or later |
| RAM | 4 GB |
| Storage | 2 GB free space |
| Display | 1280 × 720 |
| Runtime | None — .NET is bundled in the installer |
| Component | Requirement |
|---|---|
| OS | Windows Server 2019/2022, Windows 10/11, Ubuntu 22.04+, Debian 12, Rocky Linux 9 |
| Architecture | 64-bit (x64) |
| RAM | 4 GB (8 GB recommended for 10+ concurrent users) |
| Storage | 10 GB + data |
| Runtime | None — the package is self-contained |
BasisSetup-v<version>.exe from the GitHub Releases page.Windows SmartScreen warning: On first download, Windows may show "Windows protected your PC." Click More info → Run anyway if you have verified the file checksum. See Verify Download.
Download BasisServer-v<version>-win-x64.zip from the GitHub Releases page and extract to a permanent folder:
C:\Basis\
The folder should contain Basis.Web.exe and supporting files.
Rename the template file:
appsettings.Custom.json.template → appsettings.Custom.json
Edit appsettings.Custom.json:
{
"Urls": "http://+:8080",
"LicenseOptions": {
"Edition": "Server",
"Key": "YOUR-LICENSE-KEY-HERE"
},
"DatabaseOptions": {
"BasePath": "C:\\BasisData"
},
"JwtSettings": {
"SecretKey": "CHANGE-THIS-TO-A-STRONG-RANDOM-STRING-MIN-32-CHARS",
"Issuer": "Basis",
"Audience": "BasisUsers"
}
}
Create the data directory:
New-Item -ItemType Directory -Force -Path "C:\BasisData\businesses"
New-Item -ItemType Directory -Force -Path "C:\BasisData\attachments"
cd C:\Basis
.\Basis.Web.exe
Open http://localhost:8080 in a browser to confirm it starts. Stop with Ctrl+C.
Run the following in an Administrator PowerShell:
sc create "BasisServer" `
binPath= "C:\Basis\Basis.Web.exe" `
DisplayName= "Basis Accounting Server" `
start= auto
sc start "BasisServer"
Service management:
sc start "BasisServer"
sc stop "BasisServer"
sc delete "BasisServer" # stop first
Logs: Event Viewer → Windows Logs → Application → Source: BasisServer
New-NetFirewallRule -DisplayName "Basis Server" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow
Place IIS or nginx in front of Basis and proxy all traffic to http://localhost:8080. See the INSTALL.md file bundled in the Server package for a full IIS web.config example.
sudo useradd -r -s /bin/false basis
sudo mkdir -p /opt/basis
sudo unzip BasisServer-v<version>-linux-x64.zip -d /opt/basis
sudo chmod +x /opt/basis/Basis.Web
sudo chown -R basis:basis /opt/basis
sudo mkdir -p /var/basis/data/businesses
sudo mkdir -p /var/basis/data/attachments
sudo chown -R basis:basis /var/basis
sudo cp /opt/basis/appsettings.Custom.json.template /opt/basis/appsettings.Custom.json
sudo nano /opt/basis/appsettings.Custom.json
Set DatabaseOptions.BasePath to /var/basis/data and replace JwtSettings.SecretKey with a strong random string. Restrict permissions on the config file:
sudo chown basis:basis /opt/basis/appsettings.Custom.json
sudo chmod 640 /opt/basis/appsettings.Custom.json
sudo cp /opt/basis/basis.service /etc/systemd/system/basis.service
sudo systemctl daemon-reload
sudo systemctl enable basis
sudo systemctl start basis
Check status and logs:
sudo systemctl status basis
sudo journalctl -u basis -f
# Ubuntu/Debian (ufw)
sudo ufw allow 8080/tcp
# Rocky/RHEL (firewalld)
sudo firewall-cmd --permanent --add-port=8080/tcp && sudo firewall-cmd --reload
See the INSTALL.md file bundled in the Server package for the full nginx configuration with SSL and Let's Encrypt.
Key fields in appsettings.Custom.json:
| Field | Description |
|---|---|
Urls |
Port the app listens on. Default: http://+:8080. |
DatabaseOptions.BasePath |
Folder where all business databases are stored. Must exist and be writable. |
JwtSettings.SecretKey |
Signs login tokens. Use a random string of at least 32 characters. Never share this. |
LicenseOptions.Key |
Your license key. Removes the update banner. The app runs normally without a key. |
C:\Basis\ (keep appsettings.Custom.json), start the service./opt/basis/, start the service.Data in DatabaseOptions.BasePath is never modified by an update.