Skip to content
This screenshot shows KDM (which is sort of XDM ) with the KDE default Qt style (plastic), some users in the list and an opened menu, listening the available Xsesssions. And it's i
This screenshot shows KDM (which is sort of XDM ) with the KDE default Qt style (plastic), some users in the list and an opened menu, listening the available Xsesssions. And it's in German, by the way. Image by This file was made by User:Sven Translation If this image contains text, it can be translated easily into your language. If you need help, contact me Flexible licenses If you want to use this picture with another license than stated below, contact me Contact the author If you need a really fast answer, mail me . If you need only a fast answer, write me here ., via Wikimedia Commons (GPL).

plastic

NES EMULATOR

plastic

Plastic is an open-source NES emulator written in Rust that provides both an egui graphical frontend and a terminal-based TUI. The project separates a usable core (plastic_core) from frontends and is intended as a personal/learning implementation rather than a commercial product.

nesPRIMARY SYSTEM
History documentedPROJECT BEGAN
Open sourcePROJECT MODEL

WHY IT MATTERS

Why Plastic exists

Plastic was created as a personal project to learn about NES hardware emulation and to experiment with Rust, separating the emulator core from multiple user interfaces (egui GUI and a character TUI). The author documents component-level goals (CPU, PPU, APU, mappers) and test ROMs in the repository.

BEST FOR

Best fit

Developers, students, and hobbyists who want a readable Rust NES implementation, a standalone core (plastic_core) they can inspect or reuse, or a lightweight terminal UI. Not positioned as a high-compatibility 'end-user' emulator compared with long-established emulators.

The Legend of Zelda gameplay on NES
Gameplay from The Legend of Zelda on NES.

The people behind plastic

History & status

The project is actively maintained on GitHub with hundreds of commits and a public release history. The repository contains separate crates: plastic_core (the emulator core), plastic_ui (egui UI), and plastic_tui (terminal UI). Plastic implements a 6502 CPU (with most instructions and timing noted), an APU with standard channels, PPU implementation with some timing caveats, iNES cartridge handling (INES v1.x; INES2.0 still noted as missing), and a list of supported mappers including mapper 0, 1, 2, 3, 4, 5 (milestone), 6–11, and 66. The README documents Linux build dependencies (alsa, libudev) and packaging availability (a Debian .deb artifact and Arch package mention). The project is licensed under MIT. Plastic is primarily targeted at Linux but the core and frontends are Rust projects that can be built with cargo on other platforms; specific platform packaging and runtime behavior may vary.

What plastic supports

  • Linux (native packaging noted; alsa/libudev listed as dependencies)
  • Build from source via Cargo (cross-platform Rust builds possible)
  • Arch Linux (package exists in Arch repos)
  • Note: Windows/macOS not explicitly packaged in the README; frontends use egui and gilrs which are cross-platform but platform-specific runtime details may require additional steps.

Download and availability

OFFICIAL DOWNLOADS

Get plastic

Official sources and releases are hosted on the project's GitHub. You can install prebuilt crates via cargo, use distribution packages (Arch/DEB as documented), or download releases from the repository's Releases page.

Get plastic ↗

DOCUMENTATION

Official documentation

Read the official configuration, compatibility, and troubleshooting material before changing advanced options.

Read official documentation ↗
Broken or missing download? Emulator projects move and official links sometimes change. Please contact Retro Replay so the source can be verified and updated.

plastic setup guide

Setup note: Practical setup steps below follow the project's README and repository layout. They cover dependencies, installing via cargo, distribution packages referenced by the author, and building from source.

  1. 1) Inspect the repository and choose a target: Decide whether you want the full app (plastic), the terminal UI (plastic_tui), or to embed the core (plastic_core). The repository contains separate crates for each component; plastic_core is the core NES struct intended to be clocked by a UI.
  2. 2) Install Linux build dependencies (if on Linux): The README lists libasound2-dev and libudev-dev for Debian/Ubuntu, or alsa-lib and systemd-libs on Arch. Install these before building on Linux to ensure audio and device support.
  3. 3) Install with cargo (recommended for newest stable release): Use cargo to install the published crates: cargo install plastic (or cargo install plastic_tui). This will download the crate from crates.io and build it locally via Rust's toolchain.
  4. 4) Use distribution packages where available: The README notes a Debian .deb artifact (unzip a provided .deb.zip and install with sudo dpkg -i plastic_*.deb) and that Arch has plastic/plastic_tui available via pacman. Follow your distro's package manager for installation if you prefer packaged binaries.
  5. 5) Build from source for development or latest master: Clone the GitHub repo and run cargo run –release in the workspace or in specific crate directories (plastic_ui, plastic_tui, or plastic_core). The repo contains Cargo.toml workspaces; use cargo run –release from the top-level or cd into a crate for targeted builds.
  6. 6) Runtime notes and controls: Plastic supports keyboard and gamepad input (gilrs used for gamepad). The README lists default keyboard mappings (J/K for B/A, U/I for Select/Start, WASD for d-pad) and PS4 controller mappings. The TUI experience may depend on terminal emulator features (key release detection).
  7. 7) Testing and ROMs: The repository includes test_roms and references nesdev tests and Klaus2m5 CPU tests for development. The emulator expects iNES-format ROMs (iNES v1.x support noted; v2.0 still missing). Do not supply copyrighted game ROMs unless you have legal rights to them.
  8. 8) Troubleshooting and contributions: Open issues and pull requests on GitHub for bugs or feature requests. Read the CHANGELOG and repository docs/man for details about known limitations (small PPU timing issues, BCD mode note for CPU).

Software reminder: Plastic does not include commercial game ROMs, firmware, or BIOS files. Use legally obtained test ROMs or homebrew; check the README for supported ROM formats.

Sources and further reading

Detailed guides and tutorials

Explore step-by-step guides for plastic as they are published.