Logo Cyca

Cyca Revoluta available !

This is it ! Cyca v1.0 Revoluta, the first stable version of your new bookmarks and feeds manager is now available !

I’m not sure how to announce the first stable version of an application, but it seems important to me to use this opportunity to remind Cyca’s features and objectives.

Brief description

Cyca is a Free and Open Source Software released under the GNU GPL in its most recent version.

It is a web-based, desktop-centric, multi-users application written in PHP.

It allows you to manage an unlimited number of bookmarks and feeds in a folders hierarchy (as opposed to tag-based taxonomy), and share them through users groups.

Concepts

A Group represents a set of users sharing the same interest. For instance, Computing. Each group has its own hierarchy of Folders. Each user can join any number of groups.

A Folder is a way to organize Documents in a Group. A folder can only belong to one group, but can have any number of Bookmarks.

A Document is the resource located at a specific URL and is not a Feed or a Feed item.

A Feed is always linked to a Document. Currently, RSS and Atom feeds are supported.

A Feed item can be linked to one or more Feeds.

A Bookmark is a link between a folder and a document.

A Feed item state is the link between a feed item and a user, and holds the feed item state for that user (read/unread).

A Highlight is a regular expression associated to a color, enabling highlighting in feed item title.

Main features

Groups

Any user can create or join an existing group.

Each user is assigned to its own group which cannot be deleted. By default, this group is not accessible to other users in any way.

Each user-created group, including its own group, could be shared, either through email invitation (group owner sends an email invitation to other users) or by making it publicly available (so other users can join it anytime they want).

When a user is invited to join a group, he can accept or decline.

Owners of a public group can decide if users asking to join it can do it freely or if it needs manual approbation.

It is possible to search for groups to join.

Public groups are currently scoped to the server where Cyca is installed, but in a future upgrade, it would be possible to join groups from remote servers.

Folders

You can create an unlimited number of folders as a deeply nested hierarchy, pretty much like on any operating system. A lot of similar applications have chosen limited tag-based organization.

There are currently two special kinds of folders in Cyca:

  • The “Unread feed items” folder

Clicking on it will display a list of documents containing unread feed items for connected user, and the list of unread feed items.

It cannot be renamed or altered in any way. Its icon color changes should current user have unread items or not.

  • The “Root” folder

It’s the top-level folder. No user-created folder can be a sibling, but it can hold an unlimited number of sub-folders and bookmarks.

It cannot be renamed or altered in any way except users permissions when it belongs to a shared group.

Drag and drop is supported for any user-created folder.

Folders can be expanded or collapsed. Long-clicking caret on the left-side of a folder will toggle every other folder in the branch.

Documents

Documents are added to any folder (except the Unread items folder) by entering a URL.

You can drag and drop documents from/to any folder except Unread items.

Cyca will automatically detect feeds declared in the document, and by testing some hard-coded, well-known URLs relative to document’s URL (for instance, /feed).

Feeds

Feeds are always handled automatically by Cyca. If you create a document in a folder using a URL where Cyca finds a feed, it will search for feed’s home page, “convert” the document to a feed, and update your bookmark accordingly.

By default, Cyca will consider you will follow every discovered feed. You could then ignore individual feeds.

Cyca automatically handles feed items de-dupplication.

Feed items

Feed items can be read or unread. You can mark individual unread feed item, items in a specific document, or items in a specific folder as read, or mark all unread feed items as read from the Unread feed items folder.

After marking feed items as read, Cyca will do its best to automatically select next unread item, should it be in the same or different feed, document or folder.

Highlights

You can define an unlimited number of Highlights, which consist of:

  • A regular expression

It can be a full-blown, complex regular expression or simple text.

  • A color

When a list of feed items is about to be displayed, Cyca will try to find matches for each of your highlights in feed item’s title. If a match is found, it will be highlighted using chosen color.

Import/export

Currently, Cyca only supports importing and exporting to and from Cyca’s format, which is a simple JSON object. Future updates will include more formats, the more obvious being OPML and Netscape bookmarks file format.

Objectives

Cyca is an opiniated application. I brought to it my own vision of how bookmarks and feeds should be managed. Besides, bookmarks and feeds are inherently highly tighted: a bookmark points to a document you like, which could itself point to highly valuable news feeds. If you have bookmarks in your browser or current bookmarks manager, there is a high chance you’d like to know if there is anything new about it without having to visit it from time to time “manually”.

So I wanted to build an application that allows me to easily browse in a large collection of bookmarks, and provides me news updates as well, without being obtrusive. I don’t want notification popups or changing, colorful and blinking icons on my desktop or browser’s title bar. I don’t want to be disturbed. I want to check news whenever I want and not whenever my application wants.

Origins

Cyca always was my “lab” for testing coding practices, new technologies, for as long as I can remember. It started probably back in 2000, when I wanted to test Microsoft’s C#, because the very first version of Cyca I’ve ever written was in this language.

I’ve wrote a lot of different versions since then, and quickly after C# I moved to PHP, because I thought a web-based application would be more suited to do what Cyca does.

I never really wanted to make it public as Cyca was just a lab. I changed my mind a lot about what I should/could do, it wouldn’t have been sustainable for users. Users want - and they are right - stability, and a linear progression of features. Over time, I added and removed a lot of things from Cyca.

Then, last year, I lost my job, and I couldn’t find one as soon as I wanted. Well, maybe it was because I burnt-out too… Anyways, I decided to take a shot and make Cyca public. So I created a new version from scratch, deemed to be publicly released.

It took me a while because once again, I couldn’t decide what to include and what not to. After six months of intensive work, I… decided to start from scratch again ! The result was slow and had way too much dependencies… And in about two months, I finally released the v0.1, on 17th, September 2020.

About the name

Cyca was initially named “Bookmarks Manager”, but it was too generic, and didn’t convoy the concept of “feeds”. By the time, my parents offered me a very young tree, a Cycas to plant in our garden. I loved that tree, its shapes and colors. And what it represents: an outsider, between the trees and the palms.

I love the tree, and its use in computing, and as a concept as a whole. One idea could imply many others, one folder could hold many documents. It’s a pretty universal concept, that could be seen and used anywhere, from astronomy to biology, from genealogy to mathematics.

So, my application being a tool to manage information in a hierarchy, in a tree, I found Cyca spelled without the final “s” (to make it different from the biological genus), to be a good name.

While each release in the v0.x branch had a generic name (like The Groups Update for instance), I wanted major releases to have a codename based on Cycas species. And I wanted the first one to be the tree I’ve received from my parents when I was young: Revoluta.

Roadmap

Every developer would tell you the same thing: a major release is not an end, it’s a beginning. As such, I have a lot of plans for future updates.

I am not sure about the order in which I will release these features, or even if I will actually bring them to life, as it depends on things I can’t control. I am currently unemployed, and have no steady income. By the end of February, I will be without any resource. Making a living from Cyca would obviously be my best option, but I could also be forced to do something else. Should it be, I probably couldn’t spend as much time as I would like on Cyca.

  • Expanding groups

I want to expand groups so users from one instance of Cyca could join groups from another, remote instances. That would work pretty much like Activity Pub, in theory, but I still need to figure how to make it happen. I believe it’s going to be pretty hard work, but I also think it would absolutely worth it.

  • Fetching more information

It’s amazing to see how much information you can collect from a single URL. When Cyca was just my “lab”, I have written versions that allowed to collect a lot of data. I am not talking about sensitive, security related, aggressively scraped information, which never was and never will be Cyca’s intention. I am talking about publicly available data, such as WHOIS, certificate expiration, web-server, etc. exposed into document’s meta-data or server’s response. I want a future version of Cyca able to collect and present these information to the user.

It would allow interesting uses of Cyca, such as archiving URLs, helping hosters to keep a track on network’s health, etc. A notification system could be implemented, for instance to alert users about certificate expiration or to display a visual feedback aside unreachable documents.

The main problem I have to solve with this feature is the time it takes to collect data. I don’t want this to interfere with user experience, or with servers resources, so it will require a lot of optimization, both in terms of execution and storage.

  • Supporting more formats for import/export

Cyca currently lacks support for well-known bookmarks and feeds file formats for importation and exportation. I am aware it has a negative impact on its adoption which is why this will be my top priority for upcoming releases.

  • Supporting more document types

I think some users might want to bookmark not just regular HTML pages but also remote PDF files, images, and other various types of documents. Cyca currently only fully supports HTML documents. In future updates, it could also extract meta-data from these documents by using a plugin architecture.

By extension, it would also support more feed items formats, such as podcasts, maps, videos, etc.

  • Including better user-to-user interactions

As for now, user-to-user interactions are limited to invite/join a group. I think it would be beneficial to all users if interactions were extended a bit. Maybe by adding some kind of commenting system to documents and feed items.

  • Making a public demo available

It has been in my wishlist for a while and I still haven’t figured how to do it, mainly because of my limited home network bandwidth and because I am unable to sustain costs of a hosted demo version. But this is something I really want to do, so you can test-drive Cyca before you make the move and install it on your own server.

  • Building ready-to-use packages

Ultimately, I wish I could provide packages for Cyca, ready to be installed on a variety of platforms, like NASes, YunoHost and other “marketplaces” like such that provide a one-click install.

  • Providing a hosted instance

This is my business-model for Cyca, like countless other Free and Open Source Softwares. I want to provide a hosted instance of Cyca, so anyone could use it, even those unable or not-wanting to self-host. There would be a free-tier and few paid-tiers, depending on the volume of managed bookmarks, or the ability to create groups dedicated to your company with a specific set of users and permissions. This is how I currently think it could be, but it may change a lot according to future events.

Last words

I love Cyca, and what it brings to me. I learned a lot from it. It brings me joy, but frustration as well. Making an application as a lab and making it to be public is definitely not the same. As a developper, I hope it will be used by other people than me, and I can’t say that this goal has been met until now.

I tried to speak about it on twitter but I got suspended. I tried to speak about it on HackerNews, but I can’t even tell if it’s gone public or moderated. I also tried Reddit, but my target was probably wrong. Now I’m on ActivityPub but… Let’s say I have zero social skills 😅 At least, I’m really not good at promoting myself or what I do. I simply can’t believe that nobody cares for an application such as Cyca, and that Internet doesn’t offer ways to promote self-made tools just for the sake of fighting against spam.

But I am resilient and I have faith in Cyca and in what it can do for its users, and despite my previous failures, I still believe it could be part of the tools you use on a daily-basis. It’s just I haven’t figured how to speak about it yet. It surely needs improvements, so am I, and I work on this on a daily-basis.

So, if you like Cyca, you can do a few things in order to help me continue working on it:

  • spread the word: talk about it, tell me you like it (or not !), provide links to this website and the GitHub repository
  • translate Cyca: it is currently only available in French (my native language) and English
  • make a donation, I am sorry to repeat this, but without money, I cannot continue to work full-time on Cyca past February, 2021

Regardless, I hope you will enjoy Cyca Revoluta as much as I do.

Thanks for reading 😊