Sal's Kewl Korner Documentation / Sal's Kewl Config Manager Discord

Sal's Kewl Config Manager — owner's manual

A free Windows app that edits your FiveM server's configs safely: automatic backups before every write, full version history kept on your own server, FiveM-aware validation, vendor update comparison, and a two-pane transfer view. This manual covers installation, connecting, daily use and troubleshooting.

documents application version 1.10.0

Overview

Sal's Kewl Config Manager is a desktop application for editing the configuration files of a FiveM server that lives somewhere else — a VPS, a dedicated box, a game panel. Think VS Code + WinSCP + version control, without needing to know Git. It is free, and the download is signed.

You connect, browse resources/, open a config.lua, edit, and press Save. Behind that one keystroke:

  1. the server's current copy is hashed and stored in version history before anything is written;
  2. your file is checked for the syntax errors that stop a resource starting;
  3. the new content is uploaded to a temporary file, read back and verified;
  4. only then is it atomically renamed over the original;
  5. the final file is downloaded and hashed again to confirm the server stored what you sent.

If the connection drops at any point before the rename, the original file is untouched. Weeks later, when a resource update overwrites that config, the app notices the file changed outside of it, preserves what it found, and tells you "14 new settings, 3 changed, 1 removed" — with the list.

Requirements

  • Windows 10 or 11 (64-bit).
  • SFTP, FTPS or FTP access to the machine running your FiveM server — the same details you would use with WinSCP or FileZilla.
  • An account that can read and write your resources folder.

The server needs nothing installed. A shell on the account is optional and only makes search faster; the app falls back to scanning files when the account has none. Game-panel FTP accounts work.

Installation & updates

Download the installer from salskewlkorner.com — the SHA-256 checksum is printed beside the download button. The installer is Authenticode-signed (Azure Trusted Signing, publisher Easy Pro Technologies), installs per-user with no admin prompt, and creates Start Menu and desktop shortcuts.

Update checks

At launch the app asks this site for the latest version number — one anonymous GET for a small JSON file. Nothing about you, your machine or your servers is sent, and nothing downloads or installs itself. When a newer build exists you get a window with the release's date, size and SHA-256, and three choices:

  • Download — opens your browser at the download page.
  • Remind Me Later — the banner stays, it asks again next launch.
  • Skip This Version — that version is never mentioned again, though anything published after it still is.

The launch check can be turned off in Settings → General and run on demand from Help → Check for Updates. This is the only network connection the app makes on its own — every other connection goes to a server you configured yourself.

After an update, the first launch shows What's New: every release between the version you were running and the one you are on, shown once. Help → What's New reopens it with the full history.

Connecting your server

Each server is a profile: a name, a colour, connection details, and the paths that matter (txData root, resources root, history root). Add one under Servers → Add Server, then Test Connection before saving.

Choosing a protocol

SFTP is strongly preferred. The other two exist for game-hosting panels that offer nothing else.

SFTPFTPSFTP
Credentials encrypted in transityesyesno
Server identity pinnedyes (host key)TLS certificateno
Atomic replace on saveyesnono
Preserves permissions and owneryesnono
Fast search (remote grep)yesnono
SSH key authenticationyesn/an/a

These hold on every protocol: the version being replaced is saved to history before anything is written; every upload is read back and checked against its SHA-256 before it replaces the live file; and a failed upload leaves the original untouched. The app states a protocol's limitations in the profile dialog before you connect, labels non-SFTP servers in the server list, and shows the active protocol in the status bar.

Authentication

SSH keys are recommended. Choose SSH key, point at your private key file (C:\Users\you\.ssh\id_ed25519), and enter its passphrase if it has one. Password authentication works too, including servers that use keyboard-interactive, and an SSH agent (Pageant) can be used. Credentials are held by the Windows credential store — they are never written to a config file.

FTP and FTPS are password-only. If your FTPS host uses a self-signed certificate (common on game panels), tick Allow a self-signed TLS certificate on the profile: the connection stays encrypted, the server's identity is simply not verified.

Host key verification (SFTP)

On first connection you are shown the server's SHA-256 fingerprint and asked to trust it. Verify it on your server with:

ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub

If the key later changes, the app stops and tells you, showing both fingerprints. There is no "accept any key" setting.

Browsing & editing

The file browser

The sidebar shows your resources tree. It loads lazily — a folder's children are fetched the first time you expand it, so a server with 4,000 resources connects instantly. Above the tree:

  • a name filter that narrows files as you type;
  • a type filter: all files, configuration files only, or a single format (Lua, CFG, INI, JSON, YAML, XML) — plus flat views for Recently Edited, Favorites, Modified Since Last Visit and Files With Validation Errors.

Right-click any file for Open, Compare With, Version History, Restore, Upload Replacement, Download Copy, Favorite, Rename, Copy Remote Path, Properties and Delete. Deleting anything shows a counted plan first — "34 files in 6 folders, 120 KB" — before a single byte is removed.

The editor

The editor is VS Code's editor component: tabs, find and replace, code folding, bracket matching, minimap. It handles Lua, server.cfg, INI, JSON, YAML, TOML and XML, and preserves each file's encoding and line endings exactly as found.

FiveM-aware validation

Files are checked live as you type and again before every save. The validator speaks FiveM: it understands vector3(...), backtick hashes, and the missing-comma mistake that stops a resource starting — and it names the fix ("',' expected before 'weapons'") rather than pointing vaguely at a line. The Problems panel lists every error and warning; F8 steps through them. Style suggestions can be turned off, or muted per rule, in Settings → Validation.

Saving safely

Save is Ctrl+S. Every save runs the pipeline described in the overview: backup → validate → upload to a temp file → verify → atomic rename → verify again. Three options in Settings add friction where you want it:

  • Change summary before save — a dialog shows exactly which lines change before anything is written. Off by default; worth turning on for production servers.
  • Conflict detection — if the file changed on the server while you were editing, you find out before your save overwrites someone else's work, and can compare the two versions first.
  • Crash recovery — unsaved edits are snapshotted locally every few seconds. After a crash or reboot, the next launch offers them back.

On FTP and FTPS the final rename cannot be made atomic — the app says so in the status bar rather than pretending otherwise. The backup, verify and read-back steps still run on every protocol.

Version history

Every save keeps the previous copy. So does the first open of a file, an external change the app detects, and every restore — so even a restore is undoable. History lives on your own server, under the profile's history root, mirroring the original path:

/home/fivem/.sals_kewl_history/
└── home/fivem/txData/JCRP/resources/[qb]/qb-policejob/config.lua/
    ├── 2026-08-13_17-32-10.lua
    ├── 2026-08-13_17-45-22.lua
    └── history.json

Three properties are deliberate:

  1. Outside the resources tree — a resource whose manifest globs *.lua would otherwise load every historical copy of its own config at boot.
  2. Mirrored layout — if you lose this application entirely, you can still find any backup with ls and copy it back with scp.
  3. history.json is not load-bearing — if it is deleted or corrupted, the index is rebuilt from the version files themselves.

The History panel lists every version with when and why it was taken. Compare shows any two versions side by side — or any version against the live file. Restore puts a version back through the same safe-save pipeline, backing up the current file first. You can attach a note to any version.

Retention defaults to the last 100 versions per file; config files are small, so the default favours safety over disk space. The newest version is never pruned, whatever the policy. Both are adjustable in Settings → Backups.

Vendor updates & comparison

When a resource update overwrites a config you had tuned, the app notices the external change on next look, preserves the new copy in history immediately, and shows a setting-level diff: which keys were added, which changed, which were removed — not a wall of red and green lines.

  • Compare With… — right-click any file to compare it against a version from history, the live server copy, or a file on this computer.
  • Upload Replacement… — drop a local file over a server config and see the structural diff and validation result before anything is written.
  • Migration tool — folds your customised values into a vendor's new default config, so you keep your numbers and take their new keys.

The transfer view

