{"id":13582010,"url":"https://github.com/swordlordcodingcrew/fennel","last_synced_at":"2025-04-12T07:53:07.645Z","repository":{"id":42993347,"uuid":"139996201","full_name":"swordlordcodingcrew/fennel","owner":"swordlordcodingcrew","description":"Fennel is your lightweight CalDAV and CardDAV server to run-your-own","archived":false,"fork":false,"pushed_at":"2021-11-20T15:50:05.000Z","size":281,"stargazers_count":127,"open_issues_count":2,"forks_count":10,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-04-12T07:53:02.505Z","etag":null,"topics":["caldav-server","calendar","carddav-server","golang"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/swordlordcodingcrew.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-07-06T14:39:55.000Z","updated_at":"2025-04-01T03:10:06.000Z","dependencies_parsed_at":"2022-09-15T15:00:30.812Z","dependency_job_id":null,"html_url":"https://github.com/swordlordcodingcrew/fennel","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swordlordcodingcrew%2Ffennel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swordlordcodingcrew%2Ffennel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swordlordcodingcrew%2Ffennel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swordlordcodingcrew%2Ffennel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/swordlordcodingcrew","download_url":"https://codeload.github.com/swordlordcodingcrew/fennel/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248537034,"owners_count":21120690,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["caldav-server","calendar","carddav-server","golang"],"created_at":"2024-08-01T15:02:22.940Z","updated_at":"2025-04-12T07:53:07.614Z","avatar_url":"https://github.com/swordlordcodingcrew.png","language":"Go","readme":"Fennel\n======\n\n![Fennel](https://raw.github.com/swordlordcodingcrew/fennel/master/fennel_logo.png)\n\n**Fennel** (c) 2014-21 by [SwordLord - the coding crew](http://www.swordlord.com/)\n\n## Introduction ##\n\n**Fennel** is a lightweight CardDAV / CalDAV server. It is written in Go and based on the proof of concept [Fennel.js](https://github.com/LordEidi/fennel.js) (which is written in JavaScript and running on NodeJS).\n\nIf you are looking for a lightweight CalDAV / CardDAV server, **Fennel** might be for you:\n\n- hassle free installation. Drop a binary, start it, that's it.\n- authentication is meant to be pluggable. While we concentrate on CourierAuth and .htaccess, you can add whatever can check a username and a password.\n- authorisation is meant to be pluggable as well.\n- the data storage backend is meant to be pluggable as well. While we start with SQLite3, we do use an ORM. Whatever database can be used with **Gorm** can be used as storage backend for **Fennel**.\n- and after all, **Fennel** is OSS and is written in Go. Whatever you do not like, you are free to replace / rewrite. Just respect the licence and give back.\n\n## Status ##\n\n![Build Status](https://travis-ci.org/swordlordcodingcrew/fennel.svg?branch=master)\n\n**Fennel** is beta software and should be handled as such:\n\n- The CalDAV part is still work in progress.\n- The CardDAV part is still work in progress.\n\n**Fennel** is tested on Calendar on iOS \u003e v10.0 and on OSX Calendar as well as with Mozilla Lightning. If you run\n**Fennel** with another client your mileage may vary.\n\nWhat's missing:\n\n- different clients (we will somewhen test with other clients, but we did not do thoroughly yet)\n- Test cases for everything. We would love to have test cases for as many scenarios and features as possible. It is a pain in the neck to test **Fennel** otherwise. If you wonder how we test, have a look at the testing code in Fennel.js as well as at the [Project Spoon](https://github.com/swordlordcodingcrew/spoon)\n- While **Fennel**'s goal is to have an RBAC based authorisation system, **Fennel** does currently only know global permissions without groups. But we are working on it.\n\n## Installation ##\n\n### From source ###\n\nDependencies: [golang](https://golang.org/dl/), [GNU Make](https://www.gnu.org/software/make/)\n\n```\ngit clone https://github.com/swordlordcodingcrew/fennel\ncd fennel\nmake\n```\nExecutables fenneld and fennelcli are built into the bin/ folder.\n\n### How to set up transport security ###\n\nSince **Fennel** does not bring it's own crypto, you may need to install a TLS server in front of **Fennel**. You can do so\nwith nginx, which is a lightweight http server and proxy.\n\nFirst prepare your /etc/apt/sources.list file (or just install the standard Debian package, your choice):\n\n    deb http://nginx.org/packages/debian/ stretch nginx\n    deb-src http://nginx.org/packages/debian/ stretch nginx\n\nUpdate apt-cache and install nginx to your system.\n\n    sudo update\n    sudo apt-get install nginx\n\nNow configure a proxy configuration so that your instance of nginx will serve / prox the content of / for the\n**Fennel** server. To do so, you will need a configuration along this example:\n\n    server {\n        listen   443;\n        server_name  fennel.yourdomain.tld;\n\n        access_log  /var/www/logs/fennel_access.log combined;\n        error_log  /var/www/logs/fennel_error.log;\n\n        root /var/www/pages/;\n        index  index.html index.htm;\n\n        error_page   500 502 503 504  /50x.html;\n        location = /50x.html {\n            root   /var/www/nginx-default;\n        }\n\n        location / {\n            proxy_pass         http://127.0.0.1:8888;\n            proxy_redirect     off;\n            proxy_set_header   Host             $host;\n            proxy_set_header   X-Real-IP        $remote_addr;\n            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;\n            proxy_buffering    off;\n        }\n\n        ssl  on;\n        ssl_certificate  /etc/nginx/certs/yourdomain.tld.pem;\n        ssl_certificate_key  /etc/nginx/certs/yourdomain.tld.pem;\n        ssl_session_timeout  5m;\n\n        # modern configuration. tweak to your needs.\n        ssl_protocols TLSv1.1 TLSv1.2;\n        ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK';\n        ssl_prefer_server_ciphers on;\n    \n        # HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)\n        add_header Strict-Transport-Security max-age=15768000;\n    }\n\nPlease check this site for updates on what TLS settings currently make sense:\n\n[https://mozilla.github.io/server-side-tls/ssl-config-generator](https://mozilla.github.io/server-side-tls/ssl-config-generator)\n\nNow run or reset your nginx and start your instance of **Fennel**.\n\nThats it, your instance of **Fennel** should run now. All logs are sent to stdout for now. Have a look at */libs/log.js* if\nyou want to change the options.\n\n## Configuration ##\n\nAll parameters which can be configured right now are in the file *fennel.config.js*. There are not much parameters yet, indeed.\nBut **Fennel** is not ready production anyway. And you are welcome to help out in adding parameters and configuration\noptions.\n\n## Contribution ##\n\nIf you happen to know how to write Go, documentation or can help out with something else, drop us a note at *contact at swordlord dot com*. As more helping hands we have, as quicker this server gets up and feature complete.\n\nIf some feature is missing, just remember that this is an Open Source Project. If you need something, think about contributing it yourself, pull requests welcome...\n\n## Dependencies ##\n\nWhen compiling, have a look at the vendor folder. Binaries have no direct Dependency whatsoever. You might want to have your database backend ready though.\n\n## License ##\n\n**Fennel** is published under the GNU Affero General Public Licence version 3. See the LICENCE file for details.\n","funding_links":[],"categories":["Go"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswordlordcodingcrew%2Ffennel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fswordlordcodingcrew%2Ffennel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswordlordcodingcrew%2Ffennel/lists"}