Source Code Setup


  1. Quick Start
  2. Detailed Instructions
    1. Prerequisites: Git and Git LFS
    2. Working with git
  3. Repository Layout
    1. Tags and Branches
  4. A Bit of History

Announcement 07/16/2018: The ICU source code repository has been migrated from Subversion to Git, and is now hosted on GitHub.

Quick Start

You can view ICU source code online:

Make sure you have git lfs installed. See the following section.

For read-only usage, create a local clone:

git clone


git clone

This will check out a new directory icu which contains icu4c and icu4j subdirectories as detailed below.

For ICU development, do not work directly with the Unicode ICU main branch! See the git for ICU Developers page instead.

For cloning from your own fork, replace unicode-org with your GitHub user name.

For fetching just the files for an ICU release tag, you can use a shallow clone:

git clone --depth=1 --branch=release-63-1

If you already have a clone of the ICU repository, you can add and extract release files like this:

mkdir /tmp/extracted-icu  # or wherever you want to extract to
cd  local-git-repo-top-level-dir
git fetch upstream
git tag --list "*63*"  # List tags relevant to ICU 63, e.g., release-63-1
git archive release-63-1 | tar -x -C /tmp/extracted-icu

Detailed Instructions

Prerequisites: Git and Git LFS

(Note: you do not need a GitHub account to download the ICU source code. However, you might want such an account to be able to contribute to ICU.)

Working with git

There are many resources available to help you work with git, here are a few:

Want to contribute back to ICU? See How to contribute.

Repository Layout

The top level contains the latest information about the repository’s layout. Currently:

  • icu4c/ ICU for C/C++
  • icu4j/ ICU for Java
  • tools/ Tools
  • vendor/ Vendor dependencies (copied here for reference)

Tags and Branches

The repository is tagged with different release versions of ICU.

For example, release-55-1 is the tag which corresponds to version 55.1 of ICU (for both C and J).

Branches in the main fork are used for maintenance branches of ICU.

For example, maint/maint-61 is a branch containing the latest maintenance work on the 61.x line of ICU.

There are other tags and branches which may be cleaned up/deleted at any time.

  • branches/tags/releases from before the icu4c and icu4j trees were merged - items prefixed with “icu-“ are for icu4c, and “icu4j-“ for icu4j, etc.
  • old personal work branches (with a person’s username, such as andy/6910)
  • long running shared feature branches (In general, feature work is done on personal forks of the repository.)

See also the Tips (for developers) subpage.

A Bit of History

ICU was first open sourced in 1999 using CVS and Jitterbug. The source files were imported from other source control systems internal to IBM at that time.

The ICU project moved to using a Subversion source code repository and a Trac bug database on Nov 30, 2006. These replace our original CVS source code repository and Jitterbug bug data base. All history from the older systems has been migrated into the new, so there should normally be no need to refer back to Jitterbug or CVS.

In July 2018, the ICU project moved again, this time from svn to git on GitHub, and from trac to Atlassian Cloud Jira. Many tools and much effort was involved in migration and testing. There is a detailed blog post on the topic (not an official ICU-TC document!) for those interested in the technical details of this move.

Table of contents