The two-pane button in the Files panel opens the transfer view: this computer on the left, your server on the right — the WinSCP shape. Tick files or folders on either side and send them across. Uploads go through a confirmation plan first: what lands where, what gets replaced, how many bytes — nothing is written until you have read it. Deletes show the same counted plan.

  • Sortable columns — Name, Size and Changed are buttons; click to sort, click again to reverse. Folders stay grouped on top, and names sort numerically (resource2 before resource10).
  • Pinned starting folders — the pin button next to Refresh makes that pane open in the current folder every time, per server, per side. Unpin to go back to "reopen where I left off".
  • Favorites — the Places sidebar leads with your own pinned folders, above Desktop, Downloads and the drives. Add this folder pins whatever is open; hover a favorite to remove it. The list is shared with the upload picker.
  • Synchronized browsing — walk into a folder on one side and the other follows when a folder of the same name exists.

Uploading also works with plain drag and drop onto the file tree, and the upload picker can mix files and folders in one selection — something the native Windows dialog cannot do.

Themes & appearance

Settings → Appearance is a grid of twelve theme swatches: eight dark (Dark, Midnight, Graphite, Fjord, Nocturne, Ember, Lagoon, High Contrast) and four light (Light, Mist, Paper, High Contrast Light), plus Follow Windows. Every theme repaints the whole application including the editor — syntax colours, gutter, find widget and diff shading come from the same palette — and every palette is checked against WCAG contrast ratios in the test suite.

As of 1.10.0 the default Dark theme is a step lighter than it used to be. If you preferred the old near-black look, that is what Midnight is, on purpose.

Keyboard shortcuts

Ctrl+SSave
Ctrl+F / Ctrl+HFind / Replace
Ctrl+PQuick Open
Ctrl+Shift+FSearch across the server
Ctrl+WClose tab
Ctrl+TabNext tab
F8 / Shift+F8Next / previous problem
Ctrl+,Settings

Where things are stored

Profiles, settings, favourites, cache%APPDATA%\sals_kewl_config_manager\config-manager.db
Encrypted credentialsthe same database, encrypted by Windows DPAPI via the credential store
Logs%APPDATA%\sals_kewl_config_manager\logs\
Version historyon your server, under the profile's history root

Deleting the local database loses your profiles and preferences. It does not lose your version history — reconnect and it is read back from the server.

Troubleshooting

When a connection fails

The app probes the server one layer at a time and tells you which layer failed, because the fixes are completely different:

What failedWhat it means
HostnameThe name does not resolve — check the spelling
Port refusedNothing is listening there — check the port number
Port timed outPackets are being dropped — almost always a firewall or an IP allowlist
No greetingSomething is listening, but it did not answer like a server
Wrong greetingIt answered as the other protocol — switch SFTP ↔ FTP

That last one catches a common mistake: an SFTP profile pointed at port 21, or an FTP profile at port 22. The probe runs automatically when Test Connection fails; it sends no credentials and writes nothing. The report has a Copy report button, because the next thing you do with it is paste it to whoever runs the server.

Logs

Every connection attempt is logged — protocol, host, port, username, auth method, duration — and credentials are never written; a redactor strips anything that looks like one. Settings → Advanced → Open Log Folder takes you there. The log rotates at 5 MB and keeps the last five files; Developer mode in the same place raises the level to DEBUG or TRACE.

Common questions

  • "My panel only gives me FTP." It works — the app just tells you which guarantees are weaker, permanently, in the status bar. Backups, verification and history still apply.
  • "The host key changed" warning. Your host may have reinstalled the server or moved you to new hardware — confirm with them, then re-trust. If nothing changed on their side, do not connect.
  • "Search is slow." Your account has no shell, so the app is scanning files over the connection. That is expected on game panels; scope the search to a folder to speed it up.

Support

Questions, bugs, and requests land on Discord. Documentation fixes ship fast — if something on this page is missing, wrong or unclear, say so.

The application is free, licensed for use on servers you are authorised to administer. The full licence agreement is shown by the installer and included in the install directory.