Current development repositories

Main development repositories (GitHub)

After OpenVPN 2.3-alpha1 several major changes were introduced in OpenVPN project structure, e.g. splitting several large chunks of code away from the main development tree into their own subprojects under the OpenVPN organization in GitHub (adapted from here):

  • openvpn: a standard open source project, autotools-based build system and like any other project it's buildsystem only builds itself.
  • openvpn-gui: a graphical frontend for OpenVPN running on Windows
  • openvpn-build: a separate project to build openvpn in various of configurations. This project is divided into the following components:
    • generic: a generic build using cross compiler, included the complete dependencies.
    • msvc: a MSVC build using Microsoft specific msbuild system. (NOTE: not actively maintained)
    • windows-nsis: the Windows installer generator that uses the generic component to build using mingw cross compiler, then package the output using NSIS.
  • tap-windows: the Windows TAP driver (NDIS 5 version), which is also useful outside OpenVPN
  • tap-windows6: the Windows TAP driver (NDIS 6 version), which is also useful outside OpenVPN
  • easy-rsa: scripts for generating SSL certificates for use with OpenVPN (or for other purposes)
  • openvpn-windows-test: Powershells scripts for automating testing of OpenVPN on Windows.

Mirrors of most of these GitHub repositories are available in

Branches and tags in openvpn.git

The branches found in the openvpn.git repository are:

master            -- The main development branch.  * All new patches should be based on this branch *
release/2.1       -- Everything related to the OpenVPN version 2.1 releases
release/2.2       -- Everything related to the OpenVPN version 2.2 releases
release/2.3       -- Everything related to the OpenVPN version 2.3 releases
release/2.4       -- Everything related to the OpenVPN version 2.4 releases

Release branches do not have any active development and only bug fixes are typically applied to these branches after the release. A new release branch is created for each major release (2.x). All bug fixes should be developed against the master branch, and where it is decided to include such fixes in a minor release (2.1.x, 2.2.x, etc), it will be cherry-picked from the master branch and into the suitable release branches.

All major and minor releases are also tagged, and tags can be inspected by using the following git commands:

$ git tag -l               # Lists all tags
$ git tag -v <tag name>    # Verifies a signed tag
$ git show <tag name>      # Shows the tag message and the commit the tag points at

For details about the development process look here.

Obsolete repositories


This repository is not used very much, although openvpn-testing.git "master" is kept in sync with openvpn.git "master". There are several branches in the openvpn-testing git tree, each of which tracks the different patches/contributions separately. The branch structure is:

master            -- This should be identical to the openvpn.git master branch
svn-branch/BETA21 -- This should be identical to James' former SVN BETA21 branch (former svn-BETA21). This branch is inactive.
svn-branch/2.1    -- This is a git copy of James' 2.1 SVN branch, where James does his main work.  This gets merged into master.
release/2.1       -- This contains only the source relevant for the 2.1 releases. (former released-2.1)
release/2.2       -- This contains only the source relevant for the 2.2 releases. (former beta2.2)
obsolete/*        -- Obsolete branches.
{featureX}        -- Contains only patches for feature X
{featureY}        -- Contains only patches for feature Y
{featureZ}        -- Contains only patches for feature Z
frp               -- Features which are going through the feature removal process (FRP).
experimental      -- The master branch merged with other experimental feature branches.  Only for test purpose and not development.

Developers being granted a feature branch must ensure that their branch is regularly rebased against the master branch. The same applies to maintainers of external development git trees who wants to see their work getting accepted too. The developers "owning" a feature branch is responsible for all development in that branch.

The branches gathered under obsolete/* are misc branches which is no longer in use. As some of them might have a historical value, they are just put aside. This may happen to branches which have been merged into master and are now developed on the master branch instead. Eventually they will be deleted when their historical purpose is no longer of any value.

The experimental branch is a collection of all feature branches in development and the master branch. This branch is regularly rebased against the master branch. This branch may also be completely rebuilt from time to time. Consider this branch as a view-and-test-only branch. No development must ever happen directly on the experimental branch.

To fetch the latest openvpn-testing tree, use

git clone git://

You will here get a openvpn-testing directory. When entering this directory, you will get the 'master' branch by default. To checkout the experimental branch, use

git checkout -b experimental origin/experimental

To see all available branches, use

git branch -a

Use the code in the experimental branch from this git tree if you want the "latest and greatest" features and you're willing to accept that the code is experimental and most likely unstable.

James' SVN repository

James Yonan used to host his own SVN repository at, but it was taken offline in late 2013 / early 2014 and replaced with James' own openvpn.git repo on GitHub?. Remnants of the SVN repo are available in openvpn-testing.git on

Old CVS repository

For the historians among us there's the old CVS tree, which has been made available as an inactive git tree. This tree can be browsed here or downloaded locally:

git clone git://

Note that no new development happens in this tree.

Last modified 7 years ago Last modified on 02/07/17 13:48:13