一个自主托管、由社区驱动的服务器(BYOS),支持 PHP 的 Laravel 框架中的 Recipe
LaraPaper is a self-hostable implementation of a TRMNL server (BYOS), built with Laravel. It allows you to manage TRMNL-compatible devices, generate screens using native plugins (Screens API, Screenshot, Image Webhook), recipes (170+ from the OSS community catalog, 1000+ from the TRMNL catalog, or your own), or the API, and can also act as a proxy for the native cloud service (Core). With over 330k downloads and 370+ stars, it’s the most popular community-driven BYOS.
This repo is maintained voluntarily by @bnussbau.
Support the development of this package by purchasing a TRMNL device through the referral link: https://trmnl.com/?ref=laravel-trmnl. At checkout, use the code laravel-trmnl to receive a $15 discount on your purchase.
Run everywhere, where Docker is supported: Raspberry Pi, VPS, NAS, Container Cloud Service (Cloud Run, ...).
For production use, generate a new APP_KEY (php artisan key:generate --show) and set the environment variable APP_KEY=. For personal use, you can disable registration (see section Environment Variables).
Docker Compose file located at: docker/prod/docker-compose.yml.
docker ps #find container id of larapaper container
docker cp {{CONTAINER_ID}}:/var/www/html/database/storage/database.sqlite database_backup.sqlite
docker compose pull
docker compose down
docker compose up -d
If you’re using a VPS (e.g., Hetzner) and prefer an alternative to native Docker, you can install Dokploy and deploy LaraPaper using the integrated Template. It’s a quick way to get started without having to manually manage Docker setup.
You can vote for LaraPaper to be included as PikaPods Template here: feedback.pikapods.com
Umbrel is supported through a community store, see.
Laravel Forge, or bare metal PHP server with Nginx or Apache is also supported.
Run the ExampleRecipesSeeder to seed the database with example plugins:
php artisan db:seed --class=ExampleRecipesSeeder
| Environment Variable | Description | Default |
|---|---|---|
TRMNL_PROXY_BASE_URL |
Base URL of the native TRMNL service | https://trmnl.app |
TRMNL_PROXY_REFRESH_MINUTES |
How often should the server fetch new images from native service | 15 |
REGISTRATION_ENABLED |
Allow user registration via Webinterface | 1 |
PASSKEYS_ENABLED |
Enable Passkeys for login (requires HTTPS) | 0 |
SSL_MODE |
SSL Mode, if not using a Reverse Proxy (docs) | off |
FORCE_HTTPS |
If your server handles SSL termination, enforce HTTPS. Alternative: TRUSTED_PROXIES. |
0 |
TRUSTED_PROXIES |
If your server handles SSL termination, allow mixed mode. e.g. "172.0.0.0/8" or * |
null |
PHP_OPCACHE_ENABLE |
Enable PHP Opcache | 0 |
TRMNL_IMAGE_URL_TIMEOUT |
How long TRMNL waits for a response on the display endpoint. (sec) | 30 |
APP_TIMEZONE |
Default timezone, which will be used by the PHP date functions. UTC is recommended. | UTC |
If your environment is local, you can access the server at http://localhost:4567 and login with user / password
[email protected] / [email protected], otherwise register. With environment variable REGISTRATION_ENABLED you can control, if registration is allowed.
✅ This is the easiest way to connect your devices with minimal effort.
If your device firmware is older than 1.4.6, you need to flash a new firmware version to point it to your server.
See this YouTube guide: https://www.youtube.com/watch?v=3xehPW-PCOM
Make sure that your device has a Developer license, you should be able to verify by calling the https://trmnl.app/api/display endpoint.
resources/views/trmnl.blade.phpphp artisan trmnl:screen:generate
You can dynamically update screens by sending a POST request.
/api/screen with the following payloadAuthorization Bearer
{
"markup": "
Hello World
"
}
Contributions are welcome! See CONTRIBUTING.md for details.
暂无开放 Issues,或尚未同步最近议题。