Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Defeat censorship. Share access to the open internet with people around the world through your social network.
IDL Python Java Shell JavaScript C Other
branch: devel
Failed to load latest commit information.
Lantern Network Setup Changes from @fffw to fix issues with system proxy config on OSX closes
LanternBrowser #1151 Back to using WebKit/Chrome as default and only using system de…
bin script for checking dependency versions
certs @myleshorton re: #473 fixed spelling of littleproxy cert filename, fi…
cloudflare-certs Cleaned up flashlight config api calls, added support for toggling st…
copyPolicy alternate approach for policy copying
etc test cleanup; travis integration
firefox/ Bumped version more #209
install chown launchd plist file to current user
lantern-common @ 3ae90dc #2196 Updated QOS settings to work with new flashlight, fixed race co…
lantern-ui @ 46df5b5 Updated lantern-ui to point at master
lib/linux Fresh repository dir
src log level
.gitattributes github for windows-foisted changes
.gitignore Updated gitignore
.gitmodules merge and dependency fixes
.lantern-configurl.txt Lots of fixes to revert S3ConfigFetcher to the previous version to av…
.s3config #1487 Fixed .s3config to have correct settings for default fallback
.travis.yml Removed potentially unnecessary clean file name in link to code format was wrong
COPYING rename COPYING to LICENSE, create symlink back
LICENSE Added copyright year and org Unit test fixes Removed godoc badge
afisk_oxvariant.xml Added tweaked formatter
allInstallers.bash script for building all installers at once
bsh-2.0b4.jar Added shell for exploration
buildInstallerWrappers.bash This should be an amend to 3b1711c, but I already pushed that.
buildLocalInstallers.bash Added script for quickly building local installers for all platforms
clientTest.bash Removing common and server projects for now to simplify repo under a …
commitbinary.bash release process changes to lantern-binaries repo doesn't get too huge
configureNetworkServices Changes from @fffw to fix issues with system proxy config on OSX closes Changed to newest instead of latest #1328
copypt.bash update bash script to copy right pt directory Fixed naming closes #1685
debInstall.bash Fixed naming closes #1685
debInstall32Bit.bash fixed resources filtering by just using a separate directory for plug…
debInstall64Bit.bash fixed resources filtering by just using a separate directory for plug…
debug.bash dont assume $SHELL is bash
deployBinaries.bash switched to using s3cmd closes #1813
eclipse-format.xml add eclipse formatting file and reference it in CONTRIBUTING guidelines
fallback.bash #1256 fallback.bash
get.bash #1038 Amending author
give.bash #1038 Amending author
google-equifax-root.crt Added equifax root cert and removed all others closes #262
install.bash Made release scripts work with new pluggable transports layout
installerBuild.bash apparently git pull doesnt support the tags flag anymore
launch #1273 Last remnants of SWT removed
osxInstall.bash fixed resources filtering by just using a separate directory for plug… Parse version from POM for installer naming purposes.
pginstrument-0.1.0-shadow.jar #1109 Added ProGuard instrumentation
pom.xml Merged from master
prepareToTest.bash Travis fixes
proguard.bash Initial ProGuard pass and cleanups to dependencies
proxy_all.pac Re-configured pac files to use different files for each state #417
proxy_off.pac More tweaks for proxy config
quickDebug.bash don't assume $SHELL is bash
quickRun.bash Allow prepending javaArgs via an environment variable.
release.bash typo
releaseBeta.bash fixed bug with args
releaseExisting.bash upload version separately
run.bash allow running run.bash from outside its directory
setNetUidOsx.bash Fixed env
shell Added shell for exploration
signToolExample.txt Just so we don't forget
start.bash #1038 Merged start.bash Travis fixes
testkeystore.jks #1256 Added test keystore fix secrets base dir path to be a sibling of lantern, add some comments
uploadghasset.rb new script for uploading binaries to github
uploadversion.bash minor fix
version.js beta version token fix
winAwsExample.txt Paths are weird on win, so we have to hard code
winInstall.bash fixed resources filtering by just using a separate directory for plug…

