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).
To install LocalBoards, follow these steps:
git clone https://github.com/florian-strasser/LocalBoards
cd LocalBoardsnpm installCreate 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.
# 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
# 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=password1234npx nuxt buildMove the builded app from /.output to your favorite hosting solution, that is able to run a nodejs app.
node ./server/index.mjsPrebuilt images are published on Docker Hub:
https://hub.docker.com/r/localboards/localboards
The image contains only the LocalBoards app. You still need a reachable MySQL database — the required tables are created automatically on first start, so an empty database is enough. Configure the app through the same environment variables described in Configure Environment Variables.
docker pull localboards/localboards:latestPut your settings in a .env file (see the variables above) and start the
container. The app listens on port 3000, and uploaded files are stored in
/app/public/uploads, so mount a volume there to persist them:
docker run -d \
--name localboards \
--env-file .env \
-p 3000:3000 \
-v localboards_uploads:/app/public/uploads \
localboards/localboards:latestThen open http://localhost:3000 (or whatever you set as NUXT_BOARDS_URL).
For a self-contained setup including MySQL, use a compose.yaml like this:
services:
app:
image: localboards/localboards:latest
restart: unless-stopped
ports:
- "3000:3000"
environment:
NUXT_APP_NAME: LocalBoards
NUXT_BOARDS_URL: http://localhost:3000
NUXT_LANGUAGE: en
NUXT_PUBLIC_PRIVACY_URL: https://www.yourdomain.com/privacy-policy/
NUXT_MYSQL_HOST: db
NUXT_MYSQL_USER: localboards
NUXT_MYSQL_PASSWORD: change-me
NUXT_MYSQL_DATABASE: localboards
NUXT_EMAIL_HOST: mail.yourserver.de
NUXT_EMAIL_PORT: "465"
NUXT_EMAIL_SECURE: "true"
NUXT_EMAIL_USER: contact@yourdomain.com
NUXT_EMAIL_PASS: password1234
volumes:
- uploads:/app/public/uploads
depends_on:
- db
db:
image: mysql:8
restart: unless-stopped
environment:
MYSQL_DATABASE: localboards
MYSQL_USER: localboards
MYSQL_PASSWORD: change-me
MYSQL_ROOT_PASSWORD: change-me-too
volumes:
- db_data:/var/lib/mysql
volumes:
uploads:
db_data:Start it with:
docker compose up -dBuilding and publishing the image is documented under Build the Docker image and push to Docker Hub.
LocalBoards is maintained as a solo project without any monetary incentives. Contributions are highly encouraged! If you encounter any issues or have suggestions for improvements, feel free to open a pull request. There is currently no formal contribution guide, but your help is always welcome.
To run the application locally for development:
npm run devOr, if you have a custom .env.local file:
npx nuxt dev --dotenv .env.localTo build the application locally:
npx nuxt build --dotenv .env.localImportant: build for the architecture of your target server.
docker buildonly builds for your machine's architecture. If you build on an Apple Silicon Mac (arm64) and deploy to anamd64/x86_64server, the container fails to start withexec ... : Exec format error. Usedocker buildxto build for the server's platform.
One-time setup of a builder that supports cross-platform builds:
docker buildx create --use --name multiarchBuild for the server architecture (amd64 for most hosts) and push straight to
Docker Hub:
docker buildx build --platform linux/amd64 -t localboards/localboards:latest --push .The
Dockerfilepins its build stage to your machine's native architecture (--platform=$BUILDPLATFORM) and only the final runtime image targets the platform you request. This keeps the build toolchain (esbuild/Vite) running natively instead of under QEMU emulation, which otherwise crashes with random segfaults when cross-building. Nuxt's.outputis portable JavaScript, so the resulting image still runs on the target architecture.
To produce an image that also runs natively on Apple Silicon, build for both architectures:
docker buildx build --platform linux/amd64,linux/arm64 -t localboards/localboards:latest --push .Use
--push(not--load): multi-platform images can't be loaded into the local image store and are pushed to the registry directly.
Verify that the published image contains the expected architecture(s):
docker buildx imagetools inspect localboards/localboards:latest