The number 1 best build with the design of Juxtopposed: a modern desktop media player built from their redesign of VLC. For Windows, macOS and Linux · plays almost anything with libVLC, the engine of VLC media player · native (Qt), no web browser inside.
⬇️ Download · Download page · Design video
Note
Vela Player was called VLC Redesign up to version 3.0.7. Updating keeps your settings, library and playlists. It is not made by, affiliated with, or endorsed by VideoLAN, the makers of VLC. "VLC" is a trademark of VideoLAN.
The entire design of this app comes from Juxtopposed: the library, the player, the onboarding, the settings window, the menus and the audio/video panels.
- 📺 Video: I Redesigned VLC After 25 Years by Juxtopposed
- 🎨 Figma: VLC Redesign (Community)
This repository turns that design into a working app. All credit for the design goes to Juxtopposed. Go watch the video! 🙌
Vela Player 3 is rebuilt from the ground up with Qt and libVLC: it starts faster, uses far less memory and disk space, and plays everything VLC plays without converting. Every screen of v2.x is still there, and your settings, library, playlists, positions and bookmarks move over by themselves the first time you start it (after v2.2 or later has run once). The source is in qt/; v2.x (Electron) stays in app/.
Open the latest release and pick the file for your system:
| Operating system | File |
|---|---|
| 🪟 Windows 10 / 11 | Vela-Player-Setup-<version>-x64.exe (installer) or Vela-Player-Portable-<version>-x64.zip |
| 🍎 macOS (Apple Silicon / Intel) | Vela-Player-<version>-mac-arm64.dmg / …-mac-x64.dmg |
| 🐧 Debian, Ubuntu, Linux Mint, Chrome OS | vela-player-<version>-amd64.deb |
| 🐧 Fedora, openSUSE, Red Hat | vela-player-<version>-x86_64.rpm |
| 🐧 Arch Linux, Manjaro | vela-player-<version>-1-x86_64.pkg.tar.zst |
| 🐧 Any Linux with Flatpak | flatpak install https://stanotermans.github.io/vlcmediaplayerv2/flatpak/vela-player.flatpakref (updates with flatpak update) or Vela-Player-<version>-x86_64.flatpak |
| 🐧 Any Linux (Gentoo, Slackware, …) | vela-player-<version>-x86_64.AppImage or .tar.gz |
Or use the download page, which detects your system automatically.
🌍 The app is available in English, Dutch, German, French, Spanish, Italian, Portuguese and Polish. You pick your language on first launch and can change it any time in Settings.
Installing on Linux
sudo apt install ./vela-player-*-amd64.deb # Debian, Ubuntu, Mint, Chrome OS
sudo dnf install ./vela-player-*-x86_64.rpm # Fedora, Red Hat
sudo zypper install ./vela-player-*-x86_64.rpm # openSUSE
sudo pacman -U ./vela-player-*.pkg.tar.zst # Arch, Manjaro
flatpak install https://stanotermans.github.io/vlcmediaplayerv2/flatpak/vela-player.flatpakref # any distribution with Flatpak; `flatpak update` brings new versions
chmod +x vela-player-*.AppImage && ./vela-player-*.AppImage # any distributionChrome OS: turn on Settings → About ChromeOS → Developers → Linux development environment, then open the .deb file from the Files app.
First launch on Windows or macOS
The app is not code-signed (that requires a paid certificate), so your system shows a warning the first time:
- Windows: if the blue SmartScreen dialog appears, click More info → Run anyway. Windows releases are being set up for code signing via SignPath (see the code signing policy); even signed, a new release can trigger SmartScreen until it has built up reputation.
- macOS: right-click the app → Open → Open. Or in Terminal:
xattr -dr com.apple.quarantine "/Applications/Vela Player.app"
- Plays almost anything, with VLC's engine. Since 2.0 the app plays through libVLC, the engine of VLC media player itself: MP4, MKV, AVI, MOV, WMV, FLV, WebM, MP3, FLAC, AC3/DTS and more, DVDs with their menus (also copy-protected ones), image subtitles (PGS, VobSub), VLC's equalizer and audio effects, surround and passthrough to an AV receiver, VLC's Record and frame-accurate seeking. Files you open yourself are always tried, whatever the extension. The Classic engine (Chromium with on-the-fly FFmpeg conversion, also for old game and cutscene formats like TGV, Bink and Smacker) stays available under Settings → Playback → Engine, and takes over for HDR films on HDR screens and for anything libVLC can't open.
- DVDs: open a DVD
.isoimage or a DVD folder (VIDEO_TS). A disc with several titles (episodes, extras) is added as Title 1, Title 2, … in disc order and plays them one after another (titles that repeat the same video, like "episode with intro" next to "episode" or a "play all" title, are listed once); DVD menus themselves are not shown. Copy-protected (CSS-encrypted) retail DVDs are not supported. - MIDI:
.mid,.midi,.karand.rmifiles play with a built-in General MIDI SoundFont (FluidR3 Mono), with no extra download, and start right away while the rest is rendered. Pick your own.sf2/.sf3SoundFont under Settings → Audio → MIDI. - Built-in updates. The app checks GitHub for new releases and shows a notification. On Windows (installer) and Linux (AppImage) it downloads and installs the update itself; elsewhere it fetches the right file for you. You can also check manually under Settings → ⓘ About, which also shows the version, credits and licenses.
- Instant seek preview. Hover the timeline to see a thumbnail; a storyboard of frames is generated in the background so the preview follows your mouse without delay.
- 8 languages: English, Nederlands, Deutsch, Français, Español, Italiano, Português and Polski, switchable instantly without restarting.
- Onboarding on first launch: choose your language, pick a media folder, choose a theme and accent color (with live preview), make Vela Player your default player, and learn the key shortcuts.
- Default player: Settings → General → Default player (also in the welcome screen). On Windows it opens Default apps right on Vela Player (the installer registers it there), on Linux it sets itself as default for all its file types, on macOS it explains the Finder steps.
- Library with videos, music, network streams, playlists and recently played. Browse folders with breadcrumbs (Videos ▸ Shows ▸ The Wand ▸ S01), "continue watching", and watched items dimmed.
- Playlists: play
.m3u,.m3u8,.xspfand.plsfiles by opening or dragging them, or keep them with Playlists → Import playlist…; drag the items of your own playlists to change their order, and export any playlist as.xspfor.m3u8(right-click it → Export playlist…), an All media playlist with everything, and a list view with title, artist/album and duration columns you can sort by. - Player with a timeline preview (hover the seek bar to see that moment), mini player, queue, resume where you left off, repeat/shuffle, playback speed, picture-in-picture, fullscreen and hide-UI mode.
- Made for watching: while a video plays, the sidebar tucks away so the video gets the full width, and the window resizes to the video's shape (up to 70% of the screen, like VLC). Both can be turned off in Settings → Interface. There you can also hide individual player controls (e.g. keep only the timeline), make the volume bar a cone like classic VLC, and turn on rounded window corners.
- Hold for 2× speed: hold Shift+Space, or hold the mouse button on the video, to play at double speed until you let go.
- A-B repeat: press A to set the start, A again to set the end and loop that part, and A once more to stop (also in the right-click menu under Playback). The looped part is shown on the timeline.
- Chapters and bookmarks: chapters embedded in a file (MKV, MP4, DVD) show as marks on the timeline, with the chapter name above the preview. Add your own bookmarks with Ctrl+B, jump between chapters and bookmarks with Shift+N / Shift+P, and manage, import or export them (OGM chapter files, FFmpeg metadata, Matroska XML, CUE and "1:23 Title" lists) via Ctrl+Shift+B.
- Subtitles: embedded and external
.srt/.ass/.vttfiles load automatically. You can set the delay, speed, duration, font, color, outline and background. - Subtitle fonts: pick any font installed on your computer, or add your own
.ttf/.otf/.wofffiles in Settings → Subtitles. - Online subtitles: search and download subtitles from OpenSubtitles.com without leaving the player (right-click → Subtitle → Search online…). Results that fit your exact file are marked. Searching works right away; downloading needs a free OpenSubtitles.com account (20 downloads per day), which you can log in with inside the app.
- Music with lyrics: album covers in the player and as square tiles in the library. A
.lrcfile next to a song is loaded automatically and shown full-screen, scrolling along with the song (click a line to jump there); for videos.lrcfiles work as subtitles. The music player background can be a blurred cover, a gradient from the cover's colors or black, with adjustable dimming and cover size; press Y to switch between cover and lyrics. Hovering the timeline shows the lyric line at that moment. The full-screen lyrics have their own text size (Settings → Subtitles → Lyrics). - Surround sound: 5.1 and 7.1 audio (Dolby Digital, DTS, TrueHD/Atmos core, AAC, FLAC …) keeps its channels, also when the file is converted and with the audio effects on (Settings → Audio → Speakers). Bitstream passthrough to a receiver is not possible in Chromium; the audio is decoded and sent as multichannel PCM.
- Audio: multiple audio tracks, a 10-band equalizer with 18 presets, compressor, spatial audio (reverb), stereo widener and volume boost up to 200%.
- Video: brightness, contrast, saturation, hue, gamma, sharpen, film grain, negative, posterize, grayscale, sepia, pixel cropping, rotate, zoom and mirror.
- Themes: light, dark, AMOLED black or system, with 9 accent colors, and an interface size from 75% to 150% (Settings → General, or Ctrl + / Ctrl − / Ctrl 0).
- Recording (R) and snapshots (Shift+S).
- Your own keys: every keyboard shortcut can be changed under Settings → Controls, and the media keys (play/pause, next, previous, stop) work too, also from the Windows media overlay, Linux (MPRIS) and headsets.
- Settings: right-click menu with submenus, quick settings in the player, and a full settings window with search (Ctrl+P).
Keyboard shortcuts
| Key | Action | Key | Action |
|---|---|---|---|
Space |
Play / pause | F |
Fullscreen |
← → |
Seek | ↑ ↓ |
Volume |
< > / P N |
Previous / next | Q |
Queue |
, . |
Previous / next frame | L |
Library / player |
V |
Cycle subtitle track | B |
Cycle audio track |
Shift+S |
Snapshot | R |
Record |
S |
Stop | M |
Mute |
[ ] = |
Slower / faster / normal | G H |
Subtitle delay |
Ctrl+O |
Open files | Ctrl+N |
Network stream |
Ctrl+P |
Settings | Ctrl+\ |
Hide interface |
Shift+N Shift+P |
Next / previous chapter or bookmark | Ctrl+B |
Add bookmark |
Ctrl+Shift+B |
Chapters and bookmarks | A |
A-B repeat (A, B, off) |
Shift+Space (hold) |
2× speed while held | ||
F1 |
All shortcuts | Ctrl+Q |
Quit |
| Onboarding | Player with quick settings |
|---|---|
![]() |
![]() |
| Settings | Light mode |
![]() |
![]() |
Requires Node.js 20 or newer.
cd app
npm install
npm start # run the development version
npm run dist:win # Windows: installer + portable (on Windows)
npm run dist:store # Microsoft Store package (on Windows)
npm run dist:mac # macOS (on a Mac)
npm run dist:linux # Linux: AppImage, deb, rpm, pacman, tar.gz (on Linux)Like VLC, the release builds don't ship a general-purpose FFmpeg. app/build/ffmpeg/build.sh compiles FFmpeg (with libdvdread/libdvdnav for DVDs) from source with --disable-everything, then switches on all decoders, demuxers and parsers (so it still plays almost anything) but only the few encoders, muxers and filters the app uses (H.264/AAC for live conversion, JPEG thumbnails, WebVTT subtitles). That brings the FFmpeg binary from ±80 MB down to a fraction of that. The release workflow builds it automatically; to build it yourself:
bash app/build/ffmpeg/docker.sh win-x64 # or linux-x64 (needs Docker)
bash app/build/ffmpeg/build.sh mac-arm64 # or mac-x64 (on a Mac, with nasm + pkg-config)The result lands in app/build/ffmpeg/out/<target>/. Copy it over app/node_modules/ffmpeg-static/ffmpeg[.exe] before running electron-builder. During development the full ffmpeg-static binary is used.
The VLC engine is libVLC 3 loaded at runtime by a small native module (app/native/vlcview, N-API, so it isn't tied to an Electron version), which hands every video frame to a WebGL canvas in the app. The release workflow puts libVLC next to the app:
- Windows and macOS:
app/scripts/fetch-vlc.jstakes libVLC and its plugins from VideoLAN's official VLC builds (checked against VideoLAN's SHA-256) and leaves out what the app doesn't use (VLC's interface, Lua, visualizations). - Linux: VideoLAN publishes no Linux builds, so
app/build/vlc-linuxbundles Debian 12's libVLC with a slim FFmpeg (decoders and demuxers only) in every Linux package. Its FFmpeg functions are renamed, because Electron's own FFmpeg would otherwise answer VLC's calls.
cd app
node scripts/fetch-vlc.js # Windows; on a Mac: node scripts/fetch-vlc.js mac-arm64 (or mac-x64)
bash build/vlc-linux/docker.sh # Linux (needs Docker)
npx node-gyp@12 rebuild -C native/vlcview # the native module
node scripts/vlc-smoke.js # plays a test clip through libVLCWithout libVLC the app simply uses the Classic engine.
The workflow .github/workflows/build.yml builds the app on GitHub's servers for Windows, macOS and Linux, and creates a release with a download table automatically:
# first set the version in app/package.json, e.g. "version": "2.0.0"
git tag v2.0.0
git push origin v2.0.0You can also run the workflow manually (Actions → Build & Release → Run workflow). The files then appear under Artifacts.
The page in docs/ is published at https://stanotermans.github.io/vlcmediaplayerv2/. To enable it, go to Settings → Pages → Deploy from a branch → main / /docs. It always shows the latest release.
Electron has no official builds for BSD. On FreeBSD (and OpenBSD) you can run the app with the system's Electron port; it then uses the system's FFmpeg:
pkg install electron36 ffmpeg node npm # the port's version number may differ: pkg search electron
cd app && npm install --ignore-scripts --omit=dev
electron36 .To use your own FFmpeg, set VLCX_FFMPEG=/path/to/ffmpeg.
app/
main.js Electron main process: window, local media server, FFmpeg transcoding, file dialogs
midi-render.mjs Renders MIDI files to audio with a SoundFont (runs in a separate process)
assets/ Built-in SoundFont (FluidR3 Mono) and its license
preload.js Secure bridge between the main process and the UI
src/
index.html UI layout
style.css Design (light/dark, accent color)
settings.js Preferences and theme
ui.js Building blocks: sliders, toggles, menus, dialogs
effects.js Audio effects (Web Audio) and video filters
panels.js Quick settings, settings window and dialogs
onboarding.js Welcome screen (language, media folder, theme, shortcuts)
i18n.js Translation system
lang/*.js Translations (nl, de, fr, es, it, pt; English is built in)
app.js Library, player, subtitles, keyboard shortcuts
build/icon.png App icon (generated by build/make-icon.js)
src/vlcplayer.js The VLC engine: a <video>-like player on libVLC, drawn on a canvas
native/vlcview/ Native module that loads libVLC and passes frames to the app
scripts/fetch-vlc.js libVLC from VideoLAN's builds (Windows, macOS)
build/vlc-linux/ libVLC bundle for Linux
build/ffmpeg/ Recipe for the slim FFmpeg used in releases
docs/ Download page for GitHub Pages
We are working on making a port to iOS and Android.
- Android is on its way to Google Play: the same app with a layout for phones, the phone's videos and music, and the same libVLC engine.
- iOS follows after Android, through the App Store.
- Apple TV needs a separate app (the toolkit, Qt, doesn't run on tvOS); that may come later.
- Windows Phone has been discontinued. FreeBSD and OpenBSD can run it from source.
- Contributing guide: bug reports, ideas, translations and code
- Code of Conduct
- Security policy: report vulnerabilities privately
- Code signing policy: free code signing provided by SignPath.io, certificate by SignPath Foundation
- Accessibility: what's supported, known limitations and how to report barriers
- Code: MIT © Stan Otermans
- Design: © Juxtopposed, used with attribution based on the publicly shared Figma community file.
- Includes FFmpeg with x264, licensed under the GPL. Release builds use the slim build from
app/build/ffmpeg/build.sh(source: the FFmpeg and x264 versions pinned there); development uses ffmpeg-static. - Includes libVLC 3 by VideoLAN (LGPL 2.1 or later; some plugins GPL), from VideoLAN's official builds on Windows and macOS and from Debian 12 on Linux (see
resources/vlc/README.txtandCOPYING-VLC.txtin the app). On Windows and macOS its DVD plugins include libdvdcss (GPL), which reads copy-protected DVDs. Source: download.videolan.org. - MIDI playback uses SpessaSynth (Apache-2.0) and the FluidR3 Mono General MIDI SoundFont (MIT, see
app/assets/FluidR3Mono_License.md). - "VLC" and the cone logo are trademarks of VideoLAN. This project is not affiliated with VideoLAN.



