[PKM] AFFiNE Tip: How to do Object Note-taking in AFFiNE

Screenshot

Today, I’d like to share how to do object note-taking in AFFiNE like AnyType or Capacities.

Prerequisite

  • If you like to know what the personal knowledge management app AFFiNE is and my first impression about it, please read it here.

What’s object note-taking?

Object note-taking is a method of capturing and organizing information in a structured way, using distinct “objects” to represent different types of content. In simple term, this is just an way to organize our notes.

The simplest way to determine when to use an object is to consider if you can describe something as “X.” The common object grouping can be person, book, movies, softwares, meeting, task, atomic note etc.

When taking notes about a book, I like to include general information such as the author and the book cover. Since I create multiple book notes, I believe this would be an ideal object type for my use, with “author” and “cover” being its properties.

Essential Minimum Requirements

The absolute minimum requirements for object note-taking are quite basic. Properties can be represented by the initial lines of notes, and grouping can be achieved by placing notes into folders named after the object type. However, this user-driven approach falls short of fully leveraging the structured benefits that object note-taking can provide.

Therefore, I consider the following as essential minimum requirements for effective object note-taking:

  • Property Fields in Each Note: Each note should have designated fields for properties.
  • Ability to Group Notes: There should be a mechanism, such as tagging, to group notes that correspond to the same object.

Seamless Object Note-Taking Features

When it comes to seamless object note-taking, the requirements become significantly more stringent. We can readily distinguish between Personal Knowledge Management Systems (PKMS) designed to fundamentally support this functionality and those that do not.

  • Object Template: The first requirement is specific template support for a given object type. Whenever a new object item is created, it should be as simple as a single button click, with the user only needing to fill in the required fields.
  • Automatic Grouping: Since an object is a way to group notes, when a new object of an existing object type is created, it should automatically be added to the appropriate object group.
  • Object View: The main identifier of objects is their properties. Therefore, if a note is an object, its properties need to be prominently displayed.
  • Rich property type support: Properties are not always just simple text. They can include numbers, dates, URLs, fixed lists, and links to other notes or objects.

Bonus Features

In addition to the essential support for seamless object note-taking, there are potential bonus features that can further enhance and unlock the true potential of this method.

Some of the examples include:

  • Subtype and Inheritance: Certain objects can benefit from subtypes or inheritance from a main object. For example, a Person object may have properties such as name and contact_info. If the person is an Author, we might want to add additional properties like genre. Similarly, if the person is an Employee, their position would be an appropriate property to include.
  • Object driven action: Developers can utilize object types to trigger specific functions. For instance, if the object is a “task,” it can be automatically added to the task manager and processed accordingly, such as sending an email reminder or adding it to the calendar. If the object is an “author,” the application may query online resources to generate a database of all the titles the author has written.

Object Note-taking with AFFiNE

At the time of this writing, I consider AFFiNE’s object note-taking is essential minimum. We can definitely do it, but it does not feel seamless yet.

Let’s first look at how we can do it on current version, which is 14.6.

In AFFiNE, each note file or entity is referred to as a “Doc.” Within a Doc, a “Note” consists of a group of blocks displayed in the canvas view, known as “Edgeless mode.”

AFFiNE Object Note-taking components

✅ Property fields

AFFiNE supports dedicated property fields in each doc.

✅ Grouping notes

To effectively group documents by object type, the best method is to use tags. For example, to categorize documents related to a book, you can tag the relevant document with `#book`.

✅ Quick group access

To access a group of documents with a specific tag, we use a collection. A collection is a single-level smart folder or a custom query grouping of docs.

Now let’s take a look at actual step by step workflow of how to create and access object in AFFiNE.

Create a new object

Step 1: Create a new doc.

Step 2: Add a tag with the object type name, e.g., #book.

Tags are located under the “info” section. To access them, expand this area and type the tag name. If it’s a new tag, it will be created. If the tag already exists, it will be found, allowing you to use it.

Step 3: Add necessary properties.

To add a new property, follow these steps:

  1. Expand info section
  2. Click add property
  3. Select the “Text” type.

Step 4: Click on the property name to rename it to “Author”.

Step 5: Next, input the actual property value.’

Create object type collection

Currently, the “book” object refers to documents tagged with #book. To view the entire list of book objects you need to access all documents tagged with #book. However, the current method requires navigating to All Docs > Tags and selecting the desired tag each time to access this. This feels too many clicks and does not provide an object-centric navigation experience. To streamline this process, we will create a collection that searches for all documents tagged with “Book”.

  1. Select All Docs from left navigatoin
  2. Choose Tags from top navigation
  3. Select the target tag e.g. book
  4. Click Save as New Collection

5. Name the new collection with object type.

The “Book” object type has now been added to the left navigation menu under the “Collection” section. This allows us to access it from anywhere within the system. By creating a collection, any document tagged with #book will be automatically added to the list now.

Creating more object

To create additional book objects, you must repeat the entire process of creating a new object. However, there is a minor exception: the Book tag and Author property will appear as options to add, rather than needing to be created from scratch. Additionally, you will not need to repeat the collection creation.

One advantage of the current object note-taking approach is its flexibility regarding properties. Properties are not fixed to an object type, allowing for the easy creation of the same object with different sets of properties. Consequently, AFFiNE technically supports the creation of subtype objects.

⬜ Object Template

It would feel more intuitive if we could do something like slash template and choose “book” to create empty book object with book tag and an author property. Currently, we have only a partial workaround. We can create a template document and add it to favorite or collection, named such as “template”. 

When creating a new object of the specific type, you can duplicate the target template doc from the list. However, this method only copies the tag and doc content but does not copy the properties.

⬜ Object View

Currently, properties are always hidden when opening any document. I could see AFFiNE to introduce an “Object Mode” where properties have their own pane, allowing users to choose which properties to show or hide in the future.

The workaround for this is simply, expand property each type you open the doc if you want to see them.

⬜ Rich property support

AFFiNE currently supports only the four basic data types. If you need to have more advanced data types like reference another document or URL, the workaround is to include these references directly within the document content rather than as a property.

Conclusion

AFFiNE: Object Note-Taking Capabilities

AFFiNE currently supports object note-taking, but it lacks a few key features that would solidify its identity as a dedicated object note-taking app. I am optimistic that the development team will address these missing elements in future updates. If you have different way of implementing object note taking in AFFiNE, please feel free to share in the comment.

Reference