The home dashboard for the screen in your kitchen. Culinola brings your house, your media and your family's day together on one touch display: readings and switches, charts, cameras, radio and TV, news, calendar, shopping list and recipes – arranged the way you want, without writing a line of configuration.
- One screen, everything at a glance. No scrolling, no menus: a grid of tiles that fills the display and scales with it.
- Works with what you have. openHAB, Home Assistant, Homematic, MQTT (Tasmota, Zigbee2MQTT …), FRITZ!Box, IMAP mail, Google Calendar, RSS, go2rtc cameras – each is a plugin, and a tile does not care which system a value comes from.
- Set up in the browser. Drag tiles into place, pick datapoints from a searchable list, add sources and credentials, pair a new display by confirming the code it shows – from your desk or your phone, while the kitchen display keeps running and picks up every change without a restart.
- More than a smart-home panel. Internet radio and live TV, your cameras, the newest e-mails, calls from the FRITZ!Box and an egg timer on the clock are built in – no extra apps, no extra screens.
- Made for touch and for the whole family. Tap the clock for an egg timer, tap a recipe to cook from it, put its ingredients on the shopping list, ask by voice how warm it is outside.
- Yours. Runs on your own hardware, in your own network. The source is open to read and change, and free for private and other noncommercial use.
The kitchen display shows a real installation; calls, e-mails, appointments and reminders in it are made up. The setup pages show the built-in test instance.
Tiles: clock with egg timer and stopwatch · value with status and trend, or as a gauge · switches and covers · charts · presence · weather · sun and moon · camera · radio and TV · news · web page · image · calendar · reminders · calls · e-mail · shopping and to-do lists · recipes · voice.
Sources: openHAB · Home Assistant · Homematic (CCU2, CCU3, RaspberryMatic) · MQTT · FRITZ!Box · IMAP · Google Calendar and Contacts · RSS · Merkio lists · forecast.solar · go2rtc cameras and streams · internet radio · recipes from Markdown files · sun and moon, calculated offline.
And: on-screen messages with sound and camera ("Someone is at the door") · day and night themes · German and English · an HTTP and WebSocket API that the interface itself uses · access protection with a setup password, displays paired by code and tokens for programs.
You need Node.js 22.18 or newer.
npm install
npm run build
npm startOpen http://localhost:8090. Without a configuration of your own, Culinola starts with made-up demo values. Add ?layout=main&edit to the address to open the layout editor, or go straight to ?edit=sources to connect your own systems.
With Docker:
docker build -f docker/Dockerfile -t culinola .
docker run -d -p 8090:8090 -v ./data:/data culinolaEverything of yours – configuration, credentials, recipes – lives in the data folder and never in the repository.
Out of the box Culinola is open: everyone on your network can read, switch and set up. Closing it takes a minute and happens entirely in the browser – the same way on a PC, a NAS or a Raspberry Pi:
- Set a setup password. Open
?edit=settingsand set it under Access protection. From then on, whoever wants to change layouts, sources or settings signs in with it. - Pair your displays. A display without access shows a six-digit code. It appears in the settings under Pair devices: compare the code, choose what the display may do (read only, or also operate), allow it. The display starts by itself – nobody types a token.
- Give programs a token. For something without a screen – a home-automation rule that raises "Someone is at the door" – create an access entry in the settings and send its token as
Authorization: Bearer ….
Forgot the password? The sign-in page can request a setup code. Culinola puts it into its data folder as einrichtungscode.txt (and writes it to its log); with the code you set a new password. So only someone who can reach the files of the installation gets back in. Details are in the handbook.
Culinola itself needs nothing but Node.js. A few features rely on things that are not shipped with it:
| For | You need | Notes |
|---|---|---|
| Cameras and live TV | go2rtc | A separate program. Download it and enter its path in the video source; Culinola then starts it itself. |
| TV stations and other streams that have to be converted | ffmpeg | Used by go2rtc. Only needed for sources the browser cannot play directly. |
| Wake word ("Computer, …") | a Vosk speech model | About 45 MB per language, runs in the browser of the display. Without it you start voice input with a tap. |
| Voice commands and adding recipes from photos, text or web pages | a Claude API key | Entered as a credential of the source. Each request costs a small amount. |
The Docker image already contains go2rtc and ffmpeg. How to set each of these up is described in the handbook.
Voice commands and the recipe import send a sentence, a text or a photo to Anthropic's Claude API. You do not need a subscription for that – a Claude.ai plan is neither required nor does it cover API use. The API is paid for with prepaid credits:
- Create an account at https://platform.claude.com.
- Under Billing, buy credits. The smallest amount is about US$5 at the time of writing; the console shows the current figure. Credits expire one year after purchase.
- Under API keys, create a key. It starts with
sk-ant-and is shown only once. - In Culinola open Sources, choose the source
voiceorrecipes, and enter the key under Credentials → Claude API key. One key serves both.
A spoken sentence costs a fraction of a cent, a recipe a little more; Culinola writes the number of tokens used into its log. Without a key everything else works as usual – the button for adding recipes is not shown, and the voice tile says that voice control is not set up.
Before you expose it: access protection decides who may do what; it does not encrypt. Set a setup password (see Protect it) and put HTTPS in front before reaching Culinola from outside your home network.
Culinola is young. It was built for its author's kitchen display running against openHAB, and every connector is covered by automated tests against stand-ins – but not every plugin has been exercised against every real device, and the setup pages are new. Expect rough edges and please report them.
The interface is available in German and English. Messages produced by the core (rejected input, connection errors) are still German only; translating them is in progress.
- Architecture: how core, plugins and interface fit together
- Handbook: every tile, every plugin, the API and access control
- Testing: what is tested automatically and the manual checklist
- Google account setup
- Contributing and the Contributor License Agreement
- Security
Culinola is source-available under the PolyForm Noncommercial License 1.0.0: you may use, change and share it for any noncommercial purpose – at home, for a club, a school, for trying it out. Commercial use – selling it, bundling it with hardware, offering it as a service or installing it for customers – needs a separate licence; write to mail@christa-web.de. See also NOTICE.
Culinola builds only on permissively licensed dependencies; this is checked on every build.




