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:
- the server's current copy is hashed and stored in version history before anything is written;
- your file is checked for the syntax errors that stop a resource starting;
- the new content is uploaded to a temporary file, read back and verified;
- only then is it atomically renamed over the original;
- 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
resourcesfolder.
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.
| SFTP | FTPS | FTP | |
|---|---|---|---|
| Credentials encrypted in transit | yes | yes | no |
| Server identity pinned | yes (host key) | TLS certificate | no |
| Atomic replace on save | yes | no | no |
| Preserves permissions and owner | yes | no | no |
Fast search (remote grep) | yes | no | no |
| SSH key authentication | yes | n/a | n/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:
- Outside the resources tree — a resource whose
manifest globs
*.luawould otherwise load every historical copy of its own config at boot. - Mirrored layout — if you lose this application
entirely, you can still find any backup with
lsand copy it back withscp. history.jsonis 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.
Search
Ctrl+Shift+F searches text across every config on
the server, with case and regex options and a folder scope. When your account
has a shell, the app uses remote grep and results come back in
under a second; when it doesn't (most game panels), it scans files over the
connection instead — slower, same results.
Ctrl+P is Quick Open: type part of a file name and jump straight to it, powered by a cached index of the server's file names. The index rebuilds on demand from the Search panel.
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 (
resource2beforeresource10). - 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+S | Save |
| Ctrl+F / Ctrl+H | Find / Replace |
| Ctrl+P | Quick Open |
| Ctrl+Shift+F | Search across the server |
| Ctrl+W | Close tab |
| Ctrl+Tab | Next tab |
| F8 / Shift+F8 | Next / previous problem |
| Ctrl+, | Settings |
Where things are stored
| Profiles, settings, favourites, cache | %APPDATA%\sals_kewl_config_manager\config-manager.db |
| Encrypted credentials | the same database, encrypted by Windows DPAPI via the credential store |
| Logs | %APPDATA%\sals_kewl_config_manager\logs\ |
| Version history | on 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 failed | What it means |
|---|---|
| Hostname | The name does not resolve — check the spelling |
| Port refused | Nothing is listening there — check the port number |
| Port timed out | Packets are being dropped — almost always a firewall or an IP allowlist |
| No greeting | Something is listening, but it did not answer like a server |
| Wrong greeting | It 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.