Lantern Bitdeli Badge Travis CI Status Coverage Status

Lantern allows you to give or get access to the internet through other users around the world connected by a trust-based peer-to-peer network.

Lantern is open source, written primarily in Java and runs on modern OS X, Windows, and Ubuntu Linux desktop systems.


Setting up a development environment

  1. Ensure you have the requirements installed:

    • git (brew install git, port install git-core, etc.)
    • Java 1.6+
      • On Windows, make sure to use a 32-bit Java, even if you're running 64-bit Windows.
      • On Ubuntu, make sure you use Oracle's JDK and not OpenJDK.
    • You can install Maven manually or with your package manager: brew install maven, port install maven3, etc.
  2. Clone the repository and its submodules with git clone --recursive git:// or fork first and use your fork's url to be able to commit changes.

    If you have already checked out Lantern but did not pass '--recursive', you can clone the submodules with git submodule update --init.

  3. Run the build-and-run script from within the lantern directory: cd lantern; ./run.bash

That script will fetch the required libraries, build, and run Lantern. There's also a quickRun.bash script that will just run Lantern once it's already been built.

Lantern binds its HTTP API to a random port and prefix for security. The port and prefix are chosen at first run. It can be found in .lantern/serverAddress

Lantern's UI is developed as a separate project and included inside the lantern repo as a git submodule. Please see for more.

If you want to run Lantern in headless mode, pass --disable-ui. This is useful for running Lantern on a server without an X environment.

If you're running Linux, note that Lantern's UI currently targets the Ubuntu 12.04+ desktop environment (i.e. Unity). Other environments may work as well but are currently untested.

If you want to load the Lantern source code in Eclipse, you can do the following:

  1. Build the Eclipse project and classpath files: mvn eclipse:eclipse

  2. Load them into Eclipse using File->Import->General->Existing Projects into Workspace Select the directory where you ran mvn eclipse:eclipse, and you should see the "lantern" project loaded into Eclipse.

  3. Define the M2_REPO classpath variable, e.g.:

    • Open Eclipse->Preferences->Java->Build Path->Classpath Variables
    • Press "New..."
    • Enter M2_REPO as the name and $HOME/.m2 as the path, where $HOME is your home directory.

That should get Lantern building successfully in Eclipse.

Running With fteproxy (and other pluggable transports)

  1. In your lantern clone, create a symlink from pt to your platform's fteproxy

For example:

ln -s install/osx/pt pt

  1. As a quick smoke test to make sure things are working in your environment, run, then try to curl something:

curl -x localhost:8080

  1. Run your server with the following flags: --pt type=FTE

  2. Configure your client's s3 configuration with a section like the following:

"pt": {
    "type": "FTE"

Building Installers

As of this writing, the Lantern installers are built using install4j. If you want to build installers using the (deb|osx|win)Install*.bash scripts, you need to obtain a license. Note that this is not required in order to build and run Lantern from source.

The scripts that build the installers expect the described files in the corresponding paths relative to the lantern base folder:

# Windows install4j license certificate.
# OS X install4j license certificate.

In addition, install4jc expects the following variables defined in the environment:


If you're building installers on Ubuntu, don't use the system's JRE as installed via apt; it has a bunch of symlinks which get broken. Use a stand-alone JRE package

Continuous Integration with Travis CI

Continuous builds are run on Travis CI. These builds use the .travis.yml configuration. The lantern unit tests require a in ~/.lantern to be populated with a valid refresh token and access token for a Google account. An encrypted version of is checked into and copied to the right place by prepareToTest.bash.

When you run lantern normally and log in to Google, Lantern generates a You can use this to generate a new encrypted, see here for information.

Further Reading

You can also access JavaDocs and automatically generated reports on the Lantern codebase at the following:


The Lantern team is very grateful for the support from a number of software vendors. We would particularly like to acknowledge the great support from YourKit, who provides us with their excellent profiler. Check it out at!

Something went wrong with that request. Please try again.