crankshaft KraXen72
winget install --id=KraXen72.crankshaft -e
Crankshaft Krunker Client by KraXen72
README
crankshaft
a fast, feature-rich krunker client written in typescript
Download: Windows (x64) - Mac (x64) - Linux (x86_64 AppImage) - Linux (i386 AppImage) - Other
upcoming breaking change
- from version
1.9.0
, crankshaft will no longer supportDocuments/Crankshaft
for configuration. - make a backup of
Documents/Crankshaft
before updating. - crankshaft 1.9.0 will auto-migrate the folder to the new location in
%APPDATA%
, but there's a very small chance it could fail while moving/copying/deleting the files, and you'd lose your settings, swapper & scripts. - this is due to inconsistent read/write permissions for users whose Documents directory lives inside of OneDrive or has been otherwise moved.
- crankshaft 1.9.0 will add quick-open buttons for the new directories & files for easy access.
client features
- very good performance with additional performance enhancing settings
- highly customisable, many different settings
- hides ads by default (can be disabled)
- resource swapper (css, sounds & all other assets)
- userscript support
- discord RPC (gamemode, map, class & skin)
- customisable matchmaker (Gamemode, Region, Min/Max players, Time)
- quick class switcher using
#hiddenClasses
- built-in hotkeys: more about them here
- maintained & open source
quality of life
- all client specific features can be turned off to ensure maximum performance
- once a feature is disabled, none of it code runs
- for example, while 'Discord RPC' is off, crankshaft does not even import the discord-rpc library.
- written in typescript
- secure:
web security
is on, theremote
module andnodeIntegration
are disabled - splash screen is not a separate window, shows only while krunker is actually loading.
- doesn't automatically open free spin urls in browser
- you can open them in a new window, in browser or not open them at all
- Discord RPC: if enabled, only updates while you're not actually in game. Does not use
setInterval
like other clients. - no-compromise mac, linux and windows support
- only 4 dependencies
userscripts
- any
.js
file in%APPDATA%/crankshaft/config/scripts
will be considered a userscript and executed if enabled in settings. - There are a few official/example userscripts:
- keystrokes.js: shows WASD, shift, space and 2 configurable keys on screen.
- autospectate.js: automatically joins game as spectator if turned on
- all userscripts are disabled when they are first added.
%APPDATA%/crankshaft/config/tracker.json
is used to keep track of enabled userscripts.
If you want to write a userscript or learn more about them, read the Documentation
Use userscripts at your own risk, the author(s) of this client are not responsible for any damage done with userscripts because the user is the author of the script. Do not write or use any userscripts which would give the user a competitive advantage.
hotkeys
Press Alt
to show electron menu. Here you can find all hotkeys.
standard hotkeys like zooming, copying/pasting and devtools also included.
Client's hotkeys:
F5
: reloadF6
: find a new match,F7
: copy game link,Ctrl+F7
: join game from clipboardF12
: devtools (alternative hotkey)
matchmaker
a customisable matchmaker (with GUI settings!) that you can use alongside/instead of the regular F6
building from source
- you have to have git, nodejs, and pnpm installed.
- installation:
git clone https://github.com/KraXen72/crankshaft
cd crankshaft
pnpm i
- building from source:
pnpm dist
contributing
- follow previous steps 1 & 2
- make your changes + running from source:
pnpm start
/pnpm dev
(rebuilds on changes, refresh krunker withF6
)- make sure to run the code through the configured eslint before contributing. (vs code will enable it if you have the extension)
- after your changes, try it out with
pnpm testbuild
- this will minify the code & run the app.- until automated tests are added, try to manually test it works even after the code is minified. if it does not, you're probably doing something wrong
- please report any bugs/feature requests in the Issues.
- feel free to submit pull requests, they will be merged as long as they support the client ideology.
wanted/potential features
- here are some features i wanted to add, but don't have the time to
- if you're looking to contribute, feel free to open pr's for these
- [ ] Add a new setting type: Keybind
- after clicking it, it would wait until a keypress that isn't esc & register it
- there would be a reset button to
[none]
next to the setting input - allow userscripts to create this setting type
- [ ] Matchmaker: Map autocomplete
- create a simple typeahead/autocomplete for the matchmaker, where you can input maps (official ones)
- you can get more info about maps from this krunker api link or the client code
- Wes Bos' Javascript30 free course (episode 6) is a tutorial on how to implement a typeahead in vanilla js
- (you'd use typescript but it's very similar)
- allow toggling the list of maps between whitelist/blacklist
- take this white/blacklist into account when using the matchmaker
- create a simple typeahead/autocomplete for the matchmaker, where you can input maps (official ones)
- [ ] Add tests
- could be useful, testing a few thigs like: if the game loads, if settings load, if you can set a setting, etc.
- [ ] Add autoupdate (whatever official way electron recommends)
- i tried to add this once and failed.
- honestly good luck since this client uses an ancient electron version due to all the newer ones having a bug that causes aim freeze in krunker
credits
- Creepycats released Gatoclient, which was based on top of idkr.
- Crankshaft was built on top of Gatoclient lite, an
app.asar
mod optimizing Gatoclient by LukeTheDuke. - Very little code remains, as Crankshaft was rewritten in typescript & more features were added.
- Gatoclient was later rewritten, implementing some code from Crankshaft too.
- other acknowledgments
- wa/paintingofblue - matchmaker implementation
- Commander/asger-finding (AKC client) - resource swapper implementation
- Tae - awesome logo for the client <3
support development
You can support ongoing development & maintainance by donating. All donations are highly appreciated! <3