Type functional logic

I work at a scientific research organization, and over the last few weeks we’ve been so excited to explore Anytype. It’s driven us to some very big conversations about the nature of data and collaboration.

I’ve been exploring as much as I can, and so far I think I have a basic handle on the data and network layers of Anytype. I’m still very unclear about the application layer, however.

Specifically, are Types the sort of thing that will have functional logic? Will they describe behaviours, in addition to data and presentation? Will it be possible, for example, to stick a button on an object and have it call a remote api on press?

8 Likes

I was fortunate to attend the new version onboarding a few days ago, and I continue to be so grateful for the vision and the energy of the Anytype team. I asked during Q&A if functional logic for types was on the roadmap, and Zhanna suggested that I write up a use case.

I’ve been thinking about this a lot these past few days, and it’s a tough question. The use case here is…absolutely everything that’s not static data. For a Book-type, functional logic might fetch review scores from remote services like Goodreads or Amazon. For a Bug-type, functional logic might conditionally share an object among people on the development team, based on their areas of work. For a Class Note-type, functional logic could use natural language processing algorithms to generate flashcards for study.

What I’m struggling a bit to understand is whether this is part of the vision for Anytype. It doesn’t need to be, certainly, and the features that already exist (plus collaboration and sharing, perhaps) already make Anytype a top-shelf information management system. The marketing language, however, talks about apps and operating environments, which seems to imply that functional logic is being conceptualized as a first-class citizen. As I learn more about Anytype, I’d love to understand what the future might hold here.

Thanks in advance for any guidance!

3 Likes

I agree that the vision for Anytype implies that this kind of thing should be possible. I can’t speak for the team in any official capacity, but what I can say is that there is a huge amount of foundational work needed to bring even the basics of their vision to fruition in full. Just for the basics right now we are looking at:

    • Collaboration
    • Notifications
    • Self-hosting
    • API/SDK
    • Open sourcing
    • Subscription/payment infrastructure

Not to mention finishing database features, releasing iOS app, etc.

Any one of those is a months-long project. Antype’s distributed basis is tremendously powerful and necessary for their long-term vision, but it also makes a lot of things more complicated, such as collaboration. If you imagine how it would work in e.g. Google Docs, everyone is interacting directly with Google’s servers, they know who is logged in and when, they can much more easily show “presence” on a document and manage credentials, access, etc. To do all this in a distributed way with “trust no one” but also “connect with everyone” is very challenging.

That all may not seem totally relevant to your question, but my point is this: I do not think the Anytype team will have time/ability to create the kinds of Types or Objects you’re describing any time soon. But I don’t think they are antithetical to what Anytype wants to achieve, either. I see them as specialized Types, just like the Task Type already is in Anytype (it has a check box that can be checked, but is not a regular checkbox format). So I believe those kinds of things can and will be created via the SDK and open source inroads. There are 100s of devs already interested in contributing to Antype, and I imagine some of them are already thinking along those lines, or would be receptive to these ideas…

4 Likes

I very much agree with everything you’ve said here.

For collaboration, there are definitely some advantages and disadvantages to a distributed data graph. There are some good p2p object replication libraries out there that could probably handle the google docs-style interactive bit. (I don’t have any clue what frontend language/framework Anytype uses, but [yjs](GitHub - yjs/yjs: Shared data types for building collaborative software) would be one possibility.) Even with an existing library as a starting point, though, there’s still a fair bit of work to do to handle how “live” sessions are initiated between multiple users. A lot will depend on how the Anytype team implements versioning for shared documents.

For Type logic, however, I’m a bit more skeptical. If scriptability and functional logic is a goal, I hope the dev team is designing the object model with a clear sense of how it all will be implemented already in mind. If not, it will be very challenging to add down the road. There’s been tons of interesting work on transactional documents in ERP systems, for example, but the complexity is definitely not to be underestimated!

1 Like

Yes, these are very good points. I will be sure to raise the question with the team and see if they are able to provide any public view of their intent here.

Down the road, I think we can have plugins that would be maintained by the community for function which can fetch data From sources like IMDB, Goodreads and etc and store it on DB. So for eg. I could import my entire library from Goodreads/Trakt/Other services and view them easily.

This would save so much of time wasted on manually inputting data for books/movies and it’s meadata.

1 Like