Simple and Scalable

Rather than a myriad of checkboxes, pipelines are defined as a single declarative config file, composing together just three core concepts.

As your project grows, your pipeline will grow with it, and remain understandable.

Streamlined UI

Concourse's user interface helps you find out what you need to know about your builds as quickly as possible.

For a live example, see Concourse's own pipeline.

Dependable Results

Concourse controls the inputs to your pipeline so that the results are repeatable every time.

Rather than sharing state, every task runs in its own container, controlling its own dependencies.

Local changes can be tested with the Fly CLI, allowing you to see if they would succeed or fail in your pipeline ahead of time.


Interacting with the world is a crucial part of any pipeline. Concourse expresses these interactions as Resources, allowing you to delete your boring plumbing code and focus on your interesting code instead.

Concourse works out-of-the-box with Git repositories, S3 buckets, and other common external services. Custom resource types allow you to extend your pipeline with support for anything else.

Getting Started Takes 5 Minutes

  • 3

    Vagrant Up

    vagrant init concourse/lite  # creates ./Vagrantfile
    vagrant up                   # downloads the box and spins up the VM
    The web server will be running at
  • 1

    Save hello.yml with this example pipeline:

    - name: hello-world
      - task: say-hello
          platform: linux
            type: docker-image
            source: {repository: ubuntu}
            path: echo
            args: ["Hello, world!"]
  • 1

    Push to Concourse

    fly -t lite login -c
    fly -t lite set-pipeline -p hello-world -c hello.yml
    If you refresh the main page, you should now see the world's tiniest pipeline!

Come fly the friendly CI!

Get Started
To chit chat, ask for help, or offer your own, join us in Slack.