SkillAgentSearch skills...

Davis

🗓 A modern, simple, feature-packed, fully translatable admin interface for sabre/dav based on Symfony 7 and Bootstrap

Install / Use

/learn @tchapi/Davis
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

Davis

[![Build Status][ci_badge]][ci_link] Publish Docker image [![Latest release][release_badge]][release_link] License Platform PHP Version [![Sponsor me][sponsor_badge]][sponsor_link]

A modern, simple, feature-packed, fully translatable DAV server, admin interface and frontend based on sabre/dav, built with Symfony 7 and Bootstrap 5, initially inspired by Baïkal (see dependencies table below for more detail)

Web admin dashboard

Provides user edition, calendar creation and sharing, and address book creation. The interface is simple and straightforward, responsive, and provides a light and a dark mode.

Supports Basic authentication, as well as IMAP and LDAP (via external providers).

DAV Server

The underlying server implementation supports (non-exhaustive list) CalDAV, CardDAV, WebDAV, calendar sharing, scheduling, mail notifications, and server-side subscriptions (depending on the capabilities of the client).

Additional features ✨

  • Subscriptions (to be added via the client, such as the macOS calendar, for instance)
  • Public calendars, available to anyone with the link
  • Automatic birthday calendar, updated on the fly when birthdates change in your contacts

Deployment

Easily containerisable (Dockerfile and sample docker-compose configuration file provided).

NixOS package and module available.

Comes with already built Docker images in two flavours: standalone (with included Caddy reverse proxy) or barebone.


✨ Created and maintained (with the help of the community) by @tchapi. ✨

Dashboard page User creation page Sharing page

| Dark / Light mode | Useful information at hand | |--------------------|----------------------------| | Color mode| Setup information|

🔩 Requirements

  • PHP > 8.2 (with pdo_mysql [or pdo_pgsql, pdo_sqlite], gd and intl extensions), compatible up to PHP 8.5 (See dependencies table below)
  • A compatible database layer, such as MySQL or MariaDB (recommended), PostgreSQL (not extensively tested yet) or SQLite (not extensively tested yet)
  • Composer > 2 (The last release compatible with Composer 1 is v1.6.2)
  • The imap and ldap PHP extensions if you want to use either authentication methods (these are not enabled / compiled by default except in the Docker image)

Dependencies

| Release | Status | PHP version | |--------------------|----------------------------|--------------------| | main (edge) | development branch | PHP 8.2+ | | v5.x | stable | PHP 8.2+ | | v4.x | security fixes only | PHP 8.0 → 8.3 | | v3.x | :warning: unmaintained | PHP 7.3 → 8.2 |

🧰 Installation

  1. Clone this repository

  2. Retrieve the dependencies:

    a. If you plan to run Davis locally, for development purposes

    composer install
    

    b. If you plan to run Davis on production

    composer install --no-dev
    

    And set APP_ENV=prod in your .env.local file (see below)

  3. At least put the correct credentials to your database (driver and url) in your .env.local file so you can easily create the necessary tables.

  4. Run the migrations to create all the necessary tables:

    bin/console doctrine:migrations:migrate
    

Davis can also be used with a pre-existing MySQL database (for instance, one previously managed by Baïkal). See the paragraph "Migrating from Baikal" for more info.

[!NOTE]

The tables are not exactly equivalent to those of Baïkal, and allow for a bit more room in columns for instance (among other things)

Configuration

Create your own .env.local file to change the necessary variables, if you plan on using symfony/dotenv.

[!NOTE]

If your installation is behind a web server like Apache or Nginx, you can setup the env vars directly in your Apache or Nginx configuration (see below). Skip this part in this case.

[!CAUTION]

In a production environnement, the APP_ENV variable MUST be set to prod to prevent leaking sensitive data.

a. The database driver and url (you should already have it configured since you created the database previously)

DATABASE_DRIVER=mysql # or postgresql, or sqlite
DATABASE_URL=mysql://db_user:db_pass@host:3306/db_name?serverVersion=10.9.3-MariaDB&charset=utf8mb4

b. The admin password for the backend

ADMIN_LOGIN=admin
ADMIN_PASSWORD=test

[!NOTE]

You can bypass auth entirely if you use a third party authorization provider such as Authelia. In that case, set the ADMIN_AUTH_BYPASS env var to true (case-sensitive, this is actually the string true, not a boolean) to allow full access to the dashboard. This does not change the behaviour of the DAV server.

c. The auth Realm and method for HTTP auth

AUTH_REALM=SabreDAV
AUTH_METHOD=Basic # can be "Basic", "IMAP" or "LDAP"

See the following paragraph for more information if you choose either IMAP or LDAP.

d. The global flags to enable CalDAV, CardDAV and WebDAV. You can also disable the option to have calendars public

CALDAV_ENABLED=true
CARDDAV_ENABLED=true
WEBDAV_ENABLED=false

PUBLIC_CALENDARS_ENABLED=true

[!NOTE]

By default, PUBLIC_CALENDARS_ENABLED is true. That doesn't mean that all calendars are public by default — it just means that you have an option, upon calendar creation, to set the calendar public (but it's not public by default).

e. Mailer configuration

It includes:

  • the mailer uri (MAILER_DSN)
  • The email address that your invites are going to be sent from
MAILER_DSN=smtp://user:pass@smtp.example.com:port
INVITE_FROM_ADDRESS=no-reply@example.org

[!WARNING] If the username, password or host contain any character considered special in a URI (such as : / ? # [ ] @ ! $ & ' ( ) * + , ; =), you MUST encode them. See here for more details.

f. The reminder offset for all birthdays

You must specify a relative duration, as specified in the RFC 5545 spec

BIRTHDAY_REMINDER_OFFSET=PT9H

If you don't want a reminder for birthday events, set it to the false value (lowercase):

BIRTHDAY_REMINDER_OFFSET=false

[!NOTE]

By default, if the env var is not set or empty, we use PT9H (9am on the date of the birthday).

g. The paths for the WebDAV installation

[!TIP]

I recommend that you use absolute directories so you know exactly where your files reside.

WEBDAV_TMP_DIR=/webdav/tmp
WEBDAV_PUBLIC_DIR=/webdav/public
WEBDAV_HOMES_DIR=

[!NOTE]

In a docker setup, I recommend setting WEBDAV_TMP_DIR to /tmp.

[!NOTE]

By default, home directories are disabled totally (the env var is set to an empty string). If needed, it is recommended to use a folder that is NOT a child of the public dir, such as /webdav/homes for instance, so that users cannot access other users' homes.

h. The log file path

You can use an absolute file path here, and you can use Symfony's %kernel.logs_dir% and %kernel.environment% placeholders if needed (as in the default value). Setting it to /dev/null will disable logging altogether.

LOG_FILE_PATH="%kernel.logs_dir%/%kernel.environment%.log"

i. The timezone you want for the app

This must comply with the official list

APP_TIMEZONE=Australia/Lord_Howe

Set a void value like so:

APP_TIMEZONE=

in your environment file if you wish to use the actual default timezone of the server, and not enforcing it.

j. Trusting forwarded headers

If you're behind one or several proxies, the TLS termination might be upstream and the application might not be aware of the HTTPS context. In order for urls to be generated with the correct scheme, you should indicate that you trust the chain of proxies until the TLS termination one. You can use the Symfony mechanism for that (see documentation for possible values):

SYMFONY_TRUSTED_PROXIES=127.0.0.1,REMOTE_ADDR

Overriding the dotenv (.env) path

You can override the expected location of the environment files (.env, .env.local, etc) by setting the ENV_DIR variable.

The value should be to a folder containing the env files. This value must be specified in the actual environment and not in an .env file as it is read and evaluated before the env files are read.

For instance, you can use it to call bin/console with a specific doten

View on GitHub
GitHub Stars688
CategoryDevelopment
Updated22h ago
Forks39

Languages

PHP

Security Score

100/100

Audited on Apr 3, 2026

No findings