
DuckStation
Accurate PlayStation emulator that runs on low-end hardware
- Open SourceGitHub
- Connor McLaughlin (stenzek)Developer
- 7 Nov 2026Page Updated
Details
- Developer
- Connor McLaughlin (stenzek)
- Source Code
- GitHub
- Page Updated
Supported Systems
Platform Support
Screenshots
Overview
DuckStation is a PlayStation 1 emulator written by Connor McLaughlin (stenzek). Its aim is to be as accurate as possible while still running well on low-end hardware, and it discourages hack options, so the default settings should work for every playable game.
It has a desktop interface built with Qt and a fullscreen interface for TVs and controllers. The hardware renderers support Direct3D 11 and 12, OpenGL, Vulkan and Metal, with upscaling, texture filtering, true colour and PGXP to reduce wobbly polygons. Other features include save states with rewind and runahead, texture replacement, post-processing shaders, cheat and patch databases, a memory card editor, CHD support and RetroAchievements.
Builds for Windows (x64 and ARM64), Linux (AppImage) and macOS are made automatically for every change, and there is an Android version on Google Play. You need a PlayStation BIOS dumped from your own console. DuckStation is under active development and is released under the CC BY-NC-ND licence.
Key Features
Accuracy First
Aims for accuracy while still running well on low-end hardware.
Upscaling and PGXP
Upscaling, texture filtering, true colour and PGXP for stable polygons.
Rewind and Runahead
Save states with rewind and runahead support.
RetroAchievements
Supports RetroAchievements, cheat and patch databases.
Advertisement
Download DuckStation
What's new in v2026-11-07Latest Rolling Release
Commits
- 8962d8436 GPU/HW: Add missing logging of depth clears
- 20916bd89 FullscreenUI: Activate toggle buttons on release instead of press
- c3b58f256 FullscreenUI: Support drag/swipe scrolling with inertia
- 968d20a41 dep/imgui: Don’t smooth scroll requests made while window is appearing
- fd8bcdcf1 FullscreenUI: Fix ForceKeyNavEnabled() clobbering gamepad nav source
- 7d64f8223 FullscreenUI: Include directory selector in open dialog checks
- 414d8f204 FullscreenUI: Clear all dialogs on shutdown
- 49a2ff938 FullscreenUI: Fix indeterminate progress bar sweep range
- aa9916b88 FullscreenUI: Avoid inverted std::clamp() bounds in dropdown width
- f4fe9de23 FullscreenUI: Pass button flags through in MenuButtonFrame() overload
- ae4658a7b FullscreenUI: Pass p_open through in BeginBlurWindow()
- b73f8b273 FullscreenUI: Keep horizontal menu/sidebar state balanced when hidden
- 9bbf341be FullscreenUI: Copy/move checkable choice dialog callback before invoking
- 92a7758b5 CDImageCHD: Use generated subchannel Q for virtual pregaps
- b2b68c3ce CDImageCCD: Fix LBA count including pregaps twice
- cde17ace5 CDImageCueSheet: Fix single-file pregap and LBA count
- 0b5b8774c Common: Add PackedOptionalArray
- 296d48a67 ImGuiManager: Ensure DeltaTime can never be negative
- dff25dbc3 FullscreenUI: Improve drag scrolling
- 0d1b014cc ImGuiManager: Don’t hover pointer for touchscreens
- 5d4772417 System: Sync to host refresh rates that are a multiple of the console’s
- e48f86ab9 SDLInputSource: Fix sensor enable early return
- 84e1db587 FullscreenUI: Fix clear binding button clearing all
- dc623cafe Spanish (Spain) translation update 2026/10/25 (#3814)
- f78ecb81c Settings: Fix VSync/frame pacing help text
- ae250ebeb D3D12Device: Use frame latency waitable in exclusive fullscreen
- 3c81431b4 Qt: Use X11 server size for surface size
- 6cd67d7ef Qt: Round Wayland surface size as per fractional-scale-v1
- 4b524740d OpenGLContextEGL: Don’t query surface size
- 60a5c21f4 GPUDevice: Report swap chain resizes from present calls
- 1e7b6d796 Qt: Accept wayland-egl/wayland-brcm platform names
- 360a35ed1 Qt: Remove sync()/processEvents() hack
- ae7895dae Qt: Pick up X11 window size changes from configure events
- 8c68d4778 Improve Swedish vertex terminology (#3815)
- 16be09afe Qt: Skip setting rounded corner state on Windows 10
- e7efd4261 Qt: Recheck surface size when restoring from minimized
- a4f3e5ff7 VideoThread: Ignore zero-sized render window resizes
- 076b133a6 CocoaTools: Use native display mode for real scaling factor
- 5d936496a System: Disable vsync while fast forwarding if it can be switched cheaply
- 637ff514c VulkanSwapChain: Switch between FIFO and immediate without recreating
- 2a0e92fe3 FullscreenUI: Fix 0 point display when achievements disabled
- a78082b8c Qt: Add descriptions to post-processing page
- e0f6fa82b Qt: Remove ‘Post Processing Chain’ groupbox
- 0310f59ac XInputSource: Poll disconnected slots periodically
- e41bcd36d InputManager: Device notification fixes
- f591ef20e Common: Fix heap overflow when shrinking DynamicHeapArray
- 526b4a128 Clarify Swedish automatic setting descriptions (#3816)
- d38183754 Improve Swedish translation quality (#3817)
- eb68a7d22 AudioStream: Make ApplyVolume() public
- cf5890e26 SoundEffectManager: Add volume control
- 3171f3be9 Cheats: Add block write code types
- 8cc2ef4a7 Scripts: Add psx-exe to elf converter
- 25ff3364c Cheats: Merge runs of constant/match writes into vectorised block writes
- 94cdf91c0 Qt: Update machine translations
- 831fef0e3 Qt: Fix reset audio settings clearing from base ini
- e700391c4 Qt: Rename PromptForAddress() to PromptForHexValue()
- 3f8df8b78 Qt: Allow editing CPU registers in debugger
- fc48940aa CPU: Only intercept TTY syscalls in interpreter with BIOS TTY logging
- ca184adb3 System: Don’t apply cheats or update achievements until the game starts
- b292b8477 Scripts: Regression test UI
…
d6caa5fd775dac8506365408b3f794c0ecfb1dca0069c30763b466dc76a2a52f
ca02e8eac40c0c6de801638f6b16bec80b605b5df32e406fe2fba7f21016b14b
eef887bacce0b3cd9a943fb6718e7e2b8970edcf7e88c7eb30cee750d71037d5
6918746eaa8baffc55c9d7d48fd72d3b51a4165a1b039b5c70183f15f4576346
3ec91192de536021598fa08a3769b22531a89c24d0c877ba3b66c0dcc2077a3c
