Midori Web Browser - a lightweight, fast and free web browser using WebKit and GTK+
kalikiana Add Gradle/ Kotlin/ Android frontend (#213)
- Native Android activity
- Uses system WebView component
- Urlbar with search capability, autohiding when scrolling
- Share button to pass URL to other apps
- CircleCI configuration

Fixes: #203
Latest commit da81c91 Dec 19, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci Add Gradle/ Kotlin/ Android frontend (#213) Dec 18, 2018
app Add Gradle/ Kotlin/ Android frontend (#213) Dec 18, 2018
cmake Merge translations into plugin descriptions (#104) Oct 18, 2018
core Carry error state and tls certificate in tab (#187) Dec 16, 2018
data Implement notifications for downloads and web (#175) Nov 22, 2018
extensions Change zoom level in statusbar (#196) Dec 16, 2018
gradle/wrapper Add Gradle/ Kotlin/ Android frontend (#213) Dec 18, 2018
icons Rewrite browser core completely in Vala Jul 9, 2018
po Implement notifications for downloads and web (#175) Nov 22, 2018
snap Implement notifications for downloads and web (#175) Nov 22, 2018
tests Make POTFILES.in check ignore parts folder (#37) Sep 4, 2018
ui Change zoom level in statusbar (#196) Dec 16, 2018
vapi Go back to using WebKit-provided user agent (#173) Nov 20, 2018
web Locate system-wide plugins at Config.PLUGINDIR (#168) Nov 19, 2018
.gitignore Add Gradle/ Kotlin/ Android frontend (#213) Dec 18, 2018
CMakeLists.txt Release Midori 7.0 (#198) Nov 30, 2018
COPYING Initial commit Dec 16, 2007
ChangeLog Release Midori 7.0 (#198) Nov 30, 2018
README.md Add Gradle/ Kotlin/ Android frontend (#213) Dec 18, 2018
build.gradle Add Gradle/ Kotlin/ Android frontend (#213) Dec 18, 2018
config.h.in Go back to using WebKit-provided user agent (#173) Nov 20, 2018
gradle.properties Add Gradle/ Kotlin/ Android frontend (#213) Dec 18, 2018
gradlew Add Gradle/ Kotlin/ Android frontend (#213) Dec 18, 2018
gradlew.bat Add Gradle/ Kotlin/ Android frontend (#213) Dec 18, 2018
gresource.xml Implement built-in session extension (#65) Oct 31, 2018
settings.gradle Add Gradle/ Kotlin/ Android frontend (#213) Dec 18, 2018


CircleCI Snap Status Telegram Twitter Donate

Midori a lightweight, fast and free web browser

Midori Screenshot

Midori is a lightweight yet powerful web browser which runs just as well on little embedded computers named for delicious pastries as it does on beefy machines with a core temperature exceeding that of planet earth. And it looks good doing that, too. Oh, and of course it's free software.

Privacy out of the box

  • Adblock filter list support.
  • Private browsing.
  • Manage cookies and scripts.

Productivity features

  • Open a 1000 tabs instantly.
  • Easy web apps creation.
  • Customizable side panels.
  • User scripts and styles a la Greasemonkey.
  • Web developer tools powered by WebKit.

Please report comments, suggestions and bugs to: https://github.com/midori-browser/core/issues

Join the #midori IRC channel on Freenode or the Telegram group!

Installing Midori on Linux

If your distro supports snaps you can install the latest stable version of Midori from the snap store with a single command:

snap install midori

Spoilers: For those more adventurous types out there, trying out the preview of the next version is only the switch of a channel away.

Installing Midori on Android

You can opt-in for the beta release on the Play Store.

Building from source


  • GLib 2.48.0
  • GTK+ 3.12
  • gcr-3 2.32
  • WebKit2GTK+ 2.16.6
  • libsoup 2.48.0
  • sqlite 3.6.19
  • Vala 0.30
  • GCR 2.32
  • Peas

Install dependencies on Ubuntu or Debian based distros:

sudo apt install valac libwebkit2gtk-4.0-dev libsoup-gnome2.4-dev libgcr-3-dev libpeas-dev libsqlite3-dev intltool libxml2-utils

Use CMake to build Midori:

mkdir _build
cd _build
sudo make install

Spoilers: Pass -G Ninja to CMake to use Ninja instead of make (install ninja-build on Ubuntu/ Debian).

Midori can be run without being installed.



Unit tests

You'll want to unit test the code if you're testing a new version or contributed your own changes:

xvfb-run make check

Manual checklist

  • Browser window starts up normally, with optional URL(s) on the command line
  • Tabs have icons, a close button if there's more than one and can be switched
  • Urlbar suggests from typed search or URL, completes from history and highlights key
  • Private data can be cleared
  • Shortcuts window shows most important hotkeys
  • Download button lists on-going and finished downloads
  • javascript:alert("test"), javascript:confirm("test") and javascript:input("test") work
  • Websites can (un)toggle fullscreen mode
  • Shrinking the window moves browser and page actions into the respective menus

Release process

Update CORE_VERSION in CMakeLists.txt to 7.0. Add a section to ChangeLog.

git commit -p -v -m "Release Midori 7.0"
git checkout -B release-7.0
git push origin HEAD
git archive --prefix=midori-v7.0/ -o midori-v7.0.tar.gz -9 HEAD

Propose a PR for the release. Publish the release on https://github.com/midori-browser/core/releases Promote snap on https://snapcraft.io/midori/release to the stable channel


Testing an installed release may reveal crashers or memory corruption which require investigating from a local build and obtaining a stacktrace (backtrace, crash log).

gdb _build/midori

If the problem is a warning, not a crash GLib has a handy feature

env G_MESSAGES_DEBUG=all gdb _build/midori

On Windows you can open the folder where Midori is installed and double-click gdb.exe which opens a command window:

file midori.exe

To verify a regression you might need to revert a particular change:

# Revert only d54c7e45
git revert d54c7e45

Contributing code

Coding style and quality

Midori code should in general have:

  • 4 space indentation, no tabs
  • Between 80 to 120 columns
  • Use // or /* */ style comments
  • Call variables animal and animal_shelter instead of camelCase
  • Keep a space between functions/ keywords and round parentheses
  • Prefer new Gtk.Widget () over using Gtk; new Widget ()
  • Midori and GLib namespaces should be omitted
  • Don't use private specifiers (which is the default)
  • Stick to standard Vala-style curly parentheses on the same line
  • Cuddled } else { and } catch (Error error) {

Working with Git

If you haven't yet, check that GitHub has your SSH key.

Spoilers: You can create an SSH key with Passwords and Keys aka Seahorse or ssh-keygen -t rsa and specify Host github.com with User git in your SSH config. See GitHub docs for further details.

Fork the project on GitHub.

# USERNAME is your GitHub username
git clone git@github.com:USERNAME/core.git

Prepare to pull in updates from upstream:

git remote add upstream https://github.com/midori-browser/core.git

Spoilers: The code used to be hosted at lp:midori and git.xfce.org/apps/midori respectively.

The development master (trunk, tip) is the latest iteration of the next release.

git checkout upstream/master

Pick a name for your feature branch:

git checkout -B myfeature

Remember to keep your branch updated:

git pull -r upstream master

Tell git your name if you haven't yet:

git config user.email "<email@address>"
git config user.name "Real Name"

See what you did so far

git diff

Get an overview of changed and new files:

git status -u

Add new files, move/ rename or delete:

git add FILENAME

Commit all current changes, selected interactively:

git commit -p -v

If you have one or more related bug reports you should mention them in the commit message. Once these commits are merged the bug will automatically be closed and the commit log shows clickable links to the reports:

Fixes: #123

If you've made several commits:

git log

In the case you committed something wrong or want to amend it:

git reset --soft HEAD^

If you end up with unrelated debugging code or other patches in the current changes it's sometimes handy to temporarily clean up. This may be seen as git's version of bzr shelve:

git stash save
git commit -p -v
git stash apply

As a general rule of thumb, git COMMAND --help gives you an explanation of any command and git --help -a lists all available commands.

Push your branch and propose it for merging into master.

git push origin HEAD

This will automatically request a review from other developers who can then comment on it and provide feedback.


  • freeze: a period of bug fixes eg. 4/2 cycle means 4 weeks of features and 2 weeks of stabilization
  • PR: pull request, a branch proposed for review, analogous to MR (merge request) with Bazaar
  • ninja: an internal tab, usually empty label, used for taking screenshots
  • fortress: user of an ancient release like 0.4.3 as found on Raspberry Pie, Debian, Ubuntu
  • katze, sokoke, tabby: legacy API names and coincidentally cat breeds

Midori for Android

The easiest way to build, develop and test Midori on Android is with Android Studio (snap).

When working with the command line, setting JAVA_HOME is paramount:

export JAVA_HOME=/snap/android-studio/current/android-studio/jre/

Afterwards you can run commands like so:

./gradlew lint test

Midori for Windows

For Linux developers


Midori for Windows is compiled on a Linux host and MinGW stack. For the current build Fedora 18 packages are used. Packages needed are listed below:

yum install gcc vala intltool

For a native build

yum install libsoup-devel webkitgtk3-devel sqlite-devel

For cross-compilation

yum install mingw{32,64}-webkitgtk3 mingw{32,64}-glib-networking mingw{32,64}-gdb mingw{32,64}-gstreamer-plugins-good

Packages needed when assembling the archive

yum install faenza-icon-theme p7zip mingw32-nsis greybird-gtk3-theme

Installing those should get you the packages needed to successfully build and develop Midori for Win32.


For 32-bit builds:

mkdir _mingw32
cd _mingw32
mingw32-cmake .. -DCMAKE_INSTALL_PREFIX=/usr/i686-w64-mingw32/sys-root/mingw -DCMAKE_VERBOSE_MAKEFILE=0
sudo make install

For 64-bit builds:

mkdir _mingw64
cd _mingw64
mingw64-cmake .. -DCMAKE_INSTALL_PREFIX=/usr/x86_64-w64-mingw32/sys-root/mingw -DCMAKE_VERBOSE_MAKEFILE=0
sudo make install

Once built and tested you can assemble the Midori archive with a helper script

32-bit build:

env MINGW_PREFIX="/usr/i686-w64-mingw32/sys-root/mingw" ./win32/makedist/makedist.midori

64-bit build:

env MINGW_PREFIX="/usr/x86_64-w64-mingw32/sys-root/mingw/" ./win32/makedist/makedist.midori x64


For testing your changes a real system is recommended because WebKitGTK+ doesn't work properly under Wine. Mounting your MinGW directories as a network drive or shared folder in a Windows VM is a good option.

For Windows developers


Spoilers: 32-bit versions are known to be more stable at the time of this writing.

Using download-mingw-rpm.py

  • Launch cmd.exe and navigate to the folder where the script was saved.
  • Make sure that Python can access 7z.exe.
  • Run the following command and wait for it to extract the packages into your current directory:
  • c:\Python33\python.exe download-mingw-rpm.py -u http://ftp.wsisiz.edu.pl/pub/linux/fedora/linux/updates/18/i386/ --deps mingw32-webkitgtk mingw32-glib-networking mingw32-gdb mingw32-gstreamer-plugins-good

See Fedora 18 packages.

Spoilers: Use msys.bat to launch a shell