An engine for creating and re-creating pinball machines, virtually.
VPE is a toolkit with the goal of making it easy to create pinball machines digitally. It uses Unity's High Definition Render Pipeline and comes with extensive editor tooling that aims to provide all the features needed for such a task. VPE can read Visual Pinball's file format and uses Visual Pinball's physics code for the simulation during gameplay.
For a more detailed overview, head over to the website. It's also where all the new features get documented.
Since early 2025, VPE has moved to Unity 6.5 and grown in every direction. The highlights:
- Physics. Every element can be moved, rotated and scaled freely, also at runtime, and moving colliders pass their velocity and friction to the ball. Magnets, turntables, spring-hinge bash toys and generic motion controllers are native components.
- Low latency. Input polling, physics and PinMAME each run on a thread of their own, so flipper input reaches the physics without waiting for the next frame (threading model).
- Nudging and tilt. A port of Visual Pinball's cabinet nudge physics, a simulated plumb-bob tilt, and accelerometer support for KL25Z and Pinscape boards (nudging).
- Packaging. Tables are saved as
.vpefiles: a single, versioned, glTF-based format with lossless assets and nothing Unity-specific in it, meant to load years from now. A player app loads them at runtime, cooking and caching textures on first start (packaging). - Sound. Mechanical sounds are assigned to game items in the editor without code, alongside music and callouts with ducking (sound).
- Displays. DMDs can be driven by DMD Extensions, including real and colorized displays, and Pinball 2000 video is supported.
- Authoring. Drag points are Unity Splines, the asset browser handles material and decal variations and places prefabs straight onto the playfield, and new generators build wire rails and procedural inserts with baked optics, presets and lamp-driven lighting.
The changelog lists everything in detail.
The project started in late 2019 and is still actively being developed. We're part of the virtual pinball community and as such, this project is a community effort. The following is a list of relevant posts that document the progress of VPE so far.
- February 2020 - First public post with VPX import working
- February 2020 - It's alive!
- March 2020 - PinMAME is working
- May 2020 - Physics game loop ported over from Visual Pinball
- June 2020 - More physics
- August 2020 - Most editor tools ported from VPX
- October 2020 - Physics are complete, documentation site, scripting, MPF
- October 2020 - Materials, rendering
- November 2020 - Rendering
- December 2020 - More rendering
- March 2021 - Game logic
- April 2021 - Segment display shader
- June 2021 - Retrospect and the future
- September 2021 - Prefabs, data, wiring, export and more
- December 2021 - Insert lights rendering
- December 2021 - Visual Scripting POC
- January 2022 - It runs on an iPad!
- February 2022 - Lighting
- July 2022 - Visual Scripting, Physics, Asset Library, Tutorials, VR/AR, the future
- December 2022 - Asset library, world space, score motors
- January 2024 - From DOTS to Bursted Jobs, Kinematic Colliders
- February 2025 - Unrestricted transformations, Sounds, Packaging, Retrospective
- March 2025 - Asset library style guide
- June 2025 - Asset browser decals and color variations
- October 2025 - Starting work on low input latency
- April 2026 - Input, physics and PinMAME on their own threads
- June 2026 - Player app, future-proof .vpe format, texture cache
- June 2026 - DMD Extensions in VPE
- July 2026 - Moving colliders with velocity, Nudging, Tilt bob
- September 2026 - Wire rail generator
During that time, we've also written a guest article at thisweekinpinball.com about our community.
The "core" of VPE (i.e. the VisualPinball.Engine project) is a pure C# port
of the original Visual Pinball. It has no dependencies to any proprietary third
parties, and provides the data layer.
This repository is part of a number of packages. It is what we're referring to as the main package, which also includes the core project.
We've put them in a Wiki. :)
Special thanks go to JetBrains for their awesome IDE and support of the Open Source Community!


