Skip to main content

MSK Garage & Impound

CFX Post

An advanced, server-authoritative garage & impound system for ESX Legacy, built on top of msk_core. Park cars, boats and aircraft, recover lost vehicles from the impound, share job vehicles across a society — all with a modern, fully offline React UI.

v4.0.0 — Full Rewrite

The UI was rebuilt in React + Vite + TypeScript (no more jQuery / external CDNs — everything is bundled and works offline) and the backend was moved to a strict server-authority model: every park-in / park-out is validated server-side, custom garages are registered server-side, and the impound fee is always charged on the server (and refunded on failure).

Features

✨ Highlights

  • Unlimited garages & impounds — define as many locations as you want, each with its own ped, blip, 3D text, marker and park-out spot(s).
  • Cars, boats & aircraft — separate vehicle categories (car, truck, boat, helicopter, aircraft, …) so the right vehicles show up at the right place.
  • Job & society garages — restrict access by job and minimum grade; job vehicles can be owned per-player or shared across the whole society.
  • Impound system — recover lost vehicles (after a crash, death or server restart) for a configurable fee, with an in-UI track waypoint to locate the car.
  • Condition persistence — engine, body & tank health, dirt level and the visual body deformation (dents) are saved on park-in and restored on park-out — for garages and impounds. (Dents require the optional VehicleDeformation resource.)
  • Vehicle keys support — key holders can park in and out too. Works with msk_vehiclekeys, VehicleKeyChain and vehicles_keys out of the box.
  • Favourites & custom names — players can mark vehicles as favourites and rename them.

🎨 Modern UI (rebuilt in v4.0.0)

  • Brand-new interface built with React + Vite + TypeScript in the clean MSK dark/green design.
  • 100% offline — all fonts and icons are bundled. No jQuery, no Google Fonts, no FontAwesome CDN, zero external requests at runtime.
  • Live search, fuel bars, vehicle-class icons and a fast, responsive layout.

🔒 Security-first backend

  • Server authority on everything — every park-in / park-out is validated server-side. The client can never inject a garage definition, plate, or fee.
  • Anti-dupe protection — per-plate spawn locks plus a spawn claim/rollback flow keep the world and database consistent, even on connection hiccups.
  • Safe custom garages — third-party scripts register custom garages/impounds server-side, so park-out coordinates and fees can't be forged.
  • Guaranteed refunds — if an impound park-out fails for any reason after charging, the fee is automatically refunded.
  • XSS-proof UI — React escapes all rendered text; the v3 nickname exploit is structurally impossible.

⚙️ Configuration & integrations

  • Park-out anywhere or only at the specific garage the vehicle was stored in.
  • Bring your own fuel system (default: state-bag based, e.g. ox_fuel).
  • Built-in TextUI or plug in your own (e.g. okokTextUI), or use ox_target.
  • Optional AdvancedParking support (persistent vehicles) with impound deletion handled through AdvancedParking so removed cars never respawn.
  • Custom license plates, configurable blips, and full EN/DE locales.
  • Developer-friendly client & server exports and park-in / park-out events for easy integration.

📋 Requirements

Resource
RequiredESX Legacy · msk_core · oxmysql
OptionalAdvancedParking · VehicleDeformation · MSK VehicleKeys · VehicleKeyChain · Jaksam Vehicle Keys
Vehicle key scripts

You can add your own vehicle-key adapter in server/keys/, but support is only provided for the scripts listed above. See Integrations → Vehicle Keys.

Next steps