Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: BewCloud is a simpler alternative to Nextcloud written in TypeScript (bewcloud.com)
62 points by BrunoBernardino on March 16, 2024 | hide | past | favorite | 45 comments
For the last month or so I've been working on bewCloud, and today I'm making its source code public and open!

Right now, the Dashboard (URLs + freeform notes), News (RSS/Atom/JSON feeds), and Contacts (CardDav) are working.

If you have any suggestions, comments, or recommendations, I'd love to hear it.

Thank you for your attention and kindness. I really appreciate it!




Any reason this is all one giant project? One of Nextcloud's IMHO fatal mistakes is it tries to be everything. So people have to choose between say, a better todo app, or the one that's integrated with their monolith of choice.

Meanwhile, if you approach each module as it's own project, but with shared code where sensible, and open standards driving your integrations, people including you, can select the parts that best suit them while mixing in software from others where appropriate.


This is why I abandoned it. And I am happier after I gave up on it.

You want me to have how many services running just so I can have a calDav/cardDav server? And sometimes you'll just stop working because of some unrelated issue of something I'm not using? Headache upon headache when you depend on it, but only for one thing.

Radicale people. Forgive me for doubting you. I have never used Radicale but I certainly do now just to point people away from nextCloud if all they want is a calDav/cardDav server.


Good point! I did consider using Radicale or other CardDav/CalDav services for that, but ultimately I also wanted to build this.

Who knows, maybe in a few months or years I'll just throw in the towel and install Radicale and FileBrowser and just rely on `rsync` or Syncthing for the desktop/mobile sync.


Thanks for the great question! I think the main issue for me is I don't want to install and maintain multiple different services (contacts, calendar, tasks, files, notes, photos, though arguably those could all "fit" in 2 services -- which is why I have two Nextcloud instances), and having a single service/server with those becomes easier to maintain.

They all use open standards (CardDav, CalDav, WebDav), and that's why I can use DavX5 on Android and Gnome on Linux and Apple's default accounts/apps too.

bewCloud has and will have a simple UI for each of those just because I think there's value to having an easy web access that's not sync-dependent.

I hope that makes sense!


Why not have both? A single server/service AND easy-to-install modules providing atomic functionality? Just make the install/uninstall process easy (like just downloading and optionally unpacking a modules archive into installed_modules Dir)?


Yes! Since these will be easy and used _as needed_, the plan is to have those be set by this `.env` var: https://github.com/bewcloud/bewcloud/blob/2d70a3817de1fd6108... thus not requiring download/install/uninstall, but not bloat as they won't be used if they're not enabled.


With the exception of a handful of core modules isn’t that exactly what Nextcloud does?


Yes! Their "problem" is that they have to support a lot of legacy and extensibility, thus even just the "barebones" Nextcloud uses a lot of resources (CPU/Memory/IO).


This looks cool. I don’t know what direction you’re going to take this, but my big challenge with Nextcloud is that the file syncing gets very unreliable in short order. I honestly would love to see someone do something like this with Syncthing as a file management backend. It is honestly the best tool of its kind, and it is extremely fast and reliable.


Second this.

Setting up syncthing was incredibly easy and it is a beast. Has no problems syncing all my huge video media files

All it did is beg the question for me: why has nobody created a file sync UI where you can essentially use syncthing like you might Google Drive but with a slick effortless interface that non-technical folks wouldn't mind using?


On the contrary, I didn't find Syncthing setup very easy, as I don't want to be dependent on external resources when doing a sync over LAN and thus I had to setup a coordinator myself and it's a bit confusing with all these long tokens that I needed for some reason.


Thanks for sharing your experience! Is there something else you use right now?


It uses direct udp peer discovery on Lan though?


Thanks! I'm not sure just yet and I still have Calendars/CalDav to work on first, but I've added Syncthing as a potential backend for the desktop client. I also have notes to explore `rclone` or `rsync` since those are very reliable, simple, and slim.


Really cool to see this I hope you're able to continue this work. As others have said, CalDAV / CardDAV are complex standards and getting the nuances right without using some tried/true libraries (sabre-dav) might be a challenge.

Two points:

For just CalDAV / CardDAV there's Radicale, Davical and Baïkal all of which work pretty well and are relatively easy to set up, so this might be a bit of wheel re-invention.

Perhaps you might consider relying on those projects for calendar / contact sync and then add your other pieces (file, photos, etc).

Second point is I think the reason why Nextcloud / Owncloud end up becoming super-slow for file sync is unfortunately the use of WebDAV.

I can't find the thread at the moment but I remember the developers from one of those projects saying that WebDAV itself makes the file-sync super slow and resource heavy.

As a result I think the Owncloud++ or their golang based re-implementation prefers the use of S3-compatible for backend file store.

I'm not saying you should use S3, but if you continue down the path with WebDAV for file-sync you might find it's resource heavy and slow as Nextcloud/Owncloud might be.


Thank you! If I find trouble building a "good enough" CalDav server I'll definitely consider something like Radicale and convert the contacts app to a CardDav client instead.

As for WebDav, that's still a while off, but will also take that in consideration, thank you!


Looking forward to see where this goes. For me, the Files/cloud storage portion of nextcloud is essentially why I _would_ use it.


Thanks! That should happen after Calendar + Tasks/CalDav!


"bew is web in reverse, similar to how deno is node reversed. "

Deno is an anagram of node, not reversed :)

But looks nice, will have a look at it!


Well, it is reversed in a sense, in that it is "no, de" reversed, it's just not reversed character-by-character. I'd agree that's not generally how we used "reversed" for words, but it tracks more generally, you can reverse something without necessarily breaking it down into its smallest possible parts.

For example, that "Pets a dog" reversed could be either "Dog a pets" or "God a step", obviously words are a more natural breakpoint though.

To really try too hard, in Japanese it'd be something like ノデ so it would be reversed character by character as it'd be split like that (not a Japanese speaker, so take with a lot of salt, I imagine it'd actually use another character to sound more like the English pronunciation of node).


In Japanese, it's ノード, which is no-do.


Makes sense, closer pronunciation.


Thank you for the correction, I already updated the text!


This could be great for homelabbers. I have around 40 services I run currently but every time I tried Next/owncloud I just removed it shortly after. Found it lacking speed, or resource consumption that was comparable to... the other 40 services combined etc.

This could perfectly fill that spot. Will be testing soon.


I'd hope so (eventually, right now it's pretty bare)! I do currently have a couple of Nextcloud instances (one optimized for availability and another for storage, each with few and different apps) and each hogs more than all the other services combined (many Deno projects, but also containers like Huginn and Gitea, which aren't "simple" or "small").

My goal is to be able to not have to run any Nextcloud instance, and I'm happy to already have shutdown News and Contacts from the "availability" instance! Calendar won't be as "easy" or quick, but I'm looking at this as a long-term thing anyway, no rush.


My biggest gripe is how often Nextcloud goes into maintenance mode. While this is currently slightly annoying, Nextcloud would quickly be rendered useless to my family would I pass away.

Please keep the upgrade process hands-off.


Thanks for sharing your perspective! I guess updates wouldn't happen anymore if that were to happen to me too, but I do have everything documented and upgrades on our services are just a matter of `docker compose stop && docker compose up -d`, which might be trivial for someone with some tech knowledge, but not family.

What is your solution right now?


I upgrade the _container_ using what you said (actually Podman auto upgrade, but it's basically the same thing). This subsequently sends Nextcloud into maintenance mode 9/10 times - I guess could have another/init container which pessimistically runs `oci`.


Thanks! That makes sense and I'll keep that in mind if/when upgrades become a thing, here!


What libraries does your Contacts app use under the hood? I'm asking because pretty much every contacts app I've tried had countless bugs – either in CardDav or the vCard part (when importing/exporting) or both.


I specifically didn't want to use any libraries as I'm trying hard to avoid bloat, and I kind of enjoy reverse-engineering the CardDav (and next CalDav) clients, while reading the RFCs.

It's likely this will have bugs for the weirdest things, and where I'd appreciate help as long as it's not making things too slow/heavy. It's currently very naive and simple and using https://deno.land/x/xml@2.1.3 for some minor parsing in some of the requests; I drew the line to stop supporting fields and actions as soon as it worked perfectly for me and my wife (Linux and Android + macOS and iOS).

That being said, here's the function to build a vCard: https://github.com/bewcloud/bewcloud/blob/b81710a720d7d6afc2...

And the function to parse a vCard: https://github.com/bewcloud/bewcloud/blob/b81710a720d7d6afc2...


Big respect for this approach. It's hard but there are benefits. You can often build functionality at lower levels than a library would let you. My home automation software implemented POP3 and later IMAP both without a library. And FWIW, it was really fun seeing how those standards actually work under the hood.


Thanks! For some use cases it's more than enough and it _is_ very fun (or annoying) to see how those standards are implemented differently by everyone.


I fear you may be in for a painful time :(.

My experience with DAV in general is that there are enough inconsistencies between clients that it's hard to support everyone properly. To be fair, that was well over a decade ago, maybe things are better now -- but it's the sort of spec where it makes sense to put effort into reusable libraries, to amortise the effort across multiple projects.

On the other hand, if you're enjoying yourself then great :). I'm looking forward to seeing what the project evolves into.


Thanks!

> I fear you may be in for a painful time :(.

Oh, I had some pain with Gnome and iOS already! DavX5 (Android) was pretty easy to debug and "tell me" what was wrong.

> On the other hand, if you're enjoying yourself then great

Exactly. I don't need bewCloud to replace Nextcloud or ownCloud for everyone, but as long as it does it for me and my family, it's cool. If others benefit, even better!


I went down a somewhat similar path a while back. I liked some of the functionality OwnCloud/NextCloud offered, but it seemed like there were just more and more php projects bolted on and I was worried about it from a security perspective. Sandstorm.io had just come out at the time and it felt like the "right" way to run a bunch of separate apps, so I built a webdav server/UI[0] as a sandstorm app that could replace OwnCloud and still use the OwnCloud client apps. It was a bit of a mixed bag--it worked, but I quickly discovered that DAV has _tons_ of quirks and the OwnCloud clients had all sorts of interesting/semidocumented behavior. If I had had more time on my hands I would have probably built my own set of clients and had an easier time.

[0] https://github.com/mnutt/davros


Thanks for sharing!


Have you given a try to cozycloud ? It’s the first on my radar for when I’ll find time to tinker with a personal cloud.


Thanks! I didn't know Cozy! It seems very full-featured and more focused on being a platform rather than a simple server using open protocols, and I'm happy to learn there are alternatives I hadn't known about!


I look forward to the photo and file sharing.

Will I still have to install postgres?


Thanks! You'll have to install it only if you don't want to use Docker to run it.


Looks cool, congrats to the launch!


Thanks!


Site is down?


My monitors and logs report no such thing, but if you can't reach the website (which explains more about the project and has screenshots), the GitHub repo might be helpful to see the code and how to run it: https://github.com/bewcloud/bewcloud.




Consider applying for YC's Fall 2025 batch! Applications are open till Aug 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: