Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

CTFNote logo



CTFNote is a collaborative tool aiming to help CTF teams to organise their work.

Screenshot of the task list


Before starting, make sure to fill in the information in the .env file.

Pre-build images

Building CTFNote requires at least 3 GB of RAM. If you want to host CTFNote on a server with less than 3 GB of RAM, you can use the pre-build images from the GitHub Container Registry.

Download docker-compose.yml and docker-compose.prebuild.yml for example through cloning the repository and run:

$ docker compose -f docker-compose.prebuild.yml up -d --pull always

Self-build images

You can build and start CTFNote with docker compose. The default configuration makes it super easy to start a new instance!

$ docker compose up -d

Accessing the instance

The instance will spawn a web server on port The first account created will have administrative privileges.

Please use nginx to make it available over HTTPS.

Enable HTTPS with nginx

It is assumed that you want to serve CTFNote over HTTPS.

An example configuration for nginx on the host looks like this:

server {

        root /var/www/html;
        index index.html;

        location / {
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection $http_connection;
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                add_header Pragma "no-cache";

Edit the docker-compose.yml file to make sure CTFNote only listens on localhost:

-      - 8080:80
+      -

Edit the .env file to instruct the pad to use TLS:

 # Secure: we're using HTTPS

 # Domain: you need to define this if you wish to enable any options

After deploying this configuration, run certbot to make it available over HTTPS. See this article for more information.


If you already have an instance of CTFNote in a previous version and wish to upgrade, you should follow the guide at


When other players register on your CTFNote instance, they will not be able to see CTF or tasks. This is because CTFNote uses different roles to restrict CTF

You can manage other players' roles in the Users tab of the Admin panel.

Additionally, you can generate a secret that lets users create an account with a different privilege in the Registration with password menu in the Admin panel.

Screenshot of the Registration with password menu


Guest is the default role. This role is meant to be used for guests and friends helping sporadically on CTF.

You can add a guest to a CTF by ticking their badge in the Guests tab on a specific CTF.

Screenshot of the guest menu


Friend is a role between guest and member which allows the player to automatically view old CTFs but not active and upcoming CTFs. They are also not allowed to invite any new players to a CTF. You can use this role to grant guests access to your old CTFs for them to learn from without granting access to each old CTF individually.


Member is a role that represents a team member. A certain level of trust is given to these users: they can see every CTF, future, current and past. They can also invite guests to CTF.


Manager is a role that represents a team captain. They can create, import, modify and delete CTF.

They can import CTF directly from CTFtime.

Screenshot of the Import CTF feature


Admin is a role with every privileges. They have access to the Admin panel that lets them delete accounts, change permissions, reset passwords, create one-time secrets and, most importantly, change the theme colours.

Screenshot of the theme menu


The configuration can be changed in the .env file. This file contains environment variables for the containers.

The value of every variables are explained in this file.


List of the CTF

Screenshot of the CTF page


Screenshot of the CTF calendar

Information of a single CTF

Screenshot of the CTF info

Task list for a CTF

Screenshot of the task list

Shared notepad for a task

Screenshot of pad


A contribution guide is available here: