Getting started
LocalBoards is an open-source (MIT License), self-hosted Kanban board system. It allows users to create boards, invite collaborators, and manage Kanban cards. It also includes admin features for user management. All data is stored in your own database, with no reliance on external services.
We support real-time multiplayer updates. When you edit a card, area, or rename it, the changes are instantly reflected for all users viewing the board. Comments on cards are also updated in real-time across all browsers. This is powered by an internal Socket.IO integration.
LocalBoards is currently available in the following languages: English (EN), German (DE), French (FR), Spanish (ES), Italian (IT), Dutch (NL), and Polish (PL).
Install
To install LocalBoards, follow these steps:
Clone the Repository
git clone https://github.com/florian-strasser/LocalBoards
cd LocalBoards
Install Dependencies
npm install
Configure Environment Variables
Create a .env file (and optionally a .env.local file for local development) with the following settings. Adjust the values to match your database and email configuration. Additionally you can define the used language with NUXT_LANGUAGE and one of these properties: en, de, fr, es, it, nl, pl
# App Name
NUXT_APP_NAME=LocalBoards
NUXT_BOARDS_URL=http://localhost:3000
NUXT_LANGUAGE=en
NUXT_PUBLIC_PRIVACY_URL=https://www.yourdomain.com/privacy-policy/
# DB
NUXT_MYSQL_HOST=localhost
NUXT_MYSQL_USER=root
NUXT_MYSQL_PASSWORD=root1234
NUXT_MYSQL_DATABASE=root
# Set NUXT_MYSQL_SSL=true if your database requires a TLS connection
# (common for managed/external MySQL). Optionally set
# NUXT_MYSQL_SSL_REJECT_UNAUTHORIZED=false if its certificate can't be
# verified against a public CA.
NUXT_MYSQL_SSL=false
# Email Configuration
NUXT_EMAIL_HOST=mail.yourserver.de
NUXT_EMAIL_PORT=465
NUXT_EMAIL_SECURE=true
NUXT_EMAIL_USER=contact@yourdomain.com
NUXT_EMAIL_PASS=password1234
Build the Application
npx nuxt build
Move the builded app from /.output to your favorite hosting solution, that is able to run a nodejs app.
Run the Application
node ./server/index.mjs
Run with Docker
LocalBoards ships with a Dockerfile and is also published as a prebuilt image
on Docker Hub. The image contains only the app — you still need a reachable
MySQL database. The required tables are created automatically on first
start, so an empty database is enough.
Using the prebuilt image (Docker Hub)
The image is available at hub.docker.com/r/localboards/localboards.
Put your settings in a .env file (see Configure Environment Variables) and start the container. It listens on
port 3000, and uploaded files are stored in /app/public/uploads, so mount a
volume there to keep them across updates:
docker pull localboards/localboards:latest
docker run -d \
--name localboards \
--env-file .env \
-p 3000:3000 \
-v localboards_uploads:/app/public/uploads \
localboards/localboards:latest
For a self-contained setup including MySQL, a Docker Compose example is provided in the project README.
Building the image yourself
You can build the image from the Dockerfile in the repository. Because the
build toolchain runs on your machine's architecture while the final image can
target another, use docker buildx and pick the platform of your target
server (linux/amd64 for most hosts) — otherwise the container fails to start
with an Exec format error:
# one-time: a builder that supports cross-platform builds
docker buildx create --use --name multiarch
# build for the server architecture and push to your registry
docker buildx build --platform linux/amd64 -t <your-registry>/localboards:latest --push .
The build stage is pinned to your machine's native architecture, so the heavy build runs natively (no slow/unstable emulation) while the runtime image targets the platform you requested.
How configuration is applied
LocalBoards reads its configuration from environment variables at runtime —
you never need to rebuild the image to change settings. Provide them either as
real environment variables (docker run --env-file, Compose environment:, or
your host panel's env settings) or as a .env file mounted at /app/.env
(-v /path/to/.env:/app/.env:ro). Real environment variables take precedence
over the mounted file.