All-in-One Installation
This guide walks you through installing both the server (backend + admin) and the display app on a single device — typically a Raspberry Pi with a touchscreen.
This is the simplest setup: one device that acts as both the brain and the face of your smart panel.
Prerequisites
- A Raspberry Pi (3B+, 4, or Zero 2W) with Raspberry Pi OS Lite installed
- A connected display (HDMI or DSI touchscreen)
- Network connectivity (Wi-Fi or Ethernet)
- SSH access or a local terminal
Haven’t set up your Raspberry Pi yet? Start with the Preparation guide first.
Quick Install
The fastest way to get everything running is to use both install scripts in sequence.
Connect to Your Pi
ssh pi@smart-panel.localDefault password: raspberry. If .local domains don’t resolve, use the Pi’s IP address instead.
Update Your System
sudo apt update && sudo apt upgrade -yInstall the Server
curl -fsSL https://get.smart-panel.fastybird.com | sudo bashThis installs Node.js (if needed), the Smart Panel backend and admin interface, and configures a systemd service that starts automatically on boot.
The server will be accessible at http://smart-panel.local:3000 once installed.
Install the Display App
curl -fsSL https://get.smart-panel.fastybird.com/panel | sudo bash \
-s -- --backend http://localhost:3000 --kioskThis installs flutter-pi (if needed), downloads the pre-built display app, and sets up a systemd service that launches the panel UI on boot.
The --backend http://localhost:3000 flag tells the display app to connect to the server running
on the same device. The --kiosk flag starts the display automatically on boot.
That’s it! Both services are now running and will start automatically on boot. Skip to Post-Installation below.
Manual Installation
If you prefer full control, follow these detailed steps.
Connect and Update
ssh pi@smart-panel.local
sudo apt update && sudo apt upgrade -yInstall Node.js
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt install -y nodejsInstall Git
sudo apt install git -yInstall flutter-pi
Install dependencies
sudo apt install cmake libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev \
libdrm-dev libgbm-dev ttf-mscorefonts-installer fontconfig libsystemd-dev \
libinput-dev libudev-dev libxkbcommon-dev -yUpdate system fonts:
sudo fc-cacheBuild flutter-pi
sudo mkdir -p /opt/flutter-pi
sudo chown -R ${USER}: /opt/flutter-pi
git clone --depth 1 https://github.com/ardera/flutter-pi.git /opt/flutter-pi
cd /opt/flutter-pi
mkdir build && cd build
cmake ..
make -j$(nproc)
sudo make installConfigure GPU access
sudo usermod -a -G render piIf you prefer not to grant GPU access to the pi user, run the display service as root instead.
Enable KMS/DRM
sudo nano /boot/firmware/config.txtMake sure this line is present and not commented out:
dtoverlay=vc4-kms-v3dRemove or comment out dtoverlay=vc4-fkms-v3d if present.
Reboot:
sudo rebootInstall InfluxDB (Optional)
For time-series data like temperature history and energy usage:
wget -qO- https://repos.influxdata.com/influxdata-archive_compat.key | sudo tee /etc/apt/trusted.gpg.d/influxdata.asc
echo "deb https://repos.influxdata.com/debian bookworm stable" | sudo tee /etc/apt/sources.list.d/influxdata.list
sudo apt update
sudo apt install influxdb=1.8.10-1 -y
sudo systemctl enable influxdb
sudo systemctl start influxdbMake sure you install InfluxDB v1.8. InfluxDB 2.x is not compatible.
Allow Reboot & Power Off
To let the backend control system power:
sudo visudoAdd this line at the bottom:
pi ALL=(ALL) NOPASSWD: /sbin/reboot, /sbin/poweroffDownload the Smart Panel Release
sudo mkdir -p /opt/smart-panel
sudo chown -R ${USER}:${USER} /opt/smart-panel
sudo mkdir -p /var/smart-panel
sudo chown -R ${USER}:${USER} /var/smart-panel
cd /opt/smart-panelcurl --http1.1 -L -C - -o smart-panel.tar.gz \
https://github.com/FastyBird/smart-panel/releases/latest/download/smart-panel.tar.gz
tar -xzf smart-panel.tar.gz -C .
rm smart-panel.tar.gzOn a Raspberry Pi Zero 2W, downloads may be slow or interrupted. The -C - flag tells curl
to resume where it left off — just re-run the same command if it drops.
Make sure you have at least 300 MB of free space before downloading.
Optional: Verify download integrity
curl -LO https://github.com/FastyBird/smart-panel/releases/latest/download/smart-panel.sha256
sha256sum -c smart-panel.sha256Run database migrations
npm run migration:runSet Up Backend Service
sudo nano /etc/systemd/system/smart-panel-backend.service[Unit]
Description=Smart Panel Backend & Admin Service
After=network.target
[Service]
User=pi
WorkingDirectory=/opt/smart-panel
ExecStart=npm start
Restart=always
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.targetsudo systemctl enable smart-panel-backend
sudo systemctl start smart-panel-backendThe admin interface is bundled with the backend — no separate setup needed.
Set Up Display Service
sudo nano /etc/systemd/system/smart-panel-display.service[Unit]
Description=Smart Panel Display App
After=network.target
Requires=smart-panel-backend.service
[Service]
User=pi
WorkingDirectory=/opt/smart-panel/display
ExecStart=/usr/local/bin/flutter-pi --release .
Restart=always
[Install]
WantedBy=multi-user.targetWant to rotate the display? Add the -r flag to ExecStart:
ExecStart=/usr/local/bin/flutter-pi -r 270 --release .Valid values: 0, 90, 180, 270
sudo systemctl enable smart-panel-display
sudo systemctl start smart-panel-displayPost-Installation
Verify Both Services
sudo systemctl status smart-panel-backend
sudo systemctl status smart-panel-displayBoth should show active (running).
Access the Admin Interface
From another device on the same network, open a browser:
http://smart-panel.local:3000View Logs
# Backend logs
sudo journalctl -u smart-panel-backend -f
# Display logs
sudo journalctl -u smart-panel-display -fService Management
# Restart everything
sudo systemctl restart smart-panel-backend
sudo systemctl restart smart-panel-display
# Stop the display only
sudo systemctl stop smart-panel-display
# Check status
sudo systemctl status smart-panel-backend smart-panel-displayTroubleshooting
Display shows a black screen
- Check that KMS/DRM is enabled in
/boot/firmware/config.txt - Verify the
piuser is in therendergroup:groups pi - Check display logs:
sudo journalctl -u smart-panel-display -n 50
Backend won’t start
- Check Node.js version:
node --version(must be 20+) - Verify the database exists:
ls /var/smart-panel/ - Check backend logs:
sudo journalctl -u smart-panel-backend -n 50
Display can’t connect to backend
When running on the same device, the display should connect to http://localhost:3000. If using the
manual installation, verify the backend is running before starting the display service (the Requires=
directive in the service file handles this).
What’s Next?
Your Smart Panel is fully running — backend, admin interface, and display.
Head over to Onboarding to create your admin account, pair your devices, and start customizing your dashboard.