How to Install Darktable on Ubuntu 26.04, 24.04 and 22.04

Last updated Saturday, May 9, 2026 4:41 pm Joshua James 8 min read

RAW photo work gets awkward fast when every adjustment has to be permanent or scattered across separate files. Darktable gives Ubuntu users a non-destructive darkroom workflow, with a lighttable view for organizing shoots, editing history saved separately from the originals, and color tools built for camera raw files. If you want to install Darktable on Ubuntu for photo development rather than quick image viewing, the package source you choose mainly decides how current the app is and how updates are handled.

Ubuntu 26.04, 24.04, and 22.04 all provide Darktable through the universe repository, but each release freezes a different branch. Flatpak and Snap can be useful when you want a store-managed build, while the official AppImage and source tarball are better treated as advanced paths rather than the normal package-manager choice.

Install Darktable on Ubuntu

Several Darktable install paths work on Ubuntu because the distro package, store packages, and upstream release assets move on different schedules. Use the quick APT path for the default Ubuntu package, or compare the methods first if version freshness or store-managed updates matter more.

Quick Darktable Install Commands for Ubuntu

Use this path when you want the Ubuntu archive package and normal APT updates. Ubuntu 24.04 and 22.04 install older release-frozen branches, so use the method comparison first if you specifically need the current upstream branch.

sudo apt update
sudo apt install darktable

These commands use sudo for system changes. If your account cannot run administrative commands yet, add the user to sudoers or follow the Ubuntu sudoers workflow before continuing: Add a user to sudoers on Ubuntu.

Choose the Darktable Installation Method on Ubuntu

MethodSource or ChannelUpdate BehaviorBest ForTrade-offs
APTUbuntu package search (universe)Updates with normal APT upgradesMost Ubuntu desktop usersRelease-frozen on 24.04 and 22.04
FlatpakFlathub appUpdates with FlatpakUsers who want the current Flathub buildUnverified Flathub listing with broad host filesystem and device permissions
SnapSnap Store latest/stableAutomatic Snap refreshesUsers who prefer background store updatesUnproven publisher account and currently behind upstream 5.4.1
Source buildOfficial release tarballManual rebuilds with update-darktable-sourceAdvanced users who need a custom local buildLong build, source dependencies, manual cleanup

For APT installs, Ubuntu currently ships darktable 5.4.1-1 on Ubuntu 26.04, 4.6.1-2ubuntu1 on Ubuntu 24.04, and 3.8.1-2 on Ubuntu 22.04. Choose APT for the cleanest distro-managed install, Flatpak when you want the newest Flathub release, Snap only when automatic background updates matter more than upstream-published packaging, and source only when you are prepared to maintain a local build yourself.

Darktable Download, PPA, and AppImage Notes

The official darktable install page publishes a Linux AppImage and source tarball, and it also links Open Build Service packages for some Ubuntu releases. That OBS list currently includes Ubuntu 22.04 and 24.04 but not Ubuntu 26.04, so OBS does not cover the full Ubuntu scope. These install paths also do not require a Launchpad PPA.

If you specifically want the portable AppImage, download it from the official darktable release page and use the separate guide to set up AppImage support on Ubuntu. The current stable AppImage is published for x86_64, so ARM Ubuntu systems should use APT, Flatpak, Snap, or a source build unless upstream publishes a matching AppImage asset for that architecture.

Update Ubuntu Before Installing Darktable

Refresh APT metadata before using the Ubuntu repository path. Review any pending upgrades before accepting them, especially if kernel or graphics-driver packages are included.

sudo apt update
sudo apt upgrade

Install Darktable with APT

APT installs Darktable from Ubuntu’s universe repository and keeps it tied to normal system updates. If APT cannot find the package, confirm that universe is enabled first; the Ubuntu component guide explains the difference between main, universe, and multiverse: Enable Universe and Multiverse on Ubuntu.

sudo apt install darktable

Check the installed version after APT finishes. The example output reflects the current Ubuntu 26.04 package; Ubuntu 24.04 and 22.04 show their older release-frozen versions.

darktable --version
this is darktable 5.4.1

Install Darktable with Snap

Ubuntu desktop installs normally include Snap support. The Darktable Snap is published by Sergio Schvezov (sergiusens) under an unproven Snap Store publisher account, and the stable channel can lag behind the newest upstream point release. Use it when background Snap refreshes are more important to you than upstream-published packaging.

