Simple and Scalable

Rather than myriad 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 min
    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 min
    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 sec
    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.