Setup Guide

SENN Install and Initial Setup

Steps to run SENN on your own PC and create your first ticket. Data is stored only on your PC.
The first start takes a few minutes (downloading images, depending on your connection); the rest takes about 5 minutes.

SENN is in Public Beta. It is usable, but bugs and missing features remain, and behavior may change between updates. Back up your data before updating: a database upgraded to a newer version cannot be used with an older version again. Older releases stay available as tags (e.g. v0.1.1, the last release before the access-control redesign).

Prerequisites

  • Docker
    Install Docker Desktop, OrbStack, or similar, and make sure it's running.
  • git
    git --version should work in your terminal.
  • Port 8151
    Make sure no other app is using this port.

What's a terminal? On a Mac, open "Terminal". On Windows, open "WSL2" (e.g. Ubuntu). Paste the commands below there and press Enter to run them.

  1. 1

    Start SENN

    Paste these five lines into your terminal, in order (pasting them all at once is fine too).

    git clone https://github.com/macplanning-labs/senn.git
    cd senn
    cp .env.example .env
    sed -i.bak "s|^DB_PASSWORD=.*|DB_PASSWORD=$(openssl rand -hex 24)|; s|^JWT_SECRET_KEY=.*|JWT_SECRET_KEY=$(openssl rand -base64 48 | tr -d '\n')|" .env && rm .env.bak
    docker compose up
    • Line 3 creates the config file (.env).
    • Line 4 fills in the database password and the login signing key with random values automatically (you don't need to decide these yourself).
    • Line 5 starts everything. The first run downloads the pre-built images, which takes a few minutes (depending on your connection).

    This does not write anything to your system settings.

    When it's done, the terminal shows a line like this and stays in a waiting state.

    senn-oss-backend  | … server listening on 0.0.0.0:8151

    Don't close this terminal. Closing it stops SENN (see how to stop it properly).

    If sed or openssl aren't available (e.g. plain Windows)

    After line 3, open .env in a text editor and set these two values, then save:

    • DB_PASSWORD= — a string of letters and digits only (24+ characters, for example)
    • JWT_SECRET_KEY= — a string of 32+ characters

    Then run line 5, docker compose up. If either value is left empty, it stops with an error message before starting.

    Building from source

    Run docker compose up --build instead of line 5 to build the images from the source code instead of downloading pre-built ones. The first build takes about 10–15 minutes (depending on your CPU and network). This also works when downloading images is slow or not possible.

  2. 2

    Open in a browser

    Once it's started, type this into your browser's address bar.

    http://localhost:8151

    If you see a login screen like this, the install succeeded.

    SENN login screen, with username and password fields, a Log in button, and a sign-up link below
    Login screen (you don't have an account yet)
  3. 3

    Sign up

    Click Sign up at the bottom of the login screen. On the screen that appears, fill in these three fields and click Sign up.

    • Username — any name you like (must not already be taken)
    • Email — a working email address (e.g. you@example.com)
    • Password — 8+ characters
    Sign-up screen with username, email, and password filled in
    Sign-up screen (example values). All three are required

    Only the first person (who set up SENN) can sign up freely. Everyone after that joins by invitation (Step 7).

    Your email is used for things like ticket-due-date notifications, if you set up email sending. Everything you enter is stored only in the database on your own PC.

    Once signed up, you're logged in automatically and land on the main screen.

    Main screen right after signing up. A Get started with SENN panel prompts you to create a team first
    Main screen, with a "Get started with SENN" panel
  4. 4

    Create a team

    In SENN, you need a team before you can create tickets (tasks, issues, QA items, etc.). Click the + next to "Teams" in the left sidebar.

    Enter a team name (e.g. Sample Team) and click Create. Team prefix is the letters that go at the start of ticket keys (e.g. SMP → SMP-000001). If left blank, it is made from the letters and digits in the team name (TEAM if the name has none). Icon, color, visibility (Public / Private), description, and notification webhook are optional and can be changed later.

    Create team dialog with Sample Team as the name and SMP as the team prefix
    Create team — only the team name is required

    Once created, the team appears in the sidebar, and you can choose your next step, such as "Create a ticket".

    Screen after creating a team. The sidebar shows Sample Team, with Create a ticket and Create a project buttons
    Your team is ready
  5. 5

    Create a ticket

    Click Create a ticket and type a title. The Team field already has the team you just created selected. Click Create Ticket.

    Ticket creation dialog (top part), with the title 'My first ticket' entered
    Create ticket (top part) — only the title is required

    Scroll down and you'll find the Team field and the Create Ticket button.

    Ticket creation dialog (bottom part). The Team field already has Sample Team selected, with a Create Ticket button
    Create ticket (bottom part) — the team is already selected

    Open Tickets in the sidebar to see the ticket you created in the list.

    Ticket list showing SMP-000001, My first ticket
    Your first ticket (SMP-000001) is created

    That's it — you're set up. From here, you can also use team members, projects, boards, and Gantt charts.

  6. 6

    Log out and back in

    Before relying on this for real work, let's confirm you can log out and log back in.

    Click your username at the bottom left, then click Log out in the menu that appears.

    Menu opened from the username at the bottom left, with Settings and Log out options
    Username (bottom left) → Log out

    Back on the login screen, enter the username and password you signed up with, and click Log in. If the main screen appears, you're all set.

    Login screen with the registered username and password filled in
    Login screen (example values)

    If you make a mistake, the screen tells you (the example below is an intentionally wrong password). Check upper/lower case and that you are not typing full-width characters. Note that you cannot simply sign up again with a different username: from the second person on, accounts are created by invitation.

    Login screen showing an 'Invalid username or password' error after an incorrect password
    What a wrong password looks like
  7. 7

    Invite teammates

    From the second person on, accounts are created by invitation. If someone else tries the sign-up screen, SENN refuses and asks them to get an invitation from a team admin.

    1. Open the team's Settings → Members.
    2. Under Invite, enter the person's email address.
    3. Choose Full Member. The default is Guest (can only view this team), so check this.
    4. Click Send invitation.

    If email is not configured (the default), SENN shows a link instead (“Share this link with the person (valid once)”). Send it to the person yourself, e.g. over chat. The link works once and expires after 7 days.

    The person opens the link, chooses a username and password, and clicks Create account to join the team.

    Letting people sign up without an invitation

    Add one of these to .env and restart SENN.

    • SENN_INTERNAL_EMAIL_DOMAINS=example.com — people with these email domains can sign up themselves after verifying their address by email. Configure email (EMAIL_*) first. Without it, the verification link is shown on the sign-up screen, so anyone could claim an address in that domain.
    • SENN_REGISTRATION_MODE=open — anyone who can reach SENN can sign up. Use this only on a private network.

Stop, restart, uninstall

Stop SENN

  1. Log out of SENN and close the browser.
  2. In the terminal you started it in, press Ctrl + C once and wait for it to stop.
    Pressing it twice force-kills it, which can show "Error while Killing".
  3. To stop the containers cleanly, run this (your data is kept):
docker compose down

Adding -v (as in docker compose down -v) deletes all your data. Don't add it for normal use.

Start it again

In your terminal, go to the senn folder and run this. It starts right away because the images are already on your machine.

cd senn
docker compose up

Once you see "listening on 0.0.0.0:8151" and it's waiting, open http://localhost:8151 in your browser.

Uninstall

All registered users, teams, and tickets are deleted and cannot be recovered. Make sure you don't need any of it before running this.

cd senn
docker compose down -v
cd ..
rm -rf senn

The first part removes the containers and data (volumes); the last line removes the senn folder. You can also remove the containers and volumes (senn-oss_senn_pgdata, senn-oss_senn_media) from your Docker app (Docker Desktop or OrbStack).

Troubleshooting

Startup shows JWT_SECRET_KEY is empty or DB_PASSWORD is empty

Your config file (.env) is missing a password or key. Run line 4 of Step 1 (the sed line), then run docker compose up again.

The browser says it can't connect to the server

It may still be starting, or it stopped partway. Check the status with:

docker compose ps

If db, backend, and web are all Up, wait a few dozen seconds after startup and reload the page. Otherwise, check the error with:

docker compose logs backend
It says the port is already in use ("port is already allocated")

Something else is using port 8151. Quit that app, then start SENN again.

It says "docker: command not found" or can't connect to Docker

Docker (Docker Desktop or OrbStack) isn't installed, or isn't running. Start it, wait until it shows "Running" in the menu bar, then try again.

I want to start completely over

This deletes all registered data and starts fresh. This cannot be undone.

docker compose down -v
docker compose up

If none of this helps, please let us know via GitHub Issues.