@prefix sioc: <http://rdfs.org/sioc/ns#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix content: <http://purl.org/rss/1.0/modules/content/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

<https://lhero.org/?post_type=lh-portfolio&#038;p=150090>
  a sioc:Post ;
  dc:title "LH DAV" ;
  dcterms:identifier 150090 ;
  dc:modified "2026-10-27T03:14:46Z"^^xsd:dateTime ;
  dc:created "2026-10-13T11:43:31Z"^^xsd:dateTime ;
  sioc:link <https://lhero.org/portfolio/lh-dav/> ;
  sioc:has_creator <https://lhero.org/author/1/#account> ;
  sioc:has_container <https://lhero.org/#posts> ;
  content:encoded """<ul class="lh_portfolio-meta"><li><strong>Type:</strong> Plugin</li></ul>
<p class="wp-block-paragraph">LH DAV lets people sync contacts and calendars from a WordPress site to their phone, tablet or desktop app, using the open CardDAV and CalDAV standards that iOS, macOS, Android (through DAVx5), Thunderbird and most other apps already speak.</p>



<p class="wp-block-paragraph">It is infrastructure: it stores no contacts or events itself. Other plugins provide the data by implementing a small PHP interface, and LH DAV handles everything else: sign-in, discovery, the DAV protocol, change tracking for fast sync, and a one-tap Apple setup profile.</p>



<h2 class="wp-block-heading">Features</h2>



<ul class="wp-block-list">
<li>Runs entirely inside WordPress, served through the REST API at <code>/wp-json/lh-dav/v1/</code>, so it works on ordinary hosting and shows up in REST request logs (as a short summary, never the cards or events themselves).</li>



<li>Sign-in with WordPress application passwords only, so each device can be revoked on its own and a browser session can never be used to change data.</li>



<li>Each person sees only their own principal and collections; providers decide which collections that is and whether they can be written to.</li>



<li>Fast incremental sync (RFC 6578 sync-collection) from one network-wide change log, plus ETags and If-Match/If-None-Match so edits from two devices never silently overwrite each other.</li>



<li>Automatic discovery: <code>/.well-known/carddav</code> and <code>/.well-known/caldav</code> point apps at the server, so people only need the site address.</li>



<li>A downloadable Apple setup profile, linked from each member&#8217;s profile screen, that adds both contacts and calendar accounts in one step.</li>



<li>Works on Multisite: network-activated, with each site serving its own collections.</li>
</ul>



<h2 class="wp-block-heading">Getting started</h2>



<p class="wp-block-paragraph">Activate LH DAV together with a provider plugin, such as LH Contacts for address books or LH Calendars for calendars. Without a provider it serves empty homes and leaves the well-known addresses alone. Members then create an application password on their profile and either install the setup profile or add a CardDAV/CalDAV account with the site address.</p>


<ul class="lh_portfolio-doc-toc"><li><a href="https://lhero.org/portfolio/lh-dav/architecture/">Architecture</a></li><li><a href="https://lhero.org/portfolio/lh-dav/provider-api/">Provider API</a></li><li><a href="https://lhero.org/portfolio/lh-dav/hooks-and-filters/">Hooks and Filters</a></li><li><a href="https://lhero.org/portfolio/lh-dav/changelog/">Changelog</a></li></ul>"""^^rdf:XMLLiteral ;
  sioc:content """Type: Plugin
LH DAV lets people sync contacts and calendars from a WordPress site to their phone, tablet or desktop app, using the open CardDAV and CalDAV standards that iOS, macOS, Android (through DAVx5), Thunderbird and most other apps already speak.



It is infrastructure: it stores no contacts or events itself. Other plugins provide the data by implementing a small PHP interface, and LH DAV handles everything else: sign-in, discovery, the DAV protocol, change tracking for fast sync, and a one-tap Apple setup profile.



Features




Runs entirely inside WordPress, served through the REST API at /wp-json/lh-dav/v1/, so it works on ordinary hosting and shows up in REST request logs (as a short summary, never the cards or events themselves).



Sign-in with WordPress application passwords only, so each device can be revoked on its own and a browser session can never be used to change data.



Each person sees only their own principal and collections; providers decide which collections that is and whether they can be written to.



Fast incremental sync (RFC 6578 sync-collection) from one network-wide change log, plus ETags and If-Match/If-None-Match so edits from two devices never silently overwrite each other.



Automatic discovery: /.well-known/carddav and /.well-known/caldav point apps at the server, so people only need the site address.



A downloadable Apple setup profile, linked from each member&#8217;s profile screen, that adds both contacts and calendar accounts in one step.



Works on Multisite: network-activated, with each site serving its own collections.




Getting started



Activate LH DAV together with a provider plugin, such as LH Contacts for address books or LH Calendars for calendars. Without a provider it serves empty homes and leaves the well-known addresses alone. Members then create an application password on their profile and either install the setup profile or add a CardDAV/CalDAV account with the site address.


ArchitectureProvider APIHooks and FiltersChangelog""" ;
  sioc:topic <https://lhero.org/lh_portfolio-type/plugin/>, <https://lhero.org/?taxonomy=lh_portfolio-tags&term=contacts>, <https://lhero.org/?taxonomy=lh_portfolio-tags&term=carddav>, <https://lhero.org/?taxonomy=lh_portfolio-tags&term=calendar>, <https://lhero.org/?taxonomy=lh_portfolio-tags&term=caldav>, <https://lhero.org/?taxonomy=lh_portfolio-tags&term=sync>, <https://lhero.org/?taxonomy=author&term=cap-1> .

<https://lhero.org/author/1/#account> rdfs:seeAlso <https://lhero.org/author/1/?feed=lhrdf&format=turtle> .
<https://lhero.org/lh_portfolio-type/plugin/> rdfs:seeAlso <https://lhero.org/lh_portfolio-type/plugin/?feed=lhrdf&format=turtle> .
<https://lhero.org/?taxonomy=lh_portfolio-tags&term=contacts> rdfs:seeAlso <https://lhero.org/?taxonomy=lh_portfolio-tags&term=contacts&feed=lhrdf&format=turtle> .
<https://lhero.org/?taxonomy=lh_portfolio-tags&term=carddav> rdfs:seeAlso <https://lhero.org/?taxonomy=lh_portfolio-tags&term=carddav&feed=lhrdf&format=turtle> .
<https://lhero.org/?taxonomy=lh_portfolio-tags&term=calendar> rdfs:seeAlso <https://lhero.org/?taxonomy=lh_portfolio-tags&term=calendar&feed=lhrdf&format=turtle> .
<https://lhero.org/?taxonomy=lh_portfolio-tags&term=caldav> rdfs:seeAlso <https://lhero.org/?taxonomy=lh_portfolio-tags&term=caldav&feed=lhrdf&format=turtle> .
<https://lhero.org/?taxonomy=lh_portfolio-tags&term=sync> rdfs:seeAlso <https://lhero.org/?taxonomy=lh_portfolio-tags&term=sync&feed=lhrdf&format=turtle> .
<https://lhero.org/?taxonomy=author&term=cap-1> rdfs:seeAlso <https://lhero.org/?taxonomy=author&term=cap-1&feed=lhrdf&format=turtle> .