sudo snap install darktable

Verify the installed Snap package with snap list. Revision numbers can differ by architecture, so focus on the package name, version, and tracking channel.

snap list darktable
Name       Version  Rev  Tracking       Publisher   Notes
darktable  5.4.0    394  latest/stable  sergiusens  -

On minimal Ubuntu installs, containers, or systems where Snap was removed, snap may be missing. Install snapd with sudo apt install snapd, sign out and back in if the command path is not refreshed, then rerun the Snap install command.

Install Darktable with Flatpak

Flatpak is not pre-installed on Ubuntu. If you have not set it up yet, follow the guide to install Flatpak on Ubuntu before continuing.

Add Flathub at system scope if the remote is not already configured. The --if-not-exists flag keeps the command safe to rerun.

sudo flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo

Install the Darktable Flatpak from Flathub:

sudo flatpak install flathub org.darktable.Darktable -y

For a GUI Flatpak, flatpak info is a safer verification command than launching the app only to check a version flag. Relevant fields should show the app ID, branch, version, origin, and system installation scope.

flatpak info org.darktable.Darktable
ID: org.darktable.Darktable
Version: 5.4.1
Branch: stable
Origin: flathub
Installation: system

The Flathub listing is not verified, and the current manifest grants broad access such as host filesystem and device permissions. Treat Flatpak here as a Flathub packaging and update choice, not as a strict isolation boundary.

Compile Darktable from Source

Use a source build only when you need a custom local build or an upstream release that you cannot get from APT, Flatpak, Snap, or AppImage. Source installs are not tracked by APT, so you are responsible for rebuilds, dependency changes, and cleanup.

Install Source Build Dependencies

Ubuntu can install most Darktable build dependencies from source package metadata. Create a narrow source metadata file for the Ubuntu universe component, then install the build dependencies, download tools, JSON parser, and XZ extractor.

. /etc/os-release
sudo tee /etc/apt/sources.list.d/ubuntu-universe-source.sources >/dev/null <<EOF
Types: deb-src
URIs: http://archive.ubuntu.com/ubuntu
Suites: ${VERSION_CODENAME}
Components: universe
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
EOF
sudo apt update
sudo apt build-dep darktable
sudo apt install curl ca-certificates jq xz-utils

Download and Verify the Darktable Source Tarball

Use a stable source workspace instead of ~/Downloads, then download the official 5.4.1 release tarball with curl. The Darktable release notes publish the checksum used here. If you need a refresher on the download flags, the curl command guide covers common Linux usage.

mkdir -p "$HOME/darktable-source-build"
cd "$HOME/darktable-source-build"
curl -fLO https://github.com/darktable-org/darktable/releases/download/release-5.4.1/darktable-5.4.1.tar.xz
printf 'afdc7c88a338a8cd2fac31c8450d076edbf73e956e4307260c83ebc195f845e4  darktable-5.4.1.tar.xz\n' | sha256sum -c -
darktable-5.4.1.tar.xz: OK

Build and Install Darktable from Source

Extract the release archive and install Darktable under /opt/darktable. That prefix keeps the source build separate from APT-managed files and makes removal predictable later.

tar -xf darktable-5.4.1.tar.xz
cd darktable-5.4.1
./build.sh --prefix /opt/darktable --build-type Release --install --sudo

Create a memorable source-build launcher, then verify the installed binary:

sudo ln -sf /opt/darktable/bin/darktable /usr/local/bin/darktable-source
darktable-source --version
this is darktable 5.4.1

Create the Darktable Source Update Command

Create a reusable update-darktable-source command while the source method is fresh. The helper checks the latest GitHub release, selects the matching darktable-*.tar.xz asset, reads the checksum from the release notes, builds in $HOME/darktable-source-build, backs up the current /opt/darktable tree during installation, and restores that backup if the new build does not verify.

sudo tee /usr/local/bin/update-darktable-source >/dev/null <<'EOF'
#!/usr/bin/env bash
set -euo pipefail

API_URL="https://api.github.com/repos/darktable-org/darktable/releases/latest"
INSTALL_PREFIX="${DARKTABLE_SOURCE_PREFIX:-/opt/darktable}"
BUILD_ROOT="${DARKTABLE_SOURCE_BUILD_DIR:-$HOME/darktable-source-build}"
LAUNCHER="${DARKTABLE_SOURCE_LAUNCHER:-/usr/local/bin/darktable-source}"

if [ "$(id -u)" -eq 0 ]; then
  echo "Run this command as your regular user; it uses sudo only for install steps."
  exit 1
fi

for cmd in awk curl jq sed tr; do
  if ! command -v "$cmd" >/dev/null 2>&1; then
    echo "Error: $cmd is required."
    echo "Run the Darktable source dependency commands, then retry."
    exit 1
  fi
done

current_version="$("$INSTALL_PREFIX/bin/darktable" --version 2>/dev/null | sed -n 's/^this is darktable \([0-9][0-9.]*\).*/\1/p' || true)"
current_version="${current_version:-none}"

release_json="$(curl -fsSL "$API_URL")"
tag="$(printf '%s' "$release_json" | jq -r '.tag_name // empty')"

if [ -z "$tag" ] || [ "${tag#release-}" = "$tag" ]; then
  echo "Error: could not resolve the latest darktable release tag."
  exit 1
fi

latest_version="${tag#release-}"

case "$latest_version" in
  *[!0-9.]*|'')
    echo "Error: unexpected darktable release version: $latest_version"
    exit 1
    ;;
esac

archive="darktable-${latest_version}.tar.xz"
asset_url="$(printf '%s' "$release_json" | jq -r --arg name "$archive" '.assets[]? | select(.name == $name) | .browser_download_url' | sed -n '1p')"
checksum="$(printf '%s' "$release_json" | jq -r '.body // ""' | tr -d '\r' | awk -v file="$archive" 'length($1) == 64 && $1 ~ /^[0-9a-f]+$/ && $2 == file { print $1; exit }')"

if [ -z "$asset_url" ] || [ -z "$checksum" ]; then
  echo "Error: could not find the source tarball URL or checksum for $archive."
  exit 1
fi

echo "Current version: $current_version"
echo "Latest version:  $latest_version"

if [ "$current_version" = "$latest_version" ]; then
  echo "Already up to date."
  exit 0
fi

for cmd in cmake make nproc sha256sum sudo tar xz; do
  if ! command -v "$cmd" >/dev/null 2>&1; then
    echo "Error: $cmd is required for building Darktable."
    echo "Run the Darktable source dependency commands, then retry."
    exit 1
  fi
done

sudo true

mkdir -p "$BUILD_ROOT"
cd "$BUILD_ROOT"

echo "Downloading $archive..."
rm -rf "darktable-${latest_version}" "$archive"
curl -fL -o "$archive" "$asset_url"
printf '%s  %s\n' "$checksum" "$archive" | sha256sum -c -

echo "Extracting source..."
tar -xf "$archive"
source_dir="$BUILD_ROOT/darktable-${latest_version}"

if [ ! -d "$source_dir" ]; then
  echo "Error: expected source directory not found: $source_dir"
  exit 1
fi

cd "$source_dir"

echo "Configuring and compiling darktable. This can take a while."
./build.sh --prefix "$INSTALL_PREFIX" --build-type Release

backup_dir=""
restore_backup() {
  if [ -n "$backup_dir" ] && [ -d "$backup_dir" ]; then
    sudo rm -rf "$INSTALL_PREFIX"
    sudo mv "$backup_dir" "$INSTALL_PREFIX"
  fi
}

if [ -d "$INSTALL_PREFIX" ]; then
  backup_dir="${INSTALL_PREFIX}.backup.$(date +%Y%m%d-%H%M%S)"
  echo "Backing up current install to $backup_dir..."
  sudo rm -rf "$backup_dir"
  sudo mv "$INSTALL_PREFIX" "$backup_dir"
fi

echo "Installing darktable to $INSTALL_PREFIX..."
if ! sudo cmake --build "$source_dir/build" --target install -- -j"$(nproc)"; then
  echo "Install failed; restoring previous build if available."
  restore_backup
  exit 1
fi

installed_version="$("$INSTALL_PREFIX/bin/darktable" --version 2>/dev/null | sed -n 's/^this is darktable \([0-9][0-9.]*\).*/\1/p' || true)"

if [ "$installed_version" != "$latest_version" ]; then
  echo "Verification failed; restoring previous build if available."
  restore_backup
  exit 1
fi

if ! sudo ln -sf "$INSTALL_PREFIX/bin/darktable" "$LAUNCHER"; then
  echo "Launcher update failed; restoring previous build if available."
  restore_backup
  exit 1
fi

if [ -n "$backup_dir" ]; then
  sudo rm -rf "$backup_dir"
fi

echo "Updated to darktable $installed_version."
echo "Launch command: darktable-source"
EOF

Make the helper executable, confirm it is discoverable in PATH, and run it once. Because you just installed the same release manually, the first run should use the no-op path.

sudo chmod +x /usr/local/bin/update-darktable-source
command -v update-darktable-source
update-darktable-source
/usr/local/bin/update-darktable-source
Current version: 5.4.1
Latest version:  5.4.1
Already up to date.

When the helper installs or updates a source build, expect progress lines like these before the normal compiler output:

Current version: none
Latest version:  5.4.1
Downloading darktable-5.4.1.tar.xz...
darktable-5.4.1.tar.xz: OK
Extracting source...
Configuring and compiling darktable. This can take a while.
Installing darktable to /opt/darktable...
Updated to darktable 5.4.1.
Launch command: darktable-source

Launch Darktable on Ubuntu

Darktable can start from the terminal or from the desktop application menu. Use the launch command that matches the install method.

Launch Darktable from the Terminal

APT installs expose the standard darktable launcher when the desktop package is installed:

darktable

For Snap installs, snap run avoids ambiguity if another Darktable package is also installed:

snap run darktable

For Flatpak installs, use the Flatpak app ID:

flatpak run org.darktable.Darktable

For the source build installed under /opt/darktable, use the launcher created during the source method:

darktable-source

Launch Darktable from the Application Menu

The desktop launcher normally appears as Darktable after APT, Snap, or Flatpak installation. If it does not appear immediately, sign out and back in so the desktop refreshes application entries. Source builds installed under /opt/darktable are more reliable from the terminal launcher unless you add a desktop entry for that prefix.

  1. Open the Ubuntu application overview.
  2. Search for Darktable.
  3. Open the launcher and import a test image or photo folder.

Update or Remove Darktable on Ubuntu

Use the same package family for updates and removal that you used for installation. Before major branch changes, make sure important edits have XMP sidecar files if your workflow relies on them. For APT and source builds, back up the native configuration directory before switching branches; Flatpak and Snap use different app-data paths covered in the removal and reset notes.

if [ -d ~/.config/darktable ]; then
  cp -a ~/.config/darktable ~/.config/darktable.backup.$(date +%Y%m%d-%H%M%S)
fi

Update Darktable by Install Method

Update APT Darktable Packages

sudo apt update
sudo apt install --only-upgrade darktable

Update Snap Darktable Packages

sudo snap refresh darktable

Update Flatpak Darktable Packages

sudo flatpak update org.darktable.Darktable

Update Source-Built Darktable

Source builds do not receive automatic package-manager updates. Run the reusable helper after checking Darktable release notes and backing up important edits or configuration. It can run from any terminal directory.

update-darktable-source
Current version: 5.4.1
Latest version:  5.4.1
Already up to date.

Do not schedule this helper with cron or another unattended runner. Darktable branch changes can affect the library and configuration format, so run source updates manually after reviewing upstream notes.

Remove Darktable by Install Method

Remove APT Darktable Packages

APT may offer to remove dependencies that are no longer required. Review the package list before confirming autoremove on long-running systems, because it can include packages unrelated to Darktable.

sudo apt remove darktable
sudo apt autoremove

Remove Snap Darktable Packages

The --purge option removes the Snap without saving snapd’s automatic recovery snapshot. Back up any user data under ~/snap/darktable first if you need to keep it.

sudo snap remove --purge darktable
snap list darktable 2>/dev/null || echo "darktable not installed"
darktable not installed

Remove Flatpak Darktable Packages

The --delete-data flag removes Darktable’s Flatpak app data under ~/.var/app/org.darktable.Darktable/. Export or back up any presets and settings you want to keep before using it.

sudo flatpak uninstall --delete-data org.darktable.Darktable
flatpak list --app --columns=application | grep -Fx org.darktable.Darktable || echo "NOT_INSTALLED"
NOT_INSTALLED

If Flatpak offers to remove unused runtimes afterward, review the list before confirming so you do not remove runtimes still needed by other Flatpak apps.

Remove Source-Built Darktable

If you used the /opt/darktable prefix, the darktable-source launcher, the update-darktable-source helper, and the source workspace from this guide, remove them together. Review the commands before running them if you changed the prefix or workspace.

sudo rm -rf /opt/darktable
sudo rm -f /usr/local/bin/darktable-source /usr/local/bin/update-darktable-source
rm -rf "$HOME/darktable-source-build"
hash -r
command -v update-darktable-source || echo "update-darktable-source removed"
command -v darktable-source || echo "darktable-source removed"
update-darktable-source removed
darktable-source removed

If you created the source metadata file only for this build, remove it and refresh APT afterward:

sudo rm -f /etc/apt/sources.list.d/ubuntu-universe-source.sources
sudo apt update

Troubleshoot Darktable on Ubuntu

APT Cannot Locate the Darktable Package

Darktable is in Ubuntu’s universe component. If sudo apt install darktable returns Unable to locate package darktable, enable universe, refresh package metadata, and try again.

sudo add-apt-repository universe
sudo apt update
sudo apt install darktable

Darktable Crashes on Startup

Startup crashes can come from OpenCL driver problems. Start Darktable with OpenCL disabled for the install method you used, then update or change GPU drivers if the app opens normally without OpenCL.

darktable --disable-opencl
snap run darktable --disable-opencl
flatpak run org.darktable.Darktable --disable-opencl
darktable-source --disable-opencl

Use only the matching line. Inside Darktable, the OpenCL setting lives under preferences for processing and CPU/GPU behavior, though exact labels can change between branches.

Colors Look Wrong in Darktable

Incorrect display color usually points to missing or mismatched color profiles. Install colord on APT or source-built systems, then check the Color Management preferences inside Darktable.

sudo apt install colord

Flatpak builds already request access to the system color manager, so troubleshoot the active display profile before adding Flatpak overrides.

Reset Darktable Configuration

For APT installs and source builds, move the native configuration directory aside and launch Darktable again. This keeps a backup you can inspect later.

if [ -d ~/.config/darktable ]; then
  mv ~/.config/darktable ~/.config/darktable.backup.$(date +%Y%m%d-%H%M%S)
fi
darktable

For a source build, replace the final launch command with darktable-source.

For Flatpak installs, the app-specific configuration path is different:

if [ -d ~/.var/app/org.darktable.Darktable/config/darktable ]; then
  mv ~/.var/app/org.darktable.Darktable/config/darktable ~/.var/app/org.darktable.Darktable/config/darktable.backup.$(date +%Y%m%d-%H%M%S)
fi
flatpak run org.darktable.Darktable

Snap installs store user data under ~/snap/darktable/. Inspect that directory before deleting or moving files, especially if you imported presets or changed export settings.

Conclusion

Darktable is ready on Ubuntu from the package source that fits your update preference: APT for the distro-managed path, Flatpak for the current Flathub build, Snap for background store refreshes, or source when you need a custom local build. The official darktable resources are useful for module-specific editing workflows, while GIMP on Ubuntu and digiKam on Ubuntu cover adjacent image-editing and library-management needs.

Follow LinuxCapable

Want more LinuxCapable guides in Google?

Add LinuxCapable as a preferred source so Google can show more of our fresh Linux tutorials in Top Stories and From your sources when relevant.

Add LinuxCapable as a preferred source on Google
Search LinuxCapable

Need another guide?

Search LinuxCapable for package installs, commands, troubleshooting, and follow-up guides related to what you just read.

Found this guide useful?

Support LinuxCapable to keep tutorials free and up to date.

Buy me a coffeeBuy me a coffee
Before commenting, please review our Comments Policy.
Formatting tips for your comment

You can use basic HTML to format your comment. Useful tags currently allowed in published comments:

You type Result
<code>command</code> command
<strong>bold</strong> bold
<em>italic</em> italic
<blockquote>quote</blockquote> quote block

Got a Question or Feedback?

We read and reply to every comment - let us know how we can help or improve this guide.

Let us know you are human: