selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

GitHub
kcal logo

Self-host kcal

v0.9.0

Personal food nutrition journal tracking calories and macros

BetaOpen SourceMPL-2.0
Updated9 hours ago
LanguagePHP
Setup difficultyModerate
MobileResponsive
Stars
355
RAM
2GB
Port
9000 (PHP-FPM)
Requires
MySQL/MariaDB/PostgreSQL
Docker
kcalapp/kcal
Install with Docker Compose
Mobile view of kcal food nutrition journalDesktop view of kcal food nutrition journalFoods editing and viewing screenRecipes editing and viewing screenJournal entries screen showing daily trackingGoals configuration screenMeals configuration screen

What is kcal?

kcal is a self-hosted personal nutrition journal for logging foods, recipes, and daily intake. It lets you track calories and macronutrients (fat, carbs, protein) plus cholesterol and sodium, using US volume units and gram weights. Foods and recipes are shared across all users on the instance, while journal entries, goals, and meals stay private per user. You can set multiple daily calorie/macro targets with weekday defaults and per-day overrides, and organize intake across up to eight custom meals. The recipe view is kept clean for easy reading while cooking. Deployment options include Docker Compose (recommended), a manual Ubuntu guide, Laravel Sail, and VS Code Dev Containers. The stack requires PHP 8.4, a MySQL/MariaDB/PostgreSQL database, and optionally Redis, Elasticsearch or Algolia for search, plus AWS S3 for image storage. No external food APIs are used, keeping data local.

Should you self-host kcal?

kcal scores 47/100 on selfhost.directory (how scoring works) and ranks #10 of 18 in Recipe Management. It has 355 GitHub stars.

It shipped 1 stable release in the past year. The latest, v0.9.0, came out on 24 October 2026.

Setup is moderate: expect some configuration beyond a single command. An official Docker image is available. It is MPL-2.0-licensed and written mostly in PHP.

Its closest alternative on selfhost.directory is Mealie (75/100, 13 709 stars). It scores higher overall, so compare the two before you pick. See kcal vs Mealie side by side.

Features

  • Food journal
  • Food tracking
  • Goal Setting
  • Meal Planning
  • Media storage options
  • Multiple search backends
  • Privacy-focused
  • Recipe Management
  • Tagging and search

kcal README

How to install kcal

Install kcal with Docker Compose

Docker, Docker Compose
Environment variables
APP_KEY, APP_URL, APP_TIMEZONE, DB_*, REDIS_*, SCOUT_DRIVER, ELASTIC_*, ALGOLIA_*, MEDIA_DISK, AWS_*

git clone https://github.com/kcal-app/kcal-docker.git cd kcal-docker cp .env.example .env docker-compose run app php artisan key:generate --show

Add APP_KEY to .env

docker-compose up -d docker-compose exec app php artisan optimize docker-compose exec app php artisan migrate docker-compose exec app php artisan elastic:migrate docker-compose exec app php artisan user:add --admin

Recommended deployment method per documentation

How to configure kcal

  • ALGOLIA_APP_ID
  • ALGOLIA_SECRET
  • APP_DEBUGfalse
  • APP_ENVlocal
  • APP_KEY
  • APP_NAMEkcal
  • APP_PORT8080
  • APP_SERVICEapp
  • APP_TIMEZONEUTC
  • APP_URLhttp://127.0.0.1
  • AWS_ACCESS_KEY_ID
  • AWS_BUCKET
  • AWS_DEFAULT_REGION
  • AWS_SECRET_ACCESS_KEY
  • BROADCAST_DRIVERredis
  • CACHE_DRIVERredis
  • DB_CONNECTIONmysql
  • DB_DATABASEkcal
  • DB_HOSTdb
  • DB_PASSWORD
  • DB_PORT3306
  • DB_USERNAMEkcal
  • ELASTIC_HOSTelasticsearch:9200
  • ELASTIC_PORT9200
  • LOG_CHANNELstack
  • LOG_LEVELdebug
  • MEDIA_DISKmedia
  • QUEUE_CONNECTIONredis
  • QUEUE_CONVERSIONS_BY_DEFAULTfalse
  • REDIS_HOSTredis
  • REDIS_PORT6379
  • SAIL_XDEBUG_MODE
  • SCOUT_DRIVER
  • SESSION_DRIVERredis
  • SESSION_LIFETIME120
  • SESSION_SECURE_COOKIE

kcal releases & version history

More in Recipe Management

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…