cypht-org / cypht

Cypht: Lightweight Open Source webmail aggregator [PHP, JS]. Supports IMAP/SMTP, JMAP and soon EWS
http://cypht.org
GNU Lesser General Public License v2.1
1.01k stars 163 forks source link

What should be the scope of Cypht?: Minimalistic? kitchen sink? Something in the middle? #1037

Open marclaporte opened 6 months ago

marclaporte commented 6 months ago

In https://github.com/cypht-org/cypht/issues/1009, @jonocodes asks:

also please point me to "minimalist" values of the project so I can understand it better.

Thank you for this very important question.

I don't know of a foundational document, but here are examples of what I have seen since I started getting involved:

Source: https://www.cypht.org/features.html

Some feedback from @dumblob (not active at the moment, but IMO has been the best overall contributor to the list of issues: https://github.com/cypht-org/cypht/issues):

Source: https://github.com/cypht-org/cypht/pull/543

Source: https://github.com/cypht-org/cypht/issues/216

Source: https://github.com/cypht-org/cypht/issues/13

Source: https://github.com/cypht-org/cypht/issues/351

Cypht is a do-ocracy so it's up to the active contributors to decide where the project is headed. What is in vs out of scope of Cypht? Ex.: https://github.com/cypht-org/cypht/issues/382. I am more on the side of more features: https://tiki.org/FLOSS-Web-Application-with-the-most-built-in-features and whatever is out of scope for Cypht, we'll just put in Tiki. We can move/copy code back and forth given it's the same license: https://github.com/cypht-org/cypht/issues/333. So people can use Cypht, and the day they want more features, they will have an easy migration. Ex.:

See also: https://wikisuite.org/Webmail-and-groupware-comparison

What makes Cypht unique in the ecosystem? Where do we want it to go?

I see a lot of potential for Cypht as a "pluggable webmail" for PHP projects. Cypht is already the most popular webmail here: https://packagist.org/?query=webmail. So whatever we do for Tiki, we'll make it easy for other projects to do as well. More projects leveraging Cypht will lead to more innovation.

I think the "aggregate all your emails" aspect is fantastic. So this is something we should continue to improve. The main lacking feature is https://github.com/cypht-org/cypht/issues/676.

What do YOU think should be the future of Cypht? :-)

marclaporte commented 6 months ago

I found another:

In 2019, Jason described Cypht as a "Lightweight Open Source webmail written in PHP and JavaScript"

Source: https://github.com/cypht-org/cypht/commit/2a4285531a94aea974192c79a80c82997094e64c

nekohayo commented 6 months ago

Depends on whether you are making a product with a defined UX, or a platform ingredient only meant to be used for expert integration.

Also depends on what you mean by minimalism. The UI & UX? The configurability? Or just the size of the codebase (irrelevant, in my opinion).

If talking about the UI and configurability, I would say that trying to stick to a designed solution with a restrained scope, and automating as much complexity as possible, would be the more sustainable approach compared to going with extreme configurability. In comparison, the maximalist "kitchen sink" approach would paint you into an expensive-to-maintain corner that you can never back away from because of XKCD 1172.

Further reading for those unfamiliar with this logic:

jonocodes commented 6 months ago

Thanks for the historical discussions and commits. It helps with the context of the early project goals.

I am just sharing my perspective on these things to help give context on my motives.

Clearly minimalism can be applied to many aspects of a project and there are lots of philosophies about what to do where.

I'll add a kind of minimalism that I like. You mentioned having simple easy to follow code. This I appreciate. For me, developer experience is key - especially if you want to retain and attract new contributors. This means code is easy to follow, well documented, easy to spin up.

One way of simplifying the code is to write less of it. In open source most common problems are solved - and often in many different ways. If I need a templating system for example it can be temping to make my own because it seems simple enough, but there are dozens of projects who have solved this thoroughly. I don't need to become an expert in the domain, or need to design my own system, or figure out corner cases, or even write tests for it. So I don't bother reinventing the wheel. I just look through a few of the most active templating libraries and pick one. If I don't like it in the future I can swap it out or custom code one if needed. But it means I can start using the feature without having to put in all the work upfront. And move on to focusing on the features that are unique to my project.

When a new dev enters the project they can follow the existing community and docs for that templating system. And if it's a common library they may have even used it before.

Much of the referenced discussions focus on front end of features. In terms of bandwidth use, having a lightweight frontend is great. I think this is particularly good for shoddy mobile connections.

However, unlike frontend payloads, including backend libraries or increasing the docker image is not itself correlated to degraded performance.

But getting back to minimizing the frontend, it's often not worth it if it causes compromises in functionality. If it means using a bit more bandwidth to get a good mobile layout or mobile friendly widgets, I would favor those first. Of course you have to find a good middle ground, but if the app is not intuitive you don't need to save the users bandwidth because they will leave the project anyway.

TheDigitalOrchard commented 6 months ago

I haven't read this full discussion above, but I'll share my reason for jumping into the Cypht ship...

I was looking for a way to integrate email INTO my existing applications. Rather than build everything myself, I began to explore open-source PHP-based options, and found Cypht. The project has a very friendly feel about it, so I've enjoyed my time here contributing what I can.

My needs include multi-user support, where a single installation (of Cypht) can be used in a multi-user environment where a given user is already authenticated by the larger system and automatically "logged in" to Cypht when they access the app. The bootstrapping logic via environment variables and front controller already mostly satisfy this requirement, so I'm hopeful.

My hope is that Cypht maintains a clean, low-opinionated visual design, customizable by installing a modular "theme" package. I don't want to see the user interface be too bloated or highly opinionated. (I've been following the @Runbox project where they are building "the world's fastest" webmail client, and I'm not happy with the results of what I've been seeing. Way too opinionated.)

Thanks for your hard work here.

marclaporte commented 5 months ago

@jonocodes @TheDigitalOrchard @dumblob @nekohayo

Let's meet @jasonmunro and ask him: https://github.com/cypht-org/cypht/wiki/AMA-Jason-Munro

marclaporte commented 5 months ago

So Jason and others expressed their thoughts during https://github.com/cypht-org/cypht/wiki/AMA-Jason-Munro (recording is